Пример #1
0
    def post(self):
        """Create a project from the api.
        
        Example::
        
            {
                "url": "http://github.com/defunkt/github",
                "name": "github",
                "description": "You're lookin' at it.",
                "watchers": 5,
                "forks": 2,
                "private": 1,
                "email": "*****@*****.**",
                "account": "twitter_name",
            },
        """
        form = self.parse_form()
        if not form.is_valid():
            return self.respond_json(form.errors, status_code=400)

        # Lookup the user by email or account
        email = form.cleaned_data.pop('email', None)
        account = form.cleaned_data.pop('account', None)
        user = None
        if email:
            user = User.get_by_auth_id('email:%s' % email)
        elif account:
            user = User.get_by_auth_id('twitter:%s' % account)

        created = False
        project_url = form.cleaned_data['url']
        project_key = Project.make_key(project_url)
        project = project_key.get()

        if project is None:
            created = True
            project = Project(key=project_key, **form.cleaned_data)
            project.put()

        @ndb.transactional
        def txn():
            count = getattr(user, 'total', 0)
            projects = set(getattr(user, 'projects', []))
            user.total = count + 10
            user.projects = list(projects.add(project_url))
            user.put()
            return user

        if created and user:
            txn()

        self.respond_json({'project': self.serialize(project)},
                          status_code=201 if created else 200)
Пример #2
0
 def post(self):
     """Create a project from the api.
     
     Example::
     
         {
             "url": "http://github.com/defunkt/github",
             "name": "github",
             "description": "You're lookin' at it.",
             "watchers": 5,
             "forks": 2,
             "private": 1,
             "email": "*****@*****.**",
             "account": "twitter_name",
         },
     """
     form = self.parse_form()
     if not form.is_valid():
         return self.respond_json(form.errors, status_code=400)
     
     # Lookup the user by email or account
     email = form.cleaned_data.pop('email', None)
     account = form.cleaned_data.pop('account', None)
     user = None
     if email:
         user = User.get_by_auth_id('email:%s' % email)
     elif account:
         user = User.get_by_auth_id('twitter:%s' % account)
     
     created = False
     project_url = form.cleaned_data['url']
     project_key = Project.make_key(project_url)
     project = project_key.get()
     
     if project is None:
         created = True
         project = Project(key=project_key, **form.cleaned_data)
         project.put()
     
     @ndb.transactional    
     def txn():
         count = getattr(user, 'total', 0)
         projects = set(getattr(user, 'projects', []))
         user.total = count + 10
         user.projects = list(projects.add(project_url))
         user.put()
         return user
     
     if created and user:
         txn()
     
     self.respond_json({'project': self.serialize(project)}, status_code=201 if created else 200)
Пример #3
0
 def make_project(self, name, save=True, **kwargs):
     key = ndb.Key('Project', name)
     project = Project(key=key, **kwargs)
     if save:
         project.put()
     return project
Пример #4
0
 def make_project(self, name, save=True, **kwargs):
     key = ndb.Key('Project', name)
     project = Project(key=key, **kwargs)
     if save:
         project.put()
     return project