diff 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
line wrap: on
line diff
--- a/rhodecode/controllers/api/api.py	Sat May 11 00:25:05 2013 +0200
+++ b/rhodecode/controllers/api/api.py	Sat May 11 20:24:02 2013 +0200
@@ -42,9 +42,10 @@
 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 @@
                                                             fork_name)
             )
 
+    # perms handled inside
     def delete_repo(self, apiuser, repoid, forks=Optional(None)):
         """
         Deletes a given repository
@@ -1064,3 +1066,44 @@
                     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