ssc_codegen 0.13.2__tar.gz → 0.13.3__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.
Potentially problematic release.
This version of ssc_codegen might be problematic. Click here for more details.
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/PKG-INFO +1 -1
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/pyproject.toml +1 -1
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/__init__.py +1 -1
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/cli/ast_grep.py +3 -1
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/cli/main.py +16 -6
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/py_lxml.py +37 -6
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/.gitignore +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/LICENSE +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/README.md +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/_compat.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_/__init__.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_/base.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_/nodes_array.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_/nodes_cast.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_/nodes_core.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_/nodes_filter.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_/nodes_selectors.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_/nodes_string.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_/nodes_validate.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_build/__init__.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_build/builder.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_build/main.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_build/utils.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_grep_rules/js_rules.yml +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_grep_rules/py_drop_prefix_suffix_backport.yml +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/ast_grep_rules/py_rules.yml +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/cli/__init__.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/cli/cli_callbacks.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/cli/cli_utils.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/cli/code_callbacks.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/cli/consts.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/cli/runtime_parse_runners.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/compiler.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/__init__.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/base.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/go_goquery.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/helpers.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/js_pure.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/lua_htmlparser.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/py_base.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/py_bs4.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/py_parsel.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/py_selectolax.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/templates/__init__.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/templates/go_goquery.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/templates/js_pure.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/templates/lua_base.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/templates/lua_css_compat.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/templates/lua_re_compat.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/templates/py_base.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/document.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/document_utlis.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/json_struct.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/json_to_scc.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/logs.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/pseudo_selectors.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/schema.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/selector_utils.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/static_checker/__init__.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/static_checker/base.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/static_checker/callbacks.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/str_utils.py +0 -0
- {ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/tokens.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ssc_codegen
|
|
3
|
-
Version: 0.13.
|
|
3
|
+
Version: 0.13.3
|
|
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
|
|
@@ -4,5 +4,7 @@ from importlib import resources
|
|
|
4
4
|
RULES_PATH = resources.files("ssc_codegen.ast_grep_rules")
|
|
5
5
|
|
|
6
6
|
PY_RULES = str(RULES_PATH.joinpath("py_rules.yml"))
|
|
7
|
-
PY_NEW_RM_PREFIX_SUFFIX_SYNTAX = str(
|
|
7
|
+
PY_NEW_RM_PREFIX_SUFFIX_SYNTAX = str(
|
|
8
|
+
RULES_PATH.joinpath("py_drop_prefix_suffix_backport.yml")
|
|
9
|
+
)
|
|
8
10
|
JS_RULES = str(RULES_PATH.joinpath("js_rules.yml"))
|
|
@@ -11,7 +11,11 @@ from ichrome.exceptions import ChromeRuntimeError
|
|
|
11
11
|
from typer import Argument, BadParameter, Option, Typer
|
|
12
12
|
|
|
13
13
|
from ssc_codegen.ast_build import build_ast_module_parser
|
|
14
|
-
from ssc_codegen.cli.ast_grep import
|
|
14
|
+
from ssc_codegen.cli.ast_grep import (
|
|
15
|
+
JS_RULES,
|
|
16
|
+
PY_RULES,
|
|
17
|
+
PY_NEW_RM_PREFIX_SUFFIX_SYNTAX,
|
|
18
|
+
)
|
|
15
19
|
from ssc_codegen.cli.cli_callbacks import cb_check_ssc_files, cb_folder_out
|
|
16
20
|
from ssc_codegen.cli.cli_utils import (
|
|
17
21
|
ConverterLike,
|
|
@@ -169,8 +173,13 @@ def gen_py(
|
|
|
169
173
|
bool, Option(help=HELP_DOCSTRING, is_flag=True)
|
|
170
174
|
] = True,
|
|
171
175
|
fmt_prefix_suffix_backport: Annotated[
|
|
172
|
-
bool,
|
|
173
|
-
|
|
176
|
+
bool,
|
|
177
|
+
Option(
|
|
178
|
+
"-frps",
|
|
179
|
+
"--fmt-remove-prefix-suffix",
|
|
180
|
+
help="[PY39+]: replace backport funcs to str.removeprefix(...) and str.removesuffix(...)",
|
|
181
|
+
),
|
|
182
|
+
] = False,
|
|
174
183
|
) -> None:
|
|
175
184
|
converter = import_converter(f"py_{lib.value}")
|
|
176
185
|
if fmt:
|
|
@@ -180,13 +189,14 @@ def gen_py(
|
|
|
180
189
|
f"ast-grep scan --rule {PY_RULES} -U " + "{}",
|
|
181
190
|
]
|
|
182
191
|
if fmt_prefix_suffix_backport:
|
|
183
|
-
commands.append(
|
|
192
|
+
commands.append(
|
|
193
|
+
f"ast-grep scan --rule {PY_NEW_RM_PREFIX_SUFFIX_SYNTAX} -U "
|
|
194
|
+
+ "{}"
|
|
195
|
+
)
|
|
184
196
|
fmt_cmd = create_fmt_cmd(ssc_files, prefix, suffix, out, commands)
|
|
185
197
|
else:
|
|
186
198
|
fmt_cmd = []
|
|
187
199
|
|
|
188
|
-
|
|
189
|
-
|
|
190
200
|
generate_code(
|
|
191
201
|
converter=converter,
|
|
192
202
|
out=out,
|
|
@@ -62,15 +62,38 @@ from ssc_codegen.converters.templates.py_base import IMPORTS_MIN
|
|
|
62
62
|
|
|
63
63
|
CONVERTER = BasePyCodeConverter()
|
|
64
64
|
|
|
65
|
+
"""
|
|
66
|
+
# HtmlElement → сразу принимаем
|
|
67
|
+
if isinstance(document, html.HtmlElement):
|
|
68
|
+
self._document = document
|
|
69
|
+
return
|
|
70
|
+
|
|
71
|
+
# Строка → пробуем парсить
|
|
72
|
+
if isinstance(document, str):
|
|
73
|
+
try:
|
|
74
|
+
self._document = html.fromstring(document.strip() or self.FALLBACK_HTML)
|
|
75
|
+
return
|
|
76
|
+
except (ParserError, ValueError):
|
|
77
|
+
pass
|
|
78
|
+
|
|
79
|
+
# Всё остальное или ошибка → заглушка
|
|
80
|
+
self._document = html.fromstring(self.FALLBACK_HTML)
|
|
81
|
+
"""
|
|
82
|
+
|
|
65
83
|
|
|
66
84
|
@CONVERTER(StructInitMethod.kind)
|
|
67
85
|
def pre_init(_node: StructInitMethod) -> str:
|
|
68
|
-
|
|
86
|
+
parts = [
|
|
69
87
|
INDENT_METHOD
|
|
70
|
-
+ "def __init__(self, document: Union[str, html.HtmlElement]) -> None
|
|
71
|
-
+
|
|
72
|
-
+ "self._document =
|
|
73
|
-
|
|
88
|
+
+ "def __init__(self, document: Union[str, html.HtmlElement]) -> None:",
|
|
89
|
+
INDENT_METHOD * 2 + "if isinstance(document, html.HtmlElement):",
|
|
90
|
+
INDENT_METHOD * 3 + "self._document = document",
|
|
91
|
+
INDENT_METHOD * 2 + "elif isinstance(document, str):",
|
|
92
|
+
INDENT_METHOD * 3
|
|
93
|
+
+ "self._document = html.fromstring(document.strip() or FALLBACK_HTML_STR)",
|
|
94
|
+
# in codegen, passed only str or html.HtmlElement objects
|
|
95
|
+
]
|
|
96
|
+
return "\n".join(parts)
|
|
74
97
|
|
|
75
98
|
|
|
76
99
|
@CONVERTER(StructPreValidateMethod.kind)
|
|
@@ -101,7 +124,15 @@ def pre_struct_field_method(node: StructFieldMethod) -> str:
|
|
|
101
124
|
|
|
102
125
|
@CONVERTER(ModuleImports.kind)
|
|
103
126
|
def pre_imports(_: ModuleImports) -> str:
|
|
104
|
-
|
|
127
|
+
# lxml throw parse error if passed empty string
|
|
128
|
+
# most mainsteram html parser libs use `FALLBACK_HTML_STR` stub value
|
|
129
|
+
return (
|
|
130
|
+
IMPORTS_MIN
|
|
131
|
+
+ """from lxml import html, etree
|
|
132
|
+
|
|
133
|
+
FALLBACK_HTML_STR = "<html><body></body></html>"
|
|
134
|
+
"""
|
|
135
|
+
)
|
|
105
136
|
|
|
106
137
|
|
|
107
138
|
@CONVERTER(ExprCss.kind)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ssc_codegen-0.13.2 → ssc_codegen-0.13.3}/ssc_codegen/converters/templates/lua_css_compat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|