diff --git a/src/jsonapi/apis.py b/src/jsonapi/apis.py index b9a8474..be693e6 100644 --- a/src/jsonapi/apis.py +++ b/src/jsonapi/apis.py @@ -52,11 +52,8 @@ def setup(self, host=None, auth=None, headers=None): if headers is not None: self.headers = headers - def register(self, klass): - if klass.TYPE is not None: - self.registry[klass.TYPE] = klass - klass.API = self - return klass + def register_types(self, registry): + self.registry.update(registry.registry) # Required args def request(self, method, url, @@ -131,7 +128,9 @@ def new(self, data=None, type=None, **kwargs): # Lets make a new class on the fly class klass(Resource): API = self - return klass(**kwargs) + resource = klass(**kwargs) + resource.API = self + return resource def as_resource(self, data): """ Little convenience function when we don't know if we are dealing diff --git a/src/transifex_api/__init__.py b/src/transifex_api/__init__.py index 5b5bdb3..3df765e 100644 --- a/src/transifex_api/__init__.py +++ b/src/transifex_api/__init__.py @@ -4,34 +4,60 @@ from jsonapi.exceptions import JsonApiException -_api = jsonapi.JsonApi(host="https://rest.api.transifex.com") +class Registry(object): -def setup(auth, host=None, headers=None): - _api.setup(host=host, auth=auth, headers=headers) + def __init__(self): + self.registry = {} + def register(self, klass): + if klass.TYPE is not None: + self.registry[klass.TYPE] = klass + return klass -@_api.register + +_registry = Registry() + + +class API(object): + + def __init__(self, auth, host=None, headers=None): + if not host: + host = "https://rest.api.transifex.com" + self._api = jsonapi.JsonApi(host=host, + auth=auth, + headers=headers) + self._api.register_types(_registry) + + +# _api = jsonapi.JsonApi(host="https://rest.api.transifex.com") +# +# +# def setup(auth, host=None, headers=None): +# _api.setup(host=host, auth=auth, headers=headers) + + +@_registry.register class Organization(jsonapi.Resource): TYPE = "organizations" -@_api.register +@_registry.register class Team(jsonapi.Resource): TYPE = "teams" -@_api.register +@_registry.register class Project(jsonapi.Resource): TYPE = "projects" -@_api.register +@_registry.register class Language(jsonapi.Resource): TYPE = "languages" -@_api.register +@_registry.register class Resource(jsonapi.Resource): TYPE = "resources" @@ -45,18 +71,18 @@ def purge(self): return count -@_api.register +@_registry.register class ResourceString(jsonapi.Resource): TYPE = "resource_strings" -@_api.register +@_registry.register class ResourceTranslation(jsonapi.Resource): TYPE = "resource_translations" EDITABLE = ["strings", 'reviewed', "proofread"] -@_api.register +@_registry.register class ResourceStringsAsyncUpload(jsonapi.Resource): TYPE = "resource_strings_async_uploads" @@ -95,7 +121,7 @@ def upload(cls, resource, content, interval=5): upload.reload() -@_api.register +@_registry.register class ResourceTranslationsAsyncUpload(Resource): TYPE = "resource_translations_async_uploads" @@ -139,22 +165,22 @@ def upload(cls, resource, content, language, interval=5, upload.reload() -@_api.register +@_registry.register class User(jsonapi.Resource): TYPE = "users" -@_api.register +@_registry.register class TeamMembership(jsonapi.Resource): TYPE = "team_memberships" -@_api.register +@_registry.register class ResourceLanguageStats(jsonapi.Resource): TYPE = "resource_language_stats" -@_api.register +@_registry.register class ResourceTranslationsAsyncDownload(jsonapi.Resource): TYPE = "resource_translations_async_downloads"