scaevola 1.1.1__py3-none-any.whl → 1.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
scaevola/core/__init__.py CHANGED
@@ -1,3 +1,4 @@
1
+ import builtins
1
2
  import enum
2
3
  import functools
3
4
  import operator
@@ -6,48 +7,22 @@ import types
6
7
  from importlib import resources
7
8
  from typing import *
8
9
 
10
+ import setdoc
11
+
9
12
  __all__ = ["Scaevola", "auto", "getfuncnames", "makefunc"]
10
13
 
11
14
 
12
15
  class Util(enum.Enum):
13
16
  "This enum provides a singleton."
17
+
14
18
  util = None
15
19
 
16
20
  @functools.cached_property
17
21
  def data(self: Self) -> dict:
18
22
  "This cached property holds the cfg data."
19
- text: str = resources.read_text("scaevola.core", "cfg.toml")
20
- ans: dict = tomllib.loads(text)
21
- return ans
22
-
23
- @functools.cached_property
24
- def funcdata(self: Self) -> dict:
25
- "This cached property holds the data for easy function making."
26
- ans: dict = dict()
27
- name: str
28
- doc: str
29
- inner: Callable
30
- name = "__ge__"
31
- doc = self.data["docs"]["ge"]
32
- inner = operator.le
33
- ans[name] = dict(doc=doc, inner=inner)
34
- name = "__gt__"
35
- doc = self.data["docs"]["gt"]
36
- inner = operator.lt
37
- ans[name] = dict(doc=doc, inner=inner)
38
- name = "__rdivmod__"
39
- doc = self.data["docs"]["rdivmod"]
40
- inner = divmod
41
- ans[name] = dict(doc=doc, inner=inner)
42
- x: Any
43
- y: Any
44
- for x, y in self.data["operator"].items():
45
- name = "__r%s__" % x.rstrip("_")
46
- doc = self.data["docs"]["operator"] % y
47
- inner = getattr(operator, x)
48
- ans[name] = dict(doc=doc, inner=inner)
49
- ans = dict(sorted(ans.items()))
50
- return ans
23
+ text: str
24
+ text = resources.read_text("scaevola.core", "cfg.toml")
25
+ return tomllib.loads(text)
51
26
 
52
27
 
53
28
  def auto(cls: type) -> type:
@@ -61,25 +36,33 @@ def auto(cls: type) -> type:
61
36
 
62
37
  def getfuncnames() -> list[str]:
63
38
  "This function returns the names of all righthand functions."
64
- return list(Util.util.funcdata.keys())
39
+ return list(Util.util.data.keys())
65
40
 
66
41
 
67
42
  def makefunc(cls: type, name: str) -> types.FunctionType:
68
43
  "This function implements a certain righthand function."
69
- inner: Callable = Util.util.funcdata[name]["inner"]
44
+ funcname: str
45
+ inner: Callable
46
+ module: Any
47
+ funcname = Util.util.data[name]["func"]
48
+ if Util.util.data[name].get("isbuiltin", False):
49
+ module = builtins
50
+ else:
51
+ module = operator
52
+ inner = getattr(module, funcname)
70
53
 
71
54
  def outer(self: Self, other: Any) -> Any:
72
55
  "This docstring will be overwritten."
73
56
  return inner(type(self)(other), self)
74
57
 
75
- outer.__doc__ = Util.util.funcdata[name]["doc"]
76
58
  outer.__module__ = cls.__module__
77
59
  outer.__name__ = name
78
60
  outer.__qualname__ = cls.__qualname__ + "." + name
61
+ setdoc.basic(outer)
79
62
  setattr(cls, name, outer)
80
63
  return outer
81
64
 
82
65
 
83
66
  @auto
84
67
  class Scaevola:
85
- pass
68
+ __slots__ = ()
scaevola/core/cfg.toml CHANGED
@@ -1,20 +1,48 @@
1
- [docs]
2
- operator = "This magic method implements other%sself."
3
- ge = "This magic method implements self>=other."
4
- gt = "This magic method implements self>other."
5
- rdivmod = "This magic method implements divmod(other, self)."
6
-
7
- [operator]
8
- add = "+"
9
- and_ = "&"
10
- floordiv = "//"
11
- lshift = "<<"
12
- matmul = "@"
13
- mod = "%"
14
- mul = "*"
15
- or_ = "|"
16
- pow = "**"
17
- rshift = ">>"
18
- sub = "-"
19
- truediv = "/"
20
- xor = "^"
1
+ [__ge__]
2
+ func = "le"
3
+
4
+ [__gt__]
5
+ func = "lt"
6
+
7
+ [__radd__]
8
+ func = "add"
9
+
10
+ [__rand__]
11
+ func = "and_"
12
+
13
+ [__rdivmod__]
14
+ func = "divmod"
15
+ isbuiltin = true
16
+
17
+ [__rfloordiv__]
18
+ func = "floordiv"
19
+
20
+ [__rlshift__]
21
+ func = "lshift"
22
+
23
+ [__rmatmul__]
24
+ func = "matmul"
25
+
26
+ [__rmod__]
27
+ func = "mod"
28
+
29
+ [__rmul__]
30
+ func = "mul"
31
+
32
+ [__ror__]
33
+ func = "or_"
34
+
35
+ [__rpow__]
36
+ func = "pow"
37
+
38
+ [__rrshift__]
39
+ func = "rshift"
40
+
41
+ [__rsub__]
42
+ func = "sub"
43
+
44
+ [__rtruediv__]
45
+ func = "truediv"
46
+
47
+ [__rxor__]
48
+ func = "xor"
@@ -17,10 +17,8 @@ class TestSlots(unittest.TestCase):
17
17
  foo: Foo = Foo()
