public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters
@ 2022-02-24  4:14 Matt Turner
  2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition Matt Turner
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Matt Turner @ 2022-02-24  4:14 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner

From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>

Reviewed-by: Matt Turner <mattst88@gentoo.org>
Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
---
 lib/portage/dep/__init__.py | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/lib/portage/dep/__init__.py b/lib/portage/dep/__init__.py
index 3b3577025..13c0f4ef7 100644
--- a/lib/portage/dep/__init__.py
+++ b/lib/portage/dep/__init__.py
@@ -1489,17 +1489,7 @@ class Atom(str):
         def __init__(self, forbid_overlap=False):
             self.overlap = self._overlap(forbid=forbid_overlap)
 
-    def __new__(
-        cls,
-        s,
-        unevaluated_atom=None,
-        allow_wildcard=False,
-        allow_repo=None,
-        _use=None,
-        eapi=None,
-        is_valid_flag=None,
-        allow_build_id=None,
-    ):
+    def __new__(cls, s, *args, **kwargs):
         return str.__new__(cls, s)
 
     def __init__(
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition
  2022-02-24  4:14 [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Matt Turner
@ 2022-02-24  4:14 ` Matt Turner
  2022-03-09  1:12   ` Alec Warner
  2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 3/4] portage.eapi: move None check to helper functions Matt Turner
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Matt Turner @ 2022-02-24  4:14 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner

From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>

Reviewed-by: Matt Turner <mattst88@gentoo.org>
Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
---
 lib/portage/eapi.py | 52 ++++++++++++++++++++++++++++-----------------
 1 file changed, 33 insertions(+), 19 deletions(-)

diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
index adee87d00..18069b04b 100644
--- a/lib/portage/eapi.py
+++ b/lib/portage/eapi.py
@@ -288,25 +288,39 @@ def eapi_has_sysroot(eapi):
 
 _eapi_attrs = collections.namedtuple(
     "_eapi_attrs",
-    "allows_package_provided "
-    "bdepend "
-    "broot "
-    "dots_in_PN dots_in_use_flags "
-    "exports_AA "
-    "exports_EBUILD_PHASE_FUNC "
-    "exports_ECLASSDIR "
-    "exports_KV "
-    "exports_merge_type "
-    "exports_PORTDIR "
-    "exports_replace_vars "
-    "feature_flag_test "
-    "idepend iuse_defaults iuse_effective posixish_locale "
-    "path_variables_end_with_trailing_slash "
-    "prefix "
-    "repo_deps required_use required_use_at_most_one_of "
-    "selective_src_uri_restriction slot_operator slot_deps "
-    "src_uri_arrows strong_blocks use_deps use_dep_defaults "
-    "empty_groups_always_true sysroot",
+    (
+        "allows_package_provided",
+        "bdepend",
+        "broot",
+        "dots_in_PN",
+        "dots_in_use_flags",
+        "exports_AA",
+        "exports_EBUILD_PHASE_FUNC",
+        "exports_ECLASSDIR",
+        "exports_KV",
+        "exports_merge_type",
+        "exports_PORTDIR",
+        "exports_replace_vars",
+        "feature_flag_test",
+        "idepend",
+        "iuse_defaults",
+        "iuse_effective",
+        "posixish_locale",
+        "path_variables_end_with_trailing_slash",
+        "prefix",
+        "repo_deps",
+        "required_use",
+        "required_use_at_most_one_of",
+        "selective_src_uri_restriction",
+        "slot_operator",
+        "slot_deps",
+        "src_uri_arrows",
+        "strong_blocks",
+        "use_deps",
+        "use_dep_defaults",
+        "empty_groups_always_true",
+        "sysroot",
+    ),
 )
 
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-portage-dev] [PATCH 3/4] portage.eapi: move None check to helper functions
  2022-02-24  4:14 [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Matt Turner
  2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition Matt Turner
@ 2022-02-24  4:14 ` Matt Turner
  2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation Matt Turner
  2022-03-09  1:11 ` [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Alec Warner
  3 siblings, 0 replies; 8+ messages in thread
From: Matt Turner @ 2022-02-24  4:14 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner

From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>

Reviewed-by: Matt Turner <mattst88@gentoo.org>
Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
---
 lib/portage/eapi.py | 162 +++++++++++++++++++++++++++++++++-----------
 1 file changed, 121 insertions(+), 41 deletions(-)

diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
index 18069b04b..56e64620a 100644
--- a/lib/portage/eapi.py
+++ b/lib/portage/eapi.py
@@ -9,26 +9,44 @@ from portage import eapi_is_supported
 
 
 def eapi_has_iuse_defaults(eapi):
+    if eapi is None:
+        return True
+
     return eapi != "0"
 
 
 def eapi_has_iuse_effective(eapi):
+    if eapi is None:
+        return False
+
     return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
 
 
 def eapi_has_slot_deps(eapi):
+    if eapi is None:
+        return True
+
     return eapi != "0"
 
 
 def eapi_has_slot_operator(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1", "2", "3", "4", "4-python")
 
 
 def eapi_has_src_uri_arrows(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1")
 
 
 def eapi_has_selective_src_uri_restriction(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in (
         "0",
         "1",
@@ -45,10 +63,16 @@ def eapi_has_selective_src_uri_restriction(eapi):
 
 
 def eapi_has_use_deps(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1")
 
 
 def eapi_has_strong_blocks(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1")
 
 
@@ -57,30 +81,51 @@ def eapi_has_src_prepare_and_src_configure(eapi):
 
 
 def eapi_supports_prefix(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1", "2")
 
 
 def eapi_exports_AA(eapi):
+    if eapi is None:
+        return False
+
     return eapi in ("0", "1", "2", "3")
 
 
 def eapi_exports_KV(eapi):
+    if eapi is None:
+        return False
+
     return eapi in ("0", "1", "2", "3")
 
 
 def eapi_exports_merge_type(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1", "2", "3")
 
 
 def eapi_exports_replace_vars(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1", "2", "3")
 
 
 def eapi_exports_EBUILD_PHASE_FUNC(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
 
 
 def eapi_exports_PORTDIR(eapi):
+    if eapi is None:
+        return True
+
     return eapi in (
         "0",
         "1",
@@ -96,6 +141,9 @@ def eapi_exports_PORTDIR(eapi):
 
 
 def eapi_exports_ECLASSDIR(eapi):
+    if eapi is None:
+        return False
+
     return eapi in (
         "0",
         "1",
@@ -127,18 +175,30 @@ def eapi_has_dosed_dohard(eapi):
 
 
 def eapi_has_required_use(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1", "2", "3")
 
 
 def eapi_has_required_use_at_most_one_of(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
 
 
 def eapi_has_use_dep_defaults(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in ("0", "1", "2", "3")
 
 
 def eapi_requires_posixish_locale(eapi):
+    if eapi is None:
+        return False
+
     return eapi not in (
         "0",
         "1",
@@ -153,14 +213,23 @@ def eapi_requires_posixish_locale(eapi):
 
 
 def eapi_has_repo_deps(eapi):
+    if eapi is None:
+        return True
+
     return eapi in ("4-python", "5-progress")
 
 
 def eapi_allows_dots_in_PN(eapi):
+    if eapi is None:
+        return True
+
     return eapi in ("4-python", "5-progress")
 
 
 def eapi_allows_dots_in_use_flags(eapi):
+    if eapi is None:
+        return True
+
     return eapi in ("4-python", "5-progress")
 
 
@@ -181,6 +250,9 @@ def eapi_has_automatic_unpack_dependencies(eapi):
 
 
 def eapi_allows_package_provided(eapi):
+    if eapi is None:
+        return True
+
     return eapi in (
         "0",
         "1",
@@ -196,6 +268,9 @@ def eapi_allows_package_provided(eapi):
 
 
 def eapi_has_bdepend(eapi):
+    if eapi is None:
+        return False
+
     return eapi not in (
         "0",
         "1",
@@ -211,6 +286,9 @@ def eapi_has_bdepend(eapi):
 
 
 def eapi_has_idepend(eapi):
+    if eapi is None:
+        return False
+
     return eapi not in (
         "0",
         "1",
@@ -227,6 +305,9 @@ def eapi_has_idepend(eapi):
 
 
 def eapi_empty_groups_always_true(eapi):
+    if eapi is None:
+        return False
+
     return eapi in (
         "0",
         "1",
@@ -242,6 +323,9 @@ def eapi_empty_groups_always_true(eapi):
 
 
 def eapi_path_variables_end_with_trailing_slash(eapi):
+    if eapi is None:
+        return False
+
     return eapi in (
         "0",
         "1",
@@ -257,6 +341,9 @@ def eapi_path_variables_end_with_trailing_slash(eapi):
 
 
 def eapi_has_broot(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in (
         "0",
         "1",
@@ -272,6 +359,9 @@ def eapi_has_broot(eapi):
 
 
 def eapi_has_sysroot(eapi):
+    if eapi is None:
+        return True
+
     return eapi not in (
         "0",
         "1",
@@ -387,49 +477,39 @@ def _get_eapi_attrs(eapi):
         eapi = None
 
     eapi_attrs = _eapi_attrs(
-        allows_package_provided=(
-            eapi is None or eapi_allows_package_provided.func(eapi)
-        ),
-        bdepend=(eapi is not None and eapi_has_bdepend.func(eapi)),
-        broot=(eapi is None or eapi_has_broot.func(eapi)),
-        dots_in_PN=(eapi is None or eapi_allows_dots_in_PN.func(eapi)),
-        dots_in_use_flags=(eapi is None or eapi_allows_dots_in_use_flags.func(eapi)),
-        empty_groups_always_true=(
-            eapi is not None and eapi_empty_groups_always_true.func(eapi)
-        ),
-        exports_AA=(eapi is not None and eapi_exports_AA.func(eapi)),
-        exports_EBUILD_PHASE_FUNC=(
-            eapi is None or eapi_exports_EBUILD_PHASE_FUNC.func(eapi)
-        ),
-        exports_ECLASSDIR=(eapi is not None and eapi_exports_ECLASSDIR.func(eapi)),
-        exports_KV=(eapi is not None and eapi_exports_KV.func(eapi)),
-        exports_merge_type=(eapi is None or eapi_exports_merge_type.func(eapi)),
-        exports_PORTDIR=(eapi is None or eapi_exports_PORTDIR.func(eapi)),
-        exports_replace_vars=(eapi is None or eapi_exports_replace_vars.func(eapi)),
+        allows_package_provided=eapi_allows_package_provided.func(eapi),
+        bdepend=eapi_has_bdepend.func(eapi),
+        broot=eapi_has_broot.func(eapi),
+        dots_in_PN=eapi_allows_dots_in_PN.func(eapi),
+        dots_in_use_flags=eapi_allows_dots_in_use_flags.func(eapi),
+        empty_groups_always_true=eapi_empty_groups_always_true.func(eapi),
+        exports_AA=eapi_exports_AA.func(eapi),
+        exports_EBUILD_PHASE_FUNC=eapi_exports_EBUILD_PHASE_FUNC.func(eapi),
+        exports_ECLASSDIR=eapi_exports_ECLASSDIR.func(eapi),
+        exports_KV=eapi_exports_KV.func(eapi),
+        exports_merge_type=eapi_exports_merge_type.func(eapi),
+        exports_PORTDIR=eapi_exports_PORTDIR.func(eapi),
+        exports_replace_vars=eapi_exports_replace_vars.func(eapi),
         feature_flag_test=False,
-        idepend=(eapi is not None and eapi_has_idepend.func(eapi)),
-        iuse_defaults=(eapi is None or eapi_has_iuse_defaults.func(eapi)),
-        iuse_effective=(eapi is not None and eapi_has_iuse_effective.func(eapi)),
-        path_variables_end_with_trailing_slash=(
-            eapi is not None and eapi_path_variables_end_with_trailing_slash.func(eapi)
-        ),
-        posixish_locale=(eapi is not None and eapi_requires_posixish_locale.func(eapi)),
-        prefix=(eapi is None or eapi_supports_prefix.func(eapi)),
-        repo_deps=(eapi is None or eapi_has_repo_deps.func(eapi)),
-        required_use=(eapi is None or eapi_has_required_use.func(eapi)),
-        required_use_at_most_one_of=(
-            eapi is None or eapi_has_required_use_at_most_one_of.func(eapi)
-        ),
-        selective_src_uri_restriction=(
-            eapi is None or eapi_has_selective_src_uri_restriction.func(eapi)
+        idepend=eapi_has_idepend.func(eapi),
+        iuse_defaults=eapi_has_iuse_defaults.func(eapi),
+        iuse_effective=eapi_has_iuse_effective.func(eapi),
+        path_variables_end_with_trailing_slash=eapi_path_variables_end_with_trailing_slash.func(
+            eapi
         ),
-        slot_deps=(eapi is None or eapi_has_slot_deps.func(eapi)),
-        slot_operator=(eapi is None or eapi_has_slot_operator.func(eapi)),
-        src_uri_arrows=(eapi is None or eapi_has_src_uri_arrows.func(eapi)),
-        strong_blocks=(eapi is None or eapi_has_strong_blocks.func(eapi)),
-        sysroot=(eapi is None or eapi_has_sysroot.func(eapi)),
-        use_deps=(eapi is None or eapi_has_use_deps.func(eapi)),
-        use_dep_defaults=(eapi is None or eapi_has_use_dep_defaults.func(eapi)),
+        posixish_locale=eapi_requires_posixish_locale.func(eapi),
+        prefix=eapi_supports_prefix.func(eapi),
+        repo_deps=eapi_has_repo_deps.func(eapi),
+        required_use=eapi_has_required_use.func(eapi),
+        required_use_at_most_one_of=eapi_has_required_use_at_most_one_of.func(eapi),
+        selective_src_uri_restriction=eapi_has_selective_src_uri_restriction.func(eapi),
+        slot_deps=eapi_has_slot_deps.func(eapi),
+        slot_operator=eapi_has_slot_operator.func(eapi),
+        src_uri_arrows=eapi_has_src_uri_arrows.func(eapi),
+        strong_blocks=eapi_has_strong_blocks.func(eapi),
+        sysroot=eapi_has_sysroot.func(eapi),
+        use_deps=eapi_has_use_deps.func(eapi),
+        use_dep_defaults=eapi_has_use_dep_defaults.func(eapi),
     )
 
     _eapi_attrs_cache[orig_eapi] = eapi_attrs
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation
  2022-02-24  4:14 [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Matt Turner
  2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition Matt Turner
  2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 3/4] portage.eapi: move None check to helper functions Matt Turner
@ 2022-02-24  4:14 ` Matt Turner
  2022-02-26 18:04   ` Zac Medico
  2022-03-09  1:11 ` [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Alec Warner
  3 siblings, 1 reply; 8+ messages in thread
From: Matt Turner @ 2022-02-24  4:14 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner

From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>

Reviewed-by: Matt Turner <mattst88@gentoo.org>
Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
---
 lib/portage/eapi.py | 155 ++++++++++++++++++++------------------------
 1 file changed, 72 insertions(+), 83 deletions(-)

diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
index 56e64620a..efcc6c2a0 100644
--- a/lib/portage/eapi.py
+++ b/lib/portage/eapi.py
@@ -2,12 +2,10 @@
 # Distributed under the terms of the GNU General Public License v2
 
 import collections
-import operator
-import types
-
-from portage import eapi_is_supported
+from functools import lru_cache
 
 
+@lru_cache(None)
 def eapi_has_iuse_defaults(eapi):
     if eapi is None:
         return True
@@ -15,6 +13,7 @@ def eapi_has_iuse_defaults(eapi):
     return eapi != "0"
 
 
+@lru_cache(None)
 def eapi_has_iuse_effective(eapi):
     if eapi is None:
         return False
@@ -22,6 +21,7 @@ def eapi_has_iuse_effective(eapi):
     return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
 
 
+@lru_cache(None)
 def eapi_has_slot_deps(eapi):
     if eapi is None:
         return True
@@ -29,6 +29,7 @@ def eapi_has_slot_deps(eapi):
     return eapi != "0"
 
 
+@lru_cache(None)
 def eapi_has_slot_operator(eapi):
     if eapi is None:
         return True
@@ -36,6 +37,7 @@ def eapi_has_slot_operator(eapi):
     return eapi not in ("0", "1", "2", "3", "4", "4-python")
 
 
+@lru_cache(None)
 def eapi_has_src_uri_arrows(eapi):
     if eapi is None:
         return True
@@ -43,6 +45,7 @@ def eapi_has_src_uri_arrows(eapi):
     return eapi not in ("0", "1")
 
 
+@lru_cache(None)
 def eapi_has_selective_src_uri_restriction(eapi):
     if eapi is None:
         return True
@@ -62,6 +65,7 @@ def eapi_has_selective_src_uri_restriction(eapi):
     )
 
 
+@lru_cache(None)
 def eapi_has_use_deps(eapi):
     if eapi is None:
         return True
@@ -69,6 +73,7 @@ def eapi_has_use_deps(eapi):
     return eapi not in ("0", "1")
 
 
+@lru_cache(None)
 def eapi_has_strong_blocks(eapi):
     if eapi is None:
         return True
@@ -76,10 +81,12 @@ def eapi_has_strong_blocks(eapi):
     return eapi not in ("0", "1")
 
 
+@lru_cache(None)
 def eapi_has_src_prepare_and_src_configure(eapi):
     return eapi not in ("0", "1")
 
 
+@lru_cache(None)
 def eapi_supports_prefix(eapi):
     if eapi is None:
         return True
@@ -87,6 +94,7 @@ def eapi_supports_prefix(eapi):
     return eapi not in ("0", "1", "2")
 
 
+@lru_cache(None)
 def eapi_exports_AA(eapi):
     if eapi is None:
         return False
@@ -94,6 +102,7 @@ def eapi_exports_AA(eapi):
     return eapi in ("0", "1", "2", "3")
 
 
+@lru_cache(None)
 def eapi_exports_KV(eapi):
     if eapi is None:
         return False
@@ -101,6 +110,7 @@ def eapi_exports_KV(eapi):
     return eapi in ("0", "1", "2", "3")
 
 
+@lru_cache(None)
 def eapi_exports_merge_type(eapi):
     if eapi is None:
         return True
@@ -108,6 +118,7 @@ def eapi_exports_merge_type(eapi):
     return eapi not in ("0", "1", "2", "3")
 
 
+@lru_cache(None)
 def eapi_exports_replace_vars(eapi):
     if eapi is None:
         return True
@@ -115,6 +126,7 @@ def eapi_exports_replace_vars(eapi):
     return eapi not in ("0", "1", "2", "3")
 
 
+@lru_cache(None)
 def eapi_exports_EBUILD_PHASE_FUNC(eapi):
     if eapi is None:
         return True
@@ -122,6 +134,7 @@ def eapi_exports_EBUILD_PHASE_FUNC(eapi):
     return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
 
 
+@lru_cache(None)
 def eapi_exports_PORTDIR(eapi):
     if eapi is None:
         return True
@@ -140,6 +153,7 @@ def eapi_exports_PORTDIR(eapi):
     )
 
 
+@lru_cache(None)
 def eapi_exports_ECLASSDIR(eapi):
     if eapi is None:
         return False
@@ -158,22 +172,27 @@ def eapi_exports_ECLASSDIR(eapi):
     )
 
 
+@lru_cache(None)
 def eapi_exports_REPOSITORY(eapi):
     return eapi in ("4-python", "5-progress")
 
 
+@lru_cache(None)
 def eapi_has_pkg_pretend(eapi):
     return eapi not in ("0", "1", "2", "3")
 
 
+@lru_cache(None)
 def eapi_has_implicit_rdepend(eapi):
     return eapi in ("0", "1", "2", "3")
 
 
+@lru_cache(None)
 def eapi_has_dosed_dohard(eapi):
     return eapi in ("0", "1", "2", "3")
 
 
+@lru_cache(None)
 def eapi_has_required_use(eapi):
     if eapi is None:
         return True
@@ -181,6 +200,7 @@ def eapi_has_required_use(eapi):
     return eapi not in ("0", "1", "2", "3")
 
 
+@lru_cache(None)
 def eapi_has_required_use_at_most_one_of(eapi):
     if eapi is None:
         return True
@@ -188,6 +208,7 @@ def eapi_has_required_use_at_most_one_of(eapi):
     return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
 
 
+@lru_cache(None)
 def eapi_has_use_dep_defaults(eapi):
     if eapi is None:
         return True
@@ -195,6 +216,7 @@ def eapi_has_use_dep_defaults(eapi):
     return eapi not in ("0", "1", "2", "3")
 
 
+@lru_cache(None)
 def eapi_requires_posixish_locale(eapi):
     if eapi is None:
         return False
@@ -212,6 +234,7 @@ def eapi_requires_posixish_locale(eapi):
     )
 
 
+@lru_cache(None)
 def eapi_has_repo_deps(eapi):
     if eapi is None:
         return True
@@ -219,6 +242,7 @@ def eapi_has_repo_deps(eapi):
     return eapi in ("4-python", "5-progress")
 
 
+@lru_cache(None)
 def eapi_allows_dots_in_PN(eapi):
     if eapi is None:
         return True
@@ -226,6 +250,7 @@ def eapi_allows_dots_in_PN(eapi):
     return eapi in ("4-python", "5-progress")
 
 
+@lru_cache(None)
 def eapi_allows_dots_in_use_flags(eapi):
     if eapi is None:
         return True
@@ -233,22 +258,27 @@ def eapi_allows_dots_in_use_flags(eapi):
     return eapi in ("4-python", "5-progress")
 
 
+@lru_cache(None)
 def eapi_supports_stable_use_forcing_and_masking(eapi):
     return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi")
 
 
+@lru_cache(None)
 def eapi_allows_directories_on_profile_level_and_repository_level(eapi):
     return eapi not in ("0", "1", "2", "3", "4", "4-slot-abi", "5", "6")
 
 
+@lru_cache(None)
 def eapi_has_use_aliases(eapi):
     return eapi in ("4-python", "5-progress")
 
 
+@lru_cache(None)
 def eapi_has_automatic_unpack_dependencies(eapi):
     return eapi in ("5-progress",)
 
 
+@lru_cache(None)
 def eapi_allows_package_provided(eapi):
     if eapi is None:
         return True
@@ -267,6 +297,7 @@ def eapi_allows_package_provided(eapi):
     )
 
 
+@lru_cache(None)
 def eapi_has_bdepend(eapi):
     if eapi is None:
         return False
@@ -285,6 +316,7 @@ def eapi_has_bdepend(eapi):
     )
 
 
+@lru_cache(None)
 def eapi_has_idepend(eapi):
     if eapi is None:
         return False
@@ -304,6 +336,7 @@ def eapi_has_idepend(eapi):
     )
 
 
+@lru_cache(None)
 def eapi_empty_groups_always_true(eapi):
     if eapi is None:
         return False
@@ -322,6 +355,7 @@ def eapi_empty_groups_always_true(eapi):
     )
 
 
+@lru_cache(None)
 def eapi_path_variables_end_with_trailing_slash(eapi):
     if eapi is None:
         return False
@@ -340,6 +374,7 @@ def eapi_path_variables_end_with_trailing_slash(eapi):
     )
 
 
+@lru_cache(None)
 def eapi_has_broot(eapi):
     if eapi is None:
         return True
@@ -358,6 +393,7 @@ def eapi_has_broot(eapi):
     )
 
 
+@lru_cache(None)
 def eapi_has_sysroot(eapi):
     if eapi is None:
         return True
@@ -423,43 +459,7 @@ _eapi_attr_func_prefixes = (
 )
 
 
-def _eapi_func_decorator(func, attr_getter):
-    def wrapper(eapi):
-        return attr_getter(_get_eapi_attrs(eapi))
-
-    wrapper.func = func
-    wrapper.__doc__ = func.__doc__
-    return wrapper
-
-
-def _decorate_eapi_funcs():
-    """
-    Decorate eapi_* functions so that they use _get_eapi_attrs(eapi)
-    to cache results.
-    """
-    decorated = {}
-    for k, v in globals().items():
-        if not (
-            isinstance(v, types.FunctionType) and k.startswith(_eapi_attr_func_prefixes)
-        ):
-            continue
-        for prefix in _eapi_attr_func_prefixes:
-            if k.startswith(prefix):
-                attr_name = k[len(prefix) :]
-                if hasattr(_eapi_attrs, attr_name):
-                    decorated[k] = _eapi_func_decorator(
-                        v, operator.attrgetter(attr_name)
-                    )
-                    break
-    globals().update(decorated)
-
-
-_decorate_eapi_funcs()
-
-
-_eapi_attrs_cache = {}
-
-
+@lru_cache(None)
 def _get_eapi_attrs(eapi):
     """
     When eapi is None then validation is not as strict, since we want the
@@ -468,49 +468,38 @@ def _get_eapi_attrs(eapi):
     be helpful for handling of corrupt EAPI metadata in essential functions
     such as pkgsplit.
     """
-    eapi_attrs = _eapi_attrs_cache.get(eapi)
-    if eapi_attrs is not None:
-        return eapi_attrs
-
-    orig_eapi = eapi
-    if eapi is not None and not eapi_is_supported(eapi):
-        eapi = None
-
-    eapi_attrs = _eapi_attrs(
-        allows_package_provided=eapi_allows_package_provided.func(eapi),
-        bdepend=eapi_has_bdepend.func(eapi),
-        broot=eapi_has_broot.func(eapi),
-        dots_in_PN=eapi_allows_dots_in_PN.func(eapi),
-        dots_in_use_flags=eapi_allows_dots_in_use_flags.func(eapi),
-        empty_groups_always_true=eapi_empty_groups_always_true.func(eapi),
-        exports_AA=eapi_exports_AA.func(eapi),
-        exports_EBUILD_PHASE_FUNC=eapi_exports_EBUILD_PHASE_FUNC.func(eapi),
-        exports_ECLASSDIR=eapi_exports_ECLASSDIR.func(eapi),
-        exports_KV=eapi_exports_KV.func(eapi),
-        exports_merge_type=eapi_exports_merge_type.func(eapi),
-        exports_PORTDIR=eapi_exports_PORTDIR.func(eapi),
-        exports_replace_vars=eapi_exports_replace_vars.func(eapi),
+    return _eapi_attrs(
+        allows_package_provided=eapi_allows_package_provided(eapi),
+        bdepend=eapi_has_bdepend(eapi),
+        broot=eapi_has_broot(eapi),
+        dots_in_PN=eapi_allows_dots_in_PN(eapi),
+        dots_in_use_flags=eapi_allows_dots_in_use_flags(eapi),
+        empty_groups_always_true=eapi_empty_groups_always_true(eapi),
+        exports_AA=eapi_exports_AA(eapi),
+        exports_EBUILD_PHASE_FUNC=eapi_exports_EBUILD_PHASE_FUNC(eapi),
+        exports_ECLASSDIR=eapi_exports_ECLASSDIR(eapi),
+        exports_KV=eapi_exports_KV(eapi),
+        exports_merge_type=eapi_exports_merge_type(eapi),
+        exports_PORTDIR=eapi_exports_PORTDIR(eapi),
+        exports_replace_vars=eapi_exports_replace_vars(eapi),
         feature_flag_test=False,
-        idepend=eapi_has_idepend.func(eapi),
-        iuse_defaults=eapi_has_iuse_defaults.func(eapi),
-        iuse_effective=eapi_has_iuse_effective.func(eapi),
-        path_variables_end_with_trailing_slash=eapi_path_variables_end_with_trailing_slash.func(
+        idepend=eapi_has_idepend(eapi),
+        iuse_defaults=eapi_has_iuse_defaults(eapi),
+        iuse_effective=eapi_has_iuse_effective(eapi),
+        path_variables_end_with_trailing_slash=eapi_path_variables_end_with_trailing_slash(
             eapi
         ),
-        posixish_locale=eapi_requires_posixish_locale.func(eapi),
-        prefix=eapi_supports_prefix.func(eapi),
-        repo_deps=eapi_has_repo_deps.func(eapi),
-        required_use=eapi_has_required_use.func(eapi),
-        required_use_at_most_one_of=eapi_has_required_use_at_most_one_of.func(eapi),
-        selective_src_uri_restriction=eapi_has_selective_src_uri_restriction.func(eapi),
-        slot_deps=eapi_has_slot_deps.func(eapi),
-        slot_operator=eapi_has_slot_operator.func(eapi),
-        src_uri_arrows=eapi_has_src_uri_arrows.func(eapi),
-        strong_blocks=eapi_has_strong_blocks.func(eapi),
-        sysroot=eapi_has_sysroot.func(eapi),
-        use_deps=eapi_has_use_deps.func(eapi),
-        use_dep_defaults=eapi_has_use_dep_defaults.func(eapi),
+        posixish_locale=eapi_requires_posixish_locale(eapi),
+        prefix=eapi_supports_prefix(eapi),
+        repo_deps=eapi_has_repo_deps(eapi),
+        required_use=eapi_has_required_use(eapi),
+        required_use_at_most_one_of=eapi_has_required_use_at_most_one_of(eapi),
+        selective_src_uri_restriction=eapi_has_selective_src_uri_restriction(eapi),
+        slot_deps=eapi_has_slot_deps(eapi),
+        slot_operator=eapi_has_slot_operator(eapi),
+        src_uri_arrows=eapi_has_src_uri_arrows(eapi),
+        strong_blocks=eapi_has_strong_blocks(eapi),
+        sysroot=eapi_has_sysroot(eapi),
+        use_deps=eapi_has_use_deps(eapi),
+        use_dep_defaults=eapi_has_use_dep_defaults(eapi),
     )
-
-    _eapi_attrs_cache[orig_eapi] = eapi_attrs
-    return eapi_attrs
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation
  2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation Matt Turner
@ 2022-02-26 18:04   ` Zac Medico
  2022-02-26 22:26     ` Zac Medico
  0 siblings, 1 reply; 8+ messages in thread
From: Zac Medico @ 2022-02-26 18:04 UTC (permalink / raw
  To: gentoo-portage-dev, Matt Turner; +Cc: Wolfgang E. Sanyer


[-- Attachment #1.1: Type: text/plain, Size: 1185 bytes --]

On 2/23/22 20:14, Matt Turner wrote:
> From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
> 
> Reviewed-by: Matt Turner <mattst88@gentoo.org>
> Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
> ---
>   lib/portage/eapi.py | 155 ++++++++++++++++++++------------------------
>   1 file changed, 72 insertions(+), 83 deletions(-)
> 
> diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
> index 56e64620a..efcc6c2a0 100644
> --- a/lib/portage/eapi.py
> +++ b/lib/portage/eapi.py
> @@ -2,12 +2,10 @@
>   # Distributed under the terms of the GNU General Public License v2
>   
>   import collections
> -import operator
> -import types
> -
> -from portage import eapi_is_supported
> +from functools import lru_cache
>   
>   
> +@lru_cache(None)
>   def eapi_has_iuse_defaults(eapi):
>       if eapi is None:
>           return True
> @@ -15,6 +13,7 @@ def eapi_has_iuse_defaults(eapi):
>       return eapi != "0"

I think this patch misses the point of the original caching mechanism. 
It doesn't make sense to cache results of the individual eapi_* 
functions if they no longer contribute to the _eapi_attrs cache.
-- 
Thanks,
Zac

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation
  2022-02-26 18:04   ` Zac Medico
@ 2022-02-26 22:26     ` Zac Medico
  0 siblings, 0 replies; 8+ messages in thread
From: Zac Medico @ 2022-02-26 22:26 UTC (permalink / raw
  To: gentoo-portage-dev, Matt Turner; +Cc: Wolfgang E. Sanyer


[-- Attachment #1.1: Type: text/plain, Size: 1551 bytes --]

On 2/26/22 10:04, Zac Medico wrote:
> On 2/23/22 20:14, Matt Turner wrote:
>> From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
>>
>> Reviewed-by: Matt Turner <mattst88@gentoo.org>
>> Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
>> ---
>>   lib/portage/eapi.py | 155 ++++++++++++++++++++------------------------
>>   1 file changed, 72 insertions(+), 83 deletions(-)
>>
>> diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
>> index 56e64620a..efcc6c2a0 100644
>> --- a/lib/portage/eapi.py
>> +++ b/lib/portage/eapi.py
>> @@ -2,12 +2,10 @@
>>   # Distributed under the terms of the GNU General Public License v2
>>   import collections
>> -import operator
>> -import types
>> -
>> -from portage import eapi_is_supported
>> +from functools import lru_cache
>> +@lru_cache(None)
>>   def eapi_has_iuse_defaults(eapi):
>>       if eapi is None:
>>           return True
>> @@ -15,6 +13,7 @@ def eapi_has_iuse_defaults(eapi):
>>       return eapi != "0"
> 
> I think this patch misses the point of the original caching mechanism. 
> It doesn't make sense to cache results of the individual eapi_* 
> functions if they no longer contribute to the _eapi_attrs cache.

To clarify, the only reason that the eapi_* functions were cached was so 
that they would trigger population of the _eapi_attrs cache. In the 
absence of this_eapi_attrs cache population feature, I doubt that it's 
very useful to put the lru_cache on the indivdual eapi_* functions.
-- 
Thanks,
Zac

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 840 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters
  2022-02-24  4:14 [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Matt Turner
                   ` (2 preceding siblings ...)
  2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation Matt Turner
@ 2022-03-09  1:11 ` Alec Warner
  3 siblings, 0 replies; 8+ messages in thread
From: Alec Warner @ 2022-03-09  1:11 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner

maybe *unused_args, **unused_kwargs, unsure on the style guide for
that (normally its _)

But feel free to merge as-is.

-A

On Wed, Feb 23, 2022 at 8:15 PM Matt Turner <mattst88@gentoo.org> wrote:
>
> From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
>
> Reviewed-by: Matt Turner <mattst88@gentoo.org>
> Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
> ---
>  lib/portage/dep/__init__.py | 12 +-----------
>  1 file changed, 1 insertion(+), 11 deletions(-)
>
> diff --git a/lib/portage/dep/__init__.py b/lib/portage/dep/__init__.py
> index 3b3577025..13c0f4ef7 100644
> --- a/lib/portage/dep/__init__.py
> +++ b/lib/portage/dep/__init__.py
> @@ -1489,17 +1489,7 @@ class Atom(str):
>          def __init__(self, forbid_overlap=False):
>              self.overlap = self._overlap(forbid=forbid_overlap)
>
> -    def __new__(
> -        cls,
> -        s,
> -        unevaluated_atom=None,
> -        allow_wildcard=False,
> -        allow_repo=None,
> -        _use=None,
> -        eapi=None,
> -        is_valid_flag=None,
> -        allow_build_id=None,
> -    ):
> +    def __new__(cls, s, *args, **kwargs):
>          return str.__new__(cls, s)
>
>      def __init__(
> --
> 2.34.1
>
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition
  2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition Matt Turner
@ 2022-03-09  1:12   ` Alec Warner
  0 siblings, 0 replies; 8+ messages in thread
From: Alec Warner @ 2022-03-09  1:12 UTC (permalink / raw
  To: gentoo-portage-dev; +Cc: Wolfgang E. Sanyer, Matt Turner

Looks merge-able.

On Wed, Feb 23, 2022 at 8:15 PM Matt Turner <mattst88@gentoo.org> wrote:
>
> From: "Wolfgang E. Sanyer" <WolfgangESanyer@gmail.com>
>
> Reviewed-by: Matt Turner <mattst88@gentoo.org>
> Signed-off-by: Wolfgang E. Sanyer <WolfgangESanyer@gmail.com>
> ---
>  lib/portage/eapi.py | 52 ++++++++++++++++++++++++++++-----------------
>  1 file changed, 33 insertions(+), 19 deletions(-)
>
> diff --git a/lib/portage/eapi.py b/lib/portage/eapi.py
> index adee87d00..18069b04b 100644
> --- a/lib/portage/eapi.py
> +++ b/lib/portage/eapi.py
> @@ -288,25 +288,39 @@ def eapi_has_sysroot(eapi):
>
>  _eapi_attrs = collections.namedtuple(
>      "_eapi_attrs",
> -    "allows_package_provided "
> -    "bdepend "
> -    "broot "
> -    "dots_in_PN dots_in_use_flags "
> -    "exports_AA "
> -    "exports_EBUILD_PHASE_FUNC "
> -    "exports_ECLASSDIR "
> -    "exports_KV "
> -    "exports_merge_type "
> -    "exports_PORTDIR "
> -    "exports_replace_vars "
> -    "feature_flag_test "
> -    "idepend iuse_defaults iuse_effective posixish_locale "
> -    "path_variables_end_with_trailing_slash "
> -    "prefix "
> -    "repo_deps required_use required_use_at_most_one_of "
> -    "selective_src_uri_restriction slot_operator slot_deps "
> -    "src_uri_arrows strong_blocks use_deps use_dep_defaults "
> -    "empty_groups_always_true sysroot",
> +    (
> +        "allows_package_provided",
> +        "bdepend",
> +        "broot",
> +        "dots_in_PN",
> +        "dots_in_use_flags",
> +        "exports_AA",
> +        "exports_EBUILD_PHASE_FUNC",
> +        "exports_ECLASSDIR",
> +        "exports_KV",
> +        "exports_merge_type",
> +        "exports_PORTDIR",
> +        "exports_replace_vars",
> +        "feature_flag_test",
> +        "idepend",
> +        "iuse_defaults",
> +        "iuse_effective",
> +        "posixish_locale",
> +        "path_variables_end_with_trailing_slash",
> +        "prefix",
> +        "repo_deps",
> +        "required_use",
> +        "required_use_at_most_one_of",
> +        "selective_src_uri_restriction",
> +        "slot_operator",
> +        "slot_deps",
> +        "src_uri_arrows",
> +        "strong_blocks",
> +        "use_deps",
> +        "use_dep_defaults",
> +        "empty_groups_always_true",
> +        "sysroot",
> +    ),
>  )
>
>
> --
> 2.34.1
>
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-03-09  1:12 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-24  4:14 [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Matt Turner
2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 2/4] portage.eapi: use tuple instead of str for namedtuple definition Matt Turner
2022-03-09  1:12   ` Alec Warner
2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 3/4] portage.eapi: move None check to helper functions Matt Turner
2022-02-24  4:14 ` [gentoo-portage-dev] [PATCH 4/4] portage.eapi: use functools @lru_cache decorator instead of custom implementation Matt Turner
2022-02-26 18:04   ` Zac Medico
2022-02-26 22:26     ` Zac Medico
2022-03-09  1:11 ` [gentoo-portage-dev] [PATCH 1/4] portage.dep.Atom: Clean up __new__ parameters Alec Warner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox