jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/378008 )
Change subject: Have a default Site but allow total overriding.
......................................................................
Have a default Site but allow total overriding.
This also adds a named wikimedia specific site as would be
deployed at a later date.
Change-Id: Id0ecb48fe1ee6e7f9b819551d877a2787b12808c
---
M extension.json
M src/Remote/MediaWiki/SiteWiring.php
M src/ServiceWiring.php
M tests/phpunit/SpecialImportFileIntegrationTest.php
4 files changed, 94 insertions(+), 88 deletions(-)
Approvals:
WMDE-Fisch: Looks good to me, approved
jenkins-bot: Verified
diff --git a/extension.json b/extension.json
index fc39999..941701b 100644
--- a/extension.json
+++ b/extension.json
@@ -83,9 +83,7 @@
"config": {
"FileImporterRequiredRight": "upload",
"FileImporterInBeta": true,
- "FileImporterSourceSiteServices": [
- "FileImporterSitesTableMediaWikiSite"
- ],
+ "FileImporterSourceSiteServices": [],
"FileImporterTextPotentialProblems": [],
"FileImporterTextReplacements": []
},
diff --git a/src/Remote/MediaWiki/SiteWiring.php
b/src/Remote/MediaWiki/SiteWiring.php
index 382b450..f90ec49 100644
--- a/src/Remote/MediaWiki/SiteWiring.php
+++ b/src/Remote/MediaWiki/SiteWiring.php
@@ -2,17 +2,10 @@
namespace FileImporter;
-use FileImporter\Remote\MediaWiki\AnyMediaWikiFileUrlChecker;
-use FileImporter\Remote\MediaWiki\SiteTableSiteLookup;
-use FileImporter\Remote\MediaWiki\SiteTableSourceUrlChecker;
-use FileImporter\Services\Http\HttpRequestExecutor;
-use FileImporter\Services\SourceSite;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
return [
-
- // General services
'FileImporterMediaWikiHttpApiLookup' => function ( MediaWikiServices
$services ) {
/** @var \FileImporter\Services\Http\HttpRequestExecutor
$httpRequestExecutor */
@@ -28,73 +21,5 @@
'FileImporterMediaWikiSiteTableSiteLookup' => function (
MediaWikiServices $services ) {
return new Remote\MediaWiki\SiteTableSiteLookup(
$services->getSiteLookup() );
},
-
- // SourceSite services
-
- /**
- * This SourceSite service allows importing from remote MediaWiki sites
that are defined
- * in the local wikis sites table.
- */
- 'FileImporterSitesTableMediaWikiSite' => function ( MediaWikiServices
$services ) {
- /**
- * @var SiteTableSiteLookup $siteTableLookup
- * @var \FileImporter\Remote\MediaWiki\HttpApiLookup
$httpApiLookup
- * @var \FileImporter\Services\Http\HttpRequestExecutor
$httpRequestExecutor
- */
- $siteTableLookup = $services->getService(
'FileImporterMediaWikiSiteTableSiteLookup' );
- $httpApiLookup = $services->getService(
'FileImporterMediaWikiHttpApiLookup' );
- $httpRequestExecutor = $services->getService(
'FileImporterHttpRequestExecutor' );
-
- $detailRetriever = new Remote\MediaWiki\ApiDetailRetriever(
- $httpApiLookup,
- $httpRequestExecutor
- );
- $detailRetriever->setLogger( LoggerFactory::getInstance(
'FileImporter' ) );
-
- // TODO SiteTableSourceUrlChecker here should have a logger....
- // TODO ApiImportTitleChecker here should have a logger....
-
- $site = new SourceSite(
- new SiteTableSourceUrlChecker( $siteTableLookup ),
- $detailRetriever,
- new Remote\MediaWiki\RemoteApiImportTitleChecker(
- $httpApiLookup,
- $httpRequestExecutor
- )
- );
-
- return $site;
- },
-
- /**
- * This SourceSite service allows importing from any remote MediaWiki
site.
- */
- 'FileImporterAnyMediaWikiSite' => function ( MediaWikiServices
$services ) {
- /**
- * @var \FileImporter\Remote\MediaWiki\HttpApiLookup
$httpApiLookup
- * @var HttpRequestExecutor $httpRequestExecutor
- */
- $httpApiLookup = $services->getService(
'FileImporterMediaWikiHttpApiLookup' );
- $httpRequestExecutor = $services->getService(
'FileImporterHttpRequestExecutor' );
-
- $detailRetriever = new Remote\MediaWiki\ApiDetailRetriever(
- $httpApiLookup,
- $httpRequestExecutor
- );
- $detailRetriever->setLogger( LoggerFactory::getInstance(
'FileImporter' ) );
-
- // TODO ApiImportTitleChecker here should have a logger....
-
- $site = new SourceSite(
- new AnyMediaWikiFileUrlChecker(),
- $detailRetriever,
- new Remote\MediaWiki\RemoteApiImportTitleChecker(
- $httpApiLookup,
- $httpRequestExecutor
- )
- );
-
- return $site;
- }
];
diff --git a/src/ServiceWiring.php b/src/ServiceWiring.php
index 6910d24..8977f74 100644
--- a/src/ServiceWiring.php
+++ b/src/ServiceWiring.php
@@ -2,11 +2,15 @@
namespace FileImporter;
+use FileImporter\Remote\MediaWiki\AnyMediaWikiFileUrlChecker;
+use FileImporter\Remote\MediaWiki\SiteTableSiteLookup;
+use FileImporter\Remote\MediaWiki\SiteTableSourceUrlChecker;
use FileImporter\Services\DuplicateFileRevisionChecker;
use FileImporter\Services\Http\HttpRequestExecutor;
use FileImporter\Services\Importer;
use FileImporter\Services\ImportPlanFactory;
use FileImporter\Services\NullRevisionCreator;
+use FileImporter\Services\SourceSite;
use FileImporter\Services\SourceSiteLocator;
use FileImporter\Services\UploadBase\UploadBaseFactory;
use FileImporter\Services\WikiRevisionFactory;
@@ -19,10 +23,15 @@
'FileImporterSourceSiteLocator' => function ( MediaWikiServices
$services ) {
$config = $services->getMainConfig();
-
+ $sourceSiteServices = $config->get(
'FileImporterSourceSiteServices' );
$sourceSites = [];
- foreach ( $config->get( 'FileImporterSourceSiteServices' ) as
$serviceName ) {
- $sourceSites[] = $services->getService( $serviceName );
+
+ if ( !empty( $sourceSiteServices ) ) {
+ foreach ( $sourceSiteServices as $serviceName ) {
+ $sourceSites[] = $services->getService(
$serviceName );
+ }
+ } else {
+ $sourceSites[] = $services->getService(
'FileImporter-Site-DefaultMediaWiki' );
}
return new SourceSiteLocator( $sourceSites );
@@ -90,4 +99,71 @@
return new UploadBaseFactory( LoggerFactory::getInstance(
'FileImporter' ) );
},
+ // Sites
+
+ /**
+ * This configuration example can be used for development and is very
plain and lenient!
+ * It will allow importing files form ANY mediawiki site.
+ */
+ 'FileImporter-Site-DefaultMediaWiki' => function ( MediaWikiServices
$services ) {
+ /**
+ * @var \FileImporter\Remote\MediaWiki\HttpApiLookup
$httpApiLookup
+ * @var HttpRequestExecutor $httpRequestExecutor
+ */
+ $httpApiLookup = $services->getService(
'FileImporterMediaWikiHttpApiLookup' );
+ $httpRequestExecutor = $services->getService(
'FileImporterHttpRequestExecutor' );
+
+ $detailRetriever = new Remote\MediaWiki\ApiDetailRetriever(
+ $httpApiLookup, $httpRequestExecutor
+ );
+ $detailRetriever->setLogger( LoggerFactory::getInstance(
'FileImporter' ) );
+
+ // TODO ApiImportTitleChecker here should have a logger....
+
+ $site = new SourceSite(
+ new AnyMediaWikiFileUrlChecker(),
+ $detailRetriever,
+ new Remote\MediaWiki\RemoteApiImportTitleChecker(
+ $httpApiLookup, $httpRequestExecutor
+ )
+ );
+
+ return $site;
+ },
+
+ /**
+ * This configuration example is setup to handle the wikimedia style
setup.
+ * This only allows importing files from sites in the sites table.
+ * TODO move files on disk not over http
+ * TODO normalize domains such as en.m.wikipedia.org
+ */
+ 'FileImporter-WikimediaSitesTableSite' => function ( MediaWikiServices
$services ) {
+ /**
+ * @var SiteTableSiteLookup $siteTableLookup
+ * @var \FileImporter\Remote\MediaWiki\HttpApiLookup
$httpApiLookup
+ * @var \FileImporter\Services\Http\HttpRequestExecutor
$httpRequestExecutor
+ */
+ $siteTableLookup = $services->getService(
'FileImporterMediaWikiSiteTableSiteLookup' );
+ $httpApiLookup = $services->getService(
'FileImporterMediaWikiHttpApiLookup' );
+ $httpRequestExecutor = $services->getService(
'FileImporterHttpRequestExecutor' );
+
+ $detailRetriever = new Remote\MediaWiki\ApiDetailRetriever(
+ $httpApiLookup, $httpRequestExecutor
+ );
+ $detailRetriever->setLogger( LoggerFactory::getInstance(
'FileImporter' ) );
+
+ // TODO SiteTableSourceUrlChecker here should have a logger....
+ // TODO ApiImportTitleChecker here should have a logger....
+
+ $site = new SourceSite(
+ new SiteTableSourceUrlChecker( $siteTableLookup ),
+ $detailRetriever,
+ new Remote\MediaWiki\RemoteApiImportTitleChecker(
+ $httpApiLookup, $httpRequestExecutor
+ )
+ );
+
+ return $site;
+ },
+
];
diff --git a/tests/phpunit/SpecialImportFileIntegrationTest.php
b/tests/phpunit/SpecialImportFileIntegrationTest.php
index c77a02b..8354fbd 100644
--- a/tests/phpunit/SpecialImportFileIntegrationTest.php
+++ b/tests/phpunit/SpecialImportFileIntegrationTest.php
@@ -40,12 +40,6 @@
$this->setMwGlobals( 'wgEnableUploads', true );
- // Test the special page with a default config
- $this->setMwGlobals(
- 'wgFileImporterSourceSiteServices',
- [ 'FileImporterSitesTableMediaWikiSite' ]
- );
-
$commonsSite = $this->getMockSite( 'commonswiki',
'commons.wikimedia.org' );
$hashSiteStore = new HashSiteStore( [ $commonsSite ] );
$siteTableSiteLookup = new SiteTableSiteLookup( $hashSiteStore
);
@@ -105,7 +99,8 @@
function ( $html ) {
$this->assertInitialInputFormPreset(
$html );
$this->assertWarningBox( $html, 'Can\'t
import the given URL' );
- }
+ },
+ [ 'FileImporter-WikimediaSitesTableSite' ]
],
'Bad domain (malformed?)' => [
new FauxRequest( [
@@ -131,6 +126,7 @@
'File not found:
https://commons.wikimedia.org/wiki/ThisIsNotAFileFooBarBarBar'
);
},
+ [],
true
],
'Good file' => [
@@ -151,6 +147,7 @@
'Chicken In Snow.JPG'
);
},
+ [],
true
],
'Good file & Good target title' => [
@@ -173,6 +170,7 @@
'Chicken In Snow CHANGED.JPG'
);
},
+ [],
true
],
];
@@ -266,11 +264,20 @@
$userOrBool,
$expectedExceptionDetails = null,
$htmlAssertionCallable,
+ $sourceSiteServicesOverride = [],
$requiresAccessToCommons = false
) {
if ( $requiresAccessToCommons && !self::$hasAccessToCommons ) {
$this->markTestSkipped( 'This test requires http access
to https://commons.wikimedia.org' );
}
+
+ if ( !empty( $sourceSiteServicesOverride ) ) {
+ $this->setMwGlobals(
+ 'wgFileImporterSourceSiteServices',
+ $sourceSiteServicesOverride
+ );
+ }
+
if ( $expectedExceptionDetails ) {
$this->setExpectedException(
$expectedExceptionDetails['name'],
--
To view, visit https://gerrit.wikimedia.org/r/378008
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Id0ecb48fe1ee6e7f9b819551d877a2787b12808c
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/extensions/FileImporter
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>
Gerrit-Reviewer: Andrew-WMDE <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: WMDE-Fisch <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits