def load(info): girderRoot = info['serverRoot'] histomicsRoot = WebrootHistomicsTK(_template) histomicsRoot.updateHtmlVars(girderRoot.vars) ImageBrowseResource(info['apiRoot']) # The interface is always available under histomicstk and also available # under the specified path. info['serverRoot'].histomicstk = histomicsRoot webrootPath = Setting().get(PluginSettings.HISTOMICSTK_WEBROOT_PATH) setattr(info['serverRoot'], webrootPath, histomicsRoot) info['serverRoot'].girder = girderRoot pluginName = 'HistomicsTK' # create root resource for all REST end points of HistomicsTK resource = HistomicsTKResource(pluginName) setattr(info['apiRoot'], resource.resourceName, resource) # load docker images from cache dockerImageModel = ModelImporter.model('docker_image_model', 'slicer_cli_web') dockerCache = dockerImageModel.loadAllImages() # generate REST end points for slicer CLIs of each docker image genRESTEndPointsForSlicerCLIsInDockerCache(resource, dockerCache) # auto-ingest annotations into database when a .anot file is uploaded events.bind('data.process', pluginName, process_annotations) events.bind('jobs.job.update.after', resource.resourceName, resource.AddRestEndpoints) events.bind('model.job.save', pluginName, _saveJob) def updateWebroot(event): """ If the webroot path setting is changed, bind the new path to the histomicstk webroot resource. """ if event.info.get('key') == PluginSettings.HISTOMICSTK_WEBROOT_PATH: setattr(info['serverRoot'], event.info['value'], histomicsRoot) events.bind('model.setting.save.after', 'histomicstk', updateWebroot) curConfig = config.getConfig().get('histomicstk', {}) 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)
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)