Loading config/unicaen-db-import.global.php.dist +15 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,21 @@ return [ // Identifiant de la connexion à l'API source (cf. clé 'connections' plus haut) 'connection' => 'geo', // Complément de l'URL de l'API permettant l'interrogation des données // URL à concaténer à l'URL de la connexion, permettant l'interrogation des données // Formats d'URL possibles : // - string, ex : '/search/?q=authIdHal_i:123' // - array<string>, ex : ['/search/?q=authIdHal_i:123', '/search/?q=authIdHal_i:789'] // - array<array<string>>, // ex 1 : ``` // [ // ['select' => '/search/?q=authIdHal_i:123'], // ['select' => '/search/?q=authIdHal_i:789'], // ]``` // ex 2 (spécification de colonnes valuées à ajouter aux données obtenues) : ``` // [ // ['select' => '/search/?q=authIdHal_i:123', 'columns' => ['hal_id' => '123']], // ['select' => '/search/?q=authIdHal_i:789', 'columns' => ['hal_id' => '789']], // ]``` 'select' => '/regions?fields=nom,code', // Taille des pages de données demandée à l'API (si supportée par l'API) Loading src/UnicaenDbImport/Config/ColumnValueFilterConfigFactoryTrait.php +0 −4 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ namespace UnicaenDbImport\Config; use Assert\Assertion; use Assert\AssertionFailedException; use Psr\Container\ContainerInterface; use SplPriorityQueue; use UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface; use UnicaenDbImport\Filter\ColumnValue\SameColumnValueFilter; Loading @@ -28,7 +27,6 @@ trait ColumnValueFilterConfigFactoryTrait $columnValueFilter = $sourceConfig[$key] ?? []; $filterInstances = []; // $filterInstances = new SplPriorityQueue(); foreach ((array)$columnValueFilter as $nameOrIndex => $spec) { try { $filterInstance = $this->getColumnValueFilter($spec, $container); Loading @@ -39,8 +37,6 @@ trait ColumnValueFilterConfigFactoryTrait throw ConfigException::invalidValueForKey($key); } $filterInstances[$filterInstance->getColumn()] = $filterInstance; // $priority = $spec['priority'] ?? 0; // $filterInstances->insert($filterInstance, $priority); } return $filterInstances; Loading src/UnicaenDbImport/Domain/Source.php +1 −1 Original line number Diff line number Diff line Loading @@ -118,7 +118,7 @@ class Source implements SourceInterface return '(Generator)'; } elseif (is_iterable($select)) { if ($select[0] ?? null) { $url = $select[0]['url'] ?? $select[0]; $url = $select[0]['select'] ?? $select[0]; return '[' . $url . ', ...]'; } else { return ":-( ITERABLE VIDE"; Loading src/UnicaenDbImport/Service/Api/ApiService.php +30 −30 Original line number Diff line number Diff line Loading @@ -111,11 +111,10 @@ class ApiService $columnValuesToInject = []; foreach ($urls as $url) { if (is_array($url)) { $urlString = $url['url']; $urlString = $url['select']; if (array_key_exists('columns', $url)) { $columnValuesToInject = $url['columns']; } unset($url['url']); } else { $urlString = $url; } Loading Loading @@ -145,8 +144,7 @@ class ApiService $url = $urls[0]; if (is_array($url)) { $urlString = $url['url']; unset($url['url']); $urlString = $url['select']; } else { $urlString = $url; } Loading @@ -166,12 +164,14 @@ class ApiService * * NB : Dès lors que $pageSize > 0, l'interrogation se fait page par page. * * @param string $url * @param integer $pageSize * @param int $page * @param string $pageSizeParam * @param string $pageParam * @return stdClass[] * @param string $url URL où est envoyée la requête * @param int $pageSize Taille de page (i.e. nombre d'enregistrements demandés) * @param int $page Numéro de la page demandée * @param string $pageSizeParam Nom du paramètre spécifiant la taille de page * @param string $pageParam Nom du paramètre spécifiant le numéro de page * @param ResponseDataExtractorInterface|null $dataExtractor Eventuel forçage du data extractor à utiliser * @param array $columnValuesToInject Eventuelles colonnes valuées à ajouter aus données obtenues * * @throws \UnicaenDbImport\Service\Exception\ApiServiceException */ protected function callApi( Loading Loading @@ -217,7 +217,7 @@ class ApiService /** @var stdClass[] $data */ $data = $dataExtractor->extractDataFromResponse($responseData); // injection éventuelle de colonnes (avec leurs valeurs) // injection éventuelle de colonnes valuées if (count($columnValuesToInject) > 0) { foreach ($data as $i => $d) { foreach ($columnValuesToInject as $name => $value) { Loading Loading @@ -251,12 +251,11 @@ class ApiService { $urlPrefix = $connection->getUrl(); $selects = $this->normalizedSelect($source); $urls = $this->normalizedSelect($source); foreach ($selects as $i => $select) { foreach ($urls as $i => $select) { if (is_array($select)) { $selectString = $select['url']; unset($select['url']); $selectString = $select['select']; } else { $selectString = $select; } Loading @@ -266,13 +265,13 @@ class ApiService $urlString = $urlPrefix . '/' . $selectString; if (is_array($select)) { $select['url'] = $urlString; $select['select'] = $urlString; } else { $selects[$i] = $selectString; $urls[$i] = $selectString; } } return $selects; return $urls; } protected function normalizedSelect(SourceInterface $source): iterable Loading @@ -283,23 +282,25 @@ class ApiService $selects = $select; foreach ($selects as $sel) { if (is_array($sel)) { Assert::keyExists($sel, 'url', "Clé url non trouvée !"); } elseif (!is_string($sel)) { throw new RuntimeException(sprintf( "Type de select inattendu pour la source '%s'", $source->getName() Assert::keyExists($sel, 'select', "Clé 'select' non trouvée dans l'URL fournie au format array"); } else { Assert::string($sel, sprintf( "Un type de select inattendu a été spécifié pour la source '%s' : %s", $source->getName(), is_object($sel) ? get_class($sel) : gettype($sel) )); } } return $select; } elseif (is_string($select)) { return [$select]; } else { throw new RuntimeException(sprintf( "Format inattendu de spécification du/des selects pour la source '%s'", $source->getName() )); } throw new InvalidArgumentException(sprintf( "Un type de select inattendu a été spécifié pour la source '%s' : %s", $source->getName(), gettype($select) )); } /** Loading @@ -315,10 +316,9 @@ class ApiService } /** * @param array $config * @throws AssertionFailedException */ private function loadConfig(array $config) private function loadConfig(array $config): void { Assertion::keyIsset($config, 'url'); Loading Loading
config/unicaen-db-import.global.php.dist +15 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,21 @@ return [ // Identifiant de la connexion à l'API source (cf. clé 'connections' plus haut) 'connection' => 'geo', // Complément de l'URL de l'API permettant l'interrogation des données // URL à concaténer à l'URL de la connexion, permettant l'interrogation des données // Formats d'URL possibles : // - string, ex : '/search/?q=authIdHal_i:123' // - array<string>, ex : ['/search/?q=authIdHal_i:123', '/search/?q=authIdHal_i:789'] // - array<array<string>>, // ex 1 : ``` // [ // ['select' => '/search/?q=authIdHal_i:123'], // ['select' => '/search/?q=authIdHal_i:789'], // ]``` // ex 2 (spécification de colonnes valuées à ajouter aux données obtenues) : ``` // [ // ['select' => '/search/?q=authIdHal_i:123', 'columns' => ['hal_id' => '123']], // ['select' => '/search/?q=authIdHal_i:789', 'columns' => ['hal_id' => '789']], // ]``` 'select' => '/regions?fields=nom,code', // Taille des pages de données demandée à l'API (si supportée par l'API) Loading
src/UnicaenDbImport/Config/ColumnValueFilterConfigFactoryTrait.php +0 −4 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ namespace UnicaenDbImport\Config; use Assert\Assertion; use Assert\AssertionFailedException; use Psr\Container\ContainerInterface; use SplPriorityQueue; use UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface; use UnicaenDbImport\Filter\ColumnValue\SameColumnValueFilter; Loading @@ -28,7 +27,6 @@ trait ColumnValueFilterConfigFactoryTrait $columnValueFilter = $sourceConfig[$key] ?? []; $filterInstances = []; // $filterInstances = new SplPriorityQueue(); foreach ((array)$columnValueFilter as $nameOrIndex => $spec) { try { $filterInstance = $this->getColumnValueFilter($spec, $container); Loading @@ -39,8 +37,6 @@ trait ColumnValueFilterConfigFactoryTrait throw ConfigException::invalidValueForKey($key); } $filterInstances[$filterInstance->getColumn()] = $filterInstance; // $priority = $spec['priority'] ?? 0; // $filterInstances->insert($filterInstance, $priority); } return $filterInstances; Loading
src/UnicaenDbImport/Domain/Source.php +1 −1 Original line number Diff line number Diff line Loading @@ -118,7 +118,7 @@ class Source implements SourceInterface return '(Generator)'; } elseif (is_iterable($select)) { if ($select[0] ?? null) { $url = $select[0]['url'] ?? $select[0]; $url = $select[0]['select'] ?? $select[0]; return '[' . $url . ', ...]'; } else { return ":-( ITERABLE VIDE"; Loading
src/UnicaenDbImport/Service/Api/ApiService.php +30 −30 Original line number Diff line number Diff line Loading @@ -111,11 +111,10 @@ class ApiService $columnValuesToInject = []; foreach ($urls as $url) { if (is_array($url)) { $urlString = $url['url']; $urlString = $url['select']; if (array_key_exists('columns', $url)) { $columnValuesToInject = $url['columns']; } unset($url['url']); } else { $urlString = $url; } Loading Loading @@ -145,8 +144,7 @@ class ApiService $url = $urls[0]; if (is_array($url)) { $urlString = $url['url']; unset($url['url']); $urlString = $url['select']; } else { $urlString = $url; } Loading @@ -166,12 +164,14 @@ class ApiService * * NB : Dès lors que $pageSize > 0, l'interrogation se fait page par page. * * @param string $url * @param integer $pageSize * @param int $page * @param string $pageSizeParam * @param string $pageParam * @return stdClass[] * @param string $url URL où est envoyée la requête * @param int $pageSize Taille de page (i.e. nombre d'enregistrements demandés) * @param int $page Numéro de la page demandée * @param string $pageSizeParam Nom du paramètre spécifiant la taille de page * @param string $pageParam Nom du paramètre spécifiant le numéro de page * @param ResponseDataExtractorInterface|null $dataExtractor Eventuel forçage du data extractor à utiliser * @param array $columnValuesToInject Eventuelles colonnes valuées à ajouter aus données obtenues * * @throws \UnicaenDbImport\Service\Exception\ApiServiceException */ protected function callApi( Loading Loading @@ -217,7 +217,7 @@ class ApiService /** @var stdClass[] $data */ $data = $dataExtractor->extractDataFromResponse($responseData); // injection éventuelle de colonnes (avec leurs valeurs) // injection éventuelle de colonnes valuées if (count($columnValuesToInject) > 0) { foreach ($data as $i => $d) { foreach ($columnValuesToInject as $name => $value) { Loading Loading @@ -251,12 +251,11 @@ class ApiService { $urlPrefix = $connection->getUrl(); $selects = $this->normalizedSelect($source); $urls = $this->normalizedSelect($source); foreach ($selects as $i => $select) { foreach ($urls as $i => $select) { if (is_array($select)) { $selectString = $select['url']; unset($select['url']); $selectString = $select['select']; } else { $selectString = $select; } Loading @@ -266,13 +265,13 @@ class ApiService $urlString = $urlPrefix . '/' . $selectString; if (is_array($select)) { $select['url'] = $urlString; $select['select'] = $urlString; } else { $selects[$i] = $selectString; $urls[$i] = $selectString; } } return $selects; return $urls; } protected function normalizedSelect(SourceInterface $source): iterable Loading @@ -283,23 +282,25 @@ class ApiService $selects = $select; foreach ($selects as $sel) { if (is_array($sel)) { Assert::keyExists($sel, 'url', "Clé url non trouvée !"); } elseif (!is_string($sel)) { throw new RuntimeException(sprintf( "Type de select inattendu pour la source '%s'", $source->getName() Assert::keyExists($sel, 'select', "Clé 'select' non trouvée dans l'URL fournie au format array"); } else { Assert::string($sel, sprintf( "Un type de select inattendu a été spécifié pour la source '%s' : %s", $source->getName(), is_object($sel) ? get_class($sel) : gettype($sel) )); } } return $select; } elseif (is_string($select)) { return [$select]; } else { throw new RuntimeException(sprintf( "Format inattendu de spécification du/des selects pour la source '%s'", $source->getName() )); } throw new InvalidArgumentException(sprintf( "Un type de select inattendu a été spécifié pour la source '%s' : %s", $source->getName(), gettype($select) )); } /** Loading @@ -315,10 +316,9 @@ class ApiService } /** * @param array $config * @throws AssertionFailedException */ private function loadConfig(array $config) private function loadConfig(array $config): void { Assertion::keyIsset($config, 'url'); Loading