jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/935449 )

Change subject: [IMPR] Add WikibaseFamily and DefaultWikibaseFamily class to 
family.py
......................................................................

[IMPR] Add WikibaseFamily and DefaultWikibaseFamily class to family.py

- Add WikibaseFamily which holds default settings for a Wikibase like
  interface and entity_sources.
- Add DefaultWikibaseFamily which holds default settings for
  calendarmodel, default_globe and globes
- derive commons_family.Family and wikidata_family.Family from
  DefaultWikibaseFamily to prevent code duplication
- derive lingualibre_family.Family from WikibaseFamily to add the
  missing entity_sources. Otherwise an
  AttributeError: DataSite instance has no attribute 'entity_sources
  will arrise.

See also: https://www.mediawiki.org/wiki/Topic:Xl9dhs135tuqj6w6

Change-Id: Ic7423c82f9635ef8e5e7b86fc73d49c2eae17116
---
M pywikibot/families/commons_family.py
M pywikibot/family.py
M pywikibot/families/lingualibre_family.py
M pywikibot/families/wikidata_family.py
4 files changed, 127 insertions(+), 123 deletions(-)

Approvals:
  Matěj Suchánek: Looks good to me, but someone else must approve
  Xqt: Looks good to me, approved
  jenkins-bot: Verified




diff --git a/pywikibot/families/commons_family.py 
b/pywikibot/families/commons_family.py
index 578c715..5545937 100644
--- a/pywikibot/families/commons_family.py
+++ b/pywikibot/families/commons_family.py
@@ -7,10 +7,15 @@
 from pywikibot import family


-# The Wikimedia Commons family
-class Family(family.WikimediaFamily):
+class Family(family.WikimediaFamily, family.DefaultWikibaseFamily):

-    """Family class for Wikimedia Commons."""
+    """Family class for Wikimedia Commons.
+
+    .. versionchanged:: 6.5
+       :meth:`family.WikibaseFamily.interface` was changed  to
+       :class:`DataSite<pywikibot.site._datasite.DataSite>` to enable
+       structured data.
+    """

     name = 'commons'

@@ -39,62 +44,6 @@
         '_default': (('/doc', ), ['commons']),
     }