18
18
  foo.x = 4
19
19
  foo.y = 2
20
- foo.z = 0
21
20
  self.assertEqual(foo.x, 4)
22
21
  self.assertEqual(foo.y, 2)
23
- self.assertEqual(foo.z, 0)
24
22
 
25
23
  def test_bar(self: Self) -> None:
26
24
  bar: Bar = Bar()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scaevola
3
- Version: 1.1.1
3
+ Version: 1.1.3
4
4
  Summary: This project provides a class with preset right handed magic methods.
5
5
  Author-email: Johannes <johannes.programming@gmail.com>
6
6
  License: The MIT License (MIT)
@@ -39,6 +39,7 @@ Classifier: Typing :: Typed
39
39
  Requires-Python: >=3.11
40
40
  Description-Content-Type: text/x-rst
41
41
  License-File: LICENSE.txt
42
+ Requires-Dist: setdoc<2,>=1.2.8
42
43
  Dynamic: license-file
43
44
 
44
45
  ========
@@ -0,0 +1,13 @@
1
+ scaevola/__init__.py,sha256=KAt5tVgdikLvbdauzJTkCsxH3vJKrff4LB1CH8OklYM,57
2
+ scaevola/core/__init__.py,sha256=U7yuLFvqFpCQLqJ8l5yM_CvwlGhEfoU9hvMJXdbEu8s,1645
3
+ scaevola/core/cfg.toml,sha256=VyO3LrEmEECCJdQa-WrQ_HWLlIGn_MWtdSD0QWEFF1g,452
4
+ scaevola/tests/__init__.py,sha256=QhiVlxbRnZlt4CSCc4yAPIRHo-BVzKpxzl80CmZC_Js,256
5
+ scaevola/tests/test_doc.py,sha256=xoDCYFUo2WQAiPcW4Z00DBWXjJRrO-X7yHGoCfA_5pc,972
6
+ scaevola/tests/test_op.py,sha256=wiI2TG-j3dVtMwShTmZ9ST6qAVMJDbW499FDePLrZJM,5136
7
+ scaevola/tests/test_slots_Scaevola.py,sha256=xoepOL6PGnKog0zmcyHJyXtrUnmhZoTjX1xFUAxPags,581
8
+ scaevola/tests/test_slots_auto.py,sha256=fMzYrndB2Tp5_iLtCHYVYoBM5KnYHY8VLFoeTcW3wgg,639
9
+ scaevola-1.1.3.dist-info/licenses/LICENSE.txt,sha256=QwqYepQwTN5xG57cngKt6xxYD9z9hw9d3lcI8zSLiNg,1074
10
+ scaevola-1.1.3.dist-info/METADATA,sha256=ooVqZXVJDlFTBwUNlZNkCnMUGNyJLn5_vVfwMTLvpFQ,2365
11
+ scaevola-1.1.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
12
+ scaevola-1.1.3.dist-info/top_level.txt,sha256=1oM62lKpwPWVxHtGCB2tN-TIs0bzZaSkB9dlI3Eoesw,9
13
+ scaevola-1.1.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,13 +0,0 @@
1
- scaevola/__init__.py,sha256=KAt5tVgdikLvbdauzJTkCsxH3vJKrff4LB1CH8OklYM,57
2
- scaevola/core/__init__.py,sha256=ip5txpkAK0Hj_cZHEYBHSJf6aTujGV-1-NJECGqk9Lk,2424
3
- scaevola/core/cfg.toml,sha256=-5qioZv_Ha7PJZ8lRhf9-aYXnane04ohSAeduzIMP0o,386
4
- scaevola/tests/__init__.py,sha256=QhiVlxbRnZlt4CSCc4yAPIRHo-BVzKpxzl80CmZC_Js,256
5
- scaevola/tests/test_doc.py,sha256=xoDCYFUo2WQAiPcW4Z00DBWXjJRrO-X7yHGoCfA_5pc,972
6
- scaevola/tests/test_op.py,sha256=wiI2TG-j3dVtMwShTmZ9ST6qAVMJDbW499FDePLrZJM,5136
7
- scaevola/tests/test_slots_Scaevola.py,sha256=kzw-LBvn2kH_2n6f2E4M14I04PFt8zGdfdYnRFJYVWo,634
8
- scaevola/tests/test_slots_auto.py,sha256=fMzYrndB2Tp5_iLtCHYVYoBM5KnYHY8VLFoeTcW3wgg,639
9
- scaevola-1.1.1.dist-info/licenses/LICENSE.txt,sha256=QwqYepQwTN5xG57cngKt6xxYD9z9hw9d3lcI8zSLiNg,1074
10
- scaevola-1.1.1.dist-info/METADATA,sha256=pgPQ7jiEuWJqRX_kYfNQ55APOMaOk-H8iKMqItavT4I,2333
11
- scaevola-1.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
12
- scaevola-1.1.1.dist-info/top_level.txt,sha256=1oM62lKpwPWVxHtGCB2tN-TIs0bzZaSkB9dlI3Eoesw,9
13
- scaevola-1.1.1.dist-info/RECORD,,