예제 #1
0
파일: story.py 프로젝트: inmagik/miller
    def git_blob_by_tag(self, request, pk, tag):
        """
    Note: this accepts tag patterns and 
    """
        q = self._getUserAuthorizations(request)

        if not pk.isdigit():
            story = get_object_or_404(q, slug=pk)
        else:
            story = get_object_or_404(q, pk=pk)

        ckey = story.get_cache_key(extra='git_blob:%s' % tag)
        # if cache.has_key(ckey):
        #   return Response(cache.get(ckey))
        # # if tag is . something, try to get the

        serializer = StorySerializer(
            story,
            context={'request': request},
        )

        d = serializer.data
        d['version'] = tag.split('.')[-1]
        d['logs'] = story.get_git_tags_by_commit(commit_id=d['version'])
        d['contents'] = story.get_git_contents_by_commit(tag)
        d['highlights'] = story.get_highlights_by_commit(tag)
        return Response(d)
예제 #2
0
파일: story.py 프로젝트: karthi2016/miller
  def retrieve(self, request, *args, **kwargs):
    q = self._getUserAuthorizations(request)
    # if request.user.is_authenticated():
    #   q = Q(owner=request.user) | Q(status=Story.PUBLIC)
    # else:
    #   q = Q(status=Story.PUBLIC)

    if 'pk' in kwargs and not kwargs['pk'].isdigit():
      story = get_object_or_404(q, slug=kwargs['pk'])
    else:
      story = get_object_or_404(q, pk=kwargs['pk'])

    ckey = story.get_cache_key()
    #transform contents if required.
    _parser = request.query_params.get('parser', None)
    if _parser:
      if _parser == 'yaml':
        import yaml
        try:
          story.contents = yaml.load(story.contents)
        except yaml.scanner.ScannerError as e:
          return Response({
            'parser': 'yaml',
            'field': 'contents',
            'error': '%s'%e
          })
        ckey = story.get_cache_key(extra=_parser)
    
    #print 'nocache:', request.query_params.get('nocache', None)
    #anonymize if story status is pending or under review (e.g. for chief reviewer)
    if story.status in (Story.PENDING, Story.REVIEW) and not story.authors.filter(user=request.user).exists() and request.user.groups.filter(name=Review.GROUP_CHIEF_REVIEWERS).exists():
      serializer = AnonymousStorySerializer(story,
        context={'request': request},
      )
      return Response(serializer.data)

    if not request.query_params.get('nocache', None) and cache.has_key(ckey):
      #print 'serve cahced', ckey
      return Response(cache.get(ckey))

    serializer = StorySerializer(story,
        context={'request': request},
    )
    d = serializer.data

    #print 'set cache', ckey
    cache.set(ckey, d)

    if request.query_params.get('nocache', None) and request.query_params.get('with-git-logs', None):
      d.update({
        'logs': story.get_git_tags_by_commit(commit_id=story.version)
      })
    
    
    return Response(d)
예제 #3
0
  def tags(self, request, pk=None):
    queryset = self.queryset.filter(Q(owner=request.user) | Q(authors=request.user))

    story = get_object_or_404(queryset, pk=12333)


    # save, then return tagged items according to tagform
    serializer = StorySerializer(story,
        context={'request': request},
    )
    return Response(serializer.data)
예제 #4
0
  def retrieve(self, request, *args, **kwargs):
    if request.user.is_authenticated():
      queryset = self.queryset.filter(Q(owner=request.user) | Q(authors=request.user) | Q(status=Story.PUBLIC)).distinct()
    else:
      queryset = self.queryset.filter(status=Story.PUBLIC).distinct()

    if 'pk' in kwargs and not kwargs['pk'].isdigit():
      story = get_object_or_404(queryset, slug=kwargs['pk'])
    else:
      story = get_object_or_404(queryset, pk=kwargs['pk'])
    
    serializer = StorySerializer(story,
        context={'request': request},
    )
    return Response(serializer.data)
예제 #5
0
파일: story.py 프로젝트: karthi2016/miller
  def gitblob(self, request, pk, commit_id=None):
    """
    e.g. http://localhost:8000/api/story/populism/git/blob/538d1420fbb0da6be027317d963c059e71b45de5/
    """
    q = self._getUserAuthorizations(request)
    
    if not pk.isdigit():
      story = get_object_or_404(q, slug=pk)
    else:
      story = get_object_or_404(q, pk=pk)

    contents = story.gitBlob(commit_id)

    serializer = StorySerializer(story,
      context={'request': request},
    )
    
    d = serializer.data
    d['contents'] = contents
    return Response(d)