コード例 #1
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
    def get(self, *args, **kwargs):
        '''
        The get URL should be :
            /project/<project-name>/stitch/
        get data format = {
                    x: x_xordinate,
                    y: y_cordinate,
                    image: current_image_file_name
                }
        '''
        super(Stitch, self).get(*args, **kwargs)
        data = {}
        if not self.user:
            data['status'] = 403
            data['message'] = 'Please login again.'
        else:
            title = kwargs.get('project', None)
            if not title:
                data['status'] = 400
                data['message'] = 'Bad Request.'
            else:
                x = self.get_argument('x', None)
                y = self.get_argument('y', None)
                flag = x and y
                project = None
                image = None
                from_image = self.get_argument('image', None)

                try:
                    project = Project.objects.get(title=title)
                except Project.DoesNotExist:
                    data['status'] = 404
                    data['message'] = 'Invalid project title.'
                
                if project:
                    try:
                        image = Image.objects.get(project=project,
                                                  name=from_image)
                    except Image.DoesNotExist:
                        data['status'] = 404
                        data['message'] = 'Invalid Image.'
                    if image:
                        hotspots = Hotspot.objects.filter(project=project,
                                                          image=image)
                        if flag:
                            [self._x1, self._y1] = [int(x), int(y)] 
                            closest_hotspot = self.get_hotspot_object(hotspots)
                            if closest_hotspot:
                                data['status'] = 200
                                data['closests_hotspot'] = json_dumper(closest_hotspot)
                            else:
                                data['status'] = 404
                                data['message'] = 'No hotspot at this coordinate.'
                        else:
                            data['status'] = 200
                            data['hotspots'] = json_dumper(hotspots)
        # added condition check for hotspot-edit as the hotspot handler is
        # inheriting this handler.
        if not self._headers_written and 'hotspot-edit' not in self.request.uri:
            self.write(data)
コード例 #2
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
    def post(self, *args, **kwargs):
        super(ProjectHandler, self).post(*args, **kwargs)
        data = {}
        if not self.user:
            data['status'] = 403
            data['message'] = 'Please login again.'
        else:
#            Project.objects.delete()
#            Image.objects.delete()
            post_data = ast.literal_eval(self.data)
            if 'project_data' not in post_data.keys():
                data['status'] = 500
                data['message'] = 'Invalid data.'
            else:
                post_data['project_data'] = ast.literal_eval(post_data['project_data'])
                try:
                    title = post_data['project_data']['path'].strip('/')
                    self._project = Project.objects.create(
                              created_by=self.user,
                              title=title,
                              is_active=True,
                              metadata=post_data['project_data'])
                    self._project.save()
                except OperationError, e:
                    data['status'] = 400
                    data['message'] = 'Bad Request.'
                    data['information'] = 'This project already exists.'
                if self._project:
                    image_list = []
                    path = self._project.metadata['path']
                    subfolder_data = self.dropbox_client.metadata(path)
                    
                    images = [x for x in subfolder_data['contents'] if (
                            'mime_type'in x.keys() and x['mime_type']
                            in IMAGE_MIME_TYPE)]
                    t_image = []
                    screen_count = 0
                    for (count, each) in enumerate(images):
                        image_object = self.create_image_object(each)
                        if image_object:
                            t_image = image_object
                            screen_count = count
                            image_list.append(json_dumper(image_object))
                    if t_image:
                        data['thumbnail'] = t_image.thumbnail
                        data['name'] = t_image.name
                        data['screen_count'] = screen_count + 1
                    else:
                        data['thumbnail'] = None
                    data['status'] = 200
                    data['project'] = json_dumper(self._project)
                    data['images'] = self.getThumbnailSlug(image_list)
                    data['image_count'] = len(images)
コード例 #3
0
ファイル: handler.py プロジェクト: Somesh-zz/Clearsoup-API
 def get(self,*args, **kwargs):
     project_id = self.get_argument('projectId', None)
     project = self.get_project_object(project_id=project_id,
                                       permalink=None)
     self.project = project
     response = {}
     members = list(Team.objects.filter(project=project).exclude("project",
                                                 "created_by", "updated_by"))
     invited_members = list(Invitation.objects.filter(project=project
                                          ).exclude('invited_by', 'project'))
     response['members'] = json_dumper(members)
     response['invited_members'] = json_dumper(invited_members)
     self.write(json.dumps(response))
コード例 #4
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
    def get(self, *args, **kwargs):
        '''
        Method to get comments , annotation and their replies for an image.
        url: /project/<project-name>/image/<image-name>/
        '''
        super(UpdateHandler, self).get(*args, **kwargs)
        
        data = self._data
        if not self.user:
            data['status'] = 403
            data['message'] = 'Please login again.'
        else:
            title = kwargs.get('project', None)
            image_name = kwargs.get('image', None)
            image = None
            if not title or not image_name:
                data['status'] = 400
                data['message'] = 'Bad Request'
            else:
                try:
                    self._project = Project.objects.get(title=title)
                except Project.DoesNotExist:
                    data['status'] = 404
                    data['message'] = 'Invalid project title.'
            
            if self._project:
                try:
                    image = Image.objects.get(project=self._project,
                                                 name=image_name)
                except Image.DoesNotExist:
                    data['status'] = 404
                    data['message'] = 'Invalid image'
                if image:
                    comments = Comment.objects.filter(image=image
                                                   ).order_by('-updated_on')
                    
                    annotations = Annotation.objects.filter(image=image
                                                   ).order_by('-updated_on')
                    ordered_list = list(comments)
                    ordered_list.extend(annotations)
                    ordered_list = merge_sort(ordered_list)
                    
                    data['status'] = 200
                    data['image'] = json_dumper(image)
                    data['updates'] = json_dumper(ordered_list)

        if not self._headers_written:
            self.write(data)
コード例 #5
0
ファイル: handler.py プロジェクト: techiev2/Clearsoup-API
 def get(self,*args, **kwargs):
     project_id = self.get_argument('projectId', None)
     project = self.get_project_object(project_id=project_id,
                                       permalink=None)
     members = list(Team.objects.filter(project=project).exclude("project",
                                                 "created_by", "updated_by"))
     self.write(json.dumps(json_dumper(members)))
