Dataset scanning
This commit is contained in:
		| @@ -5,11 +5,14 @@ namespace NoccyLabs\Dataset; | |||||||
|  |  | ||||||
| class Dataset | class Dataset | ||||||
| { | { | ||||||
|     protected string $identfier; |     protected string $identifier; | ||||||
|  |      | ||||||
|  |     protected array $options; | ||||||
|  |  | ||||||
|     public function __construct(string $identifier, string $filename, array $metadata) |     public function __construct(string $identifier, array $options) | ||||||
|     { |     { | ||||||
|         $this->identifier = $identifier; |         $this->identifier = $identifier; | ||||||
|  |         $this->options = $options; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function getIdentifier(): string |     public function getIdentifier(): string | ||||||
|   | |||||||
| @@ -22,6 +22,16 @@ class DatasetManager | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public function getAvailableDatasets(): array | ||||||
|  |     { | ||||||
|  |         return self::$datasets; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Find the vendor directory and try to locate all bundled datasets | ||||||
|  |      *  | ||||||
|  |      *  | ||||||
|  |      */ | ||||||
|     private function scanForDatasets() |     private function scanForDatasets() | ||||||
|     { |     { | ||||||
|         $root = $this->determineVendorPath(); |         $root = $this->determineVendorPath(); | ||||||
| @@ -33,9 +43,47 @@ class DatasetManager | |||||||
|         $glob = glob($root."/*/*/dataset.json"); |         $glob = glob($root."/*/*/dataset.json"); | ||||||
|  |  | ||||||
|         foreach ($glob as $match) { |         foreach ($glob as $match) { | ||||||
|             $path = dirname($glob); |             $path = dirname($match); | ||||||
|             $package = basename(dirname($path))."/".basename($path); |             $package = basename(dirname($path))."/".basename($path); | ||||||
|             printf("found: %s\n", $package); |             $this->scanPackageDatasets($package, $path); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      *  | ||||||
|  |      *  | ||||||
|  |      *  | ||||||
|  |      * @param string The package name (org/package) | ||||||
|  |      * @param string The full path to the package (..../vendor/org/package) | ||||||
|  |      */ | ||||||
|  |     private function scanPackageDatasets(string $package, string $path) | ||||||
|  |     { | ||||||
|  |         $file = $path."/dataset.json"; | ||||||
|  |         $json = @json_decode( | ||||||
|  |             @file_get_contents($file), | ||||||
|  |             true | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         if (!$json) { | ||||||
|  |             trigger_error("Unable to parse dataset.json in {$package}"); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         $this->loadDatasets($json['datasets'], null, $package, $path); | ||||||
|  |         //printf("found %d sets in %s\n", count($json['datasets']), $package); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private function loadDatasets(array $datasets, ?string $prefix, string $package, string $path) | ||||||
|  |     { | ||||||
|  |         foreach ($datasets as $name=>$info) { | ||||||
|  |             if (!array_key_exists('filename', $info)) { | ||||||
|  |                 $this->loadDatasets($info, ltrim($prefix . "." . $name, "."), $package, $path); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             $pn = sprintf("%s#%s", $package, ltrim($prefix.".".$name,".")); | ||||||
|  |             $ds = new Dataset($pn, $info); | ||||||
|  |             $this->registerDataset($ds); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user