Пример #1
0
 def test_04_detect_verify_type_error(self):
     doi = DOIPlugin()
     
     # create an invalid doi and assert it is a doi
     bjid = {"id" : "a;lkdsjfjdsajadskja", "type" : "doi"}
     with self.assertRaises(model_exceptions.LookupException):
         doi.type_detect_verify(bjid)
Пример #2
0
 def test_06_canonicalise_ignore(self):
     doi = DOIPlugin()
     
     bjid = {"id" : "whatever", "type" : "pmid"}
     record = models.MessageObject(record={"identifier" : bjid})
     doi.canonicalise(record)
     assert not bjid.has_key("canonical")
Пример #3
0
    def _resolve_doi(self, canonical_pmid):
        xml_url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=" + canonical_pmid[5:] + "&retmode=xml"
        
        # now dereference it and find out the target of the (chain of) 303(s)
        response = util.http_get(xml_url)
        if response.status_code != requests.codes.ok:
            raise plugin.PluginException(plugin.PluginException.HTTP, "unable to retrieve record from PubMed")

        try:
            xml = etree.fromstring(response.text.encode("utf-8"))
        except:
            log.error("Error parsing the XML from " + xml_url)
            return None, None
        
        xp = "/PubmedArticleSet/PubmedArticle/PubmedData/ArticleIdList/ArticleId[@IdType='doi']"
        els = xml.xpath(xp)
        
        if len(els) == 0:
            # we didn't find a DOI
            return None, None
            
        # FIXME: we assume there is only one DOI in the record - is this really true?
        doi_string = els[0].text
        doi = DOIPlugin()
        canonical_doi = doi.canonical_form(doi_string)
        loc = doi.dereference(canonical_doi)
        
        return canonical_doi, loc
Пример #4
0
 def test_04_detect_verify_type_error(self):
     doi = DOIPlugin()
     
     # create an invalid doi and assert it is a doi
     bjid = {"id" : "a;lkdsjfjdsajadskja", "type" : "doi"}
     record = models.MessageObject(record={"identifier" : bjid})
     with self.assertRaises(models.LookupException):
         doi.type_detect_verify(record)
Пример #5
0
 def test_03_detect_verify_type_ignores(self):
     doi = DOIPlugin()
     
     bjid = {"id" : "whatever", "type" : "pmid"}
     doi.type_detect_verify(bjid)
     assert bjid['type'] == "pmid"
     
     bjid = {"key" : "value"}
     doi.type_detect_verify(bjid)
     assert not bjid.has_key("type")
Пример #6
0
    def test_12_dereference_fail(self):
        oldget = requests.get
        requests.get = get_fail

        doi = DOIPlugin()
        record = {"identifier" : {"id" : "123", "type" : "doi", "canonical" : "doi:123"}}
        record = models.MessageObject(record=record)
        with self.assertRaises(plugin.PluginException):
            doi.detect_provider(record)

        requests.get = oldget
Пример #7
0
 def test_07_canonicalise_error(self):
     doi = DOIPlugin()
     
     # create an invalid doi and assert it is a doi
     bjid = {"id" : "a;lkdsjfjdsajadskja", "type" : "doi"}
     with self.assertRaises(model_exceptions.LookupException):
         doi.canonicalise(bjid)
         
     bjid = {"key" : "value"}
     with self.assertRaises(model_exceptions.LookupException):
         doi.canonicalise(bjid)
Пример #8
0
 def test_01_detect_verify_type_real_dois(self):
     doi = DOIPlugin()
     counter = 0
     for d in DOIS:
         bjid = {'id' : d}
         doi.type_detect_verify(bjid)
         assert bjid.has_key("type")
         assert bjid["type"] == "doi"
         counter += 1
     assert counter == len(DOIS)
     assert counter > 0