コード例 #6
0
 def get(self, *args, **kwargs):
     project_id = self.get_argument('projectId', None)
     owner = self.get_argument('owner', None)
     project_name = self.get_argument('project_name', None)
     project_permalink = self.get_argument('project_pemalink', None)
     project = None
     response = {}
     if project_id:
         project = self.get_valid_project(project_id)
     elif owner and project_name:
         permalink = owner + '/' + project_name
         project = self.get_valid_project(project_id, permalink)
     elif project_permalink:
         project = self.get_valid_project(project_id=None,
                                          permalink=project_permalink)
     else:
         self.send_error(400)
     roles = Role.objects.filter(project=project).exclude(
         'created_by', 'updated_by', 'project', 'updated_on', 'created_on')
     response['roles'] = json_dumper(list(roles))
     response['available_roles'] = [
         role for role in TEAM_ROLES if role not in response['roles']
     ]
     response['permissions'] = PROJECT_PERMISSIONS
     d = {}
     [
         d.update({role.role: self.generate_readable_permission_json(role)})
         for role in roles
     ]
     response['project_permissions_map'] = d
     self.write(json.dumps(response))
コード例 #7
0
ファイル: handler.py プロジェクト: Somesh/Clearsoup-API
 def get(self,*args, **kwargs):
     '''
         taskId will be that of a parent task.
         This handler will return comments of a task which is always tied
         up to a parent task.
     '''
     project_id = self.get_argument('projectId', None)
     task_id = self.get_argument('taskId', None)
     owner = self.get_argument('owner', None)
     project_name = self.get_argument('project_name', None)
     project = None
     if project_id:
         project = self.get_valid_project(project_id)
     elif owner and project_name:
         permalink = owner + '/' + project_name
         project = self.get_project_object(project_id=None,
                                       permalink=permalink)
     else:
         self.send_error(400)
     response = {}
     task = self.get_task_object(project, task_id)
     if not task:
         raise HTTPError(404, **{'reason': 'Task not found'})
     else:
         response['task'] = task.to_json()
         response['task_type'] = TASK_TYPES
         response['task_comments'] = json_dumper(
                             list(TaskUpdate.objects.filter(task=task,
                                       is_active=True).order_by('-id')))
     self.finish(json.dumps(response))
コード例 #8
0
ファイル: handler.py プロジェクト: techiev2/Clearsoup-API
 def get(self, *args, **kwargs):
     project_id = self.get_argument('projectId', None)
     owner = self.get_argument('owner', None)
     project_name = self.get_argument('project_name', None)
     project_permalink = self.get_argument('project_pemalink', None)
     project = None
     response = {}
     if project_id:
         project = self.get_valid_project(project_id)
     elif owner and project_name:
         permalink = owner + '/' + project_name
         project = self.get_valid_project(project_id, permalink)
     elif project_permalink:
         project = self.get_valid_project(project_id=None,
                                          permalink=project_permalink)
     else:
         self.send_error(400)
     roles = Role.objects.filter(project=project
                                        ).exclude('created_by', 'updated_by',
                                                  'project', 'updated_on', 
                                                  'created_on')
     response['roles'] = json_dumper(list(roles))
     response['available_roles'] = [role for role in TEAM_ROLES
                                    if role not in response['roles']]
     response['permissions'] = PROJECT_PERMISSIONS
     d = {}
     [d.update({role.role: self.generate_readable_permission_json(role)})
      for role in roles]
     response['project_permissions_map'] = d
     self.write(json.dumps(response))
コード例 #9
0
 def get(self, *args, **kwargs):
     '''
         taskId will be that of a parent task.
         This handler will return comments of a task which is always tied
         up to a parent task.
     '''
     project_id = self.get_argument('projectId', None)
     task_id = self.get_argument('taskId', None)
     owner = self.get_argument('owner', None)
     project_name = self.get_argument('project_name', None)
     project = None
     if project_id:
         project = self.get_valid_project(project_id)
     elif owner and project_name:
         permalink = owner + '/' + project_name
         project = self.get_project_object(project_id=None,
                                           permalink=permalink)
     else:
         self.send_error(400)
     response = {}
     task = self.get_task_object(project, task_id)
     if not task:
         raise HTTPError(404, **{'reason': 'Task not found'})
     else:
         response['task'] = task.to_json()
         response['task_type'] = TASK_TYPES
         response['task_comments'] = json_dumper(
             list(
                 TaskUpdate.objects.filter(task=task,
                                           is_active=True).order_by('-id')))
     self.finish(json.dumps(response))
コード例 #10
0
    def get(self, *args, **kwargs):
        '''
        Notifications can be fetch in bulk by the websocket
        so that we need to make multiple API calls for every
        user. In that case, we expect a multiple params with the
        key user and the value as user_id, last_notification_id
        Ex: /notification/?user=1,613434&user=2,8980978907&user=3,707093
        We will then fetch the notifications for each user, and respond
        '''
        response = {}
        users = self.get_arguments('user', None)
        '''
        If we have multiple users, loop through the list, and fetch
        the notifications for each user
        '''
        if users:
            qParams = {
                'is_read': False
            }
            for user in users:
                if ',' in user:
                    user_id, last_notification_id = user.split(',')
                    qParams['for_user'] = user_id
                    qParams['id__gt'] = last_notification_id
                else:
                    qParams['for_user'] = user

                user_notification = Notification.objects(**qParams)\
                    .order_by('-id')
                response[qParams['for_user']] = json_dumper(user_notification)

        elif self.current_user:
            qParams = {
                'for_user': self.current_user
            }
            last_id = self.get_argument('last_id', None)
            if last_id:
                qParams['id__gt'] = last_id
                qParams['is_read'] = False

            notifications = Notification.objects(**qParams)\
                .order_by('-id')[self._limit_from:self._limit_to]

            response = json_dumper(notifications)

        self.finish(json.dumps(response))
コード例 #11
0
ファイル: project.py プロジェクト: Somesh/Clearsoup-API
 def get(self,*args, **kwargs):
     organization = kwargs.get('organization', None)
     org = self.validate_request(organization)
     project_id = self.get_argument('projectId', None)
     sprint_sequence = self.get_argument('sprint',None)
     response = {}
     project = self.get_valid_project(project_id, org)
     if not sprint_sequence:
         sprints = list(Sprint.objects.filter(project=project))
         response['sprints'] = json_dumper(sprints)
     elif sprint_sequence:
         try:
             sprint = project.get_sprint_object(sprint_sequence)
             response['sprint'] = sprint.to_json()
             response['stories'] = json_dumper(list(sprint.get_stories()))
         except ValidationError, error:
             raise HTTPError(404, **{'reason': self.error_message(error)})
