def _get_xml(url, payload, **kwargs): tries = 0 while tries < 5: try: out = utils.requests_pem_get(url, params=payload) out.raise_for_status() tt = xml_utils.string_to_node(out.content) return tt except: tries += 1 out = utils.requests_pem_get(url, params=payload) out.raise_for_status() tt = xml_utils.string_to_node(out.content) return tt
def get_doi_citation_datacite(doi): """ Parameters ---------- doi : str DOI in the format "https://doi.org/10.1109/5.771073" or "doi:10.5066/F70R9MFW" or "http://dx.doi.org/10.1109/5.771073" Returns ------- dict with information pulled from datacite site """ endpoint = 'https://api.datacite.org/works' response = utils.requests_pem_get(endpoint + '/' + doi) cite_data = json.loads(response.text)['data']['attributes'] if 'container-title' not in cite_data: cite_data['container-title'] = cite_data.pop('container_title') if 'data-center-id' not in cite_data: cite_data['data-center-id'] = cite_data.pop('data_center_id') cite_data['publisher'] = cite_data['container-title'] cite_data['URL'] = 'https://doi.org/{}'.format(cite_data['doi']) if 'data-center-id' in cite_data and \ 'usgs' in cite_data['data-center-id']: cite_data['container-title'] = None cite_data['pubplace'] = 'https://www.sciencebase.gov' cite_data['geoform'] = 'dataset' else: cite_data['geoform'] = 'publication' cite_data['pubplace'] = 'n/a' return cite_data
def load_iso(self): self.ui.label_search_term.hide() self.ui.search_term.hide() self.ui.button_search.hide() self.ui.label_search_results.text = "ISO 19115 Topic Categories" self.populate_thesauri_lookup() iso_url = "https://www2.usgs.gov/science/term.php?thcode=15&text=ISO 19115 Topic Category" results = utils.requests_pem_get(iso_url).json() thesaurus_name = "ISO 19115 Topic Category" branch = QStandardItem(thesaurus_name) branch.setFont(QFont('Arial', 11)) for item in results['nt']: childnode = QStandardItem(item['name']) childnode.setFont(QFont('Arial', 9)) branch.appendRow([childnode]) model = QStandardItemModel(0, 0) rootNode = model.invisibleRootItem() rootNode.appendRow(branch) self.ui.treeview_results.setModel(model) self.ui.treeview_results.expandAll()
def get_doi_citation_datacite(doi): """ Parameters ---------- doi : str DOI in the format "https://doi.org/10.1109/5.771073" or "doi:10.5066/F70R9MFW" or "http://dx.doi.org/10.1109/5.771073" Returns ------- dict with information pulled from datacite site """ endpoint = "https://api.datacite.org/works" response = utils.requests_pem_get(endpoint + "/" + doi) cite_data = json.loads(response.text)["data"]["attributes"] if "container-title" not in cite_data: cite_data["container-title"] = cite_data.pop("container_title") if "data-center-id" not in cite_data: cite_data["data-center-id"] = cite_data.pop("data_center_id") cite_data["publisher"] = cite_data["container-title"] cite_data["URL"] = "https://doi.org/{}".format(cite_data["doi"]) if "data-center-id" in cite_data and "usgs" in cite_data["data-center-id"]: cite_data["container-title"] = None cite_data["pubplace"] = "https://www.sciencebase.gov" cite_data["geoform"] = "dataset" else: cite_data["geoform"] = "publication" cite_data["pubplace"] = "n/a" return cite_data
def get_result(self, url): try: return utils.requests_pem_get(url).json() except requests.exceptions.ConnectionError: msg = "We're having trouble connecting to the controlled vocabularies service" msg += "\n Check that you have an internet connect, or try again latter" QMessageBox.warning(self, "Connection error", msg) self.close_form()
def __init__(self, contents): """ contents must be one of the following 1) File path/name on the local filesystem that exists and can be read 2) String containing an XML Record. 3) URL containing an XML record Parameters ---------- contents : str, lxml node url, file path, string xml snippet """ try: contents_path = Path(contents) try: exists = contents_path.exists() except OSError: exists = False if exists: self.fname = str(contents_path.absolute()) # they passde us a file path self.record = lxml.parse(self.fname) self._root = self.record.getroot() else: from pymdwizard.core import utils try: if utils.url_validator(contents): contents = utils.requests_pem_get(contents).text except: pass self.fname = None if contents[:3] == "": # string contents start with the BOM strip this contents = contents[3:] if type(contents) == str: # we need bytes not string contents = contents.encode("utf-8") self._root = string_to_node(contents) self.record = etree.ElementTree(self._root) except etree.XMLSyntaxError: self.fname = None self.record = lxml.fromstring(contents) self._root = self.record.getroot() self.tag = self._root.tag self.__dict__[self._root.tag] = XMLNode(self.record.getroot()) self._contents = self.__dict__[self._root.tag]
def __init__(self, contents): try: if os.path.exists(contents[:255]): self.fname = contents # they passed us a file path self.record = lxml.parse(self.fname) self._root = self.record.getroot() else: from pymdwizard.core import utils if utils.url_validator(contents): print('is url') contents = utils.requests_pem_get(contents).text self.fname = None self._root = string_to_node(contents) self.record = etree.ElementTree(self._root) except etree.XMLSyntaxError: self.fname = None self.record = lxml.fromstring(contents) self._root = self.record.getroot() self.tag = self._root.tag self.__dict__[self._root.tag] = XMLNode(self.record.getroot()) self._contents = self.__dict__[self._root.tag]
def show_details(self, index): clicked_item = self.ui.treeview_results.model().itemFromIndex(index) parent = clicked_item.parent() if clicked_item.hasChildren(): thcode = self.thesauri_lookup_r[clicked_item.text()] thname = clicked_item.text() THESAURUS_DETAILS_URL = "https://www2.usgs.gov/science/thesaurus.php?format=json&thcode={}" thesaurus_details_url = THESAURUS_DETAILS_URL.format(thcode) details = utils.requests_pem_get(thesaurus_details_url).json() details_msg = '' details_msg += '<b><font size="5" face="arial">{}</font></b><br>'.format( thname) uri = details['vocabulary']['uri'] if uri: details_msg += '<a href="{}"><u><i><font size="4" face="arial" style="color:#386EC4">{}</font></i></u></a><br><br>'.format( uri, uri) details_msg += details['vocabulary']['scope'] else: thcode = self.thesauri_lookup_r[parent.text()] item_text = clicked_item.text().split(' (use: ')[0] details_url = "https://www2.usgs.gov/science/term.php?thcode={}&text={}".format( thcode, quote(item_text)) try: details = utils.requests_pem_get(details_url).json() if type(details) == dict: details = [details] details_msg = '' search_term = self.ui.search_term.text() prefered_shown = False for detail in details: term = detail["term"] uf = detail["uf"] bt = detail["bt"] nt = detail["nt"] rt = detail["rt"] if term['name'].lower() != search_term and \ not prefered_shown: term_count = 0 prefered_shown = True for alt_term in uf: if alt_term['name'].lower() in search_term.lower(): term_count += 1 if term_count == 1: details_msg += "The query matches the following non-preferred terms: " else: details_msg += ', ' details_msg += "<u>{}</u>".format( alt_term['name']) if term_count > 0: details_msg += '<br><br>' details_msg += '<b><font size="5" face="arial">{}</font></b><br>'.format( term['name']) details_msg += '<font size="4" face="arial">{}<br><br>'.format( term['scope']) if bt: details_msg += "Broader terms: " details_msg += " > ".join([ '<a href="{0}"><u>{0}</u></a>'.format(item['name']) for item in bt[::-1] ]) details_msg += '<br>' if nt: details_msg += " Narrower terms: " details_msg += ", ".join([ '<a href="{0}"><u>{0}</u></a>'.format(item['name']) for item in nt ]) details_msg += '<br>' if rt: details_msg += " Related terms: " details_msg += ", ".join([ '<a href="{0}"><u>{0}</u></a>'.format(item['name']) for item in rt ]) details_msg += '<br>' except: details_msg = 'error getting details' self.ui.textBrowser.setText(details_msg)
def _get_xml(url, payload, **kwargs): out = utils.requests_pem_get(url, params=payload) out.raise_for_status() tt = xml_utils.string_to_node(out.content) return tt