Skip to content

Commit

Permalink
Tighten up publish methods in Service
Browse files Browse the repository at this point in the history
  • Loading branch information
dafeder committed Jan 14, 2022
1 parent b0ec51a commit d87ac4f
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 39 deletions.
70 changes: 32 additions & 38 deletions modules/harvest/src/Service.php
Original file line number Diff line number Diff line change
Expand Up @@ -224,59 +224,53 @@ private function getLastHarvestRunId(string $id) {
/**
* Publish a harvest.
*
* @param string $id
* @param string $harvestId
* Harvest identifier.
*
* @return array
* The uuids of the published datasets.
*/
public function publish(string $id): array {
public function publish(string $harvestId): array {

$lastRunInfoObj = $this->getLastRunInfoObj($id);
if (!isset($lastRunInfoObj->status->extracted_items_ids)) {
$lastRunId = $this->getLastHarvestRunId($harvestId);
$lastRunInfo = json_decode($this->getHarvestRunInfo($harvestId, $lastRunId));
$status = $lastRunInfo->status ?? NULL;
if (!isset($status->extracted_items_ids)) {
return [];
}

return $this->publishHelper($id, $lastRunInfoObj->status);
}

/**
* Private.
*/
private function getLastRunInfoObj(string $harvestId) {
$lastRunId = $this->getLastHarvestRunId($harvestId);
$lastRunInfoJsonString = $this->getHarvestRunInfo($harvestId, $lastRunId);
return json_decode($lastRunInfoJsonString);
}

/**
* Private.
*/
private function publishHelper(string $harvestId, $lastRunStatus): array {
$publishedIdentifiers = [];

foreach ($lastRunStatus->extracted_items_ids as $uuid) {
try {
if ($this->metastorePublishHelper($lastRunStatus, $uuid)) {
$publishedIdentifiers[] = $uuid;
}
}
catch (\Exception $e) {
$this->error("Error publishing dataset {$uuid} in harvest {$harvestId}: {$e->getMessage()}");
}
$published = [];
foreach ($status->extracted_items_ids as $datasetId) {
// $this->publishHarvestedDataset() will return true if $datasetId
// could be successfully published.
$published[] = $this->publishHarvestedDataset($status, $datasetId) ? $datasetId : NULL;
}

return $publishedIdentifiers;
return array_values(array_filter($published));
}

/**
* Private.
* Use metastore service to publish a harvested item.
*
* @param object $runInfoStatus
* Status object with run information.
* @param string $datasetId
* ID to DKAN dataset.
*
* @return bool
* Whether or not publish action was successful.
*/
private function metastorePublishHelper($runInfoStatus, string $uuid): bool {
return isset($runInfoStatus->load) &&
$runInfoStatus->load->{$uuid} &&
$runInfoStatus->load->{$uuid} != 'FAILURE' &&
$this->metastore->publish('dataset', $uuid);
protected function publishHarvestedDataset($runInfoStatus, string $datasetId): bool {
try {
return isset($runInfoStatus->load) &&
$runInfoStatus->load->{$datasetId} &&
$runInfoStatus->load->{$datasetId} != 'FAILURE' &&
$this->metastore->publish('dataset', $datasetId);
}
catch (\Exception $e) {
$this->error("Error publishing dataset {$datasetId}: {$e->getMessage()}");
return FALSE;
}
}

/**
Expand Down
2 changes: 1 addition & 1 deletion modules/harvest/tests/src/Unit/ServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ public function testPublish() {
$this->assertEquals(['abcd-1003'], $result);

$loggerResult = $logger->getStoredInput('error')[0];
$error = 'Error publishing dataset abcd-1002 in harvest 1: FooBar';
$error = 'Error publishing dataset abcd-1002: FooBar';
$this->assertEquals($error, $loggerResult);

$result = $service->publish('2');
Expand Down

0 comments on commit d87ac4f

Please sign in to comment.