コード例 #12
0
ファイル: project.py プロジェクト: Somesh-zz/Clearsoup-API
 def get(self, *args, **kwargs):
     organization = kwargs.get('organization', None)
     org = self.validate_request(organization)
     project_id = self.get_argument('projectId', None)
     sprint_sequence = self.get_argument('sprint', None)
     response = {}
     project = self.get_valid_project(project_id, org)
     if not sprint_sequence:
         sprints = list(Sprint.objects.filter(project=project))
         response['sprints'] = json_dumper(sprints)
     elif sprint_sequence:
         try:
             sprint = project.get_sprint_object(sprint_sequence)
             response['sprint'] = sprint.to_json()
             response['stories'] = json_dumper(list(sprint.get_stories()))
         except ValidationError, error:
             raise HTTPError(404, **{'reason': self.error_message(error)})
コード例 #13
0
ファイル: handlers.py プロジェクト: Somesh-zz/Clearsoup-API
 def get(self, *args, **kwargs):
     code = self.get_argument('code')
     invitation = None
     try:
         invitation = Invitation.objects.get(
             code=code, valid_until__gte=datetime.utcnow())
         self.write(json_dumper(invitation))
     except Invitation.DoesNotExist:
         raise HTTPError(404, **{'reason': "Invalid token"})
コード例 #14
0
ファイル: handlers.py プロジェクト: Somesh/Clearsoup-API
 def get(self, *args, **kwargs):
     code = self.get_argument('code')
     invitation = None
     try:
         invitation = Invitation.objects.get(code=code,
                                     valid_until__gte=datetime.utcnow())
         self.write(json_dumper(invitation))
     except Invitation.DoesNotExist:
         raise HTTPError(404, **{'reason': "Invalid token"})
コード例 #15
0
ファイル: team.py プロジェクト: Somesh/Clearsoup-API
 def get(self,*args, **kwargs):
     organization = kwargs.get('organization', None)
     org = self.validate_request(organization)
     project_id = self.get_argument('projectId', None)
     if not project_id:
         self.send_error(404)
     else:
         project = self.get_project_object(project_id, org)
         members = [user for user in project.members]
         self.write(json.dumps(json_dumper(members)))
コード例 #16
0
ファイル: team.py プロジェクト: Somesh-zz/Clearsoup-API
 def get(self, *args, **kwargs):
     organization = kwargs.get('organization', None)
     org = self.validate_request(organization)
     project_id = self.get_argument('projectId', None)
     if not project_id:
         self.send_error(404)
     else:
         project = self.get_project_object(project_id, org)
         members = [user for user in project.members]
         self.write(json.dumps(json_dumper(members)))
コード例 #17
0
ファイル: handlers.py プロジェクト: Somesh/Clearsoup-API
    def get(self, *args, **kwargs):
        users = User.objects.only("username","email")

        unique_sessions = {}
        sessions = Session.objects(user__in=users).order_by("generated_at")
        # we now have to group the sessions by username,
        for username, sess in groupby(sessions, lambda x: x['user']['username']):
            #print "%s has %d sessions" %(username, len(list(sess)))
            unique_sessions[username] = list(sess)[-1].to_json()

        projects = Project.objects.only(
            "title","permalink","description","members"
            )
        self.write({
            'users': json_dumper(users, fields=['username','email']),
            'sessions': unique_sessions,
            'projects': json_dumper(projects,
                fields=["title","permalink","description","members"]
                )
            })
コード例 #18
0
ファイル: handler.py プロジェクト: techiev2/Clearsoup-API
 def get(self, *args, **kwargs):
     organization  = kwargs.get('organization', None)
     response = {}
     org = self.validate_request(organization)
     if not org:
         self.send_error(404)
     else:
         response['organization'] = org.to_json()
         response['organization_profile'] = json_dumper(
                                            org.get_organization_profile())
         self.write(response)
コード例 #19
0
ファイル: handler.py プロジェクト: Somesh-zz/Clearsoup-API
 def get(self, *args, **kwargs):
     organization  = kwargs.get('organization', None)
     response = {}
     org = self.validate_request(organization)
     if not org:
         self.send_error(404)
     else:
         response['organization'] = org.to_json()
         response['organization_profile'] = json_dumper(
                                            org.get_organization_profile())
         self.write(response)
コード例 #20
0
ファイル: handler.py プロジェクト: Somesh-zz/Clearsoup-API
    def get(self, *args, **kwargs):
        project_id = self.get_argument('projectId', None)
        owner = self.get_argument('owner', None)
        project_name = self.get_argument('project_name', None)

        sprint_sequence = self.get_argument('sprint', None)
        response = {}
        if project_id:
            project = self.get_valid_project(project_id)
        elif owner and project_name:
            permalink = owner + '/' + project_name
            project = self.get_valid_project(project_id, permalink)

        if not sprint_sequence:
            sprints = list(Sprint.objects.filter(project=project))
            response['sprints'] = json_dumper(sprints)
        elif sprint_sequence:
            try:
                sprint = project.get_sprint_object(sprint_sequence)
                stories = list(sprint.get_stories())
                tasks = [{
                    story.title:
                    Task.objects.filter(story=story, is_active=True).count(),
                    'closed_tasks':
                    Task.objects.filter(story=story,
                                        current_action='Closed',
                                        is_active=True).count()
                } for story in stories]
                response['sprint'] = sprint.to_json()
                response['stories'] = json_dumper(stories)
                # updating story json with task count
                for each in response['stories']:
                    for i in tasks:
                        if each['title'] in i.keys():
                            each.update({
                                'task_count': i.get(each['title']),
                                'closed_tasks': i['closed_tasks']
                            })

            except ValidationError, error:
                raise HTTPError(404, **{'reason': self.error_message(error)})
