Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
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
Exemplo n.º 5
0
 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()
Exemplo n.º 6
0
    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]
Exemplo n.º 7
0
    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]
Exemplo n.º 8
0
    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)
Exemplo n.º 9
0
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