gammon-im 2.0.0__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.
- gammon_im-2.0.0/.claude/settings.json +44 -0
- gammon_im-2.0.0/.github/workflows/publish.yml +19 -0
- gammon_im-2.0.0/.gitignore +9 -0
- gammon_im-2.0.0/.python-version +1 -0
- gammon_im-2.0.0/CLAUDE.md +80 -0
- gammon_im-2.0.0/LICENSE +21 -0
- gammon_im-2.0.0/PKG-INFO +50 -0
- gammon_im-2.0.0/README.md +44 -0
- gammon_im-2.0.0/gammon/__init__.py +2 -0
- gammon_im-2.0.0/gammon/__main__.py +3 -0
- gammon_im-2.0.0/gammon/__version__.py +6 -0
- gammon_im-2.0.0/gammon/_main.py +219 -0
- gammon_im-2.0.0/pyproject.toml +50 -0
- gammon_im-2.0.0/svg/jetbrains.svg +73 -0
- gammon_im-2.0.0/uv.lock +180 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/claude-code-settings.json",
|
|
3
|
+
"effortLevel": "xhigh",
|
|
4
|
+
"attribution": {
|
|
5
|
+
"commit": "",
|
|
6
|
+
"pr": ""
|
|
7
|
+
},
|
|
8
|
+
"permissions": {
|
|
9
|
+
"deny": [
|
|
10
|
+
"Read(//**/*.ignore)",
|
|
11
|
+
"Read(//**/*.ignore.*)",
|
|
12
|
+
"Read(//**/.idea/**)"
|
|
13
|
+
],
|
|
14
|
+
"allow": [
|
|
15
|
+
"Edit",
|
|
16
|
+
"Write",
|
|
17
|
+
"WebSearch",
|
|
18
|
+
"WebFetch",
|
|
19
|
+
"Read(/tmp/**)",
|
|
20
|
+
"Write(/tmp/**)",
|
|
21
|
+
"Bash(git add *)",
|
|
22
|
+
"Bash(git diff *)",
|
|
23
|
+
"Bash(git log *)",
|
|
24
|
+
"Bash(git show *)",
|
|
25
|
+
"Bash(git status *)",
|
|
26
|
+
"Bash(git ls-tree *)",
|
|
27
|
+
"Bash(git mv *)",
|
|
28
|
+
"Bash(ls *)",
|
|
29
|
+
"Bash(cat *)",
|
|
30
|
+
"Bash(sed *)",
|
|
31
|
+
"Bash(awk *)",
|
|
32
|
+
"Bash(grep *)",
|
|
33
|
+
"Bash(find *)",
|
|
34
|
+
"Bash(head *)",
|
|
35
|
+
"Bash(printf *)",
|
|
36
|
+
"Bash(xxd *)",
|
|
37
|
+
"Bash(curl *)",
|
|
38
|
+
"Bash(prettier *)",
|
|
39
|
+
"Bash(psql *)",
|
|
40
|
+
"Bash(rm *)",
|
|
41
|
+
"Bash(echo *)"
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Publish
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push: {tags: ['v*']}
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
publish:
|
|
9
|
+
name: Publish
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
id-token: write
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
with: {fetch-depth: 0}
|
|
17
|
+
- uses: astral-sh/setup-uv@v6
|
|
18
|
+
- run: uv build
|
|
19
|
+
- run: uv publish
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Conventions
|
|
6
|
+
|
|
7
|
+
Keep every line in this repository — code, Markdown (including this file), and config — to a maximum of 120
|
|
8
|
+
characters. Ruff (configured in `pyproject.toml`) already enforces 120 for Python; apply the same limit
|
|
9
|
+
everywhere by hard-wrapping prose.
|
|
10
|
+
|
|
11
|
+
Write each commit message as a single Conventional Commits line — `type(scope): summary`, with no body —
|
|
12
|
+
where type is one of `feat`, `fix`, `docs`, `refactor`, `perf`, `test`, `build`, `ci`, or `chore` (scope
|
|
13
|
+
optional). This is a solo project: commit directly to `master`; do not create feature branches.
|
|
14
|
+
|
|
15
|
+
## What this is
|
|
16
|
+
|
|
17
|
+
`gammon` — short for "Google My Maps to OrgaNIc Maps", as in the domain `gammon.im` — is a single-purpose CLI
|
|
18
|
+
that converts Google My Maps KML exports into KML that Organic Maps / MAPS.ME can import, preserving placemark
|
|
19
|
+
colors and icons as closely as the smaller Organic Maps style set allows. Published to PyPI as `gammon-im`; also
|
|
20
|
+
runs the backend of https://gammon.im.
|
|
21
|
+
|
|
22
|
+
## Commands
|
|
23
|
+
|
|
24
|
+
Set up the dev environment (installs deps and the package in editable mode into `.venv`):
|
|
25
|
+
|
|
26
|
+
uv sync
|
|
27
|
+
|
|
28
|
+
Run the converter against a KML file (writes result to stdout):
|
|
29
|
+
|
|
30
|
+
uv run gammon google-maps.kml > organic-maps.kml
|
|
31
|
+
|
|
32
|
+
Useful flags:
|
|
33
|
+
- `--verbose` — log Google styles whose icon has no mapping (drives new `icon_map` entries).
|
|
34
|
+
- `--only-unsupported-styles` — inverse mode: keep *only* placemarks whose style is recognized-but-unmapped,
|
|
35
|
+
to surface gaps in the mapping tables.
|
|
36
|
+
|
|
37
|
+
Lint (Ruff config in `pyproject.toml`, max line length 120):
|
|
38
|
+
|
|
39
|
+
uv run ruff check
|
|
40
|
+
|
|
41
|
+
There is **no test suite** in this repo; verify changes by running the converter on a sample KML.
|
|
42
|
+
|
|
43
|
+
## Architecture
|
|
44
|
+
|
|
45
|
+
Effectively all logic lives in `gammon/_main.py`. The rest of the package is thin: `__main__.py` calls `_main()`,
|
|
46
|
+
`__init__.py` re-exports the public API (`convert`, `ConversionError`, `__version__`), and `__version__.py`
|
|
47
|
+
resolves the installed distribution version.
|
|
48
|
+
|
|
49
|
+
`convert(input_file, output_file, verbose, only_unsupported)` is the entry point used by both the CLI and the
|
|
50
|
+
web backend. It parses the KML with `lxml`, finds the `<Document>` element, runs the transform pipeline, then
|
|
51
|
+
re-indents and serializes. All KML lookups use the OpenGIS namespace via the `ns` / `x:` prefix; MAPS.ME's
|
|
52
|
+
custom `<mwm:icon>` extension uses the `mwm` namespace (`https://maps.me`). Organic Maps reads this same
|
|
53
|
+
MAPS.ME-format KML, so the `maps.me` namespace and `placemark-*` style names in the code are deliberate
|
|
54
|
+
format references, not project branding — do not rename them.
|
|
55
|
+
|
|
56
|
+
The default pipeline is `process()`, a fixed sequence of XPath-based mutations on the `<Document>`:
|
|
57
|
+
1. `remove_old_styles` — strip Google's `<Style>`/`<StyleMap>`.
|
|
58
|
+
2. `remove_lines` — drop `LineString` placemarks (only point placemarks are converted).
|
|
59
|
+
3. `remove_empty_folders`.
|
|
60
|
+
4. `add_organic_maps_styles` — insert one `<Style>` per unique placemark color at the top of the document.
|
|
61
|
+
5. `google_to_organic_maps_icons` — rewrite each placemark's `<styleUrl>` and attach a `<mwm:icon>` element.
|
|
62
|
+
|
|
63
|
+
### The mapping tables (most common change)
|
|
64
|
+
|
|
65
|
+
Conversion accuracy is driven by two dicts at the top of `_main.py`:
|
|
66
|
+
- `style_map`: Google hex color → MAPS.ME `placemark-<color>` style name.
|
|
67
|
+
- `icon_map`: Google 4-digit icon number → MAPS.ME icon name (e.g. `Hotel`, `Food`). The value `'None'` means
|
|
68
|
+
"recognized, but emit no icon".
|
|
69
|
+
|
|
70
|
+
`google_style_regex` parses Google `styleUrl`s of the form `#icon-1602-C2185B`, where group 1 is the icon
|
|
71
|
+
number (looked up in `icon_map`) and group 2 is the hex color (looked up in `style_map`).
|
|
72
|
+
`google_to_organic_maps_icon_and_style()` performs both lookups. Adding support for new Google icons/colors almost
|
|
73
|
+
always means adding entries to these two dicts — use `--verbose` to find unmapped icons.
|
|
74
|
+
|
|
75
|
+
## Versioning & release
|
|
76
|
+
|
|
77
|
+
The version is derived from git tags by `hatch-vcs` at build time: a `vX.Y.Z` tag on HEAD → `X.Y.Z`; otherwise
|
|
78
|
+
the next patch as a dev pre-release (e.g. after `v1.0.2` → `1.0.3.devN+g<hash>`, where N is commits since the
|
|
79
|
+
tag). It is never hardcoded. Pushing a `v*` tag triggers `.github/workflows/publish.yml`, which runs `uv build`
|
|
80
|
+
and publishes to PyPI via OIDC trusted publishing.
|
gammon_im-2.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2019 igrmk
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
gammon_im-2.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gammon-im
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: Google My Maps to Organic Maps KML converter
|
|
5
|
+
Project-URL: Homepage, https://github.com/igrmk/gammon
|
|
6
|
+
Project-URL: Website, https://gammon.im
|
|
7
|
+
Author-email: igrmk <igrmkx@gmail.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Requires-Python: >=3.9
|
|
13
|
+
Requires-Dist: lxml
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
|
|
16
|
+
Gammon — Google My Maps to Organic Maps KML converter
|
|
17
|
+
=====================================================
|
|
18
|
+
|
|
19
|
+
This tool adapts KML files from Google My Maps
|
|
20
|
+
for use with [Organic Maps](https://organicmaps.app/) (and MAPS.ME),
|
|
21
|
+
striving to maintain color and icon accuracy.
|
|
22
|
+
Although Organic Maps supports fewer colors and icons,
|
|
23
|
+
the tool does its best to match the original as closely as possible.
|
|
24
|
+
Input on new icon mappings is appreciated.
|
|
25
|
+
|
|
26
|
+
Formerly published as `mmmm`; now installed as `gammon-im` and run as `gammon` (online at
|
|
27
|
+
[gammon.im](https://gammon.im)).
|
|
28
|
+
If you installed the old package, migrate with `pipx uninstall mmmm && pipx install gammon-im`.
|
|
29
|
+
|
|
30
|
+
Usage
|
|
31
|
+
-----
|
|
32
|
+
|
|
33
|
+
gammon google-maps.kml > organic-maps.kml
|
|
34
|
+
|
|
35
|
+
Or go to [Gammon](https://gammon.im) and convert your KML online.
|
|
36
|
+
|
|
37
|
+
Installation
|
|
38
|
+
------------
|
|
39
|
+
|
|
40
|
+
pipx install gammon-im
|
|
41
|
+
|
|
42
|
+
Development
|
|
43
|
+
-----------
|
|
44
|
+
|
|
45
|
+
Install [uv](https://docs.astral.sh/uv/), then sync the environment and run the converter or the linter:
|
|
46
|
+
|
|
47
|
+
uv sync
|
|
48
|
+
uv run gammon google-maps.kml > organic-maps.kml
|
|
49
|
+
uv run ruff check
|
|
50
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
Gammon — Google My Maps to Organic Maps KML converter
|
|
2
|
+
=====================================================
|
|
3
|
+
|
|
4
|
+
<!-- cut -->
|
|
5
|
+
[](https://pypi.org/project/gammon-im/)
|
|
6
|
+
<!-- end -->
|
|
7
|
+
|
|
8
|
+
This tool adapts KML files from Google My Maps
|
|
9
|
+
for use with [Organic Maps](https://organicmaps.app/) (and MAPS.ME),
|
|
10
|
+
striving to maintain color and icon accuracy.
|
|
11
|
+
Although Organic Maps supports fewer colors and icons,
|
|
12
|
+
the tool does its best to match the original as closely as possible.
|
|
13
|
+
Input on new icon mappings is appreciated.
|
|
14
|
+
|
|
15
|
+
Formerly published as `mmmm`; now installed as `gammon-im` and run as `gammon` (online at
|
|
16
|
+
[gammon.im](https://gammon.im)).
|
|
17
|
+
If you installed the old package, migrate with `pipx uninstall mmmm && pipx install gammon-im`.
|
|
18
|
+
|
|
19
|
+
Usage
|
|
20
|
+
-----
|
|
21
|
+
|
|
22
|
+
gammon google-maps.kml > organic-maps.kml
|
|
23
|
+
|
|
24
|
+
Or go to [Gammon](https://gammon.im) and convert your KML online.
|
|
25
|
+
|
|
26
|
+
Installation
|
|
27
|
+
------------
|
|
28
|
+
|
|
29
|
+
pipx install gammon-im
|
|
30
|
+
|
|
31
|
+
Development
|
|
32
|
+
-----------
|
|
33
|
+
|
|
34
|
+
Install [uv](https://docs.astral.sh/uv/), then sync the environment and run the converter or the linter:
|
|
35
|
+
|
|
36
|
+
uv sync
|
|
37
|
+
uv run gammon google-maps.kml > organic-maps.kml
|
|
38
|
+
uv run ruff check
|
|
39
|
+
|
|
40
|
+
<!-- cut -->
|
|
41
|
+
Thanks to
|
|
42
|
+
---------
|
|
43
|
+
[](https://www.jetbrains.com/?from=gammon)
|
|
44
|
+
<!-- end -->
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import lxml.etree as tree
|
|
2
|
+
import sys
|
|
3
|
+
import lxml.builder
|
|
4
|
+
import re
|
|
5
|
+
import collections
|
|
6
|
+
import argparse
|
|
7
|
+
from .__version__ import __version__
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ConversionError(Exception):
|
|
11
|
+
def __init__(self, message):
|
|
12
|
+
super().__init__(message)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
E = lxml.builder.ElementMaker()
|
|
16
|
+
|
|
17
|
+
ns = {'x': 'http://www.opengis.net/kml/2.2'}
|
|
18
|
+
mwm = 'https://maps.me'
|
|
19
|
+
mwmns = {'mwm': mwm}
|
|
20
|
+
google_style_regex = re.compile(r'^#icon-(\d{4})-([0-9A-F]{6})')
|
|
21
|
+
|
|
22
|
+
# noinspection SpellCheckingInspection
|
|
23
|
+
style_map = {
|
|
24
|
+
'C2185B': 'placemark-red',
|
|
25
|
+
'A52714': 'placemark-red',
|
|
26
|
+
'0288D1': 'placemark-blue',
|
|
27
|
+
'673AB7': 'placemark-blue',
|
|
28
|
+
'006064': 'placemark-blue',
|
|
29
|
+
'01579B': 'placemark-blue',
|
|
30
|
+
'1A237E': 'placemark-blue',
|
|
31
|
+
'0097A7': 'placemark-blue',
|
|
32
|
+
'3949AB': 'placemark-blue',
|
|
33
|
+
'880E4F': 'placemark-purple',
|
|
34
|
+
'9C27B0': 'placemark-purple',
|
|
35
|
+
'FBC02D': 'placemark-yellow',
|
|
36
|
+
'FFD600': 'placemark-yellow',
|
|
37
|
+
'FFEA00': 'placemark-yellow',
|
|
38
|
+
'FF5252': 'placemark-pink',
|
|
39
|
+
'817717': 'placemark-brown',
|
|
40
|
+
'4E342E': 'placemark-brown',
|
|
41
|
+
'AFB42B': 'placemark-brown',
|
|
42
|
+
'795548': 'placemark-brown',
|
|
43
|
+
'424242': 'placemark-brown',
|
|
44
|
+
'000000': 'placemark-brown',
|
|
45
|
+
'757575': 'placemark-brown',
|
|
46
|
+
'097138': 'placemark-green',
|
|
47
|
+
'558B2F': 'placemark-green',
|
|
48
|
+
'7CB342': 'placemark-green',
|
|
49
|
+
'0F9D58': 'placemark-green',
|
|
50
|
+
'E65100': 'placemark-orange',
|
|
51
|
+
'F57C00': 'placemark-orange',
|
|
52
|
+
'F9A825': 'placemark-orange',
|
|
53
|
+
'BDBDBD': 'placemark-orange',
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
icon_map = {
|
|
57
|
+
'1602': 'Hotel',
|
|
58
|
+
'1507': 'Animals',
|
|
59
|
+
'1743': 'Animals',
|
|
60
|
+
'1667': 'Buddhism',
|
|
61
|
+
'1668': 'Buddhism',
|
|
62
|
+
'1669': 'Buddhism',
|
|
63
|
+
'1533': 'Building',
|
|
64
|
+
'1546': 'Building',
|
|
65
|
+
'1548': 'Building',
|
|
66
|
+
'1717': 'Building',
|
|
67
|
+
'1741': 'Building',
|
|
68
|
+
'1603': 'Building',
|
|
69
|
+
'1716': 'Building',
|
|
70
|
+
'1670': 'Christianity',
|
|
71
|
+
'1709': 'Entertainment',
|
|
72
|
+
'1540': 'Entertainment',
|
|
73
|
+
'1555': 'Exchange',
|
|
74
|
+
'1517': 'Food',
|
|
75
|
+
'1534': 'Food',
|
|
76
|
+
'1577': 'Food',
|
|
77
|
+
'1581': 'Gas',
|
|
78
|
+
'1675': 'Judaism',
|
|
79
|
+
'1624': 'Medicine',
|
|
80
|
+
'1634': 'Mountain',
|
|
81
|
+
'1636': 'Museum',
|
|
82
|
+
'1592': 'None',
|
|
83
|
+
'1899': 'None',
|
|
84
|
+
'1673': 'Islam',
|
|
85
|
+
'1720': 'Park',
|
|
86
|
+
'1644': 'Parking',
|
|
87
|
+
'1684': 'Shop',
|
|
88
|
+
'1685': 'Shop',
|
|
89
|
+
'1598': 'Sights',
|
|
90
|
+
'1521': 'Swim',
|
|
91
|
+
'1701': 'Swim',
|
|
92
|
+
'1703': 'Water',
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def indent(elem, level=0):
|
|
97
|
+
i = '\n' + level * ' '
|
|
98
|
+
if len(elem):
|
|
99
|
+
if not elem.text or not elem.text.strip():
|
|
100
|
+
elem.text = i + ' '
|
|
101
|
+
if not elem.tail or not elem.tail.strip():
|
|
102
|
+
elem.tail = i
|
|
103
|
+
for elem in elem:
|
|
104
|
+
indent(elem, level + 1)
|
|
105
|
+
if not elem.tail or not elem.tail.strip():
|
|
106
|
+
elem.tail = i
|
|
107
|
+
else:
|
|
108
|
+
if level and (not elem.tail or not elem.tail.strip()):
|
|
109
|
+
elem.tail = i
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def google_to_organic_maps_icon_and_style(google_style):
|
|
113
|
+
icon, style = None, google_style
|
|
114
|
+
m = google_style_regex.match(google_style)
|
|
115
|
+
if m and m.group(1) in icon_map:
|
|
116
|
+
icon = icon_map[m.group(1)]
|
|
117
|
+
if m and m.group(2) in style_map:
|
|
118
|
+
style = '#' + style_map[m.group(2)]
|
|
119
|
+
return icon, style
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def err(*args, **kwargs):
|
|
123
|
+
print(*args, file=sys.stderr, **kwargs)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def remove_old_styles(doc):
|
|
127
|
+
for i in doc.xpath('x:Style | x:StyleMap', namespaces=ns):
|
|
128
|
+
i.getparent().remove(i)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def remove_lines(doc):
|
|
132
|
+
for i in doc.xpath('x:Folder/x:Placemark[x:LineString]', namespaces=ns):
|
|
133
|
+
i.getparent().remove(i)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def remove_empty_folders(doc):
|
|
137
|
+
for i in doc.xpath('x:Folder[not(x:Placemark)]', namespaces=ns):
|
|
138
|
+
i.getparent().remove(i)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def new_ordered_set(xs):
|
|
142
|
+
return collections.OrderedDict((x, None) for x in xs)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def add_organic_maps_styles(doc):
|
|
146
|
+
unique_styles = new_ordered_set(style_map.values())
|
|
147
|
+
for i, name in enumerate(unique_styles):
|
|
148
|
+
ref = f'http://maps.me/placemarks/{name}.png'
|
|
149
|
+
style = E.Style(E.IconStyle(E.Icon(E.href(ref))), id=name)
|
|
150
|
+
doc.insert(i, style)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def google_to_organic_maps_icons(doc, verbose):
|
|
154
|
+
for i in doc.xpath('x:Folder/x:Placemark/x:styleUrl', namespaces=ns):
|
|
155
|
+
google_style = i.text
|
|
156
|
+
icon, i.text = google_to_organic_maps_icon_and_style(google_style)
|
|
157
|
+
if icon is not None:
|
|
158
|
+
if icon != 'None':
|
|
159
|
+
placemark = i.getparent()
|
|
160
|
+
extended = placemark.find('x:ExtendedData', ns)
|
|
161
|
+
if extended is None:
|
|
162
|
+
extended = tree.SubElement(placemark, 'ExtendedData', nsmap=mwmns)
|
|
163
|
+
icon_tag = tree.SubElement(extended, f'{{{mwm}}}icon')
|
|
164
|
+
else:
|
|
165
|
+
icon_tag = tree.SubElement(extended, f'{{{mwm}}}icon', nsmap=mwmns)
|
|
166
|
+
icon_tag.text = icon
|
|
167
|
+
elif verbose:
|
|
168
|
+
err(f'the icon from the following style is not found: {google_style}')
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def process(doc, verbose):
|
|
172
|
+
remove_old_styles(doc)
|
|
173
|
+
remove_lines(doc)
|
|
174
|
+
remove_empty_folders(doc)
|
|
175
|
+
add_organic_maps_styles(doc)
|
|
176
|
+
google_to_organic_maps_icons(doc, verbose)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def leave_unsupported(doc):
|
|
180
|
+
for i in doc.xpath('x:Folder/x:Placemark/x:styleUrl', namespaces=ns):
|
|
181
|
+
icon, style = google_to_organic_maps_icon_and_style(i.text)
|
|
182
|
+
if icon is not None and style != i.text:
|
|
183
|
+
i.getparent().getparent().remove(i.getparent())
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def convert(input_file, output_file, verbose, only_unsupported):
|
|
187
|
+
try:
|
|
188
|
+
root = tree.parse(input_file)
|
|
189
|
+
except tree.XMLSyntaxError:
|
|
190
|
+
raise ConversionError('The document is either not in XML format or is poorly formatted')
|
|
191
|
+
|
|
192
|
+
doc = root.find('.//x:Document', ns)
|
|
193
|
+
if doc is None:
|
|
194
|
+
raise ConversionError('The "Document" tag is missing')
|
|
195
|
+
|
|
196
|
+
if not only_unsupported:
|
|
197
|
+
process(doc, verbose)
|
|
198
|
+
else:
|
|
199
|
+
leave_unsupported(doc)
|
|
200
|
+
|
|
201
|
+
indent(root.getroot())
|
|
202
|
+
string = tree.tostring(root, pretty_print=True, encoding='UTF-8', xml_declaration=True)
|
|
203
|
+
output_file.write(string)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def _main():
|
|
207
|
+
parser = argparse.ArgumentParser(prog=__package__, description='Google My Maps to Organic Maps KML converter')
|
|
208
|
+
parser.add_argument('file', metavar='GOOGLE_KML', help='Google My Maps KML')
|
|
209
|
+
parser.add_argument('--verbose', action='store_true', help='verbose output')
|
|
210
|
+
parser.add_argument('--only-unsupported-styles', dest='only_unsupported', action='store_true',
|
|
211
|
+
help='leave only placemarks with unsupported styles')
|
|
212
|
+
parser.add_argument('-v', '--version', action='version', version=f'%(prog)s {__version__}')
|
|
213
|
+
args = parser.parse_args()
|
|
214
|
+
try:
|
|
215
|
+
with open(args.file, 'r') as input_file:
|
|
216
|
+
convert(input_file, sys.stdout.buffer, args.verbose, args.only_unsupported)
|
|
217
|
+
except Exception as e:
|
|
218
|
+
err(e)
|
|
219
|
+
return 1
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling", "hatch-vcs", "hatch-fancy-pypi-readme"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "gammon-im"
|
|
7
|
+
dynamic = ["version", "readme"]
|
|
8
|
+
description = "Google My Maps to Organic Maps KML converter"
|
|
9
|
+
requires-python = ">=3.9"
|
|
10
|
+
license = "MIT"
|
|
11
|
+
license-files = ["LICENSE"]
|
|
12
|
+
authors = [{ name = "igrmk", email = "igrmkx@gmail.com" }]
|
|
13
|
+
dependencies = ["lxml"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"Operating System :: OS Independent",
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
[project.scripts]
|
|
20
|
+
gammon = "gammon._main:_main"
|
|
21
|
+
|
|
22
|
+
[project.urls]
|
|
23
|
+
Homepage = "https://github.com/igrmk/gammon"
|
|
24
|
+
Website = "https://gammon.im"
|
|
25
|
+
|
|
26
|
+
[tool.hatch.version]
|
|
27
|
+
source = "vcs"
|
|
28
|
+
|
|
29
|
+
[tool.hatch.build.targets.wheel]
|
|
30
|
+
packages = ["gammon"]
|
|
31
|
+
|
|
32
|
+
[tool.hatch.metadata.hooks.fancy-pypi-readme]
|
|
33
|
+
content-type = "text/markdown"
|
|
34
|
+
|
|
35
|
+
[[tool.hatch.metadata.hooks.fancy-pypi-readme.fragments]]
|
|
36
|
+
path = "README.md"
|
|
37
|
+
|
|
38
|
+
[[tool.hatch.metadata.hooks.fancy-pypi-readme.substitutions]]
|
|
39
|
+
pattern = '(?s)<!-- cut -->.*?<!-- end -->\n*'
|
|
40
|
+
replacement = ''
|
|
41
|
+
|
|
42
|
+
[tool.ruff]
|
|
43
|
+
line-length = 120
|
|
44
|
+
|
|
45
|
+
[tool.ruff.lint]
|
|
46
|
+
preview = true
|
|
47
|
+
select = ["E", "W", "F"]
|
|
48
|
+
|
|
49
|
+
[dependency-groups]
|
|
50
|
+
dev = ["ruff"]
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
4
|
+
width="117.9px" height="135.7px" viewBox="0 0 117.9 135.7" style="enable-background:new 0 0 117.9 135.7;" xml:space="preserve"
|
|
5
|
+
>
|
|
6
|
+
<g>
|
|
7
|
+
<g>
|
|
8
|
+
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="10.0233" y1="128.4315" x2="108.6633" y2="3.5115">
|
|
9
|
+
<stop offset="0" style="stop-color:#AB63A7"/>
|
|
10
|
+
<stop offset="0.6405" style="stop-color:#CA5595"/>
|
|
11
|
+
<stop offset="1" style="stop-color:#D64D8E"/>
|
|
12
|
+
</linearGradient>
|
|
13
|
+
<path style="fill:url(#SVGID_1_);" d="M116,12.3c1.3-1.4,2-3.2,2-5.2c-0.1-4-3.5-7.2-7.5-7c-2,0.1-3.8,0.9-5,2.3l0,0L2.8,119.7
|
|
14
|
+
C1,121.4,0,123.8,0,126.4c0.1,5.2,4.3,9.4,9.5,9.3c2.9,0,5.4-1.3,7.1-3.4c0,0,0,0,0,0L116,12.3z"/>
|
|
15
|
+
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="28.9009" y1="47.4146" x2="108.8209" y2="8.1746">
|
|
16
|
+
<stop offset="0" style="stop-color:#ED427C"/>
|
|
17
|
+
<stop offset="0.4285" style="stop-color:#E14885"/>
|
|
18
|
+
<stop offset="1" style="stop-color:#D64D8E"/>
|
|
19
|
+
</linearGradient>
|
|
20
|
+
<path style="fill:url(#SVGID_2_);" d="M117.9,7c-0.1-4-3.5-7.1-7.5-7c-1.1,0-2.2,0.3-3.1,0.8c0,0,0,0,0,0l-85.5,42
|
|
21
|
+
c-2.2,1-3.7,3.2-3.5,5.8c0.2,3.3,3,5.8,6.3,5.6c0.9-0.1,1.7-0.3,2.4-0.7c0,0,0,0,0,0L113.3,14C116.1,12.9,118,10.2,117.9,7z"/>
|
|
22
|
+
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="20.7339" y1="46.5395" x2="90.5739" y2="121.0595">
|
|
23
|
+
<stop offset="0" style="stop-color:#ED427C"/>
|
|
24
|
+
<stop offset="0.1083" style="stop-color:#EE4C77"/>
|
|
25
|
+
<stop offset="0.5366" style="stop-color:#F1685F"/>
|
|
26
|
+
<stop offset="0.8448" style="stop-color:#F27748"/>
|
|
27
|
+
<stop offset="1" style="stop-color:#F37C3D"/>
|
|
28
|
+
</linearGradient>
|
|
29
|
+
<path style="fill:url(#SVGID_3_);" d="M93.2,106.8L28.5,44.6c-1.2-1.2-2.9-2-4.7-1.9c-3.3,0.2-5.8,3-5.6,6.3
|
|
30
|
+
c0.1,1.3,0.6,2.5,1.3,3.4c0,0,0,0,0,0l56.3,69.8c2.1,2.9,5.6,4.7,9.4,4.7c6.4,0,11.6-5.3,11.6-11.7
|
|
31
|
+
C96.8,111.9,95.4,108.9,93.2,106.8z"/>
|
|
32
|
+
<g>
|
|
33
|
+
<path style="fill:#3FBFEF;" d="M90.4,104.9C94.2,106.8,90.3,104.8,90.4,104.9L90.4,104.9z"/>
|
|
34
|
+
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="7.9551" y1="68.4574" x2="95.7951" y2="121.7374">
|
|
35
|
+
<stop offset="0" style="stop-color:#3FBFEF"/>
|
|
36
|
+
<stop offset="0.3287" style="stop-color:#A1ABA8"/>
|
|
37
|
+
<stop offset="0.6528" style="stop-color:#D0936F"/>
|
|
38
|
+
<stop offset="0.8837" style="stop-color:#E9834C"/>
|
|
39
|
+
<stop offset="1" style="stop-color:#F37C3D"/>
|
|
40
|
+
</linearGradient>
|
|
41
|
+
<path style="fill:url(#SVGID_4_);" d="M96.8,114.6c0.1-3.7-1.8-7.5-6.5-9.8c-5.5-2.8-11.1-5.5-16.6-8.3c-5.5-2.7-11-5.5-16.4-8.2
|
|
42
|
+
c-5.5-2.7-11-5.5-16.5-8.2c-5.5-2.8-11.1-5.6-16.6-8.3c-5.4-2.7-17.8-9-17.8-9c-0.9-0.4-1.9-0.5-2.9-0.3c-2.5,0.6-4,3-3.4,5.5
|
|
43
|
+
c0.3,1.2,1,2.1,1.9,2.8c0,0,0.1,0,0.1,0.1c0,0,0,0,0.1,0c0,0,1.4,0.9,2.1,1.5c1.3,0.9,2.6,1.8,3.9,2.7c2.5,1.8,5,3.5,7.5,5.3
|
|
44
|
+
c5.1,3.6,10.2,7.2,15.3,10.8c5,3.5,10,7.1,15,10.6c5.1,3.6,10.1,7.2,15.2,10.8c5.1,3.6,10.1,7.3,15.2,10.8
|
|
45
|
+
c0.6,0.4,1.2,0.9,1.9,1.3c0.1,0.1,0.3,0.2,0.4,0.2l0,0c1.9,1.3,4.2,2.1,6.7,2.1c6.4,0,11.6-5.3,11.6-11.7
|
|
46
|
+
C96.8,115,96.8,114.8,96.8,114.6z"/>
|
|
47
|
+
</g>
|
|
48
|
+
</g>
|
|
49
|
+
<g>
|
|
50
|
+
<rect x="25.9" y="50.6" style="fill:#000000;" width="51" height="51"/>
|
|
51
|
+
<rect x="30.3" y="92.1" style="fill:#FFFFFF;" width="19.1" height="3.2"/>
|
|
52
|
+
<g>
|
|
53
|
+
<path style="fill:#FFFFFF;" d="M30.1,64.1l1.5-1.4c0.4,0.5,0.8,0.8,1.3,0.8c0.6,0,0.9-0.4,0.9-1.2V57h2.3v5.3
|
|
54
|
+
c0,1-0.3,1.8-0.8,2.3c-0.5,0.5-1.3,0.8-2.3,0.8C31.6,65.5,30.7,64.9,30.1,64.1z"/>
|
|
55
|
+
<path style="fill:#FFFFFF;" d="M36.7,57h6.7V59h-4.4v1.3h4v1.8h-4v1.3h4.5v2h-6.7V57z"/>
|
|
56
|
+
<path style="fill:#FFFFFF;" d="M46.4,59h-2.5v-2h7.3v2h-2.5v6.3h-2.3V59z"/>
|
|
57
|
+
<path style="fill:#FFFFFF;" d="M30.3,67.3h4.3c1,0,1.8,0.3,2.3,0.7c0.3,0.3,0.5,0.8,0.5,1.4v0c0,1-0.5,1.5-1.3,1.9
|
|
58
|
+
c1,0.3,1.7,0.9,1.7,2v0c0,1.4-1.2,2.3-3.1,2.3h-4.3V67.3z M35.1,69.8c0-0.5-0.4-0.7-1-0.7h-1.5v1.5H34
|
|
59
|
+
C34.7,70.6,35.1,70.4,35.1,69.8L35.1,69.8z M34.3,72.2h-1.8v1.5h1.8c0.7,0,1.1-0.3,1.1-0.8v0C35.5,72.5,35.1,72.2,34.3,72.2z"/>
|
|
60
|
+
<path style="fill:#FFFFFF;" d="M38.1,67.3H42c1.3,0,2.2,0.3,2.7,0.9c0.5,0.5,0.7,1.1,0.7,1.9v0c0,1.3-0.7,2.1-1.7,2.6l2,2.9h-2.6
|
|
61
|
+
l-1.7-2.5h-1v2.5h-2.3V67.3z M41.9,71.3c0.8,0,1.2-0.4,1.2-1v0c0-0.7-0.5-1-1.2-1h-1.5v2H41.9z"/>
|
|
62
|
+
<path style="fill:#FFFFFF;" d="M48.2,67.2h2.2l3.5,8.4h-2.5l-0.6-1.5h-3.2l-0.6,1.5h-2.4L48.2,67.2z M50.2,72.3L49.3,70l-0.9,2.4
|
|
63
|
+
H50.2z"/>
|
|
64
|
+
<path style="fill:#FFFFFF;" d="M54.2,67.3h2.3v8.3h-2.3V67.3z"/>
|
|
65
|
+
<path style="fill:#FFFFFF;" d="M57.1,67.3h2.2l3.4,4.4v-4.4h2.3v8.3h-2L59.4,71v4.6h-2.3V67.3z"/>
|
|
66
|
+
<path style="fill:#FFFFFF;" d="M65.1,74.4l1.3-1.5c0.8,0.7,1.7,1,2.7,1c0.6,0,1-0.2,1-0.6v0c0-0.4-0.3-0.5-1.4-0.8
|
|
67
|
+
c-1.8-0.4-3.1-0.9-3.1-2.6v0c0-1.5,1.2-2.7,3.2-2.7c1.4,0,2.5,0.4,3.4,1.1L71,69.9c-0.8-0.5-1.6-0.8-2.3-0.8
|
|
68
|
+
c-0.6,0-0.8,0.2-0.8,0.5v0c0,0.4,0.3,0.5,1.4,0.8c1.9,0.4,3.1,1,3.1,2.6v0c0,1.7-1.3,2.7-3.4,2.7C67.5,75.7,66.1,75.3,65.1,74.4z
|
|
69
|
+
"/>
|
|
70
|
+
</g>
|
|
71
|
+
</g>
|
|
72
|
+
</g>
|
|
73
|
+
</svg>
|
gammon_im-2.0.0/uv.lock
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
version = 1
|
|
2
|
+
revision = 3
|
|
3
|
+
requires-python = ">=3.9"
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "gammon-im"
|
|
7
|
+
source = { editable = "." }
|
|
8
|
+
dependencies = [
|
|
9
|
+
{ name = "lxml" },
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
[package.dev-dependencies]
|
|
13
|
+
dev = [
|
|
14
|
+
{ name = "ruff" },
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[package.metadata]
|
|
18
|
+
requires-dist = [{ name = "lxml" }]
|
|
19
|
+
|
|
20
|
+
[package.metadata.requires-dev]
|
|
21
|
+
dev = [{ name = "ruff" }]
|
|
22
|
+
|
|
23
|
+
[[package]]
|
|
24
|
+
name = "lxml"
|
|
25
|
+
version = "6.1.1"
|
|
26
|
+
source = { registry = "https://pypi.org/simple" }
|
|
27
|
+
sdist = { url = "https://files.pythonhosted.org/packages/05/3b/aab6728cae887456f409b4d75e8a01856e4f04bd510de38052a47768b680/lxml-6.1.1.tar.gz", hash = "sha256:ba96ae44888e0185281e937633a743ea90d5a196c6000f82565ebb0580012d40", size = 4197430, upload-time = "2026-05-18T19:19:06.424Z" }
|
|
28
|
+
wheels = [
|
|
29
|
+
{ url = "https://files.pythonhosted.org/packages/12/da/dbe4dfc01ac226fb0504fad035f4d69f3202f3502e20e68537631daddd96/lxml-6.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:09dd5b7075dc2f7709654a46543ba1ea3c2e217b2ed8fbd413a8a945a0f40f60", size = 8541124, upload-time = "2026-05-18T19:17:11.589Z" },
|
|
30
|
+
{ url = "https://files.pythonhosted.org/packages/78/20/f7095ed9fc2c025f9cfe71cc6ec9f1feb05624edc1812423b5f1aecf3d4b/lxml-6.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f6ac4ef4d82dff54670227a69c67782ae0b811b5cf6b17954f1e8f7502fc0d1d", size = 4602783, upload-time = "2026-05-18T19:17:20.888Z" },
|
|
31
|
+
{ url = "https://files.pythonhosted.org/packages/4a/a4/65c63ca98bd129f6cff7b8c2fa48953ab058cc6005b541354e7dd54d8000/lxml-6.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:556e94a63c9b04716f8e4de2abb65775061f846e89331b6c5be79183a24f98ea", size = 5002687, upload-time = "2026-05-18T19:17:01.738Z" },
|
|
32
|
+
{ url = "https://files.pythonhosted.org/packages/96/1d/ab7a5c4b5a394d98a94e2d0fc67bab8297597426770dd4978370fbdaf531/lxml-6.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5c6bf403fbb3b3e348a561a5f4f0b9961835657981c802a1df03653eef8a9074", size = 5155099, upload-time = "2026-05-18T19:17:05.159Z" },
|
|
33
|
+
{ url = "https://files.pythonhosted.org/packages/d0/b1/07603bfeeb891a2596d5c2a68f7d2f70f7d11c841ebe391412c69c2857b0/lxml-6.1.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1dde6131244bba38a17c745836ba190bc753fd73c9291666287fd0a3fa3dcf30", size = 5057225, upload-time = "2026-05-18T19:17:08.117Z" },
|
|
34
|
+
{ url = "https://files.pythonhosted.org/packages/7a/16/cb391ee4b90186fa16d9ebcbe3ea96c71b8da3b0686386c8dcbcc3c67d44/lxml-6.1.1-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98fc784c2c1440667aeedf8465bdfe10208acf0ead656a2c68627299f546b315", size = 5287643, upload-time = "2026-05-18T19:17:11.507Z" },
|
|
35
|
+
{ url = "https://files.pythonhosted.org/packages/eb/d6/b619717f918fd76747448fdbaee0e769edbc70e659b5b5d0112b7020b7a3/lxml-6.1.1-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:add8cf6ddf9a65116119a28ece0f7886e30af27ba724a7594305f1d1b58a92a1", size = 5412445, upload-time = "2026-05-18T19:17:22.182Z" },
|
|
36
|
+
{ url = "https://files.pythonhosted.org/packages/c6/80/12bc5390ac0a3edeb579d9535e5049a5dda663438728e179d52fb319c33a/lxml-6.1.1-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:cf9d57306d848218f3601fee7601fab1a327c942d56e2e97610583cb4dd74206", size = 4770864, upload-time = "2026-05-18T19:17:26.851Z" },
|
|
37
|
+
{ url = "https://files.pythonhosted.org/packages/0b/59/6500c09da3137f54f020e908d81cfc5ee3e8888e908fd380207afad7c2e6/lxml-6.1.1-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88136950da4d13c318bde414ce10219931937851327f44328f2df4d2c4614067", size = 5359594, upload-time = "2026-05-18T19:17:32.527Z" },
|
|
38
|
+
{ url = "https://files.pythonhosted.org/packages/f2/9b/f64b4cc6b7ebcf75d95af3cde934d254b5f2f10d4163928d838d86b6eb48/lxml-6.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cecdd5dfdc87b1fd87dbf81d4b037a544f47f4c744200a67013771682d67686a", size = 5107713, upload-time = "2026-05-18T19:17:04.402Z" },
|
|
39
|
+
{ url = "https://files.pythonhosted.org/packages/16/19/c7388ad5d3a72315d2832dc1458cbf4f2af7f2b990b606ff4876efd04511/lxml-6.1.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd312b9692e831d2ffcad61eab31d91d4b4655a962e61de8fb410472cbcd37aa", size = 4803973, upload-time = "2026-05-18T19:17:06.545Z" },
|
|
40
|
+
{ url = "https://files.pythonhosted.org/packages/3f/22/76197f0bbf165f0b9e75be59be4997e5259cde973f12f098c1b54c7f5d60/lxml-6.1.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:5b7328b46d49fc9477d91ae8f6d55340347d827b7734ba3ea33faae0efef1383", size = 5349925, upload-time = "2026-05-18T19:17:09.743Z" },
|
|
41
|
+
{ url = "https://files.pythonhosted.org/packages/24/52/d2a0cfeccb9bcdc47c7ee05cdae5d69b48c9acf20997790a6338bb0d0b3b/lxml-6.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37a58976370f36d9329d118ad0b953c5aeb9119ac9c6a4e258942a225d0573a1", size = 5309825, upload-time = "2026-05-18T19:17:13.831Z" },
|
|
42
|
+
{ url = "https://files.pythonhosted.org/packages/19/4a/b30944266776c2f49749ef2445aa7e78898194134b80ad776386f61b56ae/lxml-6.1.1-cp310-cp310-win32.whl", hash = "sha256:cea3f4c1af79af13cdb2da0c028111d8f8522d4f22a000c82385535f24e5cf3a", size = 3598402, upload-time = "2026-05-18T19:17:08.21Z" },
|
|
43
|
+
{ url = "https://files.pythonhosted.org/packages/9e/97/33691c66a4d7ec1a5a98e7c909a5b83ee45c7f7ba4cf92b1c4cf26e98079/lxml-6.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:3abf332af33a74288675d936fe861fd4344da0dd6622193fbc4f2bfbb35536b5", size = 4021295, upload-time = "2026-05-18T19:17:28.638Z" },
|
|
44
|
+
{ url = "https://files.pythonhosted.org/packages/d0/5f/26a4dd0e12b9456ff7b12a21af5b491eb6629680d1edd73f4140fd386bcf/lxml-6.1.1-cp310-cp310-win_arm64.whl", hash = "sha256:8dadbe5b217ff35b6a8d16610dd710219b59b76d13f0e3f0d9f36786206e4485", size = 3667717, upload-time = "2026-05-19T19:22:44.474Z" },
|
|
45
|
+
{ url = "https://files.pythonhosted.org/packages/62/b0/83f481780d1548750b8ce2ec824073deef2f452d9cd1a6faff8507e3d16d/lxml-6.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:53b7d2b7a10b1c35c0a5e21e9224accf60c1bbfba523990732e521b2b73adef2", size = 8526461, upload-time = "2026-05-18T19:17:25.862Z" },
|
|
46
|
+
{ url = "https://files.pythonhosted.org/packages/b9/d5/30fa0f808002c7329397bfbb24e306789c0b29f04aa5842c07b174b4216f/lxml-6.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ff3f333630ab480244a1bff72043e511a91eb22e7595dead8653ee5612dd8f3d", size = 4595375, upload-time = "2026-05-18T19:17:34.555Z" },
|
|
47
|
+
{ url = "https://files.pythonhosted.org/packages/4f/d2/edb71cf0e561581a7c5eb2626244320eb04e9f8ce6d563184fd668b45073/lxml-6.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a4bbea04c97f6d78a48e3fbc1cb9116d2780b1b39e03a23f6eb9b603fd61f510", size = 4923654, upload-time = "2026-05-18T19:17:42.917Z" },
|
|
48
|
+
{ url = "https://files.pythonhosted.org/packages/4c/77/1bc7eeb0de4577d783fb625aa092cc9357883bba35845a3666bf1259f3dc/lxml-6.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db1d75f6617a49c1c01bc7023713e0ff59ab32c9579ae62a7674c0e34f3b0b0a", size = 5067921, upload-time = "2026-05-18T19:17:49.175Z" },
|
|
49
|
+
{ url = "https://files.pythonhosted.org/packages/1b/3c/c0690d74bd2bc17bc03b5b0d093569ead597dd0bfa088bf99eef8c24e19c/lxml-6.1.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a12689be69a28ddaa0ab99a5a1137da2afd5f8f16df7b5680b66f616d3eda1d", size = 5002456, upload-time = "2026-05-18T19:17:59.715Z" },
|
|
50
|
+
{ url = "https://files.pythonhosted.org/packages/66/8d/d1b3271af0c0f1e27e8472a849e4d2c65bc7766884b9ad2da9e76e145c88/lxml-6.1.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b73c339ae29b90fd2d06e58ebd555a751bde9cd6bbd36cc0281b9a2c94e9d8", size = 5202776, upload-time = "2026-05-18T19:18:08.924Z" },
|
|
51
|
+
{ url = "https://files.pythonhosted.org/packages/7a/45/689824ffb237fd10125ad273f32b28ff04dc6203c2822c85ff65a93df65e/lxml-6.1.1-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:752d3bbfe874715ccd0aec7f88d7fc623c0f1fd7aa7b3238a084e017bad2a009", size = 5329945, upload-time = "2026-05-18T19:18:13.673Z" },
|
|
52
|
+
{ url = "https://files.pythonhosted.org/packages/5d/c0/ef73af53767e958fd87d437c170f272e2f6e6c0f854939f133a895f1e711/lxml-6.1.1-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:6b1761fbf9ec984e2e9d9c589ef5f5fd684b7c19f92aadd567a26c5224958db6", size = 4659237, upload-time = "2026-05-18T19:18:18.657Z" },
|
|
53
|
+
{ url = "https://files.pythonhosted.org/packages/a0/5e/e1158e40397585e91cb0472374a1f63d0926a1ddeaa92f13d1a1ffe306d5/lxml-6.1.1-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d680fbcb768404c601ecb43519ecd8461f6954cb11c06a78962f666832ccfca8", size = 5265904, upload-time = "2026-05-18T19:18:24.883Z" },
|
|
54
|
+
{ url = "https://files.pythonhosted.org/packages/a0/16/8687e5d1400ed1c0bc41dace232ebb7553952b618ea1f2e5fb6e2cfbbe23/lxml-6.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:162af1091cd785f2f27e62d3547ae9bc58ec5c86dd314d67021fd02463708d83", size = 5045225, upload-time = "2026-05-18T19:17:20.073Z" },
|
|
55
|
+
{ url = "https://files.pythonhosted.org/packages/ca/18/d877bd1ae2e5ffdfd4836565aba350db31feb2f2656d6ce70316ed66a05e/lxml-6.1.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e9308ff8241c532df3f3e570f9a5aeed6c853f888512ba4b75638d7c11c95ef6", size = 4712721, upload-time = "2026-05-18T19:17:40.512Z" },
|
|
56
|
+
{ url = "https://files.pythonhosted.org/packages/44/4d/1f44fd1d770b10dacbf6b5c6e520f4d6e0708744930f719dc04e67cab981/lxml-6.1.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5f6994074ebae6ffb04447268e37dc16edc304f9859cf91acb86e0af6c1b395c", size = 5252549, upload-time = "2026-05-18T19:17:51.236Z" },
|
|
57
|
+
{ url = "https://files.pythonhosted.org/packages/64/5d/1d66b84f850089254c230ef6ea6b267a5a54e2e179a5d960036a05d501d7/lxml-6.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:80c2dfadb855da477cf73373ad29a333535dedb9b12bad02c9814c8e2b43bf08", size = 5226877, upload-time = "2026-05-18T19:18:00.875Z" },
|
|
58
|
+
{ url = "https://files.pythonhosted.org/packages/ad/00/84c4b5302d42a2d0184f38d538c8a197f33b52a50bd4f7bcfe990bce3036/lxml-6.1.1-cp311-cp311-win32.whl", hash = "sha256:30a89d3ac8faec007453fb541f3f46807eeec88edd5826f6e3fe001752a2c621", size = 3594072, upload-time = "2026-05-18T19:17:12.714Z" },
|
|
59
|
+
{ url = "https://files.pythonhosted.org/packages/61/9d/2e2f7d876349f45e0f3e29f72da311668853d59b58d473a2dea4f0160135/lxml-6.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:abbefa31eee84842140f67acef1c828e28bba8bbf0c3bc6e5492a9af88152c28", size = 4025469, upload-time = "2026-05-18T19:17:50.566Z" },
|
|
60
|
+
{ url = "https://files.pythonhosted.org/packages/b0/d5/570e6390e4110331e6208b2ba83d1482cc9146808ee118b22824a34c1070/lxml-6.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:dcb292aa7fe485ceff7af4f92e46c5af397daec5dff64871a528f0fc47a3cc5b", size = 3667640, upload-time = "2026-05-19T19:22:48.293Z" },
|
|
61
|
+
{ url = "https://files.pythonhosted.org/packages/6a/6e/c4add832b6fc1e887125b96f880d7b9b70aae5248718e046b1704bcac4b9/lxml-6.1.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:104c09bda8d2a562824c0e319d0768ce26a779b7601e0931d33b09b53c392ef7", size = 8570821, upload-time = "2026-05-18T19:17:42.068Z" },
|
|
62
|
+
{ url = "https://files.pythonhosted.org/packages/22/00/ff3009c88e65de8011630acf8ab5a09cb2becd2aaf47fba2f3449f6224e9/lxml-6.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:25c6997a9a534e016695a0ba06b2f07945de682731ff01065b6d5a4474179da1", size = 4624252, upload-time = "2026-05-18T19:17:47.897Z" },
|
|
63
|
+
{ url = "https://files.pythonhosted.org/packages/42/95/bb63f0fd62e554fe078e1fb3c8fe9083c14ddc7ad7fa178d10e57e071ac7/lxml-6.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c921ba5c51e4e9f63b8b00267d06566e1f63407408a0496da2d1d0bfc819c7fc", size = 4930746, upload-time = "2026-05-18T19:18:29.637Z" },
|
|
64
|
+
{ url = "https://files.pythonhosted.org/packages/eb/99/0013e8d9b5960f4f041cf0b73e2f80c23eb5205b1f7bfb20203243651359/lxml-6.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:54a7f95e4de5fb94e2f9f4b9055c6ba33bf3d628fd77a1d647c5923caa2cdcdc", size = 5093723, upload-time = "2026-05-18T19:18:34.168Z" },
|
|
65
|
+
{ url = "https://files.pythonhosted.org/packages/29/91/317b332636bfc7bddcff828d41b3307f50043f4b237e40849c333d80fa1a/lxml-6.1.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f2ec43df44b1f76249ee0a615334f9b5b060e1c8bd90e706dad2d14d02f383", size = 5005557, upload-time = "2026-05-18T19:18:39.798Z" },
|
|
66
|
+
{ url = "https://files.pythonhosted.org/packages/42/2f/cc9bf06afe70f9c9093ae60855d9759da9db601ec4080f7473319666ffd7/lxml-6.1.1-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:70ef8a7e102a1508f8121aae5b0867abd663f72c14f0a9c937e6554cb4587b7b", size = 5631036, upload-time = "2026-05-18T19:18:44.858Z" },
|
|
67
|
+
{ url = "https://files.pythonhosted.org/packages/08/f6/af32e23e563971ffb0fb86be52bc5be5c2c118858ffc119bf6a9039b173d/lxml-6.1.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebe6af670449830d6d9b752c256a983291c766a1365ba5d5460048f9e33a7818", size = 5240367, upload-time = "2026-05-18T19:18:49.217Z" },
|
|
68
|
+
{ url = "https://files.pythonhosted.org/packages/78/83/8555d40948b09ce86f1bd0c68a7ac31d07b1929f92cc1b074006c97ef2d2/lxml-6.1.1-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:27acc820660aaffa4f7c087f29120e12980f7779d56d8492d263170111284740", size = 5350171, upload-time = "2026-05-18T19:18:52.779Z" },
|
|
69
|
+
{ url = "https://files.pythonhosted.org/packages/63/75/5d92da93729b7bad783689e6496049fa40927b45bec7bf183c981de3ca70/lxml-6.1.1-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:1db753c9115ec7100d073b744d17e25e88a8f90f5c39b2f5dd878149af59671f", size = 4694874, upload-time = "2026-05-18T19:18:55.139Z" },
|
|
70
|
+
{ url = "https://files.pythonhosted.org/packages/c5/b5/3aad415a9a25b822e783f15deeb4dffccf5113030f1afa2222dd929313d9/lxml-6.1.1-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c4f469aebd783bb741c2ecb2a681008fd26bfe5c16a9a72ed5467f834e810df2", size = 5244492, upload-time = "2026-05-18T19:19:01.28Z" },
|
|
71
|
+
{ url = "https://files.pythonhosted.org/packages/f1/a1/5fcf7eb9904b80086aa47dcf0027de07b1bb990afad2e6823144c368ae04/lxml-6.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:766b010012d59470072c1816b5b6c69f1d243e5db36ea5968e94accf430a4635", size = 5048232, upload-time = "2026-05-18T19:18:12.67Z" },
|
|
72
|
+
{ url = "https://files.pythonhosted.org/packages/77/74/1f601b63c7a69fcdf10fa9b148c81da8442204194f6c55509cc485c786b9/lxml-6.1.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b8d812c6011c08b8111a15e54dd990b8923692d80adf35488bee34026c35accf", size = 4777023, upload-time = "2026-05-18T19:18:15.928Z" },
|
|
73
|
+
{ url = "https://files.pythonhosted.org/packages/a2/b9/7a78f51aec95b1bf780d78e12705a9f6533284f8693dc5c0e6724fa53d3f/lxml-6.1.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:fe0306bd29505a9177aac19f1877174b0e7422c222a59f70b2cd41633448c3dc", size = 5645773, upload-time = "2026-05-18T19:18:23.223Z" },
|
|
74
|
+
{ url = "https://files.pythonhosted.org/packages/a5/6e/98a7b7ad54e4e74fa1f20fff776913980619d0ebe5558232d7da6580bdd8/lxml-6.1.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5ba186ad207446c65d3bb3d3e0412b032b1d9f595e59861e2354798c5703d955", size = 5233088, upload-time = "2026-05-18T19:18:31.433Z" },
|
|
75
|
+
{ url = "https://files.pythonhosted.org/packages/65/d1/bc0ed2427bf609f2ee10da303a6a226f9c8bce94f945dc29a32ce55de6e4/lxml-6.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aa366a1e55b8ebfe8ca8ddc3cfe75c8ebade181aeb0f661d0cb05986b647f72a", size = 5260995, upload-time = "2026-05-18T19:18:37.091Z" },
|
|
76
|
+
{ url = "https://files.pythonhosted.org/packages/69/8b/6772e1a4b513fc50a8d931f19edde0e13ae6918510a1e13ff67864f3e5ed/lxml-6.1.1-cp312-cp312-win32.whl", hash = "sha256:126c93f7f56f0eda92f6d8c619edc463a4f23d9252f1c9d0405a76f25fa9f11a", size = 3596382, upload-time = "2026-05-18T19:17:18.37Z" },
|
|
77
|
+
{ url = "https://files.pythonhosted.org/packages/1b/89/45198e9624762af2dfd2cb8782598477ceb29f6e59caab560388ae1f4ec1/lxml-6.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:26e6eda8d38c1fcab1090dd196ee87cbd13788e531937610e2589085de074e77", size = 3997255, upload-time = "2026-05-18T19:17:56.781Z" },
|
|
78
|
+
{ url = "https://files.pythonhosted.org/packages/90/a9/7a54b6834088d9ae528a7b780584ba6a39a9457b0ac330479f20ffbc9449/lxml-6.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:6540377fbd53fe1b629172288c464fb18db11ce1fa7dc15891da10aa9dcc3e7f", size = 3659610, upload-time = "2026-05-19T19:22:50.843Z" },
|
|
79
|
+
{ url = "https://files.pythonhosted.org/packages/a5/eb/7e6f37c5584ccbb2ff267f56fd0339016938c1c8684cfefab9b33ffc2f36/lxml-6.1.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:68a9198d0fc122d14bb76837de9aa80cf84caed990b5b237f532ed87d3706736", size = 8559780, upload-time = "2026-05-18T19:17:57.661Z" },
|
|
80
|
+
{ url = "https://files.pythonhosted.org/packages/a1/36/587c2521cf23a2cd6c9c22108aa7528f683a1f195ed7ccd23a4b1786ad36/lxml-6.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7d47866cb32fb503450b6edc9df355d10dc49836af2e89901bd6ac6b0896d9d9", size = 4618006, upload-time = "2026-05-18T19:18:04.452Z" },
|
|
81
|
+
{ url = "https://files.pythonhosted.org/packages/6e/ca/ab7bfe2bf4c972af5e7878262845ead3a24a929a9b04bc11c7c1ece6c82a/lxml-6.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb7c9811bfaa8b1ed5ed319f5d370dfbcaa59d52ea64be2a5a85e18195930354", size = 4924139, upload-time = "2026-05-18T19:19:04.873Z" },
|
|
82
|
+
{ url = "https://files.pythonhosted.org/packages/6b/55/a0c72851dfee5ecc689f949723a73dea457758912542cb955b108eaf0d8f/lxml-6.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:762ff394d5bd56da0cf034a23dcce4e13923f15321a2adfa2ac00201dc6d3fca", size = 5082329, upload-time = "2026-05-18T19:19:09.728Z" },
|
|
83
|
+
{ url = "https://files.pythonhosted.org/packages/f0/b6/0608f7d61a3b96cc67e5648a3d906e31a5082093e10e7be65b3886289938/lxml-6.1.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a088f287f7d8275a33c07f2cac6c50b9319309a0200a39e7e75d80c707723099", size = 4993564, upload-time = "2026-05-18T19:19:13.608Z" },
|
|
84
|
+
{ url = "https://files.pythonhosted.org/packages/4c/66/ae227524b066d29d55bf0b453d93d2d793c40218657d643dcbbca13b8faf/lxml-6.1.1-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e902da4b04e6b52e5893900d4b8ab46068f75f3561f01bf1080957f9fd932ed6", size = 5613467, upload-time = "2026-05-18T19:19:16.228Z" },
|
|
85
|
+
{ url = "https://files.pythonhosted.org/packages/a6/76/dbe4a00b50385e40194231dcfe5a12c059de7cf90e89c83407d2b085b719/lxml-6.1.1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1d4962d4c66bf830a7e59ed6cfc17d148149898a3aefa8ec6e59763e6e3ed085", size = 5228304, upload-time = "2026-05-18T19:19:19.354Z" },
|
|
86
|
+
{ url = "https://files.pythonhosted.org/packages/1c/01/00b1b8442ed2041793336868ba0b9ea4b13d7da7c085c6404c207a63bf79/lxml-6.1.1-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:581d4c8ae690a6609e64862dd6b7c2489635c2d13907fc2b20f2bc200ff1d21e", size = 5341607, upload-time = "2026-05-18T19:19:22.297Z" },
|
|
87
|
+
{ url = "https://files.pythonhosted.org/packages/63/36/1ad29931e9a4638bb707869f01d423a6c815f82152138d1a40dfcfde2b95/lxml-6.1.1-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:876e1ff5930ed8bf295ec5ef9a8155e9b6b1876bbf1deed8b3a8069311875a8f", size = 4700168, upload-time = "2026-05-18T19:19:25.133Z" },
|
|
88
|
+
{ url = "https://files.pythonhosted.org/packages/3c/d1/a9536cecf9be18a0dc72d32bead283a2332d1ffebd2dd3ac70ce444686e5/lxml-6.1.1-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9eb9b5a968f6e0f6d640092a567e14529ff8cea2e29d00da6f78a79fa49f013c", size = 5232487, upload-time = "2026-05-18T19:19:28.603Z" },
|
|
89
|
+
{ url = "https://files.pythonhosted.org/packages/0e/77/b4fb1e03bf5d130e879214d3100092e386418807fb74dd0adc4b0a48f351/lxml-6.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:aa49e06d94aba782c6a02eecb7e507969e7e7a41b267f1b359bb35585f295d5b", size = 5044231, upload-time = "2026-05-18T19:18:42.246Z" },
|
|
90
|
+
{ url = "https://files.pythonhosted.org/packages/26/4c/d00daeeb0a5530c4028a9232aa1b93db3ef4ed2158c116ea73c79a9765b3/lxml-6.1.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:70cdfd80589d59e43e18005dd7244e8895e93db8ab6a620b7e23df5445a4e3d2", size = 4769450, upload-time = "2026-05-18T19:18:48.013Z" },
|
|
91
|
+
{ url = "https://files.pythonhosted.org/packages/ed/6a/715a3a8d156ce42f29cf014706f5410c2ff3b02267774110fc23266409fe/lxml-6.1.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:aad9aa39483ed8ec44d6d2e59e5b98a0d80676ef0d92f44bfc374836111f62f5", size = 5635874, upload-time = "2026-05-18T19:18:51.914Z" },
|
|
92
|
+
{ url = "https://files.pythonhosted.org/packages/45/37/0544bc21dde2a88f3a17b504e6fc79c0e01d25a33c2f6079724e9e72b9c7/lxml-6.1.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:d49514be2f28d895c38cf9d2b72d7b9a07d00314519f456c0b50b53cfcf4c785", size = 5223987, upload-time = "2026-05-18T19:18:59.715Z" },
|
|
93
|
+
{ url = "https://files.pythonhosted.org/packages/4d/f8/f6a5e8185bcb28c2befae3d31f8e3df3b811cb0f47746517a81279fcafe1/lxml-6.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:47402e62c52ff5988c1e8c6c63177f5708bccf48e366dea4e3dcf1e645e04947", size = 5250276, upload-time = "2026-05-18T19:19:03.834Z" },
|
|
94
|
+
{ url = "https://files.pythonhosted.org/packages/c7/f2/1a2b9f1b7a49d45495369be7ef9ad05b262930f2eab3e3145706fca8083f/lxml-6.1.1-cp313-cp313-win32.whl", hash = "sha256:3483644525531e1d5762b0c44a8e18b6efba321b6dcf8a8952de10b037618bca", size = 3596903, upload-time = "2026-05-18T19:17:29.863Z" },
|
|
95
|
+
{ url = "https://files.pythonhosted.org/packages/e6/99/f4ffb024f238eec2131aaa09f3278fb6129cf892741bf68e1fc1afb8c100/lxml-6.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:a10bd2fd62e8ce916ececb342f348f190724a098c1faa056fdfb2a22ad5e8660", size = 3995869, upload-time = "2026-05-18T19:18:02.596Z" },
|
|
96
|
+
{ url = "https://files.pythonhosted.org/packages/d1/53/70eb8c5c6037f27448f1e3c54ebede9545a801ae63f0a7254afca4fe8e45/lxml-6.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:424aa57aca0897eb922aef34395bd1289b3b6f04e6bae20ea123c0c7e333cffc", size = 3658490, upload-time = "2026-05-19T19:22:53.846Z" },
|
|
97
|
+
{ url = "https://files.pythonhosted.org/packages/13/e2/2e325795566de01d0d7c3bb57d3c370616b2d07b01214e84eec5d3b10963/lxml-6.1.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:19b7ab10b210b0b3ad7985d9ac4eb66ab09a90b20fe6e2f7ba55d01a234345d0", size = 8577146, upload-time = "2026-05-18T19:18:17.765Z" },
|
|
98
|
+
{ url = "https://files.pythonhosted.org/packages/93/cf/5630b5e4be7d2e6bee8efe83865c925221103cf0221303b104ce134b01e2/lxml-6.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c08e5c694306507275f2290073350c4f32e383db15213b2c69e7ff39c1193840", size = 4623866, upload-time = "2026-05-18T19:18:30.669Z" },
|
|
99
|
+
{ url = "https://files.pythonhosted.org/packages/d2/51/3904907c063451cf8d4a5c9fe0cad95fa1f4ec57f4e3884fa0731bd7a305/lxml-6.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:74a9717fd0d82effef5c2854f0d917231d5324b5a3eb7275c43ac9fa32f97a14", size = 4950022, upload-time = "2026-05-18T19:19:31.958Z" },
|
|
100
|
+
{ url = "https://files.pythonhosted.org/packages/94/cd/9c7611a51c37a2830928405817cc5d56a97f64fab83cc3f628748b135749/lxml-6.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:efe0374196335f93b53269acd811b944f2e6bdc88e8894f214bd636455484909", size = 5086695, upload-time = "2026-05-18T19:19:34.764Z" },
|
|
101
|
+
{ url = "https://files.pythonhosted.org/packages/da/d6/24e3b5906abb0b674ff2ae195bc3ce59708df2bcd17cf17703b2d7dd643a/lxml-6.1.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac931cdc9442c1763b8a8f6cd62c0c938737eafc5be75eff88df55fc73bc0d00", size = 5031642, upload-time = "2026-05-18T19:19:37.771Z" },
|
|
102
|
+
{ url = "https://files.pythonhosted.org/packages/2d/db/6ec54f99019838bff54785c51da07f189eb4676861c5f2730962b0d8d665/lxml-6.1.1-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:aee395f5d0927f947758b4ec119fd5fc8ec71f07a1c5c52077b30b04c0fa6955", size = 5647338, upload-time = "2026-05-18T19:19:40.553Z" },
|
|
103
|
+
{ url = "https://files.pythonhosted.org/packages/42/3d/ef4dcfffd22d27a61805d8ed9f7fb888495bc6aa88648fa07c1eaa5586b6/lxml-6.1.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9395002973c827b3ed67db77e6ec09f092919a587022174554096a269378fb13", size = 5239528, upload-time = "2026-05-18T19:19:43.657Z" },
|
|
104
|
+
{ url = "https://files.pythonhosted.org/packages/62/bb/37fb3f0dff146bdcfa78eec47879273820b2a0bf350ec236ce14bd0b1c26/lxml-6.1.1-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:73bc2086f141224ebddb7fc5c6a36ca58b31b94b561e1dfe8e073e3270fad1e7", size = 5350730, upload-time = "2026-05-18T19:19:46.307Z" },
|
|
105
|
+
{ url = "https://files.pythonhosted.org/packages/90/42/43253f168388df4fae1f38c01df36ddb9bee39e2048167b54cdcbae85ea3/lxml-6.1.1-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:3779def59032b81e44a5f70096ef6bf2082f8d901937dca354474ba09782e245", size = 4697530, upload-time = "2026-05-18T19:19:49.889Z" },
|
|
106
|
+
{ url = "https://files.pythonhosted.org/packages/eb/a8/c5a8504f81bbdfc8e7094c2c850cdb4ed6777fc4d5ddd9e5ab819f3b0d54/lxml-6.1.1-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:86c89b9d55ebf820ad7c90bc533410f0d098054f293351f10603c0c46ff598f5", size = 5250670, upload-time = "2026-05-18T19:19:53.199Z" },
|
|
107
|
+
{ url = "https://files.pythonhosted.org/packages/77/b7/c7e76ab18744d75e21f320ebf9ff9d1ceae2b54dd431ea5a64caf26c9672/lxml-6.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19607c6bbff2a44cf3fe8250abccd20942d3462473e0a721d01d379ed017e462", size = 5084485, upload-time = "2026-05-18T19:19:08.422Z" },
|
|
108
|
+
{ url = "https://files.pythonhosted.org/packages/31/31/b35c53f8ef7b7c31cacd23d3638652fff7bcd1deb6eedb709ab43b685908/lxml-6.1.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:c6ed5141a5c7507cf3ee76bd363b0d6f801e3321adc35b5d825a23115faa5465", size = 4737635, upload-time = "2026-05-18T19:19:12.321Z" },
|
|
109
|
+
{ url = "https://files.pythonhosted.org/packages/d9/06/31f23c813a7fe8e0cb1b175e915b08c9bf4e86d225b210feadbdbe519667/lxml-6.1.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:62aeb7e85b5d60320b9d77eef2e773994e2c0ce10121b277e0a19804e1654a5a", size = 5670681, upload-time = "2026-05-18T19:19:15.001Z" },
|
|
110
|
+
{ url = "https://files.pythonhosted.org/packages/1a/bc/ce619bccc89b1fd9ad8a8e1330ee3f3beff9f2ff95b712d7bbcdd6e22fc3/lxml-6.1.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b1b963fd8f5caa68e99dfae060d54de1fe9cba899b8718b44a00cdca53c3e590", size = 5238229, upload-time = "2026-05-18T19:19:18.131Z" },
|
|
111
|
+
{ url = "https://files.pythonhosted.org/packages/2f/5d/b329acbbedc0b619ebc2be6cf7ee9ed07e80892c88d4dfd612c33805789a/lxml-6.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:63876be28efefa04a1df615b46770e82042cce445cfdce55160522f57b231ccb", size = 5264191, upload-time = "2026-05-18T19:19:21.118Z" },
|
|
112
|
+
{ url = "https://files.pythonhosted.org/packages/d6/85/be36fb1425b30db3c3f9df75fe86343ebffb79e6320bd7f588e25bfeac39/lxml-6.1.1-cp314-cp314-win32.whl", hash = "sha256:7f7a92e8583f06b1fd49d01158143b8461cfcd135dcb10ec807270a3051bd603", size = 3657202, upload-time = "2026-05-18T19:17:39.509Z" },
|
|
113
|
+
{ url = "https://files.pythonhosted.org/packages/b8/ce/3cf9a827342269f54d405a6202397de63f07c69cbd6ce7d183a3f0cba1e9/lxml-6.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:b2d444f2e66624d68e9c6b211e28a76e22fff5fcabcfff4deac18b529b7d4137", size = 4064497, upload-time = "2026-05-18T19:18:14.662Z" },
|
|
114
|
+
{ url = "https://files.pythonhosted.org/packages/d9/3e/1a957bde8f0760039e627f94699f82caa782c9d838d86c3d28245ee67212/lxml-6.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:3fd9728a2735fda14f4e8235830c86b539e9661e849665bf926d3f867943b4bf", size = 3741991, upload-time = "2026-05-19T19:22:59.111Z" },
|
|
115
|
+
{ url = "https://files.pythonhosted.org/packages/78/b2/00ed55b3a2efa4658fb795c38d1090ec9b3e8a6c3683d4441fa517f09c3b/lxml-6.1.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:787b2496d0dbe8cd180984e8d29e3a6f76e7ea34db781cb3bd55e4ba1ef8b4ee", size = 8827545, upload-time = "2026-05-18T19:18:41.193Z" },
|
|
116
|
+
{ url = "https://files.pythonhosted.org/packages/c0/73/74573db19baa618d5f266f2407898b087ff6927115b00b71e5fc1b700847/lxml-6.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2c8daa471358dc2d6fcf02165e80ec68f77871a286df95bc5cc3816153b0fd2c", size = 4735736, upload-time = "2026-05-18T19:18:46.761Z" },
|
|
117
|
+
{ url = "https://files.pythonhosted.org/packages/16/02/6f7061f4f95f51e545d48e87647c54791d204a4e881be4156e7a26ba5338/lxml-6.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:acd7d70b64c0aae0c7922cca83d288a16f5f6da523637697872253415269baef", size = 4970291, upload-time = "2026-05-18T19:19:56.215Z" },
|
|
118
|
+
{ url = "https://files.pythonhosted.org/packages/b0/02/55fc057d8283427dea7d6edb102e7a840239c77a64a983d92f62a304c0e9/lxml-6.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4f0dd2f01f9f8a89f565d000e03abcf0a13d692a346c8d22f628d49af098777a", size = 5102822, upload-time = "2026-05-18T19:19:59.223Z" },
|
|
119
|
+
{ url = "https://files.pythonhosted.org/packages/e4/48/8e1cf78d89d66850121d9255a2a24414c98f775da93b90cf976956c24b14/lxml-6.1.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b7e8a14c8634bf6f7a568634cb395305a6d964aeb5b7ee32248094bed3a7e2c", size = 5027923, upload-time = "2026-05-18T19:20:01.549Z" },
|
|
120
|
+
{ url = "https://files.pythonhosted.org/packages/ed/00/0632a0647612c8af24d26997b3b961397daa9d5b2581444805933629a4cb/lxml-6.1.1-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:86281fbdd6a8162756f8d603f37e3435bfa38043adb79c6dc6a2dfee065e7525", size = 5595843, upload-time = "2026-05-18T19:20:03.93Z" },
|
|
121
|
+
{ url = "https://files.pythonhosted.org/packages/bc/86/ab008a7dc360711b66858d61c80a5979a70a09f2aa2b05d9698df80b803d/lxml-6.1.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5d7152ec39ca7c402d8fb9bad86140a15b9503bd0c54484e3f1bbe3dd37ceca", size = 5224515, upload-time = "2026-05-18T19:20:06.381Z" },
|
|
122
|
+
{ url = "https://files.pythonhosted.org/packages/75/c6/2702ff375e728e34f56d9a45339a9cf7e4427e917f542225242d63a05afa/lxml-6.1.1-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:88d8cb75b9d82858497a5393e3c63cfbf03035225e4b35a49ed7ccb151e4dc0e", size = 5312511, upload-time = "2026-05-18T19:20:09.308Z" },
|
|
123
|
+
{ url = "https://files.pythonhosted.org/packages/b7/57/a5807c98f87a86f10ef9ffab35516df7c0f0c4b6d5d33e9f608ab9c04a31/lxml-6.1.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f64ec5397ea6a41fc1b4af0380d79b44a755b5531dcaccd9940fb260dca93038", size = 4639206, upload-time = "2026-05-18T19:20:11.704Z" },
|
|
124
|
+
{ url = "https://files.pythonhosted.org/packages/1f/e1/8a0a2c35734812395f4da4eaf33748a7e5705bfb2a58b128da764339d5ec/lxml-6.1.1-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d34bbf07dbc7ca5970671b1512e928991fb5e9d95365636c9b2d8b4f53af405e", size = 5232404, upload-time = "2026-05-18T19:20:14.064Z" },
|
|
125
|
+
{ url = "https://files.pythonhosted.org/packages/c2/e2/0e6a4dd5ad84d01d99aa7bae7cfefd4a760a0e0f8176818241de17d9b6c0/lxml-6.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:17e0e18d4ad8adbd0399291bc44845b69d9dd68439a3cdebdf35ff902ec05072", size = 5083769, upload-time = "2026-05-18T19:19:23.758Z" },
|
|
126
|
+
{ url = "https://files.pythonhosted.org/packages/a0/7e/161f33d463f6ffc1c7679104b65086dea120080d49dde4d238f015aaee2f/lxml-6.1.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:3ab541146f1f6968c462d6c2ac495148e8cdba2f8347700b2141b6ec5a75bf52", size = 4758936, upload-time = "2026-05-18T19:19:27.256Z" },
|
|
127
|
+
{ url = "https://files.pythonhosted.org/packages/f1/fb/2369825e3f6ca99305bf9f7b7085fda91c8b0922a89e54d900974aa3ef85/lxml-6.1.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2a0217714657e023ef4293500f65aa20fce6164c8fd6b08fa5bd4a859fb14b9b", size = 5620296, upload-time = "2026-05-18T19:19:29.993Z" },
|
|
128
|
+
{ url = "https://files.pythonhosted.org/packages/30/90/d61e383146f74c5ab683947ea14dc7b82778838ab9b95ea73a23b60d0191/lxml-6.1.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:05a82eb6e1530a64f26225b55cbd178113bd0b5af1c2b625f25e5296742c26d2", size = 5228598, upload-time = "2026-05-18T19:19:33.523Z" },
|
|
129
|
+
{ url = "https://files.pythonhosted.org/packages/76/2d/2dafd8149e94b05bb070690efd5bb2680720681e03ff03fc57d2b70a1105/lxml-6.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9e36f163528fc50cbef305f02a5fd66d404edf7049cdaff211dbc2cba5a7013e", size = 5247845, upload-time = "2026-05-18T19:19:36.649Z" },
|
|
130
|
+
{ url = "https://files.pythonhosted.org/packages/ce/68/b30e913340c380ddac9580c6e6230991fc37240ec4f64704833e4f3e2769/lxml-6.1.1-cp314-cp314t-win32.whl", hash = "sha256:649dda677cf3bd6ac9ae14007ba0c824ded8ce5808b53fc7431d9140399118c1", size = 3897345, upload-time = "2026-05-18T19:17:33.562Z" },
|
|
131
|
+
{ url = "https://files.pythonhosted.org/packages/3c/4e/9eb2af5335545f9fbcd7af57bcf87c6025d31eaa31b14ec184a6c8675328/lxml-6.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:793033d6c5cdf33a573f910d9bea14ef8f5771820411d118da8e1182edb53d5e", size = 4393350, upload-time = "2026-05-18T19:18:10.076Z" },
|
|
132
|
+
{ url = "https://files.pythonhosted.org/packages/7f/2c/0f1e93c636720e8a3eb59af2bfda99d98b55891e1c53bc30c2e0e865f01b/lxml-6.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:58bb955caba94e467d2a96da17660d2d704e0675894cba21ab8a775b8621fd1c", size = 3817223, upload-time = "2026-05-19T19:22:56.823Z" },
|
|
133
|
+
{ url = "https://files.pythonhosted.org/packages/d3/b5/0a0f61cc8c6aa61f439d276e62e70cbf4f32205f57b1fbd483b8d0cf514b/lxml-6.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c9f79d5325907f13e1be0b3e4dacc1049d1dffc4aeee3c995284bea5fe0fab7d", size = 8553821, upload-time = "2026-05-18T19:18:54.406Z" },
|
|
134
|
+
{ url = "https://files.pythonhosted.org/packages/f6/dc/66603d8f755d26f39c41cf29ed30e4a3bc93973d72a825cd12be91c5bd7b/lxml-6.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:83b6b30eb131da7a75b601f28c5d6971e6ed3e887919bf6b6a1ad3c2df289080", size = 4607623, upload-time = "2026-05-18T19:18:58.556Z" },
|
|
135
|
+
{ url = "https://files.pythonhosted.org/packages/a9/ad/5ea70128e6b0d34a52d16e2386666f8f9529c17cfac46d5980fd22c35daa/lxml-6.1.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:441dd227fa0690eb9fc81edabc63cdcefc212bba99b906dcf6e32cc1a9d3e533", size = 5005993, upload-time = "2026-05-18T19:20:24.125Z" },
|
|
136
|
+
{ url = "https://files.pythonhosted.org/packages/85/c2/13a33e8659f95d59f28a293f31c31d61d858a1bd4294b82a662cfbae126b/lxml-6.1.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e07c65f443c887bbcf31cc1771d932ecc192a5273943589b3c7572b749f1ffb2", size = 5160240, upload-time = "2026-05-18T19:20:26.549Z" },
|
|
137
|
+
{ url = "https://files.pythonhosted.org/packages/65/06/e850042d7b33cf47d2f1bc4accb31ab34478f56f46c376b7a67c6b1a84c5/lxml-6.1.1-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5bec7d03d78d853597d6107854c2310ce3f761fd218fe9fe91d5101fcf6c2efe", size = 5062940, upload-time = "2026-05-18T19:20:29.027Z" },
|
|
138
|
+
{ url = "https://files.pythonhosted.org/packages/f9/5a/8d7a0b3e42b21a553f01e288e70283f4de37c015c9c2477a0c31dafa0408/lxml-6.1.1-cp39-cp39-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9f76acfb5f68ba982635a53fd985a8044be98a35b43232c2a1ee235ffab3e1dd", size = 5292921, upload-time = "2026-05-18T19:20:31.463Z" },
|
|
139
|
+
{ url = "https://files.pythonhosted.org/packages/03/7c/9238d52bc426c8737b427ce57ea48c8a5a91974c5dcc55a34260dd851763/lxml-6.1.1-cp39-cp39-manylinux_2_28_i686.whl", hash = "sha256:8d43ca737b20e106e4aebc42b2f3ae19f00ba63d7eb731698ee083d72d15646f", size = 5416716, upload-time = "2026-05-18T19:20:34.059Z" },
|
|
140
|
+
{ url = "https://files.pythonhosted.org/packages/6e/06/be127e1f36410d8ec84964adf76694b72f7705593c16c838dc8b1061b0b8/lxml-6.1.1-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:32ab449a5486f6c758e849bb86710d0e45edc24a04e250c01555f8f5653958f8", size = 4773279, upload-time = "2026-05-18T19:20:36.555Z" },
|
|
141
|
+
{ url = "https://files.pythonhosted.org/packages/77/42/5e3ca677b4d56ae189a454764d28d922d343750419548409974d913a9b65/lxml-6.1.1-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:53c909b62a0532183542fed00c5a7218258c56292d409bc789886fe1cb04c438", size = 5361618, upload-time = "2026-05-18T19:20:39.044Z" },
|
|
142
|
+
{ url = "https://files.pythonhosted.org/packages/cd/20/816979635625f8b8f88b69b5f7d9a4ebdc3c0bab1bf70c824e4ffe239879/lxml-6.1.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:640f97d43d867bcb9c75b3af013b64850756b746cb6bce8ace83b70da3abba9d", size = 5111217, upload-time = "2026-05-18T19:19:42.123Z" },
|
|
143
|
+
{ url = "https://files.pythonhosted.org/packages/25/86/a6ec97064d25959d4932f2e91b547ce6b8380daa27de08b103c7b50be323/lxml-6.1.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:469e3618338bd7ab5beb412d2439825479fcf0dab99e394ca563dbc4eaf6c834", size = 4808149, upload-time = "2026-05-18T19:19:45.317Z" },
|
|
144
|
+
{ url = "https://files.pythonhosted.org/packages/ac/85/dc6087d1ba06589202ee25cda29abb175443da2da70c9e6bcf92091ad272/lxml-6.1.1-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:aae97dfdb60715c164419ac2532a76d013c3918a665eb6cb7288098b5f349aaf", size = 5352761, upload-time = "2026-05-18T19:19:48.608Z" },
|
|
145
|
+
{ url = "https://files.pythonhosted.org/packages/69/93/e89fcb55d12b8e1473ce9a62b8f6ee215c89532f7a75a7ce55830834373b/lxml-6.1.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c9a4b821dc7055bf9e05ff5719e18ec501f75c0f0bbfabd573b277559780833d", size = 5315355, upload-time = "2026-05-18T19:19:51.077Z" },
|
|
146
|
+
{ url = "https://files.pythonhosted.org/packages/ff/c1/4f07e22d26e2e1ad741666f768df2d3b18ff1ddab3a99e2cb35d5b5df3a3/lxml-6.1.1-cp39-cp39-win32.whl", hash = "sha256:639f6c857d91d9be29bd7502348d6736dab168b54b5158cd899abf11684dc186", size = 3601121, upload-time = "2026-05-18T19:17:58.57Z" },
|
|
147
|
+
{ url = "https://files.pythonhosted.org/packages/1e/49/4bcb779b303876f1750eb37f534230ef4e7221341826cbd5e42388087393/lxml-6.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:34c2d737beabfe35baada43941ed519251e9a12e779031496bcd5d539fcfd730", size = 4024637, upload-time = "2026-05-18T19:18:32.806Z" },
|
|
148
|
+
{ url = "https://files.pythonhosted.org/packages/d8/e6/0d1b437d0783874ff15fb94be03045bce6dcefbce1ea22e44a2dbd59a902/lxml-6.1.1-cp39-cp39-win_arm64.whl", hash = "sha256:07a4a68e286ee7a1ed7dfb8af83e615757c0ccfe9f18c6b4ea6771388d9ba8c9", size = 3670865, upload-time = "2026-05-19T19:23:01.555Z" },
|
|
149
|
+
{ url = "https://files.pythonhosted.org/packages/b5/32/86a3f0f724a3a402d4627937a7fc27b160e45e7012b4adf47f6e1e844511/lxml-6.1.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:31033dc34636ea6b7d5cc11b1ddbda78a14de858ba9d3e1ed4b69a3085bc521e", size = 3930127, upload-time = "2026-05-18T19:19:02.27Z" },
|
|
150
|
+
{ url = "https://files.pythonhosted.org/packages/40/44/d832e82af08723761556d004b1d04d281c09f9a8cecd7d3148548c9941a3/lxml-6.1.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3893c14c4b6ac5b2d54ba8cf03e99fe5104e592de491f19bd6b82756c09f8004", size = 4210769, upload-time = "2026-05-18T19:20:41.427Z" },
|
|
151
|
+
{ url = "https://files.pythonhosted.org/packages/6d/39/0dc5949f759ed7d951e0bb8c2f2d9d7aca1908d22352fa84a8afd2ea54af/lxml-6.1.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c07da4cebf6889f03ebac8d238f62318e29f495de0aa18a51ea14e61ae907e2e", size = 4318163, upload-time = "2026-05-18T19:20:44.702Z" },
|
|
152
|
+
{ url = "https://files.pythonhosted.org/packages/e6/fb/8ab3845fe046ba4cbf74536bcf6801a774b7caf4350de1c5d37f1f0a9e90/lxml-6.1.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6f0ce10945fab9c4c06ce14e22af9059d1a87493a9af4501a5b0b9187e21cf2", size = 4250945, upload-time = "2026-05-18T19:20:47.385Z" },
|
|
153
|
+
{ url = "https://files.pythonhosted.org/packages/68/1b/7553ab136894374ffae8851ec06f98f511cd8e66246e41b6be059d0a7289/lxml-6.1.1-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f8844cd288697c6425c9beba919302241e3278871dc6519515e72b04e987abcf", size = 4401664, upload-time = "2026-05-18T19:20:50.489Z" },
|
|
154
|
+
{ url = "https://files.pythonhosted.org/packages/db/a4/441aee36c6f6b249823d20fd91f9be9ab89d7c5a8ae542a4a4ca6d342d56/lxml-6.1.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:ed21202aec73cda4d55d1ce57b389aadb90ffb044e6cd1080b8347efe1b1ec84", size = 3508989, upload-time = "2026-05-18T19:18:38.158Z" },
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
[[package]]
|
|
158
|
+
name = "ruff"
|
|
159
|
+
version = "0.15.17"
|
|
160
|
+
source = { registry = "https://pypi.org/simple" }
|
|
161
|
+
sdist = { url = "https://files.pythonhosted.org/packages/8c/a9/3abdf488f1bf3d24c699415e454ed554a6350d5d89ce183be1ee0a3361ac/ruff-0.15.17.tar.gz", hash = "sha256:2ec446937fd16c8c4de2674a209cc5af64d9c6f17d21fbf1151054fa0bcf5219", size = 4743346, upload-time = "2026-06-11T17:54:47.663Z" }
|
|
162
|
+
wheels = [
|
|
163
|
+
{ url = "https://files.pythonhosted.org/packages/db/4d/e11259f5da07cb6afb2d074c31bf09da9671993f7329d4f15d2fdc458301/ruff-0.15.17-py3-none-linux_armv6l.whl", hash = "sha256:d9feddb927fc68bd295f5eebc587a7e42cfaf9b65f60ca4a2386febff575da8f", size = 10856677, upload-time = "2026-06-11T17:54:49.533Z" },
|
|
164
|
+
{ url = "https://files.pythonhosted.org/packages/29/3e/772d679e1a0dc058e58875bd2c0cb713a0530877b4a76fee3c7966df0d49/ruff-0.15.17-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:25805a226d741c47d274a35ad5c10a7dde175fcddfa511d7cf3da0a21eb3eab7", size = 11223443, upload-time = "2026-06-11T17:55:00.573Z" },
|
|
165
|
+
{ url = "https://files.pythonhosted.org/packages/68/58/bd41f7688b2fd5623012605130ed70e60aa7f2244baa3d5066bdd61530c8/ruff-0.15.17-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f6ad73b14c2d18a3bf8ad7cb6974294d7f613a7898604826058e6ac64918ef4d", size = 10566458, upload-time = "2026-06-11T17:55:07.52Z" },
|
|
166
|
+
{ url = "https://files.pythonhosted.org/packages/d8/5b/733371013fcf1ec339e477ece6ab42bfe10bdd9bba8ee88a9516aa56bfc0/ruff-0.15.17-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ba0c1e4f95bcb3869d0d30cbd5917071ef2e28665abfec970cdab0492c713ed", size = 10914483, upload-time = "2026-06-11T17:55:05.501Z" },
|
|
167
|
+
{ url = "https://files.pythonhosted.org/packages/bd/cc/6f24251cc0252f7239391ccb85833f320efad14ebe5b443943f37ced6332/ruff-0.15.17-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81647960f10bff57d2e51cadd0c3950fe598400c852863a038720ef5b8cca91e", size = 10647497, upload-time = "2026-06-11T17:54:57.733Z" },
|
|
168
|
+
{ url = "https://files.pythonhosted.org/packages/68/dd/0d10c17ce1a1624d6fc3156309c3f834fdb5dfaad026ec90c85684f3990e/ruff-0.15.17-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e01a84ddbc8c16c23055ba3924476850f1bbc1917cebbb9376665a63e74260d", size = 11416967, upload-time = "2026-06-11T17:54:51.461Z" },
|
|
169
|
+
{ url = "https://files.pythonhosted.org/packages/2f/91/556bfb156f6144f355e831c23db00b2fc4120f86b3ce81cc5f7fd2df51f3/ruff-0.15.17-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fe9f653152f8f294f9f7e03bf3a453d8b4a27f7a59c78c8666167f2b17b96c", size = 12335770, upload-time = "2026-06-11T17:54:45.793Z" },
|
|
170
|
+
{ url = "https://files.pythonhosted.org/packages/88/82/8b5999aa13355e926f06d9f42a32dcca862f623bf0363785ff89d607dffd/ruff-0.15.17-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c0fe88a7676e7a05b73174d4d4a59cb2ac21ff8263583f87a81a6018475a978", size = 11575441, upload-time = "2026-06-11T17:54:32.661Z" },
|
|
171
|
+
{ url = "https://files.pythonhosted.org/packages/11/93/f10377bb04109ca0e8cbc483ff1982c54b6d418210041776f93e8cdc7fa9/ruff-0.15.17-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecfc3c7878fff94633ab0348524e093f9ce3243080416dd7d14f8ba400174719", size = 11557614, upload-time = "2026-06-11T17:54:34.698Z" },
|
|
172
|
+
{ url = "https://files.pythonhosted.org/packages/c7/a6/eeeae7f7d5493df41649ab3db92f086b2d0a30199e4efdf8e3dd7a033f24/ruff-0.15.17-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:b8461180b22420b1bdc289909410930761629fddf2a5aaf60fae1ab26cedc4c4", size = 11544450, upload-time = "2026-06-11T17:54:39.042Z" },
|
|
173
|
+
{ url = "https://files.pythonhosted.org/packages/32/88/5991ce565129a24dd4a00db1254b3b5db2e53018cbe4018ea5a89738e727/ruff-0.15.17-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6eccbe50a038b503e7140b441aa9c7fc8c1f36edf23ebef9f4165c2f28f568b7", size = 10892524, upload-time = "2026-06-11T17:55:09.432Z" },
|
|
174
|
+
{ url = "https://files.pythonhosted.org/packages/f5/1d/0fdd248313425f55223968af04b0a42125466a8d88d21c1d99c6af0a51e8/ruff-0.15.17-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:382fc0521025f5a8ad447d8bdd523545d0d7646adb718eb1c2dac5065ec27c0f", size = 10659573, upload-time = "2026-06-11T17:54:36.824Z" },
|
|
175
|
+
{ url = "https://files.pythonhosted.org/packages/9e/0e/072e8260deb9461062ce9311ced27a8e541229a6ffd483013dd37661e43e/ruff-0.15.17-py3-none-musllinux_1_2_i686.whl", hash = "sha256:456d41fcd1b2777ad63f09a6e7121d43f7b688bbc76a800c10f7f8fb1f912c3f", size = 11127818, upload-time = "2026-06-11T17:55:03.124Z" },
|
|
176
|
+
{ url = "https://files.pythonhosted.org/packages/ab/b4/55060a34163121498014696b5f656db5b8c6963768f227dbf0d76b311073/ruff-0.15.17-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b1a04bcc94ae6194e9db05d16ad31f298a7194bfbcb08258bbe589cee1d587b8", size = 11655901, upload-time = "2026-06-11T17:54:53.562Z" },
|
|
177
|
+
{ url = "https://files.pythonhosted.org/packages/49/71/9b29d6b87cef468d697f43c6a91e3fae4a80185779d7d5a4ef27d173439f/ruff-0.15.17-py3-none-win32.whl", hash = "sha256:596065960ab1ff593f744220c9fe6580eda00a95003cffa9f4048bb5b1bf0392", size = 10925574, upload-time = "2026-06-11T17:54:55.723Z" },
|
|
178
|
+
{ url = "https://files.pythonhosted.org/packages/3d/b2/8fc77f3723228836fa5d12497eb71c808f83782e10d058d2b15cfa14640b/ruff-0.15.17-py3-none-win_amd64.whl", hash = "sha256:6769e5fa1710b179b92e0bfa5a51735b35baea9013dadb06d5f44cbcf9547084", size = 12058788, upload-time = "2026-06-11T17:54:41.042Z" },
|
|
179
|
+
{ url = "https://files.pythonhosted.org/packages/2d/c7/c53e8dbff9c9dc4b7928773421ae294a5d28fcb8dcda1a089579d3a7e510/ruff-0.15.17-py3-none-win_arm64.whl", hash = "sha256:f3be1fbb34bcdfd146240d8fb92a709d4c2c8191348580a3c044ec60fa0b4456", size = 11355275, upload-time = "2026-06-11T17:54:43.635Z" },
|
|
180
|
+
]
|