Пример #1
0
    def load(self, info):
        getPlugin('large_image').load(info)

        ModelImporter.registerModel('annotation', Annotation, 'large_image')
        info['apiRoot'].annotation = AnnotationResource()
        # Ask for some models to make sure their singletons are initialized.
        Annotation()

        # add copyAnnotations option to POST resource/copy, POST item/{id}/copy
        # and POST folder/{id}/copy
        info['apiRoot'].resource.copyResources.description.param(
            'copyAnnotations',
            'Copy annotations when copying resources (default true)',
            required=False,
            dataType='boolean')
        info['apiRoot'].item.copyItem.description.param(
            'copyAnnotations',
            'Copy annotations when copying item (default true)',
            required=False,
            dataType='boolean')
        info['apiRoot'].folder.copyFolder.description.param(
            'copyAnnotations',
            'Copy annotations when copying folder (default true)',
            required=False,
            dataType='boolean')
Пример #2
0
    def load(self, info):
        ModelImporter.registerModel('project', ProjectModel, 'hpccloud')
        ModelImporter.registerModel('simulation', SimulationModel, 'hpccloud')

        info['apiRoot'].projects = Projects()
        info['apiRoot'].simulations = Simulations()
        file.load(info['apiRoot'])
Пример #3
0
    def load(self, info):
        getPlugin('worker').load(info)

        unbindGirderEventsByHandlerName('large_image')

        ModelImporter.registerModel('image_item', ImageItem, 'large_image')
        large_image.config.setConfig('logger', girder.logger)
        large_image.config.setConfig('logprint', girder.logprint)
        # Load girder's large_image config
        curConfig = config.getConfig().get('large_image')
        for key, value in six.iteritems(curConfig or {}):
            large_image.config.setConfig(key, value)

        girder_tilesource.loadGirderTileSources()
        TilesItemResource(info['apiRoot'])
        info['apiRoot'].large_image = LargeImageResource()

        Item().exposeFields(level=AccessType.READ, fields='largeImage')

        events.bind('data.process', 'large_image', _postUpload)
        events.bind('jobs.job.update.after', 'large_image', _updateJob)
        events.bind('model.job.save', 'large_image', _updateJob)
        events.bind('model.job.remove', 'large_image', _updateJob)
        events.bind('model.folder.save.after', 'large_image', invalidateLoadModelCache)
        events.bind('model.group.save.after', 'large_image', invalidateLoadModelCache)
        events.bind('model.user.save.after', 'large_image', invalidateLoadModelCache)
        events.bind('model.collection.save.after', 'large_image', invalidateLoadModelCache)
        events.bind('model.item.remove', 'large_image', invalidateLoadModelCache)
        events.bind('model.item.copy.prepare', 'large_image', prepareCopyItem)
        events.bind('model.item.copy.after', 'large_image', handleCopyItem)
        events.bind('model.item.save.after', 'large_image', invalidateLoadModelCache)
        events.bind('model.file.save.after', 'large_image', checkForLargeImageFiles)
        events.bind('model.item.remove', 'large_image.removeThumbnails', removeThumbnails)
        events.bind('server_fuse.unmount', 'large_image', large_image.cache_util.cachesClear)
        events.bind('model.file.remove', 'large_image', handleRemoveFile)
Пример #4
0
 def load(self, info):
     Assetstore().exposeFields(AccessType.READ, AssetstoreRuleMarker)
     ModelImporter.registerModel(
         GCSNotificationRecord().name,
         GCSNotificationRecord,
         plugin='dive_server',
     )
     info["apiRoot"].bucket_notifications = BucketNotification()
Пример #5
0
    def load(self, info):
        ModelImporter.registerModel('histogram', Histogram, 'histogram')
        info['apiRoot'].histogram = HistogramResource()

        events.bind('model.item.remove', 'Histogram', _onRemoveItem)
        events.bind('model.file.remove', 'Histogram', _onRemoveFile)
        events.bind('data.process', 'Histogram', _onUpload)
        events.bind('jobs.job.update.after', 'Histogram', _updateJob)
        events.bind('model.job.save', 'Histogram', _updateJob)
        events.bind('model.job.remove', 'Histogram', _updateJob)
Пример #6
0
    def load(self, info):
        ModelImporter.registerModel('annotationItem', AnnotationItem, plugin='dive_server')
        ModelImporter.registerModel('revisionLogItem', RevisionLogItem, plugin='dive_server')

        info["apiRoot"].dive_annotation = AnnotationResource("dive_annotation")
        info["apiRoot"].dive_configuration = ConfigurationResource("dive_configuration")
        info["apiRoot"].dive_dataset = DatasetResource("dive_dataset")
        info["apiRoot"].dive_rpc = RpcResource("dive_rpc")

        # Setup route additions for exsting resources
        info["apiRoot"].user.route("PUT", (":id", "use_private_queue"), use_private_queue)
        User().exposeFields(AccessType.READ, constants.UserPrivateQueueEnabledMarker)

        # Expose Job dataset assocation
        Job().exposeFields(AccessType.READ, constants.JOBCONST_DATASET_ID)

        DIVE_MAIL_TEMPLATES = Path(os.path.realpath(__file__)).parent / 'mail_templates'
        mail_utils.addTemplateDirectory(str(DIVE_MAIL_TEMPLATES))

        # Relocate Girder
        info["serverRoot"], info["serverRoot"].girder = (
            ClientWebroot(),
            info["serverRoot"],
        )
        info["serverRoot"].api = info["serverRoot"].girder.api

        events.bind(
            "filesystem_assetstore_imported",
            "process_fs_import",
            process_fs_import,
        )
        events.bind(
            "s3_assetstore_imported",
            "process_s3_import",
            process_s3_import,
        )
        events.bind(
            'model.user.save.created',
            'send_new_user_email',
            send_new_user_email,
        )

        # Create dependency on worker
        plugin.getPlugin('worker').load(info)
        Setting().set(
            'worker.api_url',
            os.environ.get('WORKER_API_URL', 'http://girder:8080/api/v1'),
        )

        broker_url = os.environ.get('CELERY_BROKER_URL', None)
        if broker_url is None:
            raise RuntimeError('CELERY_BROKER_URL must be set')
        Setting().set('worker.broker', broker_url)
Пример #7
0
    def load(self, info):
        ModelImporter.registerModel('aws', AwsModel, 'cumulus')
        ModelImporter.registerModel('cluster', ClusterModel, 'cumulus')
        ModelImporter.registerModel('job', JobModel, 'cumulus')
        ModelImporter.registerModel('script', ScriptModel, 'cumulus')
        ModelImporter.registerModel('volume', VolumeModel, 'cumulus')

        info['apiRoot'].clusters = Cluster()
        info['apiRoot'].jobs = Job()
        info['apiRoot'].scripts = Script()
        info['apiRoot'].volumes = Volume()
        # Augment user resource with aws profiles
        aws.load(info['apiRoot'])
Пример #8
0
    def load(self, info):
        # Register models for ModelImporter
        ModelImporter.registerModel('calculation', CalculationModel,
                                    'molecules')
        ModelImporter.registerModel('cubecache', CubecacheModel, 'molecules')
        ModelImporter.registerModel('experimental', ExperimentalModel,
                                    'molecules')
        ModelImporter.registerModel('geometry', GeometryModel, 'molecules')
        ModelImporter.registerModel('molecule', MoleculeModel, 'molecules')

        info['apiRoot'].molecules = Molecule()
        info['apiRoot'].calculations = Calculation()
        info['apiRoot'].experiments = Experiment()
        events.bind('model.setting.validate', 'molecules', validateSettings)