コード例 #21
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
 def post(self, *args, **kwargs):
     '''
     ajax call attributes:
         url: /settings/project/<project>/image/<image>
         type: post
         data: obj  ({"background-color": "ece4d9", "text-align": "left"})
     '''
     super(ImageSettingHandler, self).post(*args, **kwargs)
     data = {}
     if not self.user:
         data['status'] = 403
         data['message'] = 'Please login again.'
     else:
         title = kwargs.get('project', None)
         name = kwargs.get('image', None)
         project = None
         image = None
         post_data_keys = self.data.keys()
         if not title or ('background-color' not in post_data_keys
         ) or ('text-align' not in post_data_keys) or not name:
             data['status'] = 400
             data['message'] = 'Bad Request'
         else:
             try:
                 project = Project.objects.get(title=title)
             except Project.DoesNotExist:
                 data['status'] = 404
                 data['message'] = 'Invalid Project Name.'
             if project:
                 try:
                     image = Image.objects.get(name=name,
                                               project=project)
                 except Image.DoesNotExist:
                     data['status'] = 404
                     data['message'] = 'Invalid Image Name.'
                 if image:
                     css = {'background-color': self.data['background-color'],
                        'text-align': self.data['text-align']}
                     try:
                         image_setting = ImageSetting.objects.get(
                                                         image=image,
                                                         project=project)
                         image_setting.update(set__css=css,
                                          set__updated_on=datetime.utcnow())
                     except ImageSetting.DoesNotExist:
                         image_setting = ImageSetting(image=image,
                                                      project=project,
                                                      css=css)
                     image_setting.save()
                 data['status'] = 200
                 data['settings'] = json_dumper(image_setting)
     if not self._headers_written:
         self.write(data)
コード例 #22
0
ファイル: handlers.py プロジェクト: Somesh-zz/Clearsoup-API
    def get(self, *args, **kwargs):
        users = User.objects.only("username", "email")

        unique_sessions = {}
        sessions = Session.objects(user__in=users).order_by("generated_at")
        # we now have to group the sessions by username,
        for username, sess in groupby(sessions,
                                      lambda x: x['user']['username']):
            #print "%s has %d sessions" %(username, len(list(sess)))
            unique_sessions[username] = list(sess)[-1].to_json()

        projects = Project.objects.only("title", "permalink", "description",
                                        "members")
        self.write({
            'users':
            json_dumper(users, fields=['username', 'email']),
            'sessions':
            unique_sessions,
            'projects':
            json_dumper(
                projects,
                fields=["title", "permalink", "description", "members"])
        })
コード例 #23
0
ファイル: handler.py プロジェクト: Somesh/Clearsoup-API
    def get(self,*args, **kwargs):
        project_id = self.get_argument('projectId', None)
        owner = self.get_argument('owner', None)
        project_name = self.get_argument('project_name', None)

        sprint_sequence = self.get_argument('sprint',None)
        response = {}
        if project_id:
            project = self.get_valid_project(project_id)
        elif owner and project_name:
            permalink = owner + '/' + project_name
            project = self.get_valid_project(project_id, permalink)

        if not sprint_sequence:
            sprints = list(Sprint.objects.filter(project=project))
            response['sprints'] = json_dumper(sprints)
        elif sprint_sequence:
            try:
                sprint = project.get_sprint_object(sprint_sequence)
                stories = list(sprint.get_stories())
                tasks = [{story.title : Task.objects.filter(story=story,
                                                        is_active=True).count(),
                          'closed_tasks': Task.objects.filter(story=story,
                                          current_action='Closed',
                                          is_active=True).count()}
                           for story in stories]
                response['sprint'] = sprint.to_json()
                response['stories'] = json_dumper(stories)
                # updating story json with task count
                for each in response['stories']:
                    for i in tasks:
                        if each['title'] in i.keys() :
                            each.update({'task_count': i.get(each['title']),
                                         'closed_tasks': i['closed_tasks']})
                
            except ValidationError, error:
                raise HTTPError(404, **{'reason': self.error_message(error)})
コード例 #24
0
ファイル: handler.py プロジェクト: Somesh-zz/Clearsoup-API
class UpdateHandler(BaseHandler):
    """
    Project updates handler
    Since an update is always tied to a project context,
    this is handled within the project    
    """
    SUPPORTED_METHODS = ('GET', 'PUT', 'DELETE')
    REQUIRED_FIELDS = {
        'GET': ('project_id', ),
        'PUT': (
            'project_id',
            'text',
        ),
        'DELETE': ('id', )
    }

    def get_project(self, project_id):
        try:
            project = Project.objects.get(sequence=project_id,
                                          members=self.current_user)
        except Project.DoesNotExist:
            project = None
        return project

    @authenticated
    @validate_path_arg
    def put(self, *args, **kwargs):
        project_id = self.get_argument('project_id', None)
        # Get the project object
        project = self.get_project(project_id)
        if not project:
            self.send_error(404)
        # Create a new update
        update = Update()
        update.created_by = self.current_user
        update.project = project
        update.text = self.get_argument('text', None)
        try:
            update.save()
        except ValidationError, error:
            raise HTTPError(500, **{'reason': self.error_message(error)})

        response = {
            'status': 200,
            'message': 'Update saved successfully',
            'update': json_dumper(update)
        }

        self.finish(json.dumps(response))
コード例 #25
0
ファイル: handler.py プロジェクト: Somesh-zz/Clearsoup-API
    def post(self, *args, **kwargs):
        '''
            new data set
            [{'email': email, 'role': role}, {'email': email, 'role': role}]
        '''
        project_id = self.get_argument('projectId', None)
        project_permalink = self.get_argument('project_permalink', None)
        project = None
        self.invitations = []
        if project_id:
            project = self.get_project_object(project_id=project_id,
                                              permalink=None)
        elif project_permalink:
            project = self.get_project_object(project_id=None,
                                              permalink=project_permalink)

        if not self.check_permission(project, 'can_add_member'):
            raise HTTPError(403,
                reason="Not permitted to add members to this project")

        self.project = project
        self.clean_request(project)
        response = {}
        response['members'] = []
        for each in self.data['members']:
            new_user = existing_user = None
            project.members.extend(self.data['new_members'])
            project.update(set__members=set(project.members))
            try:
                existing_user = Team.objects.get(user=each['user'],
                                              project=project)
                existing_user.update(set__role=each['role'])
            except Team.DoesNotExist:
                new_user = Team(user=each['user'],
                                 project=project,
                                 role=each['role'],
                                 created_by=self.current_user,
                                 updated_by=self.current_user)
                new_user.save()
#            exclude = ['udpated_at', 'updated_by', 'created_at', 'created_by']
            if new_user:
                response['members'].append(new_user.to_json())
                self.send_notification(invited_user=new_user.user)
            elif existing_user:
                response['members'].append(existing_user.to_json())
                self.send_notification(invited_user=existing_user.user)
        response.update({'invitations': self.invitations})
        self.write(json_dumper(response))
コード例 #26
0
ファイル: project.py プロジェクト: techiev2/Clearsoup-API
 def get(self, *args, **kwargs):
     organization = kwargs.get('organization', None)
     org = self.validate_request(organization)
     response = None
     project_id = self.get_argument('projectId', None)
     if not project_id:
         projects = Project.objects.filter(organization=org,
                                       is_active=True)
         response = json_dumper(projects)
     elif project_id:
         try:
             project = Project.get_project_object(sequence=project_id,
                                                  organization=org)
             response = project.to_json()
         except ValidationError, error:
             raise HTTPError(404, **{'reason': self.error_message(error)})
