add hoster basics

This commit is contained in:
Laura Klünder 2016-09-13 15:18:24 +02:00
parent 6b7f05e2c7
commit 55fc17e872
12 changed files with 122 additions and 13 deletions

View file

@ -0,0 +1 @@
default_app_config = 'c3nav.editor.apps.EditorConfig'

9
src/c3nav/editor/apps.py Normal file
View file

@ -0,0 +1,9 @@
from django.apps import AppConfig
class EditorConfig(AppConfig):
name = 'c3nav.editor'
def ready(self):
from .hosters import init_hosters
init_hosters()

View file

@ -0,0 +1,29 @@
from django.conf import settings
from .github import GithubHoster # noqa
from .gitlab import GitlabHoster # noqa
from collections import OrderedDict
hosters = {}
def init_hosters():
global hosters
hosters = OrderedDict((name, create_hoster(name=name, **data)) for name, data in settings.EDITOR_HOSTERS.items())
def create_hoster(api, **kwargs):
if api == 'github':
return GithubHoster(**kwargs)
elif api == 'gitlab':
return GitlabHoster(**kwargs)
else:
raise ValueError('Unknown hoster API: %s' % api)
def get_hoster_for_package(package):
for name, hoster in hosters.items():
if package.home_repo.startswith(hoster.base_url):
return hoster
return None

View file

@ -0,0 +1,16 @@
from ...mapdata.models import Package
class Hoster:
def __init__(self, name, base_url):
self.name = name
self.base_url = base_url
def get_packages(self):
return Package.objects.filter(home_repo__startswith=self.base_url)
def _get_session_data(self, request):
return request.session.setdefault('hosters', {}).setdefault(self.name, {})
def is_access_granted(self, request):
return self._get_session_data(request).get('access_granted', False)

View file

@ -0,0 +1,8 @@
from .base import Hoster
class GithubHoster(Hoster):
def __init__(self, app_id, app_secret, **kwargs):
super().__init__(**kwargs)
self._app_id = app_id
self._app_secret = app_secret

View file

@ -0,0 +1,8 @@
from .base import Hoster
class GitlabHoster(Hoster):
def __init__(self, app_id, app_secret, **kwargs):
super().__init__(**kwargs)
self._app_id = app_id
self._app_secret = app_secret