def getComponentObjectFromPath(uri, resource_name = None): """ Return the specified component class, based on a given URI. @param uri: The official URI for this code. @type uri: string @param resource_name: Name of the resource for which the component was instantiated. @type resource_name: string @return Class of the specified component or None if no matching component class was found. @rtype A class derived from BaseComponent """ path_elems = uri[len(settings.PREFIX_CODE):].split("/")[1:] component_name = path_elems[0] # This should be the name of the code element # Instantiate the component component = make_component(component_name) if component: # If this component needs to be instantiated for a resource # then we are also applying the resource information to it. component.setResourceName(resource_name) return component
def __process_get(self, is_code, prefix): """ Respond to GET requests. When someone sends GET requests to the code then they want to browse the available code options. Same with spezialiced code. @param is_code: Indicates whether this is a request for un-specialized code. @type is_code: boolean @param prefix: The prefix for this type of request. @type prefix: string @return: HTTP return structure. @rtype: Result """ # It's the responsibility of the browser class to provide breadcrumbs if is_code: dirname = "Code" else: dirname = "Specialized" self.breadcrumbs = [ ("Home", "/"), (dirname, prefix) ] if self.request.getRequestPath() == prefix: # # Just show the home page of the code browser (list of all installed (specialized) code) # if is_code: # Data to be taken from the code data = dict() for name in get_component_names(): if name[0] not in EXCLUDE_PREFIXES: # component_info is a tuple, which contains the component class and its manifest info component = make_component(name) data[name] = { "uri" : Url(component.getCodeUri()), "desc" : component.getDesc() } """ data = dict([ (name, { "uri" : Url(component_class().getCodeUri()), "desc" : component_class().getDesc() } ) \ for (name, (component_class, component_config)) in get_code_map().items() \ if name[0] not in EXCLUDE_PREFIXES ]) """ else: # We are looking for partial resources data = listResources(partials=True) else: # Path elements (the known code prefix is stripped off) path_elems = self.request.getRequestPath()[len(prefix):].split("/")[1:] if is_code: # We are referencing actual components here component_name = path_elems[0] # This should be the name of the code element component_path = self.request.getRequestPath() else: # We are looking at a partial resource. Therefore, we need to load # that resource and then get the code URI from it. specialized_code_name = path_elems[0] specialized_code = retrieveResourceFromStorage(getResourceUri(specialized_code_name, is_partial=True), only_public=False, is_partial=True) if not specialized_code: return Result.notFound("Cannot find specialized component resource '%s'" % specialized_code_name) component_path = specialized_code["private"]["code_uri"] # Instantiate the component component = getComponentObjectFromPath(component_path) if not component: return Result.notFound("Unknown component") component_home_uri = component.getCodeUri() if is_code: self.breadcrumbs.append((component_name, component_home_uri)) else: self.breadcrumbs.append((specialized_code_name, specialized_code["public"]["uri"])) if len(path_elems) == 1: # # No sub-detail specified: We want meta info about a code segment (component) # data = component.getMetaData() # # If this is based on a specialized component then we need to overwrite some # of the component's meta data with the info from the specialized component # definition. # if not is_code: data = specializedOverwrite(data, specialized_code) data = languageStructToPython(component, data) if is_code: qs = "" cname = component_name else: qs = "?specialized=y" cname = specialized_code_name self.context_header.append(("[ Create resource ]", settings.PREFIX_RESOURCE+"/_createResourceForm/form/"+cname+qs, "")) #, "target=_blank")) else: # # Some sub-detail of the requested component was requested # sub_name = path_elems[1] if sub_name == "doc": data = component.getDocs() self.breadcrumbs.append(("Doc", component_home_uri + "/doc")) else: return Result.notFound("Unknown code detail") return Result.ok(data)