Пример #9
0
 def test_05_canonicalise_real(self):
     doi = DOIPlugin()
     
     counter = 0
     for d in CANONICAL.keys():
         bjid = {'id' : d, 'type' : 'doi'}
         doi.canonicalise(bjid)
         assert bjid.has_key("canonical")
         assert bjid["canonical"] == CANONICAL[d]
         counter += 1
     assert counter == len(CANONICAL.keys())
     assert counter > 0
Пример #10
0
 def test_01_detect_verify_type_real_dois(self):
     doi = DOIPlugin()
     counter = 0
     for d in DOIS:
         bjid = {'id' : d}
         record = models.MessageObject(record={"identifier" : bjid})
         doi.type_detect_verify(record)
         assert bjid.has_key("type")
         assert bjid["type"] == "doi"
         counter += 1
     assert counter == len(DOIS)
     assert counter > 0
Пример #11
0
 def test_03_detect_verify_type_ignores(self):
     doi = DOIPlugin()
     
     bjid = {"id" : "whatever", "type" : "pmid"}
     record = models.MessageObject(record={"identifier" : bjid})
     doi.type_detect_verify(record)
     assert bjid['type'] == "pmid"
     
     bjid = {"key" : "value"}
     record = models.MessageObject(record={"identifier" : bjid})
     doi.type_detect_verify(record)
     assert not bjid.has_key("type")
Пример #12
0
 def test_11_dereference_success_via_detect_provider(self):
     oldget = requests.get
     requests.get = get_success
     doi = DOIPlugin()
     
     record = {"identifier" : {"id" : "123", "type" : "doi", "canonical" : "doi:123"}}
     doi.detect_provider(record)
     assert "provider" in record
     assert "url" in record["provider"]
     assert record['provider']['url'][0] == "http://location"
     assert record["provider"]["doi"] == "doi:123"
     
     requests.get = oldget
Пример #13
0
 def test_09_dereference_no_location(self):
     oldget = requests.get
     requests.get = get_no_location
     doi = DOIPlugin()
     
     record = {"identifier" : {"id" : "123", "type" : "doi", "canonical" : "doi:123"}}
     doi.provider_dereference(record)
     assert "provider" in record
     assert "url" not in record["provider"]
     assert "doi" in record["provider"]
     assert record["provider"]["doi"] == "doi:123"
     
     requests.get = oldget
Пример #14
0
 def test_05_canonicalise_real(self):
     doi = DOIPlugin()
     
     counter = 0
     for d in CANONICAL.keys():
         bjid = {'id' : d, 'type' : 'doi'}
         record = models.MessageObject(record={"identifier" : bjid})
         doi.canonicalise(record)
         assert bjid.has_key("canonical")
         assert bjid["canonical"] == CANONICAL[d]
         counter += 1
     assert counter == len(CANONICAL.keys())
     assert counter > 0
Пример #15
0
 def test_07_canonicalise_error(self):
     doi = DOIPlugin()
     
     # create an invalid doi and assert it is a doi
     bjid = {"id" : "a;lkdsjfjdsajadskja", "type" : "doi"}
     record = models.MessageObject(record={"identifier" : bjid})
     with self.assertRaises(models.LookupException):
         doi.canonicalise(record)
         
     bjid = {"key" : "value"}
     record = models.MessageObject(record={"identifier" : bjid})
     with self.assertRaises(models.LookupException):
         doi.canonicalise(record)
Пример #16
0
 def test_09_dereference_no_location(self):
     oldget = util.http_get
     util.http_get = get_no_location
     doi = DOIPlugin()
     
     record = {"identifier" : {"id" : "123", "type" : "doi", "canonical" : "doi:123"}}
     record = models.MessageObject(record=record)
     doi.provider_dereference(record)
     record = record.record
     assert "provider" in record
     assert "url" not in record["provider"]
     assert "doi" in record["provider"]
     assert record["provider"]["doi"] == "doi:123"
     
     util.http_get = oldget
