diff --git a/rhodecode/controllers/api/api.py b/rhodecode/controllers/api/api.py --- a/rhodecode/controllers/api/api.py +++ b/rhodecode/controllers/api/api.py @@ -42,9 +42,10 @@ from rhodecode.model.repo import RepoMod from rhodecode.model.user import UserModel from rhodecode.model.users_group import UserGroupModel from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap,\ - Permission, User + Permission, User, Gist from rhodecode.lib.compat import json from rhodecode.lib.exceptions import DefaultUserException +from rhodecode.model.gist import GistModel log = logging.getLogger(__name__) @@ -888,6 +889,7 @@ class ApiController(JSONRPCController): fork_name) ) + # perms handled inside def delete_repo(self, apiuser, repoid, forks=Optional(None)): """ Deletes a given repository @@ -1064,3 +1066,44 @@ class ApiController(JSONRPCController): users_group.users_group_name, repo.repo_name ) ) + + def create_gist(self, apiuser, files, owner=Optional(OAttr('apiuser')), + gist_type=Optional(Gist.GIST_PUBLIC), + gist_lifetime=Optional(-1), + gist_description=Optional('')): + + try: + if isinstance(owner, Optional): + owner = apiuser.user_id + + owner = get_user_or_error(owner) + description = Optional.extract(gist_description) + gist_type = Optional.extract(gist_type) + gist_lifetime = Optional.extract(gist_lifetime) + + # files: { + # 'filename': {'content':'...', 'lexer': null}, + # 'filename2': {'content':'...', 'lexer': null} + #} + gist = GistModel().create(description=description, + owner=owner, + gist_mapping=files, + gist_type=gist_type, + lifetime=gist_lifetime) + Session().commit() + return dict( + msg='created new gist', + gist_url=gist.gist_url(), + gist_id=gist.gist_access_id, + gist_type=gist.gist_type, + files=files.keys() + ) + except Exception: + log.error(traceback.format_exc()) + raise JSONRPCError('failed to create gist') + + def update_gist(self, apiuser): + pass + + def delete_gist(self, apiuser): + pass