Пример #9
0
    def load(self, info):
        ModelImporter.registerModel('aws', AwsModel, 'cumulus')
        ModelImporter.registerModel('cluster', ClusterModel, 'cumulus')
        ModelImporter.registerModel('job', JobModel, 'cumulus')
        ModelImporter.registerModel('script', ScriptModel, 'cumulus')
        ModelImporter.registerModel('volume', VolumeModel, 'cumulus')

        info['apiRoot'].clusters = Cluster()
        info['apiRoot'].jobs = Job()
        info['apiRoot'].scripts = Script()
        info['apiRoot'].volumes = Volume()

        # Add a user route to lookup assetstores by name.
        info['apiRoot'].assetstore.route('GET', ('lookup', ), lookupAssetstore)

        # Augment user resource with aws profiles
        aws.load(info['apiRoot'])
Пример #10
0
    def setUp(self):
        base.TestCase.setUp(self)

        users = ({
            'email': '*****@*****.**',
            'login': '******',
            'firstName': 'First',
            'lastName': 'Last',
            'password': '******'
        }, {
            'email': '*****@*****.**',
            'login': '******',
            'firstName': 'First',
            'lastName': 'Last',
            'password': '******'
        })
        self.admin, self.user = [
            self.model('user').createUser(**user) for user in users]

        ModelImporter.registerModel('fake_ac', FakeAcModel())
        ModelImporter.registerModel('fake', FakeModel())
Пример #11
0
    def setUp(self):
        base.TestCase.setUp(self)

        users = ({
            'email': '*****@*****.**',
            'login': '******',
            'firstName': 'First',
            'lastName': 'Last',
            'password': '******'
        }, {
            'email': '*****@*****.**',
            'login': '******',
            'firstName': 'First',
            'lastName': 'Last',
            'password': '******'
        })
        self.admin, self.user = [
            self.model('user').createUser(**user) for user in users
        ]

        ModelImporter.registerModel('fake_ac', FakeAcModel())
        ModelImporter.registerModel('fake', FakeModel())
Пример #12
0
    def load(self, info):
        getPlugin('gravatar').load(info)
        getPlugin('jobs').load(info)
        getPlugin('worker').load(info)
        getPlugin('thumbnails').load(info)

        mail_utils.addTemplateDirectory(os.path.join(_HERE, 'mail_templates'))
        ModelImporter.registerModel('challenge', Challenge, 'covalic')
        ModelImporter.registerModel('phase', Phase, 'covalic')
        ModelImporter.registerModel('submission', Submission, 'covalic')

        resource.allowedSearchTypes.add('challenge.covalic')

        info['apiRoot'].challenge = ChallengeResource()
        info['apiRoot'].challenge_phase = PhaseResource()
        info['apiRoot'].covalic_submission = SubmissionResource()

        webroot = WebrootBase(os.path.join(_HERE, 'webroot.mako'))
        webroot.updateHtmlVars({
            'pluginCss': [
                plugin for plugin in loadedPlugins()
                if os.path.exists(os.path.join(
                    STATIC_ROOT_DIR, 'built', 'plugins', plugin, 'plugin.min.css'))
            ],
            'pluginJs': [
                plugin for plugin in loadedPlugins()
                if os.path.exists(os.path.join(
                    STATIC_ROOT_DIR, 'built', 'plugins', plugin, 'plugin.min.js'))
            ]
        })
        registerPluginWebroot(webroot, 'covalic')

        events.bind('jobs.job.update', 'covalic', onJobUpdate)
        events.bind('model.setting.validate', 'covalic', validateSettings)
        events.bind('model.challenge_challenge.save.after', 'covalic',
                    challengeSaved)
        events.bind('model.challenge_phase.save.after', 'covalic',
                    onPhaseSave)
        events.bind('model.user.save.after', 'covalic', onUserSave)
def fakeModel(db):
    ModelImporter.registerModel('fake', Fake(), plugin='fake_plugin')

    yield Fake

    ModelImporter.unregisterModel('fake', plugin='fake_plugin')
def fakeModel(db):
    ModelImporter.registerModel('fake', Fake(), plugin='fake_plugin')

    yield Fake

    ModelImporter.unregisterModel('fake', plugin='fake_plugin')
Пример #15
0
 def load(self, info):
     ModelImporter.registerModel('labels', Labels, 'configuration')
     info['apiRoot'].configuration = Configuration()
     # events.bind('data.process', info['name'], _onUpload)