コード例 #27
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
 def get(self, *args, **kwargs):
     super(ProjectHandler, self).get(*args, **kwargs)
     data = {}
     if not self.user:
         data['status'] = 403
         data['message'] = 'Please login again.'
     else:
         project_title = kwargs.get('project', None)
         project = None
         if not project_title:
             data['status'] = 400
             data['message'] = 'Bad Request.'
         else:
             try:
                 project = Project.objects.get(title=project_title)
             except Project.DoesNotExist:
                 data['status'] = 404
                 data['message'] = 'Invalid project title.'
             if project:
                 partial_image_list = []
                 images = Image.objects.filter(project=project)
                 for each in images:
                     partial_image_dict = {}
                     try:
                         media = self.dropbox_client.media(each.metadata['path'])
                     except ErrorResponse:
                         each.delete()
                         media = None
                     if media:
                         partial_image_dict['media'] = media
                         partial_image_dict['name'] = each.name
                         partial_image_dict['thumbnail'] = each.thumbnail
                         partial_image_list.append(partial_image_dict)
                 try:
                     project_settings = ProjectSetting.objects.get(
                                                        project=project)
                 except ProjectSetting.DoesNotExist:
                     project_settings = []
                 data['status'] = 200
                 image_thumbnails = self.getThumbnailSlug(partial_image_list)
                 data['images'] = image_thumbnails
                 data['settings'] = json_dumper(project_settings)
     if not self._headers_written:
         self.write(data)
コード例 #28
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
 def get(self, *args, **kwargs):
     '''
        ajax call attributes:
             url: /settings/project/<project>/image/<image>
             type: post
     '''
     super(ImageSettingHandler, self).get(*args, **kwargs)
     data = {}
     if not self.user:
         data['status'] = 403
         data['message'] = 'Please login again.'
     else:
         title = kwargs.get('project', None)
         name = kwargs.get('image', None)
         project = None
         image = None
         if not title or not name:
             data['status'] = 400
             data['message'] = 'Bad Request'
         else:
             try:
                 project = Project.objects.get(title=title)
             except Project.DoesNotExist:
                 data['status'] = 404
                 data['message'] = 'Invalid Project Name.'
             if project:
                 try:
                     image = Image.objects.get(name=name,
                                               project=project)
                 except Image.DoesNotExist:
                     data['status'] = 404
                     data['message'] = 'Invalid Image Name.'
                 if image:
                     try:
                         image_setting = ImageSetting.objects.get(
                                                         image=image,
                                                         project=project)
                     except ImageSetting.DoesNotExist:
                         image_setting = []
                 data['status'] = 200
                 data['settings'] = json_dumper(image_setting)
     if not self._headers_written:
         self.write(data)
コード例 #29
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
 def get(self, *args, **kwargs):
     super(InReplyToHandler, self).get(*args, **kwargs)
     data = self._data
     if not self.user:
         data['status'] = 403
         data['message'] = 'Please login again.'
     else:
         update_id = kwargs.get('id', None)
         is_annotation = self.get_argument('is_annotation', None)
         if is_annotation == 'true':
             is_annotation = True
         else:
             is_annotation = False
         annotation = None
         comment = None
         replied_comments = []
         if not id:
             data['status'] = 400
             data['message'] = 'Bad Request'
         else:
             if is_annotation:
                 try:
                     annotation = Annotation.objects.get(pk=update_id)
                 except Annotation.DoesNotExist:
                     data['status'] = 400
                     data['message'] = 'Invalid Annotation'
             else:
                 try:
                     comment = Comment.objects.get(pk=update_id)
                 except Comment.DoesNotExist:
                     data['status'] = 400
                     data['message'] = 'Invalid Annotation'
             if annotation:
                 replied_comments = InReplyTo.objects.filter(
                                                 annotation=annotation)
             elif comment:
                 replied_comments = InReplyTo.objects.filter(
                                                 comment=comment)
             data['status'] = 200
             data['replies'] = json_dumper(replied_comments)
     if not self._headers_written:
         self.write(data)
コード例 #30
0
ファイル: story.py プロジェクト: Somesh-zz/Clearsoup-API
 def get(self, *args, **kwargs):
     organization = kwargs.get('organization', None)
     org = self.validate_request(organization)
     story_id = self.get_argument('storyId', None)
     project_id = self.get_argument('projectId', None)
     response = None
     if story_id and not project_id:
         self.send_error(400)
     if project_id and story_id:
         project = self.get_project_object(sequence=project_id, org=org)
         if project and story_id:
             try:
                 story = Story.objects.get(sequence=int(story_id),
                                           project=project)
                 response = story.to_json()
             except Story.DoesNotExist, error:
                 raise HTTPError(500,
                                 **{'reason': self.error_message(error)})
         elif not story_id and project:
             response = json_dumper(Story.objects.filter(project=project))
コード例 #31
0
ファイル: story.py プロジェクト: Somesh/Clearsoup-API
 def get(self,*args, **kwargs):
     organization = kwargs.get('organization', None)
     org = self.validate_request(organization)
     story_id = self.get_argument('storyId', None)
     project_id = self.get_argument('projectId', None)
     response = None
     if story_id and not project_id:
         self.send_error(400)
     if project_id and story_id:
         project = self.get_project_object(sequence=project_id,
                                           org=org)
         if project and story_id:
             try:
                 story = Story.objects.get(sequence=int(story_id),
                                           project=project)
                 response = story.to_json()
             except Story.DoesNotExist, error:
                 raise HTTPError(500, **{'reason':self.error_message(error)})
         elif not story_id and project:
             response = json_dumper(Story.objects.filter(project=project))
