Mercurial > kallithea
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 |