Пример #16
0
 def load(self, info):
     ModelImporter.registerModel('user_module', UserModule, plugin='ums')
     info['apiRoot'].user_module = UserModule()
Пример #17
0
    def setUp(self):
        base.TestCase.setUp(self)

        ModelImporter.registerModel('fake_ac', FakeAcModel())
        ModelImporter.registerModel('fake', FakeModel())
Пример #18
0
    def setUp(self):
        base.TestCase.setUp(self)

        ModelImporter.registerModel('fake_ac', FakeAcModel())
        ModelImporter.registerModel('fake', FakeModel())
Пример #19
0
    def load(self, info):
        sentry_sdk.init()

        getPlugin('large_image').load(info)
        oauth = getPlugin('oauth')
        if oauth:
            oauth.load(info)
        isic_discourse_sso = getPlugin('isic_discourse_sso')
        if isic_discourse_sso:
            # If this plugin is enabled, ensure it loads first, so its API docs are cleared
            isic_discourse_sso.load(info)

        # set the title of the HTML pages
        info['serverRoot'].updateHtmlVars({'title': 'ISIC Archive'})

        # register models
        ModelImporter.registerModel('annotation', Annotation, 'isic_archive')
        ModelImporter.registerModel('batch', Batch, 'isic_archive')
        ModelImporter.registerModel('dataset', Dataset, 'isic_archive')
        ModelImporter.registerModel('image', Image, 'isic_archive')
        ModelImporter.registerModel('segmentation', Segmentation,
                                    'isic_archive')
        ModelImporter.registerModel('study', Study, 'isic_archive')
        ModelImporter.registerModel('user', User, 'isic_archive')

        # add event listeners
        events.bind('rest.get.describe/:resource.after',
                    'isic.onDescribeResource', onDescribeResource)
        events.bind('model.user.save.created', 'isic.onUserCreate',
                    onUserCreate)

        # add custom model searching
        resource.allowedSearchTypes.update({
            'image.isic_archive',
            'study.isic_archive',
        })

        # register license and mail templates
        mail_utils.addTemplateDirectory(pkg_resources.resource_filename(
            'isic_archive', 'license_templates'),
                                        prepend=True)
        mail_utils.addTemplateDirectory(pkg_resources.resource_filename(
            'isic_archive', 'mail_templates'),
                                        prepend=True)

        # create all necessary users, groups, collections, etc
        provisionDatabase()

        # add api routes
        # remove docs for default Girder API, to simplify page
        clearRouteDocs()

        # Customize API docs template
        baseTemplateFilename = info['apiRoot'].templateFilename
        info['apiRoot'].updateHtmlVars(
            {'baseTemplateFilename': baseTemplateFilename})
        templatePath = pkg_resources.resource_filename('isic_archive',
                                                       'isic_api_docs.mako')
        info['apiRoot'].setTemplatePath(templatePath)

        # TODO: nest these under a "/isic" path?
        info['apiRoot'].annotation = api.AnnotationResource()
        info['apiRoot'].dataset = api.DatasetResource()
        info['apiRoot'].image = api.ImageResource()
        info['apiRoot'].redirects = api.RedirectsResource()
        info['apiRoot'].segmentation = api.SegmentationResource()
        info['apiRoot'].study = api.StudyResource()
        info['apiRoot'].task = api.TaskResource()
        api.attachUserApi(info['apiRoot'].user)
Пример #20
0
    def load(self, info):
        ModelImporter.registerModel('task', TaskModel, 'taskflow')
        ModelImporter.registerModel('taskflow', TaskflowModel, 'taskflow')

        info['apiRoot'].tasks = Tasks()
        info['apiRoot'].taskflows = TaskFlows()
Пример #21
0
    def load(self, info):
        plugin.getPlugin('jobs').load(info)
        plugin.getPlugin('slicer_cli_web').load(info)
        plugin.getPlugin('large_image_annotation').load(info)

        # Python's http cookie parser fails for all cookies when there are some
        # invalid cookies.  Work around some of that.
        patchCookieParsing()

        ModelImporter.registerModel('aperio', Aperio, 'histomicsui')
        ModelImporter.registerModel('case', Case, 'histomicsui')
        ModelImporter.registerModel('cohort', Cohort, 'histomicsui')
        ModelImporter.registerModel('image', Image, 'histomicsui')
        ModelImporter.registerModel('pathology', Pathology, 'histomicsui')
        ModelImporter.registerModel('slide', Slide, 'histomicsui')

        rest.addEndpoints(info['apiRoot'])
        info['serverRoot'].updateHtmlVars(
            {'brandName': Setting().get(SettingKey.BRAND_NAME)})
        global originalChildItems
        if not getattr(Folder, '_childItemsBeforeHUI', None):
            Folder._childItemsBeforeHUI = Folder.childItems
            Folder.childItems = childItems

        girderRoot = info['serverRoot']
        huiRoot = WebrootHistomicsUI(_template)
        huiRoot.updateHtmlVars(girderRoot.vars)

        # The interface is always available under hui and also available
        # under the specified path.
        info['serverRoot'].hui = huiRoot
        webrootPath = Setting().get(PluginSettings.HUI_WEBROOT_PATH)
        alternateWebrootPath = Setting().get(
            PluginSettings.HUI_ALTERNATE_WEBROOT_PATH)
        setattr(info['serverRoot'], webrootPath, huiRoot)
        if alternateWebrootPath:
            for alt_webroot_path in alternateWebrootPath.split(','):
                if alt_webroot_path:
                    setattr(info['serverRoot'], alt_webroot_path, huiRoot)
        info['serverRoot'].girder = girderRoot

        # auto-ingest annotations into database when a .anot file is uploaded
        events.bind('data.process', 'histomicsui', process_annotations)

        events.bind('model.job.save', 'histomicsui', _saveJob)

        def updateWebroot(event):
            """
            If the webroot path setting is changed, bind the new path to the
            hui webroot resource.  Note that a change to the alternate webroot
            requires a restart.
            """
            if event.info.get('key') == PluginSettings.HUI_WEBROOT_PATH:
                setattr(info['serverRoot'], event.info['value'], huiRoot)

        events.bind('model.setting.save.after', 'histomicsui', updateWebroot)

        curConfig = config.getConfig().get('histomicsui', {})
        if curConfig.get('restrict_downloads'):
            # Change some endpoints to require token access
            endpoints = [
                ('collection', 'GET', (':id', 'download')),
                ('file', 'GET', (':id', 'download')),
                ('file', 'GET', (':id', 'download', ':name')),
                ('folder', 'GET', (':id', 'download')),
                ('item', 'GET', (':id', 'download')),
                ('resource', 'GET', ('download', )),
                ('resource', 'POST', ('download', )),
                ('item', 'GET', (':itemId', 'tiles', 'images', ':image')),
            ]

            for resource, method, route in endpoints:
                cls = getattr(info['apiRoot'], resource)
                func = cls.getRouteHandler(method, route)
                if func.accessLevel == 'public':
                    func = access.token(func)
                    cls.removeRoute(method, route)
                    cls.route(method, route, func)
Пример #22
0
    def load(self, info):
        plugin.getPlugin('histomicsui').load(info)

        ModelImporter.registerModel('activity', Activity, 'annotation_tracker')
        info['apiRoot'].annotation_tracker = AnnotationTrackerResource()
Пример #23
0
 def load(self, info):
     ModelImporter.registerModel('job', Job(), 'jobs')
     info['apiRoot'].job = job_rest.Job()
     events.bind('jobs.schedule', 'jobs', scheduleLocal)
Пример #24
0
 def load(self, info):
     ModelImporter.registerModel('overlay', Overlay, 'overlays')
     info['apiRoot'].overlay = OverlayResource()
     # initialize model and bind events
     Overlay()
Пример #25
0
 def load(self, info):
     ModelImporter.registerModel('colormap', Colormap, 'colormaps')
     info['apiRoot'].colormap = ColormapResource()