コード例 #32
0
ファイル: handler.py プロジェクト: Somesh/Clearsoup-API
 def get(self,*args, **kwargs):
     project_id = self.get_argument('projectId', None)
     task_id = self.get_argument('taskId',None)
     response = {}
     if project_id:
         project = self.get_project_object(project_id)
         if task_id:
             task = self.get_task_object(project, task_id)
             if not task:
                 raise HTTPError(404, **{'reason': 'Task not found'})
             else:
                 response['events'] = task.next_events()
                 response['current'] = task._state_machine.current
                 response['task'] = task.to_json()
                 response['task_type'] = TASK_TYPES
         else:
             query = {
                 'project': project,
                 'is_active': True
             }
             # If sprint is set, get the tasks only for that sprint
             sprint_number = self.get_argument('sprint', None)
             sprint_metadata = {}
             if sprint_number:
                 # Get the sprint
                 sprint = Sprint.objects.get(project=project,
                                             sequence=int(sprint_number))
                 query['story__in'] = sprint.get_stories()
                 
                 pm = ProjectMetadata.objects.filter(project=project
                                             ).exclude('project')
                 if pm:
                     sprint_metadata = pm[0].metadata[project.permalink][str(sprint_number)]
                 
             response['task'] = json_dumper(list(
                                 Task.objects.filter(**query).exclude('project','story')
                                 .order_by('-updated_at')
                             ))
             response['metadata'] = sprint_metadata
     self.finish(json.dumps(response))
コード例 #33
0
ファイル: handler.py プロジェクト: Somesh-zz/Clearsoup-API
 def create_invitation(self, email, role):
     """
     Create invitation objects if email for
     user is not found in the system
     """
     invitation = Invitation(
         email=email,
         project=self.project,
         invited_by=self.current_user,
         role=role)
     invitation.save()
     async_email = AsycnEmail(self.request)
     template = SETTINGS['template_path']+'/'+'invite_mailtemplate.html'
     params={'project_name': invitation.project.title,
             'project_owner': invitation.project.created_by.username,
             'code':  invitation.code}
     async_email.generate_subject_content(subject='Welcome to Clearsoup.')
     async_email.send_email(
        email=invitation.email, template=template, params=params,
        from_email=SETTINGS['no-reply_email'],
        reply_to=SETTINGS['feedback_email'])
     return json_dumper(invitation)
コード例 #34
0
    def get(self, *args, **kwargs):
        project_id = self.get_argument('projectId', None)
        task_id = self.get_argument('taskId', None)
        response = {}
        if project_id:
            project = self.get_project_object(project_id)
            if task_id:
                task = self.get_task_object(project, task_id)
                if not task:
                    raise HTTPError(404, **{'reason': 'Task not found'})
                else:
                    response['events'] = task.next_events()
                    response['current'] = task._state_machine.current
                    response['task'] = task.to_json()
                    response['task_type'] = TASK_TYPES
            else:
                query = {'project': project, 'is_active': True}
                # If sprint is set, get the tasks only for that sprint
                sprint_number = self.get_argument('sprint', None)
                sprint_metadata = {}
                if sprint_number:
                    # Get the sprint
                    sprint = Sprint.objects.get(project=project,
                                                sequence=int(sprint_number))
                    query['story__in'] = sprint.get_stories()

                    pm = ProjectMetadata.objects.filter(
                        project=project).exclude('project')
                    if pm:
                        sprint_metadata = pm[0].metadata[project.permalink][
                            str(sprint_number)]

                response['task'] = json_dumper(
                    list(
                        Task.objects.filter(**query).exclude(
                            'project', 'story').order_by('-updated_at')))
                response['metadata'] = sprint_metadata
        self.finish(json.dumps(response))
コード例 #35
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
 def post(self, *args, **kwargs):
     super(ProjectSettingHandler, self).post(*args, **kwargs)
     data = {}
     if not self.user:
         data['status'] = 403
         data['message'] = 'Please login again.'
     else:
         title = kwargs.get('project', None)
         project = None
         self.data = ast.literal_eval(self.data)
         post_data_keys = self.data.keys()
         if not title or ('background-color' not in post_data_keys
         ) or ('text-align' not in post_data_keys):
             data['status'] = 400
             data['message'] = 'Bad Request'
         else:
             try:
                 project = Project.objects.get(title=title)
             except Project.DoesNotExist:
                 data['status'] = 404
                 data['message'] = 'Invalid Project Name.'
             if project:
                 css = {'background-color': self.data['background-color'],
                        'text-align': self.data['text-align']}
                 try:
                     project_settings = ProjectSetting.objects.get(
                                                       project=project)
                     project_settings.update(set__css=css)
                 except ProjectSetting.DoesNotExist:
                     project_settings = ProjectSetting(project=project,
                                                    css=css)
                 project_settings.save()
                 data['status'] = 200
                 data['settings'] = json_dumper(project_settings)
     if not self._headers_written:
         self.write(data)
コード例 #36
0
ファイル: handler.py プロジェクト: Somesh-zz/Clearsoup-API
 def get(self, *args, **kwargs):
     story_id = self.get_argument('storyId', None)
     project_id = self.get_argument('projectId', None)
     owner = self.get_argument('owner', None)
     project_name = self.get_argument('project_name', None)
     #        is_pmo = self.get_argument('is_pmo', False)
     response = {}
     if project_id:
         project = self.get_valid_project(project_id)
     elif owner and project_name:
         permalink = owner + '/' + project_name
         project = self.get_valid_project(project_id, permalink)
     else:
         self.send_error(400)
     if project and story_id:
         try:
             story = Story.objects.get(sequence=int(story_id),
                                       project=project,
                                       is_active=True)
             response['story'] = story.to_json()
             response['tasks'] = json_dumper(story.get_tasks())
             response['task_type'] = TASK_TYPES
         except Story.DoesNotExist, error:
             raise HTTPError(500, **{'reason': self.error_message(error)})
コード例 #37
0
ファイル: handler.py プロジェクト: Somesh-zz/Clearsoup-API
    def delete(self, *args, **kwargs):
        '''
            {
            projectId : 1,
            roles: [admin, developer]
            project_permalink: somesh/clearsoup
            is_delete: true,
            }
        '''
        project_id = self.get_argument('projectId', None)
        owner = self.get_argument('owner', None)
        project_name = self.get_argument('project_name', None)
        project_permalink = self.get_argument('project_pemalink', None)
        roles_to_be_deleted = self.get_argument('roles')
        project = None
        response = {}
        if project_id:
            project = self.get_valid_project(project_id)
        elif owner and project_name:
            permalink = owner + '/' + project_name
            project = self.get_valid_project(project_id, permalink)
        elif project_permalink:
            project = self.get_valid_project(project_id=None,
                                             permalink=project_permalink)
        else:
            self.send_error(400)

        if any([x == 'admin' for x in roles_to_be_deleted]):
            self.send_error(500)
        else:
            roles = Role.objects.filter(project=project)
            [role.delete() for role in roles if role.role in roles_to_be_deleted]
            [project.roles.pop(project.roles.index(r)) for r
             in roles_to_be_deleted if r in project.roles]
            response['roles'] = json_dumper(list(Role.objects.filter(project=project)))
            self.finish(json.dumps(response))
