comparison rhodecode/controllers/api/api.py @ 3840:dc4644865e8b beta

Implemented simple gist functionality ref #530. - creation of public/private gists with given lifetime - rhodecode-gist CLI for quick gist creation
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 11 May 2013 20:24:02 +0200
parents 647fb653048e
children 31f8c9d76a26
comparison
equal deleted inserted replaced
3839:9dec870411e0 3840:dc4644865e8b
40 from rhodecode.model.scm import ScmModel 40 from rhodecode.model.scm import ScmModel
41 from rhodecode.model.repo import RepoModel 41 from rhodecode.model.repo import RepoModel
42 from rhodecode.model.user import UserModel 42 from rhodecode.model.user import UserModel
43 from rhodecode.model.users_group import UserGroupModel 43 from rhodecode.model.users_group import UserGroupModel
44 from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap,\ 44 from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap,\
45 Permission, User 45 Permission, User, Gist
46 from rhodecode.lib.compat import json 46 from rhodecode.lib.compat import json
47 from rhodecode.lib.exceptions import DefaultUserException 47 from rhodecode.lib.exceptions import DefaultUserException
48 from rhodecode.model.gist import GistModel
48 49
49 log = logging.getLogger(__name__) 50 log = logging.getLogger(__name__)
50 51
51 52
52 class OptionalAttr(object): 53 class OptionalAttr(object):
886 raise JSONRPCError( 887 raise JSONRPCError(
887 'failed to fork repository `%s` as `%s`' % (repo_name, 888 'failed to fork repository `%s` as `%s`' % (repo_name,
888 fork_name) 889 fork_name)
889 ) 890 )
890 891
892 # perms handled inside
891 def delete_repo(self, apiuser, repoid, forks=Optional(None)): 893 def delete_repo(self, apiuser, repoid, forks=Optional(None)):
892 """ 894 """
893 Deletes a given repository 895 Deletes a given repository
894 896
895 :param apiuser: 897 :param apiuser:
1062 'failed to edit permission for user group: `%s` in ' 1064 'failed to edit permission for user group: `%s` in '
1063 'repo: `%s`' % ( 1065 'repo: `%s`' % (
1064 users_group.users_group_name, repo.repo_name 1066 users_group.users_group_name, repo.repo_name
1065 ) 1067 )
1066 ) 1068 )
1069
1070 def create_gist(self, apiuser, files, owner=Optional(OAttr('apiuser')),
1071 gist_type=Optional(Gist.GIST_PUBLIC),
1072 gist_lifetime=Optional(-1),
1073 gist_description=Optional('')):
1074
1075 try:
1076 if isinstance(owner, Optional):
1077 owner = apiuser.user_id
1078
1079 owner = get_user_or_error(owner)
1080 description = Optional.extract(gist_description)
1081 gist_type = Optional.extract(gist_type)
1082 gist_lifetime = Optional.extract(gist_lifetime)
1083
1084 # files: {
1085 # 'filename': {'content':'...', 'lexer': null},
1086 # 'filename2': {'content':'...', 'lexer': null}
1087 #}
1088 gist = GistModel().create(description=description,
1089 owner=owner,
1090 gist_mapping=files,
1091 gist_type=gist_type,
1092 lifetime=gist_lifetime)
1093 Session().commit()
1094 return dict(
1095 msg='created new gist',
1096 gist_url=gist.gist_url(),
1097 gist_id=gist.gist_access_id,
1098 gist_type=gist.gist_type,
1099 files=files.keys()
1100 )
1101 except Exception:
1102 log.error(traceback.format_exc())
1103 raise JSONRPCError('failed to create gist')
1104
1105 def update_gist(self, apiuser):
1106 pass
1107
1108 def delete_gist(self, apiuser):
1109 pass