Ejemplo n.º 1
0
 def testGetElementsByCentroids(self, admin):
     publicFolder = utilities.namedFolder(admin, 'Public')
     item = Item().createItem('sample', admin, publicFolder)
     largeSample = makeLargeSampleAnnotation()
     # Use a copy of largeSample so we don't just have a reference to it
     annot = Annotation().createAnnotation(item, admin, largeSample.copy())
     # Clear existing element data, the get elements
     annot.pop('elements', None)
     annot.pop('_elementQuery', None)
     Annotationelement().getElements(annot, {'centroids': True})
     assert '_elementQuery' in annot
     assert len(annot['annotation']['elements']) == len(largeSample['elements'])  # 7707
     assert annot['_elementQuery']['centroids'] is True
     assert 'props' in annot['_elementQuery']
     elements = annot['annotation']['elements']
     assert isinstance(elements[0], list)
Ejemplo n.º 2
0
    def testVersionList(self, db, user, admin):
        privateFolder = utilities.namedFolder(admin, 'Private')
        # Test without history
        Setting().set(constants.PluginSettings.LARGE_IMAGE_ANNOTATION_HISTORY, False)
        item = Item().createItem('sample', admin, privateFolder)
        annot = Annotation().createAnnotation(item, admin, copy.deepcopy(sampleAnnotation))
        annot['annotation']['name'] = 'First Change'
        annot = Annotation().save(annot)
        annot['annotation']['name'] = 'Second Change'
        annot = Annotation().save(annot)
        assert len(list(Annotation().versionList(annot['_id'], user=admin))) == 1
        assert len(list(Annotation().versionList(str(annot['_id']), user=admin))) == 1
        assert len(list(Annotation().versionList(str(annot['_id']), force=True))) == 1
        assert len(list(Annotation().versionList(annot['_id'], user=user))) == 0

        # Test with history
        Setting().set(constants.PluginSettings.LARGE_IMAGE_ANNOTATION_HISTORY, True)
        annot = Annotation().createAnnotation(item, admin, copy.deepcopy(sampleAnnotation))
        annot['annotation']['name'] = 'First Change'
        annot = Annotation().save(annot)
        # simulate a concurrent save
        dup = Annotation().findOne({'_id': annot['_id']})
        dup['_annotationId'] = dup.pop('_id')
        dup['_active'] = False
        Annotation().collection.insert_one(dup)
        # Save again
        annot['annotation']['name'] = 'Second Change'
        annot = Annotation().save(annot)
        assert len(list(Annotation().versionList(annot['_id'], user=admin))) == 3
        assert len(list(Annotation().versionList(annot['_id'], user=user))) == 0
        assert len(list(Annotation().versionList(annot['_id'], user=admin, offset=1))) == 2
        assert len(list(Annotation().versionList(annot['_id'], user=admin, offset=1, limit=1))) == 1