コード例 #38
0
ファイル: handler.py プロジェクト: Somesh/Clearsoup-API
    def get(self,*args, **kwargs):
        story_id = self.get_argument('storyId', None)
        project_id = self.get_argument('projectId', None)
        owner = self.get_argument('owner', None)
        project_name = self.get_argument('project_name', None)
#        is_pmo = self.get_argument('is_pmo', False)
        response = {}
        if project_id:
            project = self.get_valid_project(project_id)
        elif owner and project_name:
            permalink = owner + '/' + project_name
            project = self.get_valid_project(project_id, permalink)
        else:
            self.send_error(400)
        if project and story_id:
            try:
                story = Story.objects.get(sequence=int(story_id),
                                              project=project,
                                              is_active=True)
                response['story'] = story.to_json()
                response['tasks'] = json_dumper(story.get_tasks())
                response['task_type'] = TASK_TYPES
            except Story.DoesNotExist, error:
                raise HTTPError(500, **{'reason':self.error_message(error)})
コード例 #39
0
ファイル: group.py プロジェクト: Somesh/Clearsoup-API
 def to_json(self, fields=None, exclude=None):
     return json_dumper(self, fields, exclude)
コード例 #40
0
ファイル: handler.py プロジェクト: Somesh-zz/Clearsoup-API
            'update': json_dumper(update)
        }

        self.finish(json.dumps(response))

    @authenticated
    def get(self, *args, **kwargs):
        project_id = self.get_argument('project_id', None)
        # Get the project object
        project = self.get_project(project_id)
        if not project:
            self.send_error(404)
        # Retrieve updates
        updates = None
        try:
            updates = Update.objects(project=project)\
                .order_by('-id').exclude('project')[self._limit_from:self._limit_to]
        except Exception, e:
            print e
            raise HTTPError(404)

        if not updates:
            updates = []

        response = json_dumper(updates)
        self.finish(json.dumps(response))

    @authenticated
    def delete(self, *args, **kwargs):
        pass
コード例 #41
0
ファイル: story.py プロジェクト: Somesh-zz/Clearsoup-API
            self.send_error(400)
        if project_id and story_id:
            project = self.get_project_object(sequence=project_id, org=org)
            if project and story_id:
                try:
                    story = Story.objects.get(sequence=int(story_id),
                                              project=project)
                    response = story.to_json()
                except Story.DoesNotExist, error:
                    raise HTTPError(500,
                                    **{'reason': self.error_message(error)})
            elif not story_id and project:
                response = json_dumper(Story.objects.filter(project=project))
        else:
            response = json_dumper(
                Story.objects.filter(
                    is_active=True,
                    created_by=self.current_user).order_by('created_at'))
        self.finish(json.dumps(response))

    @authenticated
    def post(self, *args, **kwargs):
        '''TBD'''
        sequence = self.get_argument('id', None)
        organization = kwargs.get('organization', None)
        org = self.validate_request(organization)
        project = self.get_project_object(sequence=sequence, org=org)
        self.write(project.to_json())

    @authenticated
    def delete(self, *args, **kwargs):
        story_id = self.get_argument('storyId', None)
コード例 #42
0
ファイル: group.py プロジェクト: Somesh-zz/Clearsoup-API
 def to_json(self, fields=None, exclude=None):
     return json_dumper(self, fields, exclude)
コード例 #43
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
    def post(self, *args, **kwargs):
        '''
        url : /edit-update/(?P<id>.*?)/?$
        1. for general update
                post_data : {
                    text : edited_text
                    is_annotation: false
                }
        2. for annotations:
            a. if any repositioning is happening for an annotated comments
                post_data : {
                        text : edited_text,
                        x: x_cordinate,
                        y: y_cordinate,
                        width: new_width,
                        height: new_height,
                        is_annotation: true
                    }
           b, if no repositioning:
               post_data : {
                        text : edited_text,
                        is_annotation: true
                    }
        '''
        data = {}
        id = kwargs.get('id', None)
        if not self.user:
            data['status'] = 403
            data['message'] = 'Please login again.'
        elif 'id' not in kwargs.keys() or\
        'is_annotation' not in self.data.keys() or not id:
            data['status'] = 400
            data['message'] = 'Bad Request'
        else:
            is_annotation = self.data.get('is_annotation')
            annotation = None
            comment = None
            if is_annotation:
                try:
                    annotation = Annotation.objects.get(pk=id)
                except Annotation.DoesNotExist:
                    data['status'] = 404
                    data['message'] = 'Could not edit this update.'

                if annotation:
                    if 'x' in self.data.keys() and 'y' in self.data.keys() and\
                    'width' in self.data.keys() and 'height' in self.data.keys()\
                    and 'text' in self.data.keys():
                        x1 = self.data['x']
                        y1 = self.data['y']
                        width = self.data['width']
                        height = self.data['height']
                        text = self.data['text']
                        annotation.update(set__text=text,
                                          set__x1=x1,
                                          set__y1=y1,
                                          set__width=width,
                                          set_height=height)
                    elif 'x' not in self.data.keys() and 'y' not in \
                    self.data.keys() and 'width' not in self.data.keys() \
                    and 'height' not in self.data.keys() \
                    and 'text' in self.data.keys():
                        annotation.update(set__text=text)

                    annotation.save()
                    annotation.reload()
                    data['status'] = 200
                    data['update'] = json_dumper(annotation)
            else:
                try:
                    comment = Comment.objects.get(pk=id)
                except Comment.DoesNotExist:
                    data['status'] = 404
                    data['message'] = 'Could not edit this update.'
                if comment:
                    comment.update(set__text=self.data['text'])
                    data['status'] = 200
                    data['update'] = json_dumper(comment)
        if not self._headers_written:
            self.write(data)
