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)
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)
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)
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)
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)