Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion WikibaseImport.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
require_once __DIR__ . '/vendor/autoload.php';
}

wfLoadExtension( 'WikibaseImport' );
wfLoadExtension( 'WikibaseImport', __DIR__ . '/extension.json' );
} else {
die( 'WikibaseImport requires MediaWiki 1.25+' );
}
124 changes: 3 additions & 121 deletions maintenance/importEntities.php
Original file line number Diff line number Diff line change
@@ -1,132 +1,14 @@
<?php

namespace Wikibase\Import\Maintenance;

use Asparagus\QueryBuilder;
use Asparagus\QueryExecuter;
use Exception;
use Psr\Log\LoggerInterface;
use Wikibase\Import\Console\ImportOptions;
use Wikibase\Import\EntityId\EntityIdListBuilderFactory;
use Wikibase\Import\EntityImporterFactory;
use Wikibase\Import\LoggerFactory;
use Wikibase\Import\QueryRunner;
use Wikibase\Import\PropertyIdLister;
use Wikibase\Repo\WikibaseRepo;
use \Wikibase\Import\Maintenance\ImportEntities;

$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
$IP = __DIR__ . '/../../..';
}

require_once "$IP/maintenance/Maintenance.php";
require_once __DIR__ . '/../src/Maintenance/ImportEntities.php';

class ImportEntities extends \Maintenance {

/**
* @var LoggerInterface
*/
private $logger;

public function __construct() {
parent::__construct();

$this->addOptions();
}

private function addOptions() {
$this->addOption( 'file', 'File with list of entity ids to import', false, true );
$this->addOption( 'entity', 'ID of entity to import', false, true );
$this->addOption( 'query', 'Import items with property and entity id value', false, true );
$this->addOption( 'range', 'Range of ids to import', false, true );
$this->addOption( 'all-properties', 'Import all properties', false, false );
}

public function execute() {
$this->logger = LoggerFactory::newLogger( 'wikibase-import', $this->mQuiet );

$importOptions = $this->extractOptions();

$entityIdListBuilderFactory = $this->newEntityIdListBuilderFactory();

foreach ( $this->getValidOptions() as $option ) {
if ( $importOptions->hasOption( $option ) ) {
$entityIdListBuilder = $entityIdListBuilderFactory->newEntityIdListBuilder(
$option
);

if ( $option === 'all-properties' ) {
$input = 'all-properties';
} else {
$input = $importOptions->getOption( $option );
}

break;
}
}

if ( !isset( $entityIdListBuilder ) ) {
$this->logger->error( 'ERROR: No valid import option was provided' );

return;
} else {
try {
$ids = $entityIdListBuilder->getEntityIds( $input );

$entityImporter = $this->newEntityImporter();
$entityImporter->importEntities( $ids );
} catch ( Exception $ex ) {
$this->logger->error( $ex->getMessage() );
}

$this->logger->info( 'Done' );
}
}

private function extractOptions() {
$options = [];

foreach ( $this->getValidOptions() as $optionName ) {
$options[$optionName] = $this->getOption( $optionName );
}

if ( empty( $options ) ) {
$this->maybeHelp( true );
}

return new ImportOptions( $options );
}

private function getValidOptions() {
return [ 'entity', 'file', 'all-properties', 'query', 'range' ];
}

private function newEntityIdListBuilderFactory() {
$queryRunner = new QueryRunner(
new QueryBuilder( $this->getConfig()->get( 'WBImportQueryPrefixes' ) ),
new QueryExecuter( $this->getConfig()->get( 'WBImportQueryUrl' ) )
);

return new EntityIdListBuilderFactory(
WikibaseRepo::getDefaultInstance()->getEntityIdParser(),
new PropertyIdLister(),
$queryRunner,
$this->getConfig()->get( 'WBImportSourceApi' )
);
}

private function newEntityImporter() {
$entityImporterFactory = new EntityImporterFactory(
WikibaseRepo::getDefaultInstance()->getStore()->getEntityStore(),
wfGetLB(),
$this->logger,
$this->getConfig()->get( 'WBImportSourceApi' )
);

return $entityImporterFactory->newEntityImporter();
}

}

