u-toolkit 0.1.18__tar.gz → 0.1.19__tar.gz

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.
Files changed (44) hide show
  1. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/PKG-INFO +1 -1
  2. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/pyproject.toml +1 -1
  3. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/enum.py +6 -6
  4. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/function.py +1 -1
  5. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/helpers.py +2 -0
  6. u_toolkit-0.1.19/tests/test_enum.py +130 -0
  7. u_toolkit-0.1.19/tests/test_function.py +26 -0
  8. u_toolkit-0.1.19/tests/test_helpers.py +13 -0
  9. u_toolkit-0.1.18/src/u_toolkit/object.py +0 -0
  10. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/.github/workflows/publish.yml +0 -0
  11. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/.gitignore +0 -0
  12. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/README.md +0 -0
  13. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/__init__.py +0 -0
  14. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/alias_generators.py +0 -0
  15. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/datetime.py +0 -0
  16. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/decorators.py +0 -0
  17. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/fastapi/__init__.py +0 -0
  18. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/fastapi/cbv.py +0 -0
  19. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/fastapi/config.py +0 -0
  20. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/fastapi/exception.py +0 -0
  21. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/fastapi/helpers.py +0 -0
  22. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/fastapi/lifespan.py +0 -0
  23. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/fastapi/pagination.py +0 -0
  24. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/fastapi/responses.py +0 -0
  25. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/logger.py +0 -0
  26. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/merge.py +0 -0
  27. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/path.py +0 -0
  28. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/pydantic/__init__.py +0 -0
  29. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/pydantic/fields.py +0 -0
  30. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/pydantic/models.py +0 -0
  31. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/pydantic/type_vars.py +0 -0
  32. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/signature.py +0 -0
  33. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/sqlalchemy/__init__.py +0 -0
  34. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/sqlalchemy/fields.py +0 -0
  35. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/sqlalchemy/function.py +0 -0
  36. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/sqlalchemy/orm/__init__.py +0 -0
  37. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/sqlalchemy/orm/fields.py +0 -0
  38. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/sqlalchemy/orm/models.py +0 -0
  39. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/sqlalchemy/table_info.py +0 -0
  40. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/src/u_toolkit/sqlalchemy/type_vars.py +0 -0
  41. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/tests/__init__.py +0 -0
  42. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/tests/fastapi/__init__.py +0 -0
  43. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/tests/fastapi/test_cbv.py +0 -0
  44. {u_toolkit-0.1.18 → u_toolkit-0.1.19}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: u-toolkit
