plexus-python-pulse-common 1.1.87__py3-none-any.whl → 1.1.88__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.
@@ -551,7 +551,10 @@ def model_revision_type(dialect: str | None = None) -> sa.types.TypeEngine[int]:
551
551
  raise ValueError(f"unsupported database dialect '{dialect}'")
552
552
 
553
553
 
554
- def index_condition_kwarg(dialect: str | None = None, clause: sa.TextClause | None = None) -> dict[str, sa.TextClause]:
554
+ def index_condition_kwarg(
555
+ dialect: str | None = None,
556
+ clause: sa.ClauseElement | None = None
557
+ ) -> dict[str, sa.ClauseElement | None]:
555
558
  if dialect is None:
556
559
  dialect = dialects.postgresql
557
560
  if dialect == dialects.postgresql:
@@ -728,7 +731,7 @@ def make_snapshot_model_mixin(dialect: str | None = None) -> type[SnapshotModelM
728
731
  index_name,
729
732
  "record_sqn",
730
733
  unique=True,
731
- **index_condition_kwarg(dialect, sa.text('"expired_at" IS NULL')),
734
+ **index_condition_kwarg(dialect, sa.column("expired_at").is_(None)),
732
735
  )
733
736
 
734
737
  @classmethod
@@ -736,7 +739,7 @@ def make_snapshot_model_mixin(dialect: str | None = None) -> type[SnapshotModelM
736
739
  return sa.Index(
737
740
  index_name,
738
741
  *fields,
739
- **index_condition_kwarg(dialect, sa.text('"expired_at" IS NULL')),
742
+ **index_condition_kwarg(dialect, sa.column("expired_at").is_(None)),
740
743
  )
741
744
 
742
745
  @classmethod
@@ -745,7 +748,7 @@ def make_snapshot_model_mixin(dialect: str | None = None) -> type[SnapshotModelM
745
748
  index_name,
746
749
  *fields,
747
750
  unique=True,
748
- **index_condition_kwarg(dialect, sa.text('"expired_at" IS NULL')),
751
+ **index_condition_kwarg(dialect, sa.column("expired_at").is_(None)),
749
752
  )
750
753
 
751
754
  return ModelMixin
@@ -865,7 +868,7 @@ def make_revision_model_mixin(dialect: str | None = None) -> type[RevisionModelM
865
868
  index_name,
866
869
  "record_sqn",
867
870
  unique=True,
868
- **index_condition_kwarg(dialect, sa.text('"expired_at" IS NULL')),
871
+ **index_condition_kwarg(dialect, sa.column("expired_at").is_(None)),
869
872
  )
870
873
 
871
874
  @classmethod
@@ -873,7 +876,7 @@ def make_revision_model_mixin(dialect: str | None = None) -> type[RevisionModelM
873
876
  return sa.Index(
874
877
  index_name,
875
878
  *fields,
876
- **index_condition_kwarg(dialect, sa.text('"expired_at" IS NULL')),
879
+ **index_condition_kwarg(dialect, sa.column("expired_at").is_(None)),
877
880
  )
878
881
 
879
882
  @classmethod
@@ -882,7 +885,7 @@ def make_revision_model_mixin(dialect: str | None = None) -> type[RevisionModelM
882
885
  index_name,
883
886
  *fields,
884
887
  unique=True,
885
- **index_condition_kwarg(dialect, sa.text('"expired_at" IS NULL')),
888
+ **index_condition_kwarg(dialect, sa.column("expired_at").is_(None)),
886
889
  )
887
890
 
888
891
  return ModelMixin
@@ -28,6 +28,8 @@ __all__ = [
28
28
  "strict_fragmented_abspath_parser",
29
29
  "email_address_pattern",
30
30
  "email_address_parser",
31
+ "numeric_version_pattern",
32
+ "numeric_version_parser",
31
33
  "semver_pattern",
32
34
  "semver_parser",
33
35
  "colon_tag_pattern",
@@ -91,6 +93,7 @@ sharp_token: pp.ParserElement = pp.Char("#")
91
93
  lower_regexp: re.Pattern[str] = re.compile(r"[a-z]")
92
94
  upper_regexp: re.Pattern[str] = re.compile(r"[A-Z]")
93
95
  digit_regexp: re.Pattern[str] = re.compile(r"[0-9]")
96
+ alpha_regexp: re.Pattern[str] = re.compile(r"[a-zA-Z]")
94
97
  lower_digit_regexp: re.Pattern[str] = re.compile(r"[a-z0-9]")
95
98
  upper_digit_regexp: re.Pattern[str] = re.compile(r"[A-Z0-9]")
96
99
  alpha_digit_regexp: re.Pattern[str] = re.compile(r"[a-zA-Z0-9]")
@@ -99,6 +102,7 @@ hex_digit_regexp: re.Pattern[str] = re.compile(r"[a-f0-9]")
99
102
  lowers_regexp: re.Pattern[str] = re.compile(rf"{lower_regexp.pattern}+")
100
103
  uppers_regexp: re.Pattern[str] = re.compile(rf"{upper_regexp.pattern}+")
101
104
  digits_regexp: re.Pattern[str] = re.compile(rf"{digit_regexp.pattern}+")
105
+ alphas_regexp: re.Pattern[str] = re.compile(rf"{alpha_regexp.pattern}+")
102
106
  lower_digits_regexp: re.Pattern[str] = re.compile(rf"{lower_digit_regexp.pattern}+")
103
107
  upper_digits_regexp: re.Pattern[str] = re.compile(rf"{upper_digit_regexp.pattern}+")
104
108
  alpha_digits_regexp: re.Pattern[str] = re.compile(rf"{alpha_digit_regexp.pattern}+")
@@ -110,6 +114,7 @@ strict_chars_regexp: re.Pattern[str] = re.compile(rf"({alpha_digit_regexp.patter
110
114
  lower_element: pp.ParserElement = pp.Regex(lower_regexp.pattern)
111
115
  upper_element: pp.ParserElement = pp.Regex(upper_regexp.pattern)
112
116
  digit_element: pp.ParserElement = pp.Regex(digit_regexp.pattern)
117
+ alpha_element: pp.ParserElement = pp.Regex(alpha_regexp.pattern)
113
118
  lower_digit_element: pp.ParserElement = pp.Regex(lower_digit_regexp.pattern)
114
119
  upper_digit_element: pp.ParserElement = pp.Regex(upper_digit_regexp.pattern)
115
120
  alpha_digit_element: pp.ParserElement = pp.Regex(alpha_digit_regexp.pattern)
@@ -118,6 +123,7 @@ hex_digit_element: pp.ParserElement = pp.Regex(hex_digit_regexp.pattern)
118
123
  lowers_element: pp.ParserElement = pp.Regex(lowers_regexp.pattern)
119
124
  uppers_element: pp.ParserElement = pp.Regex(uppers_regexp.pattern)
120
125
  digits_element: pp.ParserElement = pp.Regex(digits_regexp.pattern)
126
+ alphas_element: pp.ParserElement = pp.Regex(alphas_regexp.pattern)
121
127
  lower_digits_element: pp.ParserElement = pp.Regex(lower_digits_regexp.pattern)
122
128
  upper_digits_element: pp.ParserElement = pp.Regex(upper_digits_regexp.pattern)
123
129
  alpha_digits_element: pp.ParserElement = pp.Regex(alpha_digits_regexp.pattern)
@@ -184,10 +190,14 @@ email_address_regexp: re.Pattern[str] = re.compile(
184
190
  rf"(({lower_digit_regexp.pattern}|[_-])+)(?:\.({lower_digit_regexp.pattern}|[_-])+)*@(?:{kebab_case_regexp.pattern}\.)+({lower_digit_regexp.pattern}{{2,63}})")
185
191
  email_address_element: pp.ParserElement = pp.Regex(email_address_regexp.pattern)
186
192
 
193
+ numeric_version_regexp: re.Pattern[str] = re.compile(
194
+ rf"(?:{number_regexp.pattern})(?:\.(?:{number_regexp.pattern}))*")
195
+ numeric_version_element: pp.ParserElement = pp.Regex(numeric_version_regexp.pattern)
196
+
187
197
  semver_regexp: re.Pattern[str] = re.compile(
188
- rf"({number_regexp.pattern})\.({number_regexp.pattern})\.({number_regexp.pattern})"
189
- rf"(?:-{alpha_digits_regexp.pattern}(?:\.{alpha_digits_regexp.pattern})*)?"
190
- rf"(?:\+{alpha_digits_regexp.pattern}(?:\.{alpha_digits_regexp.pattern})*)?")
198
+ rf"(?:{number_regexp.pattern})\.(?:{number_regexp.pattern})\.(?:{number_regexp.pattern})"
199
+ rf"(?:-(?:(?:{alpha_digit_regexp.pattern}|-)*(?:{alpha_regexp.pattern}|-)(?:{alpha_digit_regexp.pattern}|-)*|{number_regexp.pattern})(?:\.(?:(?:{alpha_digit_regexp.pattern}|-)*(?:{alpha_regexp.pattern}|-)(?:{alpha_digit_regexp.pattern}|-)*|{number_regexp.pattern}))*)?"
200
+ rf"(?:\+(?:{alpha_digit_regexp.pattern}|-)+(?:\.(?:{alpha_digit_regexp.pattern}|-)+)*)?")
191
201
  semver_element: pp.ParserElement = pp.Regex(semver_regexp.pattern)
192
202
 
193
203
  colon_tag_regexp: re.Pattern[str] = re.compile(rf"{snake_case_regexp.pattern}(?::{snake_case_regexp.pattern})*")
@@ -229,6 +239,9 @@ strict_fragmented_abspath_parser = make_string_parser(strict_fragmented_abspath_
229
239
  email_address_pattern = make_string_pattern(email_address_regexp)
230
240
  email_address_parser = make_string_parser(email_address_element)
231
241
 
242
+ numeric_version_pattern = make_string_pattern(numeric_version_regexp)
243
+ numeric_version_parser = make_string_parser(numeric_version_element)
244
+
232
245
  semver_pattern = make_string_pattern(semver_regexp)
233
246
  semver_parser = make_string_parser(semver_element)
234
247
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexus-python-pulse-common
3
- Version: 1.1.87
3
+ Version: 1.1.88
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Programming Language :: Python :: 3.13
@@ -17,14 +17,14 @@ plexus/pulse/common/utils/dockerutils.py,sha256=7DF9yFGz8uHwpYk115xBWqOjs5etz0UE
17
17
  plexus/pulse/common/utils/flowutils.py,sha256=MGu15KL9mw-LyGGLceVmY-c2FGer5PURnMZWFSJN--I,10182
18
18
  plexus/pulse/common/utils/gisutils.py,sha256=Cx0ZB9-NA_7VuzbuzRArTJ5UfltG-KmvVC8YxPIgPE4,11600
19
19
  plexus/pulse/common/utils/jsonutils.py,sha256=zSbW94klN2jrkMdBECu4RNJX6zzNaSxauQ3FuihuB6E,3342
20
- plexus/pulse/common/utils/ormutils.py,sha256=ycs8MF5EDfxx8TP4gDrD7zIunxB0N3hSvGcB4adopkA,68187
20
+ plexus/pulse/common/utils/ormutils.py,sha256=taaZzpIH0C-ShEmOWf-vt22bgcFFqH1FnJlNcH9tEFM,68222
21
21
  plexus/pulse/common/utils/pathutils.py,sha256=eYfNK48wf1xZGK2IbpKxYOn4skZhWWA8OTyUwDXGMIc,9222
22
22
  plexus/pulse/common/utils/s3utils.py,sha256=5q5wSOavt-n5EdrflQX7WPGgDeWQkGO9lG5Nq3QXjCk,35904
23
23
  plexus/pulse/common/utils/sqlutils.py,sha256=D6kTBjhO5YlNRt3uFlPt6z3uH61m9ajEzPYmsI6NoFc,231
24
- plexus/pulse/common/utils/strutils.py,sha256=PkmMHCcHN9vALCy_8fJTf00Dg7I2N4QTCXdBmB3t7rk,16440
24
+ plexus/pulse/common/utils/strutils.py,sha256=8kl88-u89FApoaq-D2ulk5DNl9kenP6vqksvVJ0iH4s,17325
25
25
  plexus/pulse/common/utils/tagutils.py,sha256=V8eUxtWSijX6nHSCuRX2dTJz3why3TCOzPVK5YXt28s,66944
26
26
  plexus/pulse/common/utils/testutils.py,sha256=hKPRvoN4mg8QGQJH121l59a0uo8jN5rntGQAVYplGBw,6166
27
- plexus_python_pulse_common-1.1.87.dist-info/METADATA,sha256=SnylMrcOPgHpUmVJgX4jAdGVuiBl8KBOsSUlmX2U2xs,1555
28
- plexus_python_pulse_common-1.1.87.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
29
- plexus_python_pulse_common-1.1.87.dist-info/top_level.txt,sha256=ug_g7CVwaMQuas5UzAXbHUrQvKGCn8ezc6ZNvvRlJOE,7
30
- plexus_python_pulse_common-1.1.87.dist-info/RECORD,,
27
+ plexus_python_pulse_common-1.1.88.dist-info/METADATA,sha256=bNGz7B5jj23hayiYBRvtfRpfnsD21flHjbg-sgdiKMY,1555
28
+ plexus_python_pulse_common-1.1.88.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
29
+ plexus_python_pulse_common-1.1.88.dist-info/top_level.txt,sha256=ug_g7CVwaMQuas5UzAXbHUrQvKGCn8ezc6ZNvvRlJOE,7
30
+ plexus_python_pulse_common-1.1.88.dist-info/RECORD,,