def test_empty_collection(self):
     """bibfield - empty collection"""
     blob_error0 = """<collection></collection>"""
     rec = create_record(blob_error0, master_format='marc', schema='xml')
     self.assertTrue(rec.is_empty())
     records = create_records(blob_error0)
     self.assertEqual(len(records), 0)
 def test_empty_collection(self):
     """bibfield - empty collection"""
     blob_error0 = """<collection></collection>"""
     rec = create_record(blob_error0, master_format='marc', schema='xml')
     self.assertTrue(rec.is_empty())
     records = create_records(blob_error0)
     self.assertEqual(len(records), 0)
示例#3
0
    def marshal_deposition(cls, deposition):
        """
        Generate a JSON representation for REST API of a Deposition
        """
        # Get draft
        if deposition.has_sip() and '_edit' in deposition.drafts:
            draft = deposition.get_draft('_edit')
            metadata_fields = cls.marshal_metadata_edit_fields
        elif deposition.has_sip():
            # FIXME: Not based on latest available data in record.
            sip = deposition.get_latest_sip(sealed=True)
            draft = record_to_draft(
                create_record(sip.package),
                post_process=process_draft
            )
            metadata_fields = cls.marshal_metadata_edit_fields
        else:
            draft = deposition.get_or_create_draft('_default')
            metadata_fields = cls.marshal_metadata_fields

        # Fix known differences in marshalling
        draft.values = filter_empty_elements(draft.values)
        if 'grants' not in draft.values:
            draft.values['grants'] = []

        # Set disabled values to None in output
        for field, flags in draft.flags.items():
            if 'disabled' in flags and field in draft.values:
                del draft.values[field]

        # Marshal deposition
        obj = marshal(deposition, cls.marshal_deposition_fields)
        # Marshal the metadata attribute
        obj['metadata'] = marshal(unicodifier(draft.values), metadata_fields)

        # Add record and DOI information from latest SIP
        for sip in deposition.sips:
            if sip.is_sealed():
                recjson = sip.metadata
                if recjson.get('recid'):
                    obj['record_id'] = fields.Integer().format(
                        recjson.get('recid')
                    )
                    obj['record_url'] = fields.String().format(url_for(
                        'record.metadata',
                        recid=recjson.get('recid'),
                        _external=True
                    ))
                if recjson.get('doi') and \
                   recjson.get('doi').startswith(CFG_DATACITE_DOI_PREFIX+"/"):
                    obj['doi'] = fields.String().format(recjson.get('doi'))
                    obj['doi_url'] = fields.String().format(
                        "http://dx.doi.org/%s" % obj['doi']
                    )
                break

        return obj
def dump_record_json(marcxml):
    """Dump JSON of record."""
    try:
        from invenio.modules.records.api import Record
        d = Record.create(marcxml, 'marc')
        return d.dumps(clean=True)
    except ImportError:
        from invenio.bibfield import create_record
        d = create_record(marcxml, master_format='marc')
        return d.dumps()
示例#5
0
def dump_record_json(marcxml):
    """Dump JSON of record."""
    try:
        from invenio.modules.records.api import Record
        d = Record.create(marcxml, 'marc')
        return d.dumps(clean=True)
    except ImportError:
        from invenio.bibfield import create_record
        d = create_record(marcxml, master_format='marc')
        return d.dumps()
