def _protcur(self, protocol_uri, filter=lambda p: True): self.lazy_setup() protocol_uri = get_right_id(protocol_uri) gen = (p for p in protc if p.uri.startswith(protocol_uri) and filter(p)) try: p = next(gen) yield p yield from gen except StopIteration: log.error(f'could not find annotations for {protocol_uri}') return if p.document.otherVersionUri: # FIXME also maybe check /abstract? other_uri = p.document.otherVersionUri yield from (p for p in protc if p.uri.startswith(other_uri) and filter(p))
def _get_protocol_json(self, uri): #juri = uri + '.json' logd.info(uri) pi = get_right_id(uri) if 'protocols.io' in pi: pioid = pi.slug # FIXME normalize before we ever get here ... log.info(pioid) else: msg = f'protocol uri is not from protocols.io {pi} {self.id}' logd.error(msg) self.addError(msg) return #uri_path = uri.rsplit('/', 1)[-1] apiuri = 'https://www.protocols.io/api/v3/protocols/' + pioid #'https://www.protocols.io/api/v3/groups/sparc/protocols' #apiuri = 'https://www.protocols.io/api/v3/filemanager/folders?top' #print(apiuri, header) log.debug('going to network for protocols') resp = requests.get(apiuri, headers=self._pio_header) #log.info(str(resp.request.headers)) if resp.ok: try: j = resp.json() # the api is reasonably consistent except BaseException as e: log.exception(e) breakpoint() raise e return j else: try: j = resp.json() sc = j['status_code'] em = j['error_message'] msg = f'protocol issue {uri} {resp.status_code} {sc} {em} {self.id!r}' logd.error(msg) self.addError(msg) # can't return here because of the cache except BaseException as e: log.exception(e) logd.error(f'protocol no access {uri} {self.id!r}')