ssc_codegen 0.19.2__tar.gz → 0.19.4__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.
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/PKG-INFO +1 -1
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/pyproject.toml +1 -1
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/parsers/curl.py +2 -2
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/parsers/spec.py +23 -1
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/.gitignore +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/LICENSE +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/README.md +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/__init__.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/_logging.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/__init__.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/array.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/base.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/cast.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/control.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/extract.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/helpers.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/jsondef.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/module.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/predicate_containers.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/predicate_ops.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/regex.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/selectors.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/string.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/struct.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/transform.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/typedef.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/ast/types.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/converters/base.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/converters/go_goquery.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/converters/helpers.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/converters/js_pure.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/converters/py_bs4.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/converters/py_lxml.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/converters/py_parsel.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/converters/py_slax.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/document_utils.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/exceptions.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/health.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/kdl/__init__.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/kdl/parser.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/__init__.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/_kdl_lang.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/base.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/errors.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/format_errors.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/metadata.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/navigation.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/path.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/rule_keywords.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/rules.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/rules_struct.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/type_rules.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/linter/types.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/main.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/parser.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/parsers/__init__.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/parsers/http.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/pseudo_selectors.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/regex_utils.py +0 -0
- {ssc_codegen-0.19.2 → ssc_codegen-0.19.4}/ssc_codegen/selector_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ssc_codegen
|
|
3
|
-
Version: 0.19.
|
|
3
|
+
Version: 0.19.4
|
|
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
|
|
@@ -97,10 +97,10 @@ def parse_curl_to_httpx_kwargs(
|
|
|
97
97
|
raise ValueError(f"Invalid header format: {header}")
|
|
98
98
|
key, value = header.split(":", 1)
|
|
99
99
|
headers[key.strip()] = value.strip()
|
|
100
|
-
elif part in ("-d", "--data"):
|
|
100
|
+
elif part in ("-d", "--data", "--data-raw"):
|
|
101
101
|
i += 1
|
|
102
102
|
if i >= len(parts):
|
|
103
|
-
raise ValueError("Missing data after -d/--data")
|
|
103
|
+
raise ValueError("Missing data after -d/--data/--data-raw")
|
|
104
104
|
data = parts[i]
|
|
105
105
|
elif part == "--json":
|
|
106
106
|
i += 1
|
|
@@ -146,6 +146,9 @@ def parse_to_spec(payload: str) -> RequestSpec:
|
|
|
146
146
|
body = kwargs[
|
|
147
147
|
"data"
|
|
148
148
|
] # dict with original values (may have placeholders)
|
|
149
|
+
elif "application/x-www-form-urlencoded" in content_type:
|
|
150
|
+
body_kind = "form"
|
|
151
|
+
body = _parse_urlencoded_body(raw_body)
|
|
149
152
|
else:
|
|
150
153
|
body_kind = "raw"
|
|
151
154
|
body = raw_body
|
|
@@ -174,12 +177,31 @@ def _curl_raw_body(payload: str) -> str:
|
|
|
174
177
|
parts = shlex.split(payload.strip())[1:] # drop "curl"
|
|
175
178
|
i = 0
|
|
176
179
|
while i < len(parts):
|
|
177
|
-
if parts[i] in ("-d", "--data", "--json") and i + 1 < len(parts):
|
|
180
|
+
if parts[i] in ("-d", "--data", "--data-raw", "--json") and i + 1 < len(parts):
|
|
178
181
|
return parts[i + 1]
|
|
179
182
|
i += 1
|
|
180
183
|
return ""
|
|
181
184
|
|
|
182
185
|
|
|
186
|
+
def _parse_urlencoded_body(raw: str) -> dict[str, str]:
|
|
187
|
+
"""Split an application/x-www-form-urlencoded body into a dict.
|
|
188
|
+
|
|
189
|
+
Preserves ``{{placeholders}}`` intact; URL-decodes everything else so the
|
|
190
|
+
target HTTP client can re-encode without double-encoding.
|
|
191
|
+
"""
|
|
192
|
+
from urllib.parse import unquote_plus
|
|
193
|
+
|
|
194
|
+
out: dict[str, str] = {}
|
|
195
|
+
if not raw:
|
|
196
|
+
return out
|
|
197
|
+
for pair in raw.split("&"):
|
|
198
|
+
if not pair:
|
|
199
|
+
continue
|
|
200
|
+
key, sep, value = pair.partition("=")
|
|
201
|
+
out[unquote_plus(key)] = unquote_plus(value) if sep else ""
|
|
202
|
+
return out
|
|
203
|
+
|
|
204
|
+
|
|
183
205
|
def _http_raw_body(payload: str) -> str:
|
|
184
206
|
lines = payload.strip().splitlines()
|
|
185
207
|
i = 1
|
|
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
|
|
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
|