示例#6
0
    def marshal_deposition(cls, deposition):
        """
        Generate a JSON representation for REST API of a Deposition
        """
        # Get draft
        if deposition.has_sip() and '_edit' in deposition.drafts:
            draft = deposition.get_draft('_edit')
            metadata_fields = cls.marshal_metadata_edit_fields
        elif deposition.has_sip():
            # FIXME: Not based on latest available data in record.
            sip = deposition.get_latest_sip(sealed=True)
            draft = record_to_draft(create_record(sip.package),
                                    post_process=process_draft)
            metadata_fields = cls.marshal_metadata_edit_fields
        else:
            draft = deposition.get_or_create_draft('_default')
            metadata_fields = cls.marshal_metadata_fields

        # Fix known differences in marshalling
        draft.values = filter_empty_elements(draft.values)
        if 'grants' not in draft.values:
            draft.values['grants'] = []

        # Set disabled values to None in output
        for field, flags in draft.flags.items():
            if 'disabled' in flags and field in draft.values:
                del draft.values[field]

        # Marshal deposition
        obj = marshal(deposition, cls.marshal_deposition_fields)
        # Marshal the metadata attribute
        obj['metadata'] = marshal(unicodifier(draft.values), metadata_fields)

        # Add record and DOI information from latest SIP
        for sip in deposition.sips:
            if sip.is_sealed():
                recjson = sip.metadata
                if recjson.get('recid'):
                    obj['record_id'] = fields.Integer().format(
                        recjson.get('recid'))
                    obj['record_url'] = fields.String().format(
                        url_for('record.metadata',
                                recid=recjson.get('recid'),
                                _external=True))
                if recjson.get('doi') and \
                   recjson.get('doi').startswith(CFG_DATACITE_DOI_PREFIX+"/"):
                    obj['doi'] = fields.String().format(recjson.get('doi'))
                    obj['doi_url'] = fields.String().format(
                        "http://dx.doi.org/%s" % obj['doi'])
                break

        return obj
 def test_create_record_with_collection_tag(self):
     """ bibfield - create_record() for single record in collection"""
     blob = """
     <collection>
     <record>
     <controlfield tag="001">33</controlfield>
     <datafield tag="041" ind1=" " ind2=" ">
     <subfield code="a">eng</subfield>
     </datafield>
     </record>
     </collection>
     """
     record = create_record(blob, master_format='marc', schema='xml')
     record1 = create_records(blob, master_format='marc', schema='xml')[0]
     self.assertEqual(record1, record)
 def test_create_record_with_collection_tag(self):
     """ bibfield - create_record() for single record in collection"""
     blob = """
     <collection>
     <record>
     <controlfield tag="001">33</controlfield>
     <datafield tag="041" ind1=" " ind2=" ">
     <subfield code="a">eng</subfield>
     </datafield>
     </record>
     </collection>
     """
     record = create_record(blob, master_format='marc', schema='xml')
     record1 = create_records(blob, master_format='marc', schema='xml')[0]
     self.assertEqual(record1, record)
 def test_fft_url_tags(self):
     """bibfield - FFT versus URL"""
     marc_blob = """
           <record>
             <datafield tag="037" ind1=" " ind2=" ">
               <subfield code="a">CERN-HI-6206002</subfield>
             </datafield>
             <datafield tag="041" ind1=" " ind2=" ">
               <subfield code="a">eng</subfield>
             </datafield>
             <datafield tag="245" ind1=" " ind2=" ">
               <subfield code="a">At CERN in 1962</subfield>
               <subfield code="s">eight Nobel prizewinners</subfield>
             </datafield>
             <datafield tag="260" ind1=" " ind2=" ">
               <subfield code="c">1962</subfield>
             </datafield>
             <datafield tag="506" ind1="1" ind2=" ">
               <subfield code="a">jekyll_only</subfield>
             </datafield>
             <datafield tag="521" ind1=" " ind2=" ">
               <subfield code="a">In 1962, CERN hosted the 11th International Conference on High Energy Physics. Among the distinguished visitors were eight Nobel prizewinners.Left to right: Cecil F. Powell, Isidor I. Rabi, Werner Heisenberg, Edwin M. McMillan, Emile Segre, Tsung Dao Lee, Chen Ning Yang and Robert Hofstadter.</subfield>
             </datafield>
             <datafield tag="590" ind1=" " ind2=" ">
               <subfield code="a">En 1962, le CERN est l'hote de la onzieme Conference Internationale de Physique des Hautes Energies. Parmi les visiteurs eminents se trouvaient huit laureats du prix Nobel.De gauche a droite: Cecil F. Powell, Isidor I. Rabi, Werner Heisenberg, Edwin M. McMillan, Emile Segre, Tsung Dao Lee, Chen Ning Yang et Robert Hofstadter.</subfield>
             </datafield>
             <datafield tag="595" ind1=" " ind2=" ">
               <subfield code="a">Press</subfield>
             </datafield>
             <datafield tag="650" ind1="1" ind2="7">
               <subfield code="2">SzGeCERN</subfield>
               <subfield code="a">Personalities and History of CERN</subfield>
             </datafield>
             <datafield tag="653" ind1="1" ind2=" ">
               <subfield code="a">Nobel laureate</subfield>
             </datafield>
             <datafield tag="FFT" ind1=" " ind2=" ">
               <subfield code="a">http://invenio-software.org/download/invenio-demo-site-files/6206002.jpg</subfield>
               <subfield code="x">http://invenio-software.org/download/invenio-demo-site-files/6206002.gif</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="0">
               <subfield code="o">0000736PHOPHO</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="0">
               <subfield code="y">1962</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="0">
               <subfield code="b">81</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="1">
               <subfield code="c">1998-07-23</subfield>
               <subfield code="l">50</subfield>
               <subfield code="m">2002-07-15</subfield>
               <subfield code="o">CM</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1950/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1950 : Cecil Frank Powell</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1944/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1944 : Isidor Isaac Rabi</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1932/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1932 : Werner Karl Heisenberg</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/chemistry/laureates/1951/index.html</subfield>
               <subfield code="y">The Nobel Prize in Chemistry 1951 : Edwin Mattison McMillan</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1959/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1959 : Emilio Gino Segre</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1957/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1957 : Chen Ning Yang and Tsung-Dao Lee</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1961/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1961 : Robert Hofstadter</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="P">
               <subfield code="s">6206002 (1962)</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="S">
               <subfield code="s">n</subfield>
               <subfield code="w">199830</subfield>
             </datafield>
             <datafield tag="980" ind1=" " ind2=" ">
               <subfield code="a">PICTURE</subfield>
             </datafield>
           </record>"""
     rec = create_record(marc_blob, master_format='marc', schema='xml')
     self.assertTrue('fft' in rec)
     self.assertTrue(len(rec['fft']) == 1)
     self.assertTrue(rec['fft[0].path'] == "http://invenio-software.org/download/invenio-demo-site-files/6206002.jpg")
     self.assertTrue('url' in rec)
     self.assertTrue(len(rec['url']) == 7)
     self.assertTrue(rec['url[0].url'] == "http://www.nobel.se/physics/laureates/1950/index.html")
 def test_fft_url_tags(self):
     """BibField - FFT versus URL"""
     marc_blob = """
           <record>
             <datafield tag="037" ind1=" " ind2=" ">
               <subfield code="a">CERN-HI-6206002</subfield>
             </datafield>
             <datafield tag="041" ind1=" " ind2=" ">
               <subfield code="a">eng</subfield>
             </datafield>
             <datafield tag="245" ind1=" " ind2=" ">
               <subfield code="a">At CERN in 1962</subfield>
               <subfield code="s">eight Nobel prizewinners</subfield>
             </datafield>
             <datafield tag="260" ind1=" " ind2=" ">
               <subfield code="c">1962</subfield>
             </datafield>
             <datafield tag="506" ind1="1" ind2=" ">
               <subfield code="a">jekyll_only</subfield>
             </datafield>
             <datafield tag="521" ind1=" " ind2=" ">
               <subfield code="a">In 1962, CERN hosted the 11th International Conference on High Energy Physics. Among the distinguished visitors were eight Nobel prizewinners.Left to right: Cecil F. Powell, Isidor I. Rabi, Werner Heisenberg, Edwin M. McMillan, Emile Segre, Tsung Dao Lee, Chen Ning Yang and Robert Hofstadter.</subfield>
             </datafield>
             <datafield tag="590" ind1=" " ind2=" ">
               <subfield code="a">En 1962, le CERN est l'hote de la onzieme Conference Internationale de Physique des Hautes Energies. Parmi les visiteurs eminents se trouvaient huit laureats du prix Nobel.De gauche a droite: Cecil F. Powell, Isidor I. Rabi, Werner Heisenberg, Edwin M. McMillan, Emile Segre, Tsung Dao Lee, Chen Ning Yang et Robert Hofstadter.</subfield>
             </datafield>
             <datafield tag="595" ind1=" " ind2=" ">
               <subfield code="a">Press</subfield>
             </datafield>
             <datafield tag="650" ind1="1" ind2="7">
               <subfield code="2">SzGeCERN</subfield>
               <subfield code="a">Personalities and History of CERN</subfield>
             </datafield>
             <datafield tag="653" ind1="1" ind2=" ">
               <subfield code="a">Nobel laureate</subfield>
             </datafield>
             <datafield tag="FFT" ind1=" " ind2=" ">
               <subfield code="a">http://invenio-software.org/download/invenio-demo-site-files/6206002.jpg</subfield>
               <subfield code="x">http://invenio-software.org/download/invenio-demo-site-files/6206002.gif</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="0">
               <subfield code="o">0000736PHOPHO</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="0">
               <subfield code="y">1962</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="0">
               <subfield code="b">81</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="1">
               <subfield code="c">1998-07-23</subfield>
               <subfield code="l">50</subfield>
               <subfield code="m">2002-07-15</subfield>
               <subfield code="o">CM</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1950/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1950 : Cecil Frank Powell</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1944/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1944 : Isidor Isaac Rabi</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1932/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1932 : Werner Karl Heisenberg</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/chemistry/laureates/1951/index.html</subfield>
               <subfield code="y">The Nobel Prize in Chemistry 1951 : Edwin Mattison McMillan</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1959/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1959 : Emilio Gino Segre</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1957/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1957 : Chen Ning Yang and Tsung-Dao Lee</subfield>
             </datafield>
             <datafield tag="856" ind1="4" ind2=" ">
               <subfield code="u">http://www.nobel.se/physics/laureates/1961/index.html</subfield>
               <subfield code="y">The Nobel Prize in Physics 1961 : Robert Hofstadter</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="P">
               <subfield code="s">6206002 (1962)</subfield>
             </datafield>
             <datafield tag="909" ind1="C" ind2="S">
               <subfield code="s">n</subfield>
               <subfield code="w">199830</subfield>
             </datafield>
             <datafield tag="980" ind1=" " ind2=" ">
               <subfield code="a">PICTURE</subfield>
             </datafield>
           </record>"""
     rec = create_record(marc_blob, master_format='marc', schema='xml')
     self.assertTrue('fft' in rec)
     self.assertTrue(len(rec['fft']) == 1)
     self.assertTrue(
         rec['fft[0].path'] ==
         "http://invenio-software.org/download/invenio-demo-site-files/6206002.jpg"
     )
     self.assertTrue('url' in rec)
     self.assertTrue(len(rec['url']) == 7)
     self.assertTrue(
         rec['url[0].url'] ==
         "http://www.nobel.se/physics/laureates/1950/index.html")