$maintClass = "Wikibase\Import\Maintenance\ImportEntities";
$maintClass = ImportEntities::class;
require_once RUN_MAINTENANCE_IF_MAIN;
35 changes: 22 additions & 13 deletions src/EntityId/EntityIdListBuilderFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

namespace Wikibase\Import\EntityId;

use Asparagus\QueryBuilder;
use Asparagus\QueryExecuter;
use InvalidArgumentException;
use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\Import\PropertyIdLister;
Expand All @@ -20,9 +22,14 @@ class EntityIdListBuilderFactory {
private $propertyIdLister;

/**
* @var QueryRunner
* @var array
*/
private $queryRunner;
private $queryPrefixes;

/**
* @var string
*/
private $queryUrl;

/**
* @var string
Expand All @@ -32,18 +39,21 @@ class EntityIdListBuilderFactory {
/**
* @param EntityIdParser $idParser
* @param PropertyIdLister $propertyIdLister
* @param QueryRunner $queryRunner
* @param array $queryPrefixes
* @param string $queryUrl
* @param string $apiUrl
*/
public function __construct(
EntityIdParser $idParser,
PropertyIdLister $propertyIdLister,
QueryRunner $queryRunner,
array $queryPrefixes,
$queryUrl,
$apiUrl
) {
$this->idParser = $idParser;
$this->propertyIdLister = $propertyIdLister;
$this->queryRunner = $queryRunner;
$this->queryPrefixes = $queryPrefixes;
$this->queryUrl = $queryUrl;
$this->apiUrl = $apiUrl;
}

Expand Down Expand Up @@ -71,10 +81,7 @@ public function newEntityIdListBuilder( $mode ) {
}

private function newAllPropertiesEntityIdListBuilder() {
return new AllPropertiesEntityIdListBuilder(
$this->propertyIdLister,
$this->apiUrl
);
return new AllPropertiesEntityIdListBuilder( $this->propertyIdLister, $this->apiUrl );
}

private function newFileEntityIdListBuilder() {
Expand All @@ -86,10 +93,12 @@ private function newIndividualEntityIdListBuilder() {
}

private function newQueryEntityIdListBuilder() {
return new QueryEntityIdListBuilder(
$this->idParser,
$this->queryRunner
);
return new QueryEntityIdListBuilder( $this->idParser, $this->newQueryRunner() );
}

private function newQueryRunner() {
return new QueryRunner( new QueryBuilder( $this->queryPrefixes ),
new QueryExecuter( $this->queryUrl ) );
}

private function newRangeEntityIdListBuilder() {
Expand Down
3 changes: 2 additions & 1 deletion src/EntityImporter.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Wikibase\DataModel\Snak\PropertyValueSnak;
use Wikibase\DataModel\Statement\StatementList;
use Wikibase\Import\Store\ImportedEntityMappingStore;
use Wikibase\Lib\Store\EntityStore;
use Wikibase\Repo\Store\WikiPageEntityStore;

class EntityImporter {
Expand Down Expand Up @@ -39,7 +40,7 @@ public function __construct(
StatementsImporter $statementsImporter,
BadgeItemUpdater $badgeItemUpdater,
ApiEntityLookup $apiEntityLookup,
WikiPageEntityStore $entityStore,
EntityStore $entityStore,
ImportedEntityMappingStore $entityMappingStore,
StatementsCountLookup $statementsCountLookup,
LoggerInterface $logger
Expand Down
5 changes: 4 additions & 1 deletion src/LoggerFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,14 @@ public static function newLogger( $loggerName, $quietMode ) {
throw new InvalidArgumentException( '$quietMode must be boolean' );
}

$formatter = new LineFormatter( "[%datetime%]: %message%\n" );
// unused
$dateTimeFormatter = new LineFormatter( "[%datetime%]: %message%\n" );

if ( $quietMode === true ) {
$handler = new NullHandler();
} else {
$formatter = new LineFormatter( "%message%\n");

$handler = new StreamHandler( 'php://stdout' );
$handler->setFormatter( $formatter );
}
Expand Down
Loading