ssc_codegen 0.7.5__tar.gz → 0.7.6__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 (43) hide show
  1. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/PKG-INFO +1 -1
  2. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/pyproject.toml +1 -1
  3. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/__init__.py +1 -1
  4. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/ast_build_utils.py +18 -0
  5. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/ast_ssc.py +1 -6
  6. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/tokens.py +4 -0
  7. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/.gitignore +0 -0
  8. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/LICENSE +0 -0
  9. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/README.md +0 -0
  10. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/_compat.py +0 -0
  11. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/ast_builder.py +0 -0
  12. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/cli/__init__.py +0 -0
  13. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/cli/cli_callbacks.py +0 -0
  14. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/cli/cli_utils.py +0 -0
  15. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/cli/code_callbacks.py +0 -0
  16. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/cli/consts.py +0 -0
  17. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/cli/main.py +0 -0
  18. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/cli/runtime_parse_runners.py +0 -0
  19. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/compiler.py +0 -0
  20. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/consts.py +0 -0
  21. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/__init__.py +0 -0
  22. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/ast_utils.py +0 -0
  23. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/base.py +0 -0
  24. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/dart_universal_html.py +0 -0
  25. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/go_goquery.py +0 -0
  26. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/js_pure.py +0 -0
  27. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/json_to_schema.py +0 -0
  28. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/py_base.py +0 -0
  29. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/py_bs4.py +0 -0
  30. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/py_parsel.py +0 -0
  31. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/py_scrapy.py +0 -0
  32. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/py_selectolax.py +0 -0
  33. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/templates/dart.py +0 -0
  34. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/templates/go.py +0 -0
  35. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/templates/js.py +0 -0
  36. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/templates/py.py +0 -0
  37. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/converters/templates/template_bindings.py +0 -0
  38. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/document.py +0 -0
  39. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/document_utlis.py +0 -0
  40. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/json_struct.py +0 -0
  41. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/schema.py +0 -0
  42. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/selector_utils.py +0 -0
  43. {ssc_codegen-0.7.5 → ssc_codegen-0.7.6}/ssc_codegen/str_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ssc_codegen
3
- Version: 0.7.5
3
+ Version: 0.7.6
4
4
  Summary: Python-dsl code converter to html parser for web scraping
5
5
  Project-URL: Documentation, https://github.com/vypivshiy/selector_schema_codegen#readme
6
6
  Project-URL: Issues, https://github.com/vypivshiy/selector_schema_codegen/issues
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ssc_codegen"
3
- version = "0.7.5"
3
+ version = "0.7.6"
4
4
  description = "Python-dsl code converter to html parser for web scraping "
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -3,7 +3,7 @@ from .document import HTMLDocument, StringDocument, ArrayDocument, AssertDocumen
3
3
  from .json_struct import Json
4
4
  from .schema import ItemSchema, DictSchema, ListSchema, FlatListSchema
5
5
 
6
- VERSION = "0.7.5"
6
+ VERSION = "0.7.6"
7
7
 
8
8
  class __MISSING(object):
9
9
  pass
@@ -126,6 +126,10 @@ def extract_json_structs_from_module(module: ModuleType) -> list[Type[Json]]:
126
126
  def assert_ret_type_not_document(
127
127
  field: "BaseDocument", name: str, schema: Type[BaseSchema]
128
128
  ) -> None:
129
+ # always ret nil, skip
130
+ if name == "__PRE_VALIDATE__":
131
+ return
132
+
129
133
  if field.stack_last_ret == VariableType.DOCUMENT:
130
134
  msg = f"{schema.__name__}.{name} cannot return type {VariableType.DOCUMENT.name}"
131
135
  raise TypeError(msg)
@@ -222,6 +226,19 @@ def assert_field_document_variable_types(field: BaseDocument) -> None:
222
226
  if var_cursor == expr.accept_type:
223
227
  var_cursor = expr.ret_type
224
228
  continue
229
+ # currently used in to_len() operation
230
+ elif expr.accept_type == VariableType.LIST_ANY:
231
+ if var_cursor in (
232
+ VariableType.LIST_STRING,
233
+ VariableType.LIST_DOCUMENT,
234
+ VariableType.LIST_FLOAT,
235
+ VariableType.LIST_INT,
236
+ ):
237
+ var_cursor = expr.ret_type
238
+ continue
239
+ msg = f".to_len() expected LIST_ANY type, got '{var_cursor.name}'"
240
+ raise TypeError(msg)
241
+
225
242
  # this type always first (naive, used in DEFAULT and RETURN expr)
226
243
  elif expr.accept_type == VariableType.ANY:
227
244
  var_cursor = VariableType.DOCUMENT
@@ -232,5 +249,6 @@ def assert_field_document_variable_types(field: BaseDocument) -> None:
232
249
  elif var_cursor == VariableType.NESTED:
233
250
  raise TypeError("sub_parser not allowed next instructions")
234
251
 
252
+ # not covered cases
235
253
  msg = f"'{expr.kind.name}' expected type '{expr.accept_type.name}', got '{var_cursor.name}'"
236
254
  raise TypeError(msg)
@@ -427,12 +427,7 @@ class JoinExpression(BaseExpression):
427
427
  @dataclass(kw_only=True)
428
428
  class ArrayLengthExpression(BaseExpression):
429
429
  kind: ClassVar[TokenType] = TokenType.EXPR_LIST_LEN
430
- accept_type: VariableType = (
431
- VariableType.LIST_STRING
432
- | VariableType.LIST_DOCUMENT
433
- | VariableType.LIST_INT
434
- | VariableType.LIST_FLOAT
435
- )
430
+ accept_type: VariableType = VariableType.LIST_ANY
436
431
  ret_type: VariableType = VariableType.INT
437
432
 
438
433
 
@@ -14,6 +14,10 @@ class VariableType(IntEnum):
14
14
  # mark accept any variable type
15
15
  # used in return and default expr
16
16
  ANY = auto()
17
+
18
+ # currently used for to_len() operation
19
+ LIST_ANY = auto()
20
+
17
21
  # nested functions
18
22
  NESTED = auto()
19
23
  INT = auto()
File without changes
File without changes
File without changes