def osfstorage_get_revisions(file_node, payload, target, **kwargs): from osf.models import PageCounter, FileVersion # TODO Fix me onces django works is_anon = has_anonymous_link( target, Auth(private_key=request.args.get('view_only'))) counter_prefix = 'download:{}:{}:'.format(file_node.target._id, file_node._id) version_count = file_node.versions.count() counts = dict( PageCounter.objects.filter(resource=file_node.target.guids.first().id, file=file_node, action='download').values_list( '_id', 'total')) qs = FileVersion.includable_objects.filter( basefilenode__id=file_node.id).include('creator__guids').order_by( '-created') for i, version in enumerate(qs): version._download_count = counts.get( '{}{}'.format(counter_prefix, version_count - i - 1), 0) # Return revisions in descending order return { 'revisions': [ utils.serialize_revision(target, file_node, version, index=version_count - idx - 1, anon=is_anon) for idx, version in enumerate(qs) ] }
def test_serialize_revision(self): sessions.sessions[request._get_current_object()] = Session() utils.update_analytics(self.project, self.record, 0) utils.update_analytics(self.project, self.record, 0) utils.update_analytics(self.project, self.record, 2) expected = { 'index': 1, 'user': { 'name': self.user.fullname, 'url': self.user.url, }, 'date': self.versions[0].created.isoformat(), 'downloads': 2, 'md5': None, 'sha256': None, } observed = utils.serialize_revision( self.project, self.record, self.versions[0], 0, ) assert_equal(expected, observed) assert_equal(self.record.get_download_count(), 3) assert_equal(self.record.get_download_count(version=2), 1) assert_equal(self.record.get_download_count(version=0), 2)
def osfstorage_get_revisions(file_node, node_addon, payload, **kwargs): from osf.models import PageCounter, FileVersion # TODO Fix me onces django works is_anon = has_anonymous_link( node_addon.owner, Auth(private_key=request.args.get('view_only'))) counter_prefix = 'download:{}:{}:'.format(file_node.node._id, file_node._id) version_count = file_node.versions.count() # Don't worry. The only % at the end of the LIKE clause, the index is still used counts = dict( PageCounter.objects.filter(_id__startswith=counter_prefix).values_list( '_id', 'total')) qs = FileVersion.includable_objects.filter( basefilenode__id=file_node.id).include('creator__guids').order_by( '-date_created') for i, version in enumerate(qs): version._download_count = counts.get( '{}{}'.format(counter_prefix, version_count - i - 1), 0) # Return revisions in descending order return { 'revisions': [ utils.serialize_revision(node_addon.owner, file_node, version, index=version_count - idx - 1, anon=is_anon) for idx, version in enumerate(qs) ] }
def test_serialize_revision(self): sessions.sessions[request._get_current_object()] = Session() utils.update_analytics(self.project, self.record._id, 0) utils.update_analytics(self.project, self.record._id, 0) utils.update_analytics(self.project, self.record._id, 2) expected = { 'index': 1, 'user': { 'name': self.user.fullname, 'url': self.user.url, }, 'date': self.versions[0].created.isoformat(), 'downloads': 2, 'md5': None, 'sha256': None, } observed = utils.serialize_revision( self.project, self.record, self.versions[0], 0, ) assert_equal(expected, observed) assert_equal(self.record.get_download_count(), 3) assert_equal(self.record.get_download_count(version=2), 1) assert_equal(self.record.get_download_count(version=0), 2)
def test_get_revisions(self): res = self.get_revisions() expected = [ utils.serialize_revision(self.project, self.record, version, index=self.record.versions.count() - 1 - idx) for idx, version in enumerate(reversed(self.record.versions.all())) ] assert_equal(len(res.json['revisions']), 15) assert_equal(res.json['revisions'], [x for x in expected]) assert_equal(res.json['revisions'][0]['index'], 15) assert_equal(res.json['revisions'][-1]['index'], 1)
def test_get_revisions(self): res = self.get_revisions() expected = [ utils.serialize_revision( self.project, self.record, version, index=self.record.versions.count() - 1 - idx ) for idx, version in enumerate(self.record.versions.all()) ] assert_equal(len(res.json['revisions']), 15) assert_equal(res.json['revisions'], [x for x in expected]) assert_equal(res.json['revisions'][0]['index'], 15) assert_equal(res.json['revisions'][-1]['index'], 1)
def test_anon_revisions(self): sessions.sessions[request._get_current_object()] = Session() utils.update_analytics(self.project, self.record, 0) utils.update_analytics(self.project, self.record, 0) utils.update_analytics(self.project, self.record, 2) expected = { 'index': 2, 'user': None, 'date': self.versions[0].created.isoformat(), 'downloads': 0, 'md5': None, 'sha256': None, } observed = utils.serialize_revision(self.project, self.record, self.versions[0], 1, anon=True) assert_equal(expected, observed)
def osfstorage_get_revisions(file_node, node_addon, payload, **kwargs): from osf.models import PageCounter, FileVersion # TODO Fix me onces django works is_anon = has_anonymous_link(node_addon.owner, Auth(private_key=request.args.get('view_only'))) counter_prefix = 'download:{}:{}:'.format(file_node.node._id, file_node._id) version_count = file_node.versions.count() # Don't worry. The only % at the end of the LIKE clause, the index is still used counts = dict(PageCounter.objects.filter(_id__startswith=counter_prefix).values_list('_id', 'total')) qs = FileVersion.includable_objects.filter(basefilenode__id=file_node.id).include('creator__guids').order_by('-created') for i, version in enumerate(qs): version._download_count = counts.get('{}{}'.format(counter_prefix, version_count - i - 1), 0) # Return revisions in descending order return { 'revisions': [ utils.serialize_revision(node_addon.owner, file_node, version, index=version_count - idx - 1, anon=is_anon) for idx, version in enumerate(qs) ] }
def test_anon_revisions(self): sessions.sessions[request._get_current_object()] = Session() utils.update_analytics(self.project, self.record._id, 0) utils.update_analytics(self.project, self.record._id, 0) utils.update_analytics(self.project, self.record._id, 2) expected = { 'index': 2, 'user': None, 'date': self.versions[0].created.isoformat(), 'downloads': 0, 'md5': None, 'sha256': None, } observed = utils.serialize_revision( self.project, self.record, self.versions[0], 1, anon=True ) assert_equal(expected, observed)