-    def interface(self, code) -> str:
-        """Return 'DataSite' to enable structured data.
-
-        .. versionadded:: 6.5
-        """
-        return 'DataSite'
-
-    def calendarmodel(self, code) -> str:
-        """Default calendar model for WbTime datatype."""
-        return 'http://www.wikidata.org/entity/Q1985727'
-
-    def default_globe(self, code) -> str:
-        """Default globe for Coordinate datatype."""
-        return 'earth'
-
-    def globes(self, code):
-        """Supported globes for Coordinate datatype."""
-        return {
-            'ariel': 'http://www.wikidata.org/entity/Q3343',
-            'bennu': 'http://www.wikidata.org/entity/Q11558',
-            'callisto': 'http://www.wikidata.org/entity/Q3134',
-            'ceres': 'http://www.wikidata.org/entity/Q596',
-            'deimos': 'http://www.wikidata.org/entity/Q7548',
-            'dione': 'http://www.wikidata.org/entity/Q15040',
-            'earth': 'http://www.wikidata.org/entity/Q2',
-            'enceladus': 'http://www.wikidata.org/entity/Q3303',
-            'eros': 'http://www.wikidata.org/entity/Q16711',
-            'europa': 'http://www.wikidata.org/entity/Q3143',
-            'ganymede': 'http://www.wikidata.org/entity/Q3169',
-            'gaspra': 'http://www.wikidata.org/entity/Q158244',
-            'hyperion': 'http://www.wikidata.org/entity/Q15037',
-            'iapetus': 'http://www.wikidata.org/entity/Q17958',
-            'io': 'http://www.wikidata.org/entity/Q3123',
-            'jupiter': 'http://www.wikidata.org/entity/Q319',
-            'lutetia': 'http://www.wikidata.org/entity/Q107556',
-            'mars': 'http://www.wikidata.org/entity/Q111',
-            'mercury': 'http://www.wikidata.org/entity/Q308',
-            'mimas': 'http://www.wikidata.org/entity/Q15034',
-            'miranda': 'http://www.wikidata.org/entity/Q3352',
-            'moon': 'http://www.wikidata.org/entity/Q405',
-            'oberon': 'http://www.wikidata.org/entity/Q3332',
-            'phobos': 'http://www.wikidata.org/entity/Q7547',
-            'phoebe': 'http://www.wikidata.org/entity/Q17975',
-            'pluto': 'http://www.wikidata.org/entity/Q339',
-            'rhea': 'http://www.wikidata.org/entity/Q15050',
-            'ryugu': 'http://www.wikidata.org/entity/Q1385178',
-            'steins': 'http://www.wikidata.org/entity/Q150249',
-            'tethys': 'http://www.wikidata.org/entity/Q15047',
-            'titan': 'http://www.wikidata.org/entity/Q2565',
-            'titania': 'http://www.wikidata.org/entity/Q3322',
-            'triton': 'http://www.wikidata.org/entity/Q3359',
-            'umbriel': 'http://www.wikidata.org/entity/Q3338',
-            'venus': 'http://www.wikidata.org/entity/Q313',
-            'vesta': 'http://www.wikidata.org/entity/Q3030',
-        }
-
     def entity_sources(self, code):
         if code == 'commons':
             return {
diff --git a/pywikibot/families/lingualibre_family.py 
b/pywikibot/families/lingualibre_family.py
index 81f1377..cdcc658 100644
--- a/pywikibot/families/lingualibre_family.py
+++ b/pywikibot/families/lingualibre_family.py
@@ -3,14 +3,14 @@
 .. versionaddded: 6.5
 """
 #
-# (C) Pywikibot team, 2021-2022
+# (C) Pywikibot team, 2021-2023
 #
 # Distributed under the terms of the MIT license.
 #
 from pywikibot import family


-class Family(family.WikimediaFamily):
+class Family(family.WikimediaFamily, family.WikibaseFamily):

     """Family class for Lingua Libre.

@@ -28,7 +28,3 @@
     def scriptpath(self, code) -> str:
         """Return the script path for this family."""
         return ''
-
-    def interface(self, code) -> str:
-        """Return 'DataSite'."""
-        return 'DataSite'
diff --git a/pywikibot/families/wikidata_family.py 
b/pywikibot/families/wikidata_family.py
index 816e147..780c482 100644
--- a/pywikibot/families/wikidata_family.py
+++ b/pywikibot/families/wikidata_family.py
@@ -7,8 +7,7 @@
 from pywikibot import config, family


-# The Wikidata family
-class Family(family.WikimediaFamily):
+class Family(family.WikimediaFamily, family.DefaultWikibaseFamily):

     """Family class for Wikidata."""

@@ -40,59 +39,3 @@
     config.cosmetic_changes_disable.update({
         'wikidata': ('wikidata', 'test', 'beta')
     })
-
-    def interface(self, code) -> str:
-        """Return 'DataSite'."""
-        return 'DataSite'
-
-    def calendarmodel(self, code) -> str:
-        """Default calendar model for WbTime datatype."""
-        return 'http://www.wikidata.org/entity/Q1985727'
-
-    def default_globe(self, code) -> str:
-        """Default globe for Coordinate datatype."""
-        return 'earth'
-
-    def globes(self, code):
-        """Supported globes for Coordinate datatype."""
-        return {
-            'ariel': 'http://www.wikidata.org/entity/Q3343',
-            'bennu': 'http://www.wikidata.org/entity/Q11558',
-            'callisto': 'http://www.wikidata.org/entity/Q3134',
-            'ceres': 'http://www.wikidata.org/entity/Q596',
-            'deimos': 'http://www.wikidata.org/entity/Q7548',
-            'dione': 'http://www.wikidata.org/entity/Q15040',
-            'earth': 'http://www.wikidata.org/entity/Q2',
-            'enceladus': 'http://www.wikidata.org/entity/Q3303',
-            'eros': 'http://www.wikidata.org/entity/Q16711',
-            'europa': 'http://www.wikidata.org/entity/Q3143',
-            'ganymede': 'http://www.wikidata.org/entity/Q3169',
-            'gaspra': 'http://www.wikidata.org/entity/Q158244',
-            'hyperion': 'http://www.wikidata.org/entity/Q15037',
-            'iapetus': 'http://www.wikidata.org/entity/Q17958',
-            'io': 'http://www.wikidata.org/entity/Q3123',
-            'jupiter': 'http://www.wikidata.org/entity/Q319',
-            'lutetia': 'http://www.wikidata.org/entity/Q107556',
-            'mars': 'http://www.wikidata.org/entity/Q111',
-            'mercury': 'http://www.wikidata.org/entity/Q308',
-            'mimas': 'http://www.wikidata.org/entity/Q15034',
-            'miranda': 'http://www.wikidata.org/entity/Q3352',
-            'moon': 'http://www.wikidata.org/entity/Q405',
-            'oberon': 'http://www.wikidata.org/entity/Q3332',
-            'phobos': 'http://www.wikidata.org/entity/Q7547',
-            'phoebe': 'http://www.wikidata.org/entity/Q17975',
-            'pluto': 'http://www.wikidata.org/entity/Q339',
-            'rhea': 'http://www.wikidata.org/entity/Q15050',
-            'ryugu': 'http://www.wikidata.org/entity/Q1385178',
-            'steins': 'http://www.wikidata.org/entity/Q150249',
-            'tethys': 'http://www.wikidata.org/entity/Q15047',
-            'titan': 'http://www.wikidata.org/entity/Q2565',
-            'titania': 'http://www.wikidata.org/entity/Q3322',
-            'triton': 'http://www.wikidata.org/entity/Q3359',
-            'umbriel': 'http://www.wikidata.org/entity/Q3338',
-            'venus': 'http://www.wikidata.org/entity/Q313',
-            'vesta': 'http://www.wikidata.org/entity/Q3030',
-        }
-
-    def entity_sources(self, code):
-        return {}
diff --git a/pywikibot/family.py b/pywikibot/family.py
index 0c87877..6a1e26e 100644
--- a/pywikibot/family.py
+++ b/pywikibot/family.py
@@ -993,6 +993,100 @@
         return f'{cls.name}.wikimedia.org'


+class WikibaseFamily(Family):
+
+    """A base class for a Wikibase Family.
+
+    .. versionadded:: 8.2
+    """
+
+    def interface(self, code) -> str:
+        """Return 'DataSite' for Wikibase family."""
+        return 'DataSite'
+
+    def entity_sources(self, code: str) -> Dict[str, Tuple[str, str]]:
+        """Provide reopsitory site information for entity types.
+
+        The result must be structured as follows:
+
+            {<entity type>: (<family code>, <family name>)}
+
+        for example:
+
+            {'property': ('test', 'wikidata')}
+
+        If an empty dict is returned, all entity types are found in the
+        current ``DataSite``.
+
+        The result is used by :meth:`DataSite.get_repo_for_entity_type
+        <pywikibot.site._datasite.DataSite.get_repo_for_entity_type>`
+        """
+        return {}
+
+
+class DefaultWikibaseFamily(WikibaseFamily):
+
+    """A base class for a Wikimedia Wikibase Family.
+
+    This class holds defauls for :meth:`calendarmodel`,
+    :meth:`default_globe` and :meth:`globes` to prevent code duplication.
+
+    .. warning:: Possibly you have to adjust the repository site in
+       :meth:`WikibaseFamily.entity_sources` to get the valid entity.
+
+    .. versionadded:: 8.2
+    """
+
+    def calendarmodel(self, code) -> str:
+        """Default calendar model for WbTime datatype."""
+        return 'http://www.wikidata.org/entity/Q1985727'
+
+    def default_globe(self, code) -> str:
+        """Default globe for Coordinate datatype."""
+        return 'earth'
+
+    def globes(self, code):
+        """Supported globes for Coordinate datatype."""
+        return {
+            'ariel': 'http://www.wikidata.org/entity/Q3343',
+            'bennu': 'http://www.wikidata.org/entity/Q11558',
+            'callisto': 'http://www.wikidata.org/entity/Q3134',
+            'ceres': 'http://www.wikidata.org/entity/Q596',
+            'deimos': 'http://www.wikidata.org/entity/Q7548',
+            'dione': 'http://www.wikidata.org/entity/Q15040',
+            'earth': 'http://www.wikidata.org/entity/Q2',
+            'enceladus': 'http://www.wikidata.org/entity/Q3303',
+            'eros': 'http://www.wikidata.org/entity/Q16711',
+            'europa': 'http://www.wikidata.org/entity/Q3143',
+            'ganymede': 'http://www.wikidata.org/entity/Q3169',
+            'gaspra': 'http://www.wikidata.org/entity/Q158244',
+            'hyperion': 'http://www.wikidata.org/entity/Q15037',
+            'iapetus': 'http://www.wikidata.org/entity/Q17958',
+            'io': 'http://www.wikidata.org/entity/Q3123',
+            'jupiter': 'http://www.wikidata.org/entity/Q319',
+            'lutetia': 'http://www.wikidata.org/entity/Q107556',
+            'mars': 'http://www.wikidata.org/entity/Q111',
+            'mercury': 'http://www.wikidata.org/entity/Q308',
+            'mimas': 'http://www.wikidata.org/entity/Q15034',
+            'miranda': 'http://www.wikidata.org/entity/Q3352',
+            'moon': 'http://www.wikidata.org/entity/Q405',
+            'oberon': 'http://www.wikidata.org/entity/Q3332',
+            'phobos': 'http://www.wikidata.org/entity/Q7547',
+            'phoebe': 'http://www.wikidata.org/entity/Q17975',
+            'pluto': 'http://www.wikidata.org/entity/Q339',
+            'rhea': 'http://www.wikidata.org/entity/Q15050',
+            'ryugu': 'http://www.wikidata.org/entity/Q1385178',
+            'steins': 'http://www.wikidata.org/entity/Q150249',
+            'tethys': 'http://www.wikidata.org/entity/Q15047',
+            'titan': 'http://www.wikidata.org/entity/Q2565',
+            'titania': 'http://www.wikidata.org/entity/Q3322',
+            'triton': 'http://www.wikidata.org/entity/Q3359',
+            'umbriel': 'http://www.wikidata.org/entity/Q3338',
+            'venus': 'http://www.wikidata.org/entity/Q313',
+            'vesta': 'http://www.wikidata.org/entity/Q3030',
+        }
+
+
 def AutoFamily(name: str, url: str) -> SingleSiteFamily:
     """
     Family that automatically loads the site configuration.

--
To view, visit https://gerrit.wikimedia.org/r/c/pywikibot/core/+/935449
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: Ic7423c82f9635ef8e5e7b86fc73d49c2eae17116
Gerrit-Change-Number: 935449
Gerrit-PatchSet: 2
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Matěj Suchánek <[email protected]>
Gerrit-Reviewer: Meno25 <[email protected]>
Gerrit-Reviewer: Pamputt <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
Gerrit-MessageType: merged
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to