Cleanup, bugfixes
This commit is contained in:
		@@ -3,11 +3,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
foreach ([
 | 
					foreach ([
 | 
				
			||||||
    __DIR__."/../vendor",
 | 
					    __DIR__."/../vendor",
 | 
				
			||||||
    __DIR__."/../../../vendor"
 | 
					    __DIR__."/../../../vendor",
 | 
				
			||||||
 | 
					    __DIR__."/vendor",
 | 
				
			||||||
] as $dir) {
 | 
					] as $dir) {
 | 
				
			||||||
    if (file_exists($dir."/autoload.php")) {
 | 
					    if (file_exists($dir."/autoload.php")) {
 | 
				
			||||||
 | 
					        define("COMPOSER_VENDOR_PATH", $dir);
 | 
				
			||||||
        require_once $dir."/autoload.php";
 | 
					        require_once $dir."/autoload.php";
 | 
				
			||||||
        echo $dir."\n";
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,5 +17,13 @@ $datasetManager = new NoccyLabs\Dataset\DatasetManager();
 | 
				
			|||||||
$datasets = $datasetManager->getAvailableDatasets();
 | 
					$datasets = $datasetManager->getAvailableDatasets();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
foreach ($datasets as $dataset) {
 | 
					foreach ($datasets as $dataset) {
 | 
				
			||||||
    echo $dataset->getIdentifier()."\n";
 | 
					    echo $dataset->getIdentifier()." (".$dataset->getVersion().")\n";
 | 
				
			||||||
 | 
					    $reader = $dataset->open();
 | 
				
			||||||
 | 
					    $rows = 0;
 | 
				
			||||||
 | 
					    $headers = null;
 | 
				
			||||||
 | 
					    foreach ($reader as $row) {
 | 
				
			||||||
 | 
					        if (!$headers) $headers = array_keys($row);
 | 
				
			||||||
 | 
					        $rows++;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    echo "  ".$rows." rows\n  - ".join("\n  - ",$headers)."\n";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,10 +11,13 @@ class Dataset
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    protected array $options;
 | 
					    protected array $options;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function __construct(string $identifier, array $options)
 | 
					    protected ?string $version;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function __construct(string $identifier, array $options, ?string $version=null)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->identifier = $identifier;
 | 
					        $this->identifier = $identifier;
 | 
				
			||||||
        $this->options = $options;
 | 
					        $this->options = $options;
 | 
				
			||||||
 | 
					        $this->version = $version;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function getIdentifier(): string
 | 
					    public function getIdentifier(): string
 | 
				
			||||||
@@ -22,6 +25,11 @@ class Dataset
 | 
				
			|||||||
        return $this->identifier;
 | 
					        return $this->identifier;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function getVersion(): ?string
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return $this->version;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function open(): ReaderInterface
 | 
					    public function open(): ReaderInterface
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $filename = $this->options['filename'];
 | 
					        $filename = $this->options['filename'];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,9 +11,9 @@ namespace NoccyLabs\Dataset;
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
class DatasetManager
 | 
					class DatasetManager
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    private static array $packageVersions = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static array $datasets = [];
 | 
				
			||||||
    private static $datasets = [];
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function __construct()
 | 
					    public function __construct()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -47,6 +47,15 @@ class DatasetManager
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        $glob = glob($root."/*/*/dataset.json");
 | 
					        $glob = glob($root."/*/*/dataset.json");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self::$packageVersions = [];
 | 
				
			||||||
 | 
					        $fn = realpath($root."/composer/installed.php");
 | 
				
			||||||
 | 
					        if (file_exists($fn)) {
 | 
				
			||||||
 | 
					            $versions = include $fn;
 | 
				
			||||||
 | 
					            foreach ($versions['versions'] as $name=>$version) {
 | 
				
			||||||
 | 
					                self::$packageVersions[$name] = $version['version'];
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        foreach ($glob as $match) {
 | 
					        foreach ($glob as $match) {
 | 
				
			||||||
            $path = dirname($match);
 | 
					            $path = dirname($match);
 | 
				
			||||||
            $package = basename(dirname($path))."/".basename($path);
 | 
					            $package = basename(dirname($path))."/".basename($path);
 | 
				
			||||||
@@ -81,20 +90,24 @@ class DatasetManager
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private function loadDatasets(array $datasets, ?string $prefix, string $package, string $path)
 | 
					    private function loadDatasets(array $datasets, ?string $prefix, string $package, string $path)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        foreach ($datasets as $name=>$info) {
 | 
					        foreach ($datasets as $name=>$options) {
 | 
				
			||||||
            if (!array_key_exists('filename', $info)) {
 | 
					            if (!array_key_exists('filename', $options)) {
 | 
				
			||||||
                $this->loadDatasets($info, ltrim($prefix . "." . $name, "."), $package, $path);
 | 
					                $this->loadDatasets($options, ltrim($prefix . "." . $name, "."), $package, $path);
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            $info['filename'] = $path . "/" . $info['filename'];
 | 
					            $options['filename'] = $path . "/" . $options['filename'];
 | 
				
			||||||
            $pn = sprintf("%s#%s", $package, ltrim($prefix.".".$name,"."));
 | 
					            $pn = sprintf("%s#%s", $package, ltrim($prefix.".".$name,"."));
 | 
				
			||||||
            $ds = new Dataset($pn, $info);
 | 
					            $pv = self::$packageVersions[$package]??null;
 | 
				
			||||||
 | 
					            $ds = new Dataset($pn, $options, $pv);
 | 
				
			||||||
            $this->registerDataset($ds);
 | 
					            $this->registerDataset($ds);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private function determineVendorPath(): ?string
 | 
					    private function determineVendorPath(): ?string
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        if (defined("COMPOSER_VENDOR_PATH")) {
 | 
				
			||||||
 | 
					            return COMPOSER_VENDOR_PATH;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        if (file_exists(__DIR__."/../../../autoload.php")) {
 | 
					        if (file_exists(__DIR__."/../../../autoload.php")) {
 | 
				
			||||||
            // we are installed as a composer package
 | 
					            // we are installed as a composer package
 | 
				
			||||||
            return dirname(__DIR__, 3);
 | 
					            return dirname(__DIR__, 3);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user