3
- Version: 0.1.18
3
+ Version: 0.1.19
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: pydantic>=2.11.3
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "u-toolkit"
3
- version = "0.1.18"
3
+ version = "0.1.19"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -15,29 +15,29 @@ __all__ = [
15
15
 
16
16
  class NameEnum(StrEnum):
17
17
  @staticmethod
18
- def _generate_next_value_(name, *_, **__) -> str:
18
+ def _generate_next_value_(name: str, *_, **__) -> str:
19
19
  return name
20
20
 
21
21
 
22
22
  class PascalEnum(StrEnum):
23
23
  @staticmethod
24
- def _generate_next_value_(name, *_, **__) -> str:
24
+ def _generate_next_value_(name: str, *_, **__) -> str:
25
25
  return to_pascal(name)
26
26
 
27
27
 
28
28
  class CamelEnum(StrEnum):
29
29
  @staticmethod
30
- def _generate_next_value_(name, *_, **__) -> str:
30
+ def _generate_next_value_(name: str, *_, **__) -> str:
31
31
  return to_camel(name)
32
32
 
33
33
 
34
34
  class SnakeEnum(StrEnum):
35
35
  @staticmethod
36
- def _generate_next_value_(name, *_, **__) -> str:
36
+ def _generate_next_value_(name: str, *_, **__) -> str:
37
37
  return to_snake(name)
38
38
 
39
39
 
40
40
  class TitleEnum(StrEnum):
41
41
  @staticmethod
42
- def _generate_next_value_(name, *_, **__) -> str:
43
- return name.replace("_", " ").title()
42
+ def _generate_next_value_(name: str, *_, **__) -> str:
43
+ return name.replace("_", " ").strip().title()
@@ -1,7 +1,7 @@
1
1
  from collections.abc import Callable
2
2
 
3
3
 
4
- def get_name(fn: Callable, /):
4
+ def get_name(fn: Callable, /) -> str:
5
5
  return fn.__name__
6
6
 
7
7
 
@@ -2,4 +2,6 @@ from typing import Annotated, get_origin
2
2
 
3
3
 
4
4
  def is_annotated(target):
5
+ """判断值是否是 `typing.Annotated`"""
6
+
5
7
  return get_origin(target) is Annotated
@@ -0,0 +1,130 @@
1
+ from u_toolkit import enum
2
+
3
+
4
+ def test_name_enum():
5
+ class _Enum(enum.NameEnum):
6
+ A = enum.auto()
7
+ Ab = enum.auto()
8
+ AbC = enum.auto()
9
+ ABCD = enum.auto()
10
+ ABCD_E = enum.auto()
11
+ aa = enum.auto()
12
+ a_a = enum.auto()
13
+ a2 = enum.auto()
14
+ Bb = enum.auto()
15
+ c_ = enum.auto()
16
+
17
+ assert _Enum.A == "A"
18
+ assert _Enum.Ab == "Ab"
19
+ assert _Enum.AbC == "AbC"
20
+ assert _Enum.ABCD == "ABCD"
21
+ assert _Enum.ABCD_E == "ABCD_E"
22
+ assert _Enum.aa == "aa"
23
+ assert _Enum.a_a == "a_a"
24
+ assert _Enum.a2 == "a2"
25
+ assert _Enum.Bb == "Bb"
26
+ assert _Enum.c_ == "c_"
27
+
28
+
29
+ def test_pascal_enum():
30
+ class _Enum(enum.PascalEnum):
31
+ A = enum.auto()
32
+ Ab = enum.auto()
33
+ AbC = enum.auto()
34
+ ABCD = enum.auto()
35
+ ABCD_E = enum.auto()
36
+ aa = enum.auto()
37
+ a_a = enum.auto()
38
+ a2 = enum.auto()
39
+ Bb = enum.auto()
40
+ c_ = enum.auto()
41
+
42
+ assert _Enum.A == "A"
43
+ assert _Enum.Ab == "Ab"
44
+ assert _Enum.AbC == "Abc"
45
+ assert _Enum.ABCD == "ABCD"
46
+ assert _Enum.ABCD_E == "ABCD_E"
47
+ assert _Enum.aa == "Aa"
48
+ assert _Enum.a_a == "AA"
49
+ assert _Enum.a2 == "A2"
50
+ assert _Enum.Bb == "Bb"
51
+ assert _Enum.c_ == "C_"
52
+
53
+
54
+ def test_camel_enum():
55
+ class _Enum(enum.CamelEnum):
56
+ A = enum.auto()
57
+ Ab = enum.auto()
58
+ AbC = enum.auto()
59
+ ABCD = enum.auto()
60
+ ABCD_E = enum.auto()
61
+ aa = enum.auto()
62
+ a_a = enum.auto()
63
+ a2 = enum.auto()
64
+ Bb = enum.auto()
65
+ c_ = enum.auto()
66
+
67
+ assert _Enum.A == "A"
68
+ assert _Enum.Ab == "ab"
69
+ assert _Enum.AbC == "abc"
70
+ assert _Enum.ABCD == "ABCD"
71
+ assert _Enum.ABCD_E == "ABCD_E"
72
+ assert _Enum.aa == "aa"
73
+ assert _Enum.a_a == "aA"
74
+ assert _Enum.a2 == "a2"
75
+ assert _Enum.Bb == "bb"
76
+ assert _Enum.c_ == "c_"
77
+
78
+
79
+ def test_snake_enum():
80
+ class _Enum(enum.SnakeEnum):
81
+ A = enum.auto()
82
+ Ab = enum.auto()
83
+ AbC = enum.auto()
84
+ ABCD = enum.auto()
85
+ ABCD_E = enum.auto()
86
+ aa = enum.auto()
87
+ a_a = enum.auto()
88
+ a2 = enum.auto()
89
+ aa3 = enum.auto()
90
+ Bb = enum.auto()
91
+ c_ = enum.auto()
92
+
93
+ assert _Enum.A == "A"
94
+ assert _Enum.Ab == "ab"
95
+ assert _Enum.AbC == "ab_c"
96
+ assert _Enum.ABCD == "ABCD"
97
+ assert _Enum.ABCD_E == "ABCD_E"
98
+ assert _Enum.aa == "aa"
99
+ assert _Enum.a_a == "a_a"
100
+ assert _Enum.a2 == "a_2"
101
+ assert _Enum.aa3 == "aa_3"
102
+ assert _Enum.Bb == "bb"
103
+ assert _Enum.c_ == "c_"
104
+
105
+
106
+ def test_title_enum():
107
+ class _Enum(enum.TitleEnum):
108
+ A = enum.auto()
109
+ Ab = enum.auto()
110
+ AbC = enum.auto()
111
+ ABCD = enum.auto()
112
+ ABCD_E = enum.auto()
113
+ aa = enum.auto()
114
+ a_a = enum.auto()
115
+ a2 = enum.auto()
116
+ aa3 = enum.auto()
117
+ Bb = enum.auto()
118
+ c_ = enum.auto()
119
+
120
+ assert _Enum.A == "A"
121
+ assert _Enum.Ab == "Ab"
122
+ assert _Enum.AbC == "Abc"
123
+ assert _Enum.ABCD == "Abcd"
124
+ assert _Enum.ABCD_E == "Abcd E"
125
+ assert _Enum.aa == "Aa"
126
+ assert _Enum.a_a == "A A"
127
+ assert _Enum.a2 == "A2"
128
+ assert _Enum.aa3 == "Aa3"
129
+ assert _Enum.Bb == "Bb"
130
+ assert _Enum.c_ == "C"
@@ -0,0 +1,26 @@
1
+ from u_toolkit import function
2
+
3
+
4
+ def test_get_name():
5
+ def fn(): ...
6
+
7
+ assert function.get_name(fn) == "fn"
8
+ assert function.get_name(lambda: 1) == "<lambda>"
9
+
10
+
11
+ def test_add_document():
12
+ def fn(): ...
13
+
14
+ assert fn.__doc__ is None
15
+
16
+ function.add_document(fn, "lalala")
17
+
18
+ assert fn.__doc__ == "lalala"
19
+
20
+ def fn2():
21
+ """2333"""
22
+
23
+ assert fn2.__doc__ == "2333"
24
+
25
+ function.add_document(fn2, "lalala")
26
+ assert fn2.__doc__ == "2333\n\nlalala"
@@ -0,0 +1,13 @@
1
+ from typing import Annotated
2
+
3
+ from u_toolkit import helpers
4
+
5
+
6
+ def test_is_annotated():
7
+ assert helpers.is_annotated(type) is False
8
+ assert helpers.is_annotated(int) is False
9
+ assert helpers.is_annotated(object()) is False
10
+ assert helpers.is_annotated(Annotated) is False
11
+ assert helpers.is_annotated(Annotated[int, 1]) is True
12
+ assert helpers.is_annotated(Annotated[int, type]) is True
13
+ assert helpers.is_annotated(Annotated[int, object()]) is True
File without changes
File without changes
File without changes
File without changes
File without changes