コード例 #44
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
    def get(self, *args, **kwargs):
        '''
        get method which will return a published set of images based on a
        valid url generated while publishing a project.
        
        url format: '/public/project/project-name/version_value/
        
        '''
        super(PublishedHandler, self).get(*args, **kwargs)
        data = {}
        title = kwargs.get('project', None)
        version = kwargs.get('version', None)
        username = kwargs.get('username', None)
        name = kwargs.get('image', None)  # file name of a image.
        project = None
        image = name
        publish_obj = None
        current_screen = None
        publish_user = None
        if not self.user:
            data = {
                'state': 'Login',
                'assets': {
                    'css': ['style.css'],
                    'js': ['md5.js', 'login.js']
                }
            }
            self.render(data=data)
        elif not title and not version:
            data['status'] = '400'
            data['message'] = 'Bad Request'
        else:
            try:
                publish_user = User.objects.get(username=username)
            except User.DoesNotExist:
                data['status'] = 404
                data['message'] = 'Invalid user.'
            if publish_user:
                try:
                    project = Project.objects.get(title=title)
                except Project.DoesNotExist:
                    data['status'] = 404
                    data['message'] = 'Invalid Project'
                if project:
                    try:
                        project_settings = ProjectSetting.objects.get(
                                                       project=project)
                    except ProjectSetting.DoesNotExist:
                            project_settings = []
                    try:
                        publish_obj = Publish.objects.get(project=project,
                                                          version=version,
                                                          is_active=True,
                                                          created_by=publish_user)
                    except Publish.DoesNotExist:
                        latest_obj = Publish.objects.filter(
                                                     project=project,
                                                     is_active=True,
                                                     created_by=publish_user
                                                     ).order_by('-version')
                        if latest_obj:
                            data['status'] = 201
                            data['url'] = latest_obj[0].public_url
                            msg = 'The work flow of the project has been'
                            msg = msg.join(
                                   ['', ' updated by the designer. Please'])
                            msg = msg.join(
                                   ['', ' click on the link below to view'])
                            msg = msg.join(
                                   ['', ' view the latest version.'])
                            data['message'] = msg
                        else:
                            data['status'] = 404
                            data['message'] = 'No Published entity found at this url'
                    
                    if publish_obj:
                        if not image:
                            current_screen = publish_obj.starting_screen
                        elif name:
                            try:
                                current_screen = Image.objects.get(name=name,
                                                                   project=project,
                                                                   )
                            except Image.DoesNotExist:
                                data['status'] = 404
                                data['message'] = 'Invalid Image'
                        if current_screen:
                            hotspots = Hotspot.objects.filter(project=project,
                                                      image=current_screen)
                            comments = Comment.objects.filter(image=current_screen
                                                       ).order_by('-updated_on')
                            annotations = Annotation.objects.filter(
                                                        image=current_screen
                                                       ).order_by('-updated_on')
                            ordered_list = list(comments)
                            ordered_list.extend(annotations)
                            ordered_list = merge_sort(ordered_list)
                            temp_current_screen = json_dumper(current_screen)
                            try:
                                media = self.dropbox_client.media(
                                                     current_screen.metadata['path'])
                            except ErrorResponse:
                                current_screen.delete()
                                media = None
                            if media:
                                temp_current_screen['media'] = media
                                img_response = urllib2.urlopen(
                                              temp_current_screen['media']['url'])
                                temp_current_screen['media']['url'] = base64.b64encode(
                                                                   img_response.read())
                                all_images = Image.objects.filter(project=project)
                                data['status'] = 200
                                data['updates'] = json_dumper(ordered_list)
                                data['hotspots'] = json_dumper(hotspots)
                                data['project'] = json_dumper(project)
                                data['current_screen'] = temp_current_screen
                                data['images_names'] = [img.name for
                                                        img in all_images]
                                data['settings'] = json_dumper(
                                                       project_settings)
                            else:
                                data['status'] = 404
                                data['message'] = 'This image has been deleted from dropbox.'

        if not self._headers_written:
            is_xhr = self.request.headers.get('X-Requested-With', None )
            if is_xhr and (is_xhr == 'XMLHttpRequest'):
                self.write(data)
            else:
                self.template_file = 'publish.html'
                data.update({
                    'assets': {
                        'css': ['style.css'],
                        'js': ['publishedView.js']
                    }
                })
                self.render(data=data)
コード例 #45
0
ファイル: handler.py プロジェクト: Imaginea/Stitchemapp
 def post(self, *args, **kwargs):
     '''
     Post method to create an update/annotation/reply
     
     post url: /project/<project-name>/update/
     1. For a generic update post data:
         {
         text: user text for the image,
         image: image file name
         }
         
         ajax call = $.ajax({
                        url:"/project/<project-name>/update",
                        type:"post",
                        data:JSON.stringify({
                              text: "trying to post an update",
                              image: "dashboard_v1.jpg"
                             }),
                        success: function(data){console.log(data)}
                     });
     2. for annotates:
         {
         text: user text for image,
         image: image file name,
         x: x_cordinate,
         y: y_cordinate,
         height: height of the annotated area in float/int,
         width: width of the annotated area in float/int,
         }
         
         ajax call will be same as above.
     3.for replying to a comment/annotate:
         {
         text: user text for the image,
         in_reply_to: <id> of the main comment/annotate,
         annotate: true if reply to an annotate/ false if replying to
                     generic post data
         }
     '''
     super(UpdateHandler, self).post(*args, **kwargs)
     data = self._data
     if not self.user:
         data['status'] = 403
         data['message'] = 'Please login again.'
     else:
         title = kwargs.get('project', None)
         if not title:
             data['status'] = 400
             data['message'] = 'Bad Request'
         else:
             try:
                 self._project = Project.objects.get(title=title)
             except Project.DoesNotExist:
                 data['status'] = 404
                 data['message'] = 'Invalid project title.'
         
         if self._project:
             self.check_update_type()
             if self._update_type:
                 if self._update_type == 'REPLY':
                     reply = self.create_reply()
                     if isinstance(reply, InReplyTo):
                         data['status'] = 201
                         data['update'] = json_dumper(reply)
                     else:
                         data = reply
                 elif self._update_type == 'ANNOTATE':
                     annotation = self.create_annotation()
                     if isinstance(annotation, Annotation):
                         data['status'] = 201
                         data['update'] = json_dumper(annotation)
                     else:
                         data = annotation
                 elif self._update_type == 'COMMENT':
                     comment = self.create_comment()
                     if isinstance(comment, Comment):
                         data['status'] = 201
                         data['update'] = json_dumper(comment)
                     else:
                         data = comment
             else:
                 self.write(data)
     if not self._headers_written:
         self.write(data)
コード例 #46
0
ファイル: session.py プロジェクト: Somesh/Clearsoup-API
 def to_json(self, fields=None, exclude=None):
     """
     Return JSON interpretation of object instance.
     """
     return json_dumper(self, fields, exclude)
コード例 #47
0
 def to_json(self, fields=None, exclude=None):
     """
     Return JSON interpretation of object instance.
     """
     return json_dumper(self, fields, exclude)