jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1094477?usp=email )

Change subject: [IMPR] Add a new Site property codes
......................................................................

[IMPR] Add a new Site property codes

- add Site.codes property to give a list of site codes
- deprecate Site.languages() which returns a list of site codes
- update languages() usages

Bug: T380606
Change-Id: I2c4ceb0b9fe98f58972fc79b4d2076be20f24d36
---
M pywikibot/site/_basesite.py
M pywikibot/titletranslate.py
M tests/dry_api_tests.py
M tests/site_tests.py
4 files changed, 30 insertions(+), 15 deletions(-)

Approvals:
  jenkins-bot: Verified
  Xqt: Looks good to me, approved




diff --git a/pywikibot/site/_basesite.py b/pywikibot/site/_basesite.py
index fb30296..86ee9f8 100644
--- a/pywikibot/site/_basesite.py
+++ b/pywikibot/site/_basesite.py
@@ -74,7 +74,7 @@
                 self.obsolete = True
                 pywikibot.log(f'Site {self} instantiated and marked "obsolete"'
                               ' to prevent access')
-        elif self.__code not in self.languages():
+        elif self.__code not in self.codes:
             if self.__family.name in self.__family.langs \
                and len(self.__family.langs) == 1:
                 self.__code = self.__family.name
@@ -231,13 +231,27 @@
         """Return hash value of instance."""
         return hash(repr(self))

-    def languages(self):
-        """Return list of all valid language codes for this site's Family."""
-        return list(self.family.langs.keys())
+    @deprecated('codes', since='9.6')
+    def languages(self) -> list[str]:
+        """Return list of all valid site codes for this site's Family.
+
+        .. deprecated:: 9.6
+           Use :meth:`codes` instead.
+        """
+        return sorted(self.codes)
+
+    @property
+    def codes(self) -> set[str]:
+        """Return set of all valid site codes for this site's Family.
+
+        .. versionadded:: 9.6
+        .. seealso:: :attr:`family.Family.codes`
+        """
+        return set(self.family.langs.keys())

     def validLanguageLinks(self):  # noqa: N802
         """Return list of language codes to be used in interwiki links."""
-        return [lang for lang in self.languages()
+        return [lang for lang in sorted(self.codes)
                 if self.namespaces.lookup_normalized_name(lang) is None]

     def _interwiki_urls(self, only_article_suffixes: bool = False):
diff --git a/pywikibot/titletranslate.py b/pywikibot/titletranslate.py
index e349c74..7214304 100644
--- a/pywikibot/titletranslate.py
+++ b/pywikibot/titletranslate.py
@@ -51,7 +51,7 @@
             codes = site.family.language_groups.get(codes, codes.split(','))

         for newcode in codes:
-            if newcode in site.languages():
+            if newcode in site.codes:
                 if newcode != site.code:
                     ns = page.namespace() if page else 0
                     x = pywikibot.Link(newname,
@@ -71,7 +71,7 @@
             pywikibot.info(f'TitleTranslate: {page.title()} was recognized as '
                            f'{dict_name} with value {value}')
             for entry_lang, entry in date.formats[dict_name].items():
-                if entry_lang not in site.languages():
+                if entry_lang not in site.codes:
                     continue
                 if entry_lang != sitelang:
                     newname = entry(value)
diff --git a/tests/dry_api_tests.py b/tests/dry_api_tests.py
index a49c66c..7674625 100755
--- a/tests/dry_api_tests.py
+++ b/tests/dry_api_tests.py
@@ -169,8 +169,9 @@
             def protocol(self):
                 return 'http'

-            def languages(self):
-                return ['mock']
+            @property
+            def codes(self):
+                return {'mock'}

             def user(self):
                 return self._user
diff --git a/tests/site_tests.py b/tests/site_tests.py
index 7a0505b..9d133ff 100755
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -104,12 +104,12 @@
                     pywikibot.site.APISite.fromDBName(dbname, site),
                     pywikibot.Site(sitename))

-    def test_language_methods(self):
-        """Test cases for languages() and related methods."""
+    def test_codes_property(self):
+        """Test cases for codes property and related methods."""
         mysite = self.get_site()
-        langs = mysite.languages()
-        self.assertIsInstance(langs, list)
-        self.assertIn(mysite.code, langs)
+        codes = mysite.codes
+        self.assertIsInstance(codes, set)
+        self.assertIn(mysite.code, codes)
         self.assertIsInstance(mysite.obsolete, bool)
         ipf = mysite.interwiki_putfirst()
         if ipf:  # no languages use this anymore, keep it for foreign families
@@ -118,7 +118,7 @@
             self.assertIsNone(ipf)

         for item in mysite.validLanguageLinks():
-            self.assertIn(item, langs)
+            self.assertIn(item, codes)
             self.assertIsNone(self.site.namespaces.lookup_name(item))

     def test_namespace_methods(self):

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

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I2c4ceb0b9fe98f58972fc79b4d2076be20f24d36
Gerrit-Change-Number: 1094477
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <i...@gno.de>
Gerrit-Reviewer: Xqt <i...@gno.de>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- pywikibot-commits@lists.wikimedia.org
To unsubscribe send an email to pywikibot-commits-le...@lists.wikimedia.org

Reply via email to