Пример #17
0
 def test_11_dereference_success_via_detect_provider(self):
     oldget = util.http_get
     util.http_get = get_success
     doi = DOIPlugin()
     
     record = {"identifier" : {"id" : "123", "type" : "doi", "canonical" : "doi:123"}}
     record = models.MessageObject(record=record)
     doi.detect_provider(record)
     record = record.record
     assert "provider" in record
     assert "url" in record["provider"]
     assert record['provider']['url'][0] == "http://location"
     assert record["provider"]["doi"] == "doi:123"
     
     util.http_get = oldget
Пример #18
0
 def test_10_dereference_success(self):
     oldget = requests.get
     requests.get = get_success
     doi = DOIPlugin()
     
     record = {"identifier" : {"id" : "123", "type" : "doi", "canonical" : "doi:123"}}
     record = models.MessageObject(record=record)
     doi.provider_dereference(record)
     record = record.record
     assert "provider" in record
     assert "url" in record["provider"]
     assert record['provider']['url'][0] == "http://location"
     assert record["provider"]["doi"] == "doi:123"
     
     requests.get = oldget
Пример #19
0
 def test_08_dereference_not_relevant(self):
     doi = DOIPlugin()
     record = {}
     
     doi.provider_dereference(record)
     assert len(record.keys()) == 0
     
     record['identifier'] = {}
     doi.provider_dereference(record)
     assert len(record['identifier'].keys()) == 0
     
     record['identifier']['id'] = "123"
     record['identifier']['type'] = "pmid"
     record['identifier']['canonical'] = "pmid:123"
     doi.provider_dereference(record)
     assert not "provider" in record
     
     record['identifier']['type'] = "doi"
     del record['identifier']['canonical']
     doi.provider_dereference(record)
     assert not "provider" in record
Пример #20
0
    def test_08_dereference_not_relevant(self):
        doi = DOIPlugin()
        record = models.MessageObject(record={})
        
        doi.provider_dereference(record)
        assert len(record.record.keys()) == 0

        record.id = "123"
        record.identifier_type = "pmid"
        record.canonical = "pmid:123"
        doi.provider_dereference(record)
        assert not "provider" in record.record

        record.identifier_type = "doi"
        record.canonical = None
        doi.provider_dereference(record)
        assert not "provider" in record.record
Пример #21
0
 def test_02_detect_verify_type_not_dois(self):
     #Test the various erroneous DOI possibilities, which will include:
     #- prefixes without dois attached
     #- random strings
     doi = DOIPlugin()
     
     # try some prefixes
     bjid = {'id' : 'doi:'}
     record = models.MessageObject(record={"identifier" : bjid})
     doi.type_detect_verify(record)
     assert not bjid.has_key("type")
     
     bjid = {'id' : 'http://dx.doi.org/'}
     record = models.MessageObject(record={"identifier" : bjid})
     doi.type_detect_verify(record)
     assert not bjid.has_key("type")
     
     # try some random strings
     bjid = {'id' : 'qp23u4ehjkjewfiuwqr'}
     record = models.MessageObject(record={"identifier" : bjid})
     doi.type_detect_verify(record)
     assert not bjid.has_key("type")
     
     bjid = {'id' : 'qp23u410.jewfiuwqr'} # has the 10. substring in it
     record = models.MessageObject(record={"identifier" : bjid})
     doi.type_detect_verify(record)
     assert not bjid.has_key("type")
     
     bjid = {'id' : 'doi:qp23u4ehjkjewfiuwqr'} # starts with a doi prefix, but isn't one
     record = models.MessageObject(record={"identifier" : bjid})
     doi.type_detect_verify(record)
     assert not bjid.has_key("type")
Пример #22
0
 def test_06_canonicalise_ignore(self):
     doi = DOIPlugin()
     
     bjid = {"id" : "whatever", "type" : "pmid"}
     doi.canonicalise(bjid)
     assert not bjid.has_key("canonical")