Ejemplo n.º 3
0
    def testAnnotationHistoryEndpoints(self, server, user, admin):
        privateFolder = utilities.namedFolder(admin, 'Private')
        Setting().set(constants.PluginSettings.LARGE_IMAGE_ANNOTATION_HISTORY,
                      True)
        item = Item().createItem('sample', admin, privateFolder)
        # Create an annotation with some history
        annot = Annotation().createAnnotation(item, admin,
                                              copy.deepcopy(sampleAnnotation))
        annot['annotation']['name'] = 'First Change'
        annot['annotation']['elements'].extend([
            {
                'type': 'point',
                'center': [20.0, 25.0, 0]
            },
            {
                'type': 'point',
                'center': [10.0, 24.0, 0]
            },
            {
                'type': 'point',
                'center': [25.5, 23.0, 0]
            },
        ])
        annot = Annotation().save(annot)
        # simulate a concurrent save
        dup = Annotation().findOne({'_id': annot['_id']})
        dup['_annotationId'] = dup.pop('_id')
        dup['_active'] = False
        Annotation().collection.insert_one(dup)
        # Save again
        annot['annotation']['name'] = 'Second Change'
        annot['annotation']['elements'].pop(2)
        annot = Annotation().save(annot)

        # Test the list of versions
        resp = server.request('/annotation/%s/history' % annot['_id'],
                              user=user)
        assert utilities.respStatus(resp) == 200
        assert resp.json == []
        resp = server.request('/annotation/%s/history' % annot['_id'],
                              user=admin)
        assert utilities.respStatus(resp) == 200
        assert len(resp.json) == 3
        versions = resp.json

        # Test getting a specific version
        resp = server.request('/annotation/%s/history/%s' %
                              (annot['_id'], versions[1]['_version']),
                              user=user)
        assert utilities.respStatus(resp) == 403
        resp = server.request('/annotation/%s/history/%s' %
                              (annot['_id'], versions[1]['_version']),
                              user=admin)
        assert utilities.respStatus(resp) == 200
        assert resp.json['_annotationId'] == str(annot['_id'])
        assert len(resp.json['annotation']['elements']) == 4
        resp = server.request('/annotation/%s/history/%s' %
                              (annot['_id'], versions[0]['_version'] + 1),
                              user=admin)
        assert utilities.respStatus(resp) == 400

        # Test revert
        resp = server.request('/annotation/%s/history/revert' % (annot['_id']),
                              method='PUT',
                              user=user)
        assert utilities.respStatus(resp) == 403
        resp = server.request('/annotation/%s/history/revert' % (annot['_id']),
                              method='PUT',
                              user=admin,
                              params={'version': versions[0]['_version'] + 1})
        assert utilities.respStatus(resp) == 400
        resp = server.request('/annotation/%s/history/revert' % (annot['_id']),
                              method='PUT',
                              user=admin,
                              params={'version': versions[1]['_version']})
        assert utilities.respStatus(resp) == 200
        loaded = Annotation().load(annot['_id'], user=admin)
        assert len(loaded['annotation']['elements']) == 4

        # Test old
        resp = server.request('/annotation/old', method='GET', user=user)
        assert utilities.respStatus(resp) == 403
        resp = server.request('/annotation/old', method='GET', user=admin)
        assert utilities.respStatus(resp) == 200
        assert resp.json['abandonedVersions'] == 0
        resp = server.request('/annotation/old', method='DELETE', user=admin)
        assert utilities.respStatus(resp) == 200
        assert resp.json['abandonedVersions'] == 0
        resp = server.request('/annotation/old',
                              method='DELETE',
                              user=admin,
                              params={'age': 6})
        assert utilities.respStatus(resp) == 400
        assert 'minAgeInDays' in resp.json['message']
Ejemplo n.º 4
0
 def testGetElements(self, admin):
     publicFolder = utilities.namedFolder(admin, 'Public')
     item = Item().createItem('sample', admin, publicFolder)
     largeSample = makeLargeSampleAnnotation()
     # Use a copy of largeSample so we don't just have a referecne to it
     annot = Annotation().createAnnotation(item, admin, largeSample.copy())
     # Clear existing element data, the get elements
     annot.pop('elements', None)
     annot.pop('_elementQuery', None)
     Annotationelement().getElements(annot)
     assert '_elementQuery' in annot
     assert len(annot['annotation']['elements']) == len(
         largeSample['elements'])  # 7707
     assert 'centroids' not in annot['_elementQuery']
     annot.pop('elements', None)
     annot.pop('_elementQuery', None)
     Annotationelement().getElements(annot, {'limit': 100})
     assert '_elementQuery' in annot
     assert annot['_elementQuery']['count'] == len(largeSample['elements'])
     assert annot['_elementQuery']['returned'] == 100
     assert len(annot['annotation']['elements']) == 100
     annot.pop('elements', None)
     annot.pop('_elementQuery', None)
     Annotationelement().getElements(annot, {
         'left': 3000,
         'right': 4000,
         'top': 4500,
         'bottom': 6500
     })
     assert len(annot['annotation']['elements']) == 157
     annot.pop('elements', None)
     annot.pop('_elementQuery', None)
     Annotationelement().getElements(
         annot, {
             'left': 3000,
             'right': 4000,
             'top': 4500,
             'bottom': 6500,
             'minimumSize': 16
         })
     assert len(annot['annotation']['elements']) == 39
     annot.pop('elements', None)
     annot.pop('_elementQuery', None)
     Annotationelement().getElements(annot, {'maxDetails': 300})
     assert len(annot['annotation']['elements']) == 75
     annot.pop('elements', None)
     annot.pop('_elementQuery', None)
     Annotationelement().getElements(annot, {
         'maxDetails': 300,
         'sort': 'size',
         'sortdir': -1
     })
     elements = annot['annotation']['elements']
     assert (elements[0]['width'] * elements[0]['height'] >
             elements[-1]['width'] * elements[-1]['height'])
     annot.pop('elements', None)
     annot.pop('_elementQuery', None)
     Annotationelement().getElements(annot, {
         'maxDetails': 300,
         'sort': 'size',
         'sortdir': 1
     })
     elements = annot['annotation']['elements']
     assert (elements[0]['width'] * elements[0]['height'] <
             elements[-1]['width'] * elements[-1]['height'])