Skip to content
Snippets Groups Projects
Commit b45ab512 authored by Alex Arnaud's avatar Alex Arnaud Committed by Henri-Damien LAURENT
Browse files

hotline#187617 : Cosmogramme : if a parsing error occurs, logs and continue importing

parent 28d57431
1 merge request!4853Hotline#187617 insa pb moissonnage canal u
Pipeline #27078 passed with stage
in 22 minutes and 54 seconds
- correctif #187617 : Ressource Externe : Moissonnage de Canal U plus robuste
\ No newline at end of file
......@@ -41,10 +41,11 @@ class Class_Cosmogramme_Integration_PhaseNotice
$integration->getProfil(),
$integration->getTypeDoc());
$integrator->setServiceRunner(static::$_service_runner);
try {
$integrator->traiteNotice($data);
} catch (Class_Cosmogramme_Integration_Warning $w) {
$this->_log->error($w->getMessage());
} catch (Exception $e) {
$this->_log->error($e->getMessage());
}
$this->_incrementCount($integrator->getStatut());
......
......@@ -31,9 +31,11 @@ class Class_Cosmogramme_Integration_Record_DublinCore extends notice_unimarc {
$_datas;
public function ouvrirNotice($data, $id_profil, $sigb=0, $type_doc_force='', $decode_string = true) {
public function ouvrirNotice($raw_data, $id_profil, $sigb=0, $type_doc_force='', $decode_string = true) {
$this->_profil = Class_IntProfilDonnees::find($id_profil);
$data = $this->_parseDatas($data);
if (!$data = $this->_parseDatas($raw_data))
throw new Class_Cosmogramme_Integration_Warning('erreur de parsing données : '.$raw_data);
$this->_types = $data['type'];
$this->_formats = $data['format'];
$this->_datas = $data;
......@@ -58,7 +60,9 @@ class Class_Cosmogramme_Integration_Record_DublinCore extends notice_unimarc {
$unimarc_visitor = (new Class_Indexation_PseudoNotice_UnimarcVisitor)
->visitIdNotice($this->_datas['id_oai'])
->visitTitle($this->_datas['titre'])
->visitResume(implode(' ', $this->_datas['description']))
->visitResume(is_array($this->_datas['description'])
? implode(' ', $this->_datas['description'])
: $this->_datas['description'] ?? '')
->visitDescriptions($this->_datas['format'])
->visitDescriptions($this->_datas['rights'])
->visitDescriptions($this->_datas['relation'])
......
......@@ -26,9 +26,10 @@ trait Trait_OaiDatasParser {
* @return array|object
*/
protected function _parseDatas($datas) {
return is_array($datas)
? $datas
: $this->_newDataParser()->parse($datas)[0];
if (is_array($datas))
return $datas;
$elements = $this->_newDataParser()->parse($datas);
return array_shift($elements);
}
......
......@@ -327,3 +327,49 @@ class PhaseNoticeDublinCoreDedupeTest extends AbstractPhaseNoticeDublinCoreTestC
$this->assertCount(2, Class_Notice::findAll());
}
}
class PhaseNoticeDublinCoreBrokenOAITestCase extends PhaseNoticeTestCase {
protected function _prepareFixtures() {
parent::_prepareFixtures();
Class_Cosmogramme_Integration_PhaseAbstract::shouldThrowError(true);
$settings = ['format' => Class_IntProfilDonnees::FORMAT_DUBLIN_CORE,
'type_fichier' => Class_IntProfilDonnees::FT_RECORDS,
'0_type' => [''],
'0_format' => ['']];
$serialized_settings = (new Class_ProfileSerializer($settings))->serializeDatas();
Class_IntProfilDonnees::find(102)
->setTypeFichier(Class_IntProfilDonnees::FT_RECORDS)
->setFormat(Class_IntProfilDonnees::FORMAT_DUBLIN_CORE)
->setAttributs($serialized_settings)
->save();
$this->fixture(Class_IntBib::class,
['id' => 3,
'nom_court' => 'Canal U']);
Class_Cosmogramme_Integration::find(999)
->setIdBib(3)
->setFichier('oai_broken_parsing.xml')
->save();
Class_CosmoVar::setValueOf('integration_path', __DIR__ . '/');
}
public function tearDown(){
Class_Cosmogramme_Integration_PhaseAbstract::shouldThrowError(false);
Class_CosmoVar::setValueOf('integration_path', '');
parent::tearDown();
}
/** @test */
public function logShouldContainsErreurDeParsing() {
$this->assertLogContains('erreur de parsing');
}
}
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
<responseDate>2023-11-09-T11:33:44Z</responseDate>
<request verb="ListRecords" metadataPrefix="oai_dc">https://www.canal-u.tv/oai</request>
<ListRecords><record><header><identifier>oai:www.canal-u.tv:135958</identifier><datestamp>0005-04-29T12:00:00+00:00</datestamp><setSpec>intervenant:26327</setSpec><setSpec>intervenant:131578</setSpec><setSpec>chaine:687</setSpec><setSpec>discipline:987:1697</setSpec><setSpec>discipline:987:1667</setSpec></header><metadata><oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"><dc:title>Le travail de broderie réalisé à domicile (Confection Robinet, Vierzon)</dc:title><dc:identifier>https://www.canal-u.tv/node/135958</dc:identifier><dc:creator>Assegond, Céline</dc:creator><dc:description>Ces extraits d'entretiens traitent de la question du travail de broderie réalisé dans les années 1950 par des ouvrières à domicile pour le compte de la confection Robinet. Ces extraits sont tirés de deux entretiens réalisés en 2018, l'un avec Monique Galland, propriétaire et dirigeante de la confection Robinet et l'autre avec Madeleine Mabillat, ancienne brodeuse à fils tirés. Voir l'entretien de Monique Galland dans son intégralité Voir l'entretien de Madeleine Mabillat dans son intégralité Ce montage a été réalisé dans le cadre de la recherche VIVAMEMORI menée par une équipe de chercheurs en sociologie de l'Université de Tours (CETU ETIcS) et d'Orléans (CRJP). MEMOVIV a bénéficié du financement de la région Centre Val de Loire complété par celui de la DRAC Centre et de la ville de Vierzon. </dc:description><dc:date>0005-04-29T12:00:00+00:00</dc:date><dc:subject>Anthropologie et ethnologie</dc:subject><dc:subject>Sociologie</dc:subject><dc:publisher>Université de Tours</dc:publisher><dc:contributor>Université de Tours</dc:contributor><dc:type>MovingImage</dc:type><dc:format>video/mp4</dc:format><dc:language>fr</dc:language><dc:rights>Droit commun de la propriété intellectuelle</dc:rights><dc:bibliographicCitation>Céline Assegond, Alexandre Palezis, UnivTours, (0005, 29 avril), Le travail de broderie réalisé à domicile (Confection Robinet, Vierzon), [Vidéo], Canal-U, https://www.canal-u.tv/135958, (Consultée le 9 novembre 2023)</dc:bibliographicCitation><dc:created>0005-04-29T12:00:00+00:00</dc:created><dc:educationLevel>Tous publics</dc:educationLevel><dc:extent>PT0H3M23S</dc:extent><dc:issued>2022-02-21T20:37:12+00:00</dc:issued><dc:modified>2022-12-21T20:51:11+00:00</dc:modified><dc:rightsHolder>CETU ETIcS, Université de Tours</dc:rightsHolder></oai_dc:dc></metadata></record><<record><header><identifier>oai:www.canal-u.tv:44043</identifier><datestamp>2012-09-28T12:00:00+00:00</datestamp><setSpec>intervenant:12033</setSpec><setSpec>intervenant:12035</setSpec><setSpec>chaine:421</setSpec><setSpec>discipline:987:1675:1691</setSpec><setSpec>discipline:987:1147:1775</setSpec></header><metadata><oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"><dc:title>05 Témoignage d’Orange sur deux dispositifs tests</dc:title><dc:identifier>https://www.canal-u.tv/node/44043</dc:identifier><dc:creator>Ouzilleau, Laurence</dc:creator><dc:description>Table ronde des praticiensOù en est-on dans lesdispositifs pour la multimodalité ?Laurence Ouzilleau – Responsable pôledéveloppement - OrangeHélène Siaut-Desombre – référente e-learning - Orange</dc:description><dc:date>2012-09-28T12:00:00+00:00</dc:date><dc:subject>Enseignement à distance</dc:subject><dc:subject>Technologie de l'information et de la communication pour l'enseignement (TICE)</dc:subject><dc:subject>Théorie de la communication</dc:subject><dc:publisher>Centre d'Enseignement Multimédia Universitaire (C.E.M.U.)Université de Caen Normandie</dc:publisher><dc:contributor>Centre d'Enseignement Multimédia Universitaire (C.E.M.U.)Université de Caen Normandie</dc:contributor><dc:type>MovingImage</dc:type><dc:format>video/mp4</dc:format><dc:language>fr</dc:language><dc:relation>https://www.canal-u.tv/node/109460</dc:relation><dc:rights>Droit commun de la propriété intellectuelle</dc:rights><dc:bibliographicCitation>Laurence Ouzilleau, Hélène Siaut-Desombre, CEMU, (2012, 28 septembre), 05 Témoignage d’Orange sur deux dispositifs tests , in Rencontre régionale de la multimodalité en formation à Caen, [Vidéo], Canal-U, https://www.canal-u.tv/44043, (Consultée le 9 novembre 2023)</dc:bibliographicCitation><dc:created>2012-09-28T12:00:00+00:00</dc:created><dc:educationLevel>Formation continue</dc:educationLevel><dc:educationLevel>Tous publics</dc:educationLevel><dc:extent>PT0H18M12S</dc:extent><dc:isPartOf>https://www.canal-u.tv/node/109460</dc:isPartOf><dc:issued>2012-09-28T07:42:54+00:00</dc:issued><dc:modified>2022-01-06T06:46:36+00:00</dc:modified></oai_dc:dc></metadata></record> </ListRecords>
</OAI-PMH>
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment