inconnu 0.1.0__tar.gz → 0.1.1__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.
- inconnu-0.1.1/Makefile +41 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/PKG-INFO +85 -81
- {inconnu-0.1.0 → inconnu-0.1.1}/README.md +84 -74
- {inconnu-0.1.0 → inconnu-0.1.1}/inconnu/__init__.py +1 -1
- {inconnu-0.1.0 → inconnu-0.1.1}/inconnu/model_installer.py +86 -2
- {inconnu-0.1.0 → inconnu-0.1.1}/inconnu/nlp/entity_redactor.py +6 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/pyproject.toml +4 -8
- {inconnu-0.1.0 → inconnu-0.1.1}/uv.lock +91 -80
- inconnu-0.1.0/Makefile +0 -39
- {inconnu-0.1.0 → inconnu-0.1.1}/.bitbucket/scripts/auto_fix.py +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/.github/workflows/publish.yml +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/.gitignore +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/.python-version +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/LICENSE +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/MANIFEST.in +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/bitbucket-pipelines.yml +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/examples.ipynb +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/inconnu/config.py +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/inconnu/exceptions.py +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/inconnu/nlp/interfaces.py +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/inconnu/nlp/patterns.py +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/inconnu/nlp/utils.py +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/issues.json +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/tests/conftest.py +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/tests/mocks/de_prompt.txt +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/tests/mocks/en_prompt.txt +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/tests/mocks/it_prompt.txt +0 -0
- {inconnu-0.1.0 → inconnu-0.1.1}/tests/test_inconnu.py +0 -0
inconnu-0.1.1/Makefile
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
install:
|
2
|
+
uv sync --group dev
|
3
|
+
|
4
|
+
activate:
|
5
|
+
uv venv
|
6
|
+
|
7
|
+
model-en:
|
8
|
+
uv run inconnu-download en
|
9
|
+
|
10
|
+
model-de:
|
11
|
+
uv run inconnu-download de
|
12
|
+
|
13
|
+
model-it:
|
14
|
+
uv run inconnu-download it
|
15
|
+
|
16
|
+
model-es:
|
17
|
+
uv run inconnu-download es
|
18
|
+
|
19
|
+
model-fr:
|
20
|
+
uv run inconnu-download fr
|
21
|
+
|
22
|
+
update-deps:
|
23
|
+
uv update
|
24
|
+
|
25
|
+
fix:
|
26
|
+
uv run ruff check --fix .
|
27
|
+
|
28
|
+
format:
|
29
|
+
uv run ruff format .
|
30
|
+
|
31
|
+
lint:
|
32
|
+
uv run ruff check .
|
33
|
+
|
34
|
+
clean: fix format lint
|
35
|
+
rm -fr .pytest_cache */__pycache__ */*/__pycache__
|
36
|
+
uv run ruff clean
|
37
|
+
|
38
|
+
install-models: model-en model-de model-it # Models required for testing
|
39
|
+
|
40
|
+
test: install-models
|
41
|
+
uv run pytest -vv
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: inconnu
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.1
|
4
4
|
Summary: GDPR-compliant data privacy tool for entity redaction and de-anonymization
|
5
5
|
Project-URL: Homepage, https://github.com/0xjgv/inconnu
|
6
6
|
Project-URL: Documentation, https://github.com/0xjgv/inconnu#readme
|
@@ -26,16 +26,14 @@ Classifier: Topic :: Text Processing :: Linguistic
|
|
26
26
|
Requires-Python: >=3.10
|
27
27
|
Requires-Dist: phonenumbers>=9.0.8
|
28
28
|
Requires-Dist: spacy>=3.8.7
|
29
|
-
Provides-Extra: all
|
30
|
-
Provides-Extra: de
|
31
|
-
Provides-Extra: en
|
32
|
-
Provides-Extra: es
|
33
|
-
Provides-Extra: fr
|
34
|
-
Provides-Extra: it
|
35
29
|
Description-Content-Type: text/markdown
|
36
30
|
|
37
31
|
# Inconnu
|
38
32
|
|
33
|
+
[](https://github.com/0xjgv/inconnu)
|
34
|
+
[](https://inconnu.ai)
|
35
|
+
[](https://pypi.org/project/inconnu/)
|
36
|
+
|
39
37
|
## What is Inconnu?
|
40
38
|
|
41
39
|
Inconnu is a GDPR-compliant data privacy tool designed for entity redaction and de-anonymization. It provides cutting-edge NLP-based tools for anonymizing and pseudonymizing text data while maintaining data utility, ensuring your business meets stringent privacy regulations.
|
@@ -62,40 +60,60 @@ Inconnu is a GDPR-compliant data privacy tool designed for entity redaction and
|
|
62
60
|
### Install from PyPI
|
63
61
|
|
64
62
|
```bash
|
65
|
-
#
|
63
|
+
# Using pip
|
66
64
|
pip install inconnu
|
67
65
|
|
68
|
-
#
|
69
|
-
|
66
|
+
# Using UV (Recommended)
|
67
|
+
uv add inconnu
|
68
|
+
```
|
69
|
+
|
70
|
+
**Note**: Language models are NOT included as optional dependencies. You'll need to download them separately using the `inconnu-download` command after installation (see below).
|
70
71
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
72
|
+
### Download Language Models
|
73
|
+
|
74
|
+
After installing Inconnu, use the `inconnu-download` command to download spaCy language models:
|
75
|
+
|
76
|
+
```bash
|
77
|
+
# Download default (small) models
|
78
|
+
inconnu-download en # English
|
79
|
+
inconnu-download de # German
|
80
|
+
inconnu-download en de fr # Multiple languages
|
81
|
+
inconnu-download all # All default models
|
76
82
|
|
77
|
-
#
|
78
|
-
|
83
|
+
# Download specific model sizes
|
84
|
+
inconnu-download en --size large # Large English model
|
85
|
+
inconnu-download en --size transformer # Transformer model (English only)
|
79
86
|
|
80
|
-
#
|
81
|
-
|
87
|
+
# List available models and check what's installed
|
88
|
+
inconnu-download --list
|
89
|
+
|
90
|
+
# Upgrade existing models
|
91
|
+
inconnu-download en --upgrade
|
92
|
+
|
93
|
+
# Get help for UV environments
|
94
|
+
inconnu-download --uv-help
|
82
95
|
```
|
83
96
|
|
84
|
-
|
97
|
+
#### How Model Installation Works
|
98
|
+
|
99
|
+
1. **No Optional Dependencies**: spaCy models are NOT included as pip/uv optional dependencies to avoid unnecessary downloads during dependency resolution
|
100
|
+
2. **On-Demand Downloads**: The `inconnu-download` command downloads only the models you need
|
101
|
+
3. **Smart Environment Detection**: Automatically detects UV environments and provides appropriate guidance
|
102
|
+
4. **Verification**: Checks if models are already installed before downloading
|
103
|
+
|
104
|
+
#### Available Model Sizes
|
105
|
+
|
106
|
+
- **Small (sm)**: Default, fast processing, ~15-50MB, good for high-volume
|
107
|
+
- **Medium (md)**: Better accuracy, ~50-200MB, moderate speed
|
108
|
+
- **Large (lg)**: High accuracy, ~200-600MB, slower processing
|
109
|
+
- **Transformer (trf)**: Highest accuracy, ~400MB+, GPU-optimized (English only)
|
85
110
|
|
86
|
-
|
111
|
+
#### Alternative: Direct spaCy Download
|
87
112
|
|
113
|
+
You can also use spaCy directly if preferred:
|
88
114
|
```bash
|
89
|
-
|
90
|
-
|
91
|
-
inconnu-download de fr # Download German and French models
|
92
|
-
inconnu-download en --size large # Download large English model
|
93
|
-
inconnu-download all # Download all default models
|
94
|
-
inconnu-download --list # List all available models
|
95
|
-
|
96
|
-
# Or using spaCy directly
|
97
|
-
python -m spacy download en_core_web_sm
|
98
|
-
python -m spacy download de_core_news_sm
|
115
|
+
python -m spacy download en_core_web_sm # English small
|
116
|
+
python -m spacy download de_core_news_lg # German large
|
99
117
|
```
|
100
118
|
|
101
119
|
### Install from Source
|
@@ -108,9 +126,9 @@ python -m spacy download de_core_news_sm
|
|
108
126
|
|
109
127
|
2. **Install with UV (recommended for development)**:
|
110
128
|
```bash
|
111
|
-
|
112
|
-
|
113
|
-
make test
|
129
|
+
uv sync # Install dependencies
|
130
|
+
inconnu-download en de # Download language models
|
131
|
+
make test # Run tests
|
114
132
|
```
|
115
133
|
|
116
134
|
3. **Or install with pip**:
|
@@ -119,69 +137,55 @@ python -m spacy download de_core_news_sm
|
|
119
137
|
python -m spacy download en_core_web_sm
|
120
138
|
```
|
121
139
|
|
122
|
-
###
|
140
|
+
### Development Commands
|
123
141
|
|
124
|
-
|
142
|
+
For development, the Makefile provides convenience targets:
|
125
143
|
|
126
|
-
#### English Models
|
127
144
|
```bash
|
128
|
-
#
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
145
|
+
# Download models using make commands
|
146
|
+
make model-en # English small
|
147
|
+
make model-de # German small
|
148
|
+
make model-it # Italian small
|
149
|
+
make model-es # Spanish small
|
150
|
+
make model-fr # French small
|
151
|
+
|
152
|
+
# Other development commands
|
153
|
+
make test # Run tests
|
154
|
+
make lint # Check code with ruff
|
155
|
+
make format # Format code
|
156
|
+
make clean # Clean cache and format code
|
136
157
|
```
|
137
158
|
|
138
|
-
|
139
|
-
```bash
|
140
|
-
# German model
|
141
|
-
make model-de
|
142
|
-
uv run python -m spacy download de_core_news_sm
|
143
|
-
|
144
|
-
# Italian model
|
145
|
-
make model-it
|
146
|
-
uv run python -m spacy download it_core_news_sm
|
159
|
+
### Using Different Models in Code
|
147
160
|
|
148
|
-
|
149
|
-
make model-es
|
150
|
-
uv run python -m spacy download es_core_news_sm
|
161
|
+
To use a different model size, first download it, then specify it when initializing:
|
151
162
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
# For enhanced accuracy (manual installation)
|
157
|
-
# Medium German model - better accuracy
|
158
|
-
uv run python -m spacy download de_core_news_md
|
159
|
-
|
160
|
-
# Large German model - highest accuracy
|
161
|
-
uv run python -m spacy download de_core_news_lg
|
162
|
-
```
|
163
|
-
|
164
|
-
#### Using Different Models
|
163
|
+
```python
|
164
|
+
from inconnu import Inconnu
|
165
|
+
from inconnu.nlp.entity_redactor import SpacyModels
|
165
166
|
|
166
|
-
|
167
|
+
# First, download the model you want
|
168
|
+
# $ inconnu-download en --size large
|
167
169
|
|
168
|
-
|
169
|
-
|
170
|
+
# Then use it in your code
|
171
|
+
inconnu = Inconnu(
|
172
|
+
language="en",
|
173
|
+
model_name=SpacyModels.EN_CORE_WEB_LG # Use large model
|
174
|
+
)
|
170
175
|
|
171
|
-
#
|
172
|
-
|
173
|
-
custom_components=None,
|
176
|
+
# For highest accuracy (transformer model)
|
177
|
+
inconnu_trf = Inconnu(
|
174
178
|
language="en",
|
175
|
-
model_name=SpacyModels.EN_CORE_WEB_TRF
|
179
|
+
model_name=SpacyModels.EN_CORE_WEB_TRF
|
176
180
|
)
|
177
181
|
```
|
178
182
|
|
179
183
|
**Model Selection Guide:**
|
180
|
-
- `en_core_web_sm`: Fast processing, good for high-volume
|
181
|
-
- `en_core_web_lg`: Better accuracy, moderate
|
182
|
-
- `en_core_web_trf`: Highest accuracy,
|
184
|
+
- `en_core_web_sm`: Fast processing, good for high-volume
|
185
|
+
- `en_core_web_lg`: Better accuracy, moderate speed
|
186
|
+
- `en_core_web_trf`: Highest accuracy, GPU-optimized (recommended for sensitive data)
|
183
187
|
|
184
|
-
For
|
188
|
+
For a complete list of supported models, run `inconnu-download --list`
|
185
189
|
|
186
190
|
## Development Setup
|
187
191
|
|
@@ -1,5 +1,9 @@
|
|
1
1
|
# Inconnu
|
2
2
|
|
3
|
+
[](https://github.com/0xjgv/inconnu)
|
4
|
+
[](https://inconnu.ai)
|
5
|
+
[](https://pypi.org/project/inconnu/)
|
6
|
+
|
3
7
|
## What is Inconnu?
|
4
8
|
|
5
9
|
Inconnu is a GDPR-compliant data privacy tool designed for entity redaction and de-anonymization. It provides cutting-edge NLP-based tools for anonymizing and pseudonymizing text data while maintaining data utility, ensuring your business meets stringent privacy regulations.
|
@@ -26,40 +30,60 @@ Inconnu is a GDPR-compliant data privacy tool designed for entity redaction and
|
|
26
30
|
### Install from PyPI
|
27
31
|
|
28
32
|
```bash
|
29
|
-
#
|
33
|
+
# Using pip
|
30
34
|
pip install inconnu
|
31
35
|
|
32
|
-
#
|
33
|
-
|
36
|
+
# Using UV (Recommended)
|
37
|
+
uv add inconnu
|
38
|
+
```
|
39
|
+
|
40
|
+
**Note**: Language models are NOT included as optional dependencies. You'll need to download them separately using the `inconnu-download` command after installation (see below).
|
34
41
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
42
|
+
### Download Language Models
|
43
|
+
|
44
|
+
After installing Inconnu, use the `inconnu-download` command to download spaCy language models:
|
45
|
+
|
46
|
+
```bash
|
47
|
+
# Download default (small) models
|
48
|
+
inconnu-download en # English
|
49
|
+
inconnu-download de # German
|
50
|
+
inconnu-download en de fr # Multiple languages
|
51
|
+
inconnu-download all # All default models
|
40
52
|
|
41
|
-
#
|
42
|
-
|
53
|
+
# Download specific model sizes
|
54
|
+
inconnu-download en --size large # Large English model
|
55
|
+
inconnu-download en --size transformer # Transformer model (English only)
|
43
56
|
|
44
|
-
#
|
45
|
-
|
57
|
+
# List available models and check what's installed
|
58
|
+
inconnu-download --list
|
59
|
+
|
60
|
+
# Upgrade existing models
|
61
|
+
inconnu-download en --upgrade
|
62
|
+
|
63
|
+
# Get help for UV environments
|
64
|
+
inconnu-download --uv-help
|
46
65
|
```
|
47
66
|
|
48
|
-
|
67
|
+
#### How Model Installation Works
|
68
|
+
|
69
|
+
1. **No Optional Dependencies**: spaCy models are NOT included as pip/uv optional dependencies to avoid unnecessary downloads during dependency resolution
|
70
|
+
2. **On-Demand Downloads**: The `inconnu-download` command downloads only the models you need
|
71
|
+
3. **Smart Environment Detection**: Automatically detects UV environments and provides appropriate guidance
|
72
|
+
4. **Verification**: Checks if models are already installed before downloading
|
73
|
+
|
74
|
+
#### Available Model Sizes
|
75
|
+
|
76
|
+
- **Small (sm)**: Default, fast processing, ~15-50MB, good for high-volume
|
77
|
+
- **Medium (md)**: Better accuracy, ~50-200MB, moderate speed
|
78
|
+
- **Large (lg)**: High accuracy, ~200-600MB, slower processing
|
79
|
+
- **Transformer (trf)**: Highest accuracy, ~400MB+, GPU-optimized (English only)
|
49
80
|
|
50
|
-
|
81
|
+
#### Alternative: Direct spaCy Download
|
51
82
|
|
83
|
+
You can also use spaCy directly if preferred:
|
52
84
|
```bash
|
53
|
-
|
54
|
-
|
55
|
-
inconnu-download de fr # Download German and French models
|
56
|
-
inconnu-download en --size large # Download large English model
|
57
|
-
inconnu-download all # Download all default models
|
58
|
-
inconnu-download --list # List all available models
|
59
|
-
|
60
|
-
# Or using spaCy directly
|
61
|
-
python -m spacy download en_core_web_sm
|
62
|
-
python -m spacy download de_core_news_sm
|
85
|
+
python -m spacy download en_core_web_sm # English small
|
86
|
+
python -m spacy download de_core_news_lg # German large
|
63
87
|
```
|
64
88
|
|
65
89
|
### Install from Source
|
@@ -72,9 +96,9 @@ python -m spacy download de_core_news_sm
|
|
72
96
|
|
73
97
|
2. **Install with UV (recommended for development)**:
|
74
98
|
```bash
|
75
|
-
|
76
|
-
|
77
|
-
make test
|
99
|
+
uv sync # Install dependencies
|
100
|
+
inconnu-download en de # Download language models
|
101
|
+
make test # Run tests
|
78
102
|
```
|
79
103
|
|
80
104
|
3. **Or install with pip**:
|
@@ -83,69 +107,55 @@ python -m spacy download de_core_news_sm
|
|
83
107
|
python -m spacy download en_core_web_sm
|
84
108
|
```
|
85
109
|
|
86
|
-
###
|
110
|
+
### Development Commands
|
87
111
|
|
88
|
-
|
112
|
+
For development, the Makefile provides convenience targets:
|
89
113
|
|
90
|
-
#### English Models
|
91
114
|
```bash
|
92
|
-
#
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
115
|
+
# Download models using make commands
|
116
|
+
make model-en # English small
|
117
|
+
make model-de # German small
|
118
|
+
make model-it # Italian small
|
119
|
+
make model-es # Spanish small
|
120
|
+
make model-fr # French small
|
121
|
+
|
122
|
+
# Other development commands
|
123
|
+
make test # Run tests
|
124
|
+
make lint # Check code with ruff
|
125
|
+
make format # Format code
|
126
|
+
make clean # Clean cache and format code
|
100
127
|
```
|
101
128
|
|
102
|
-
|
103
|
-
```bash
|
104
|
-
# German model
|
105
|
-
make model-de
|
106
|
-
uv run python -m spacy download de_core_news_sm
|
107
|
-
|
108
|
-
# Italian model
|
109
|
-
make model-it
|
110
|
-
uv run python -m spacy download it_core_news_sm
|
129
|
+
### Using Different Models in Code
|
111
130
|
|
112
|
-
|
113
|
-
make model-es
|
114
|
-
uv run python -m spacy download es_core_news_sm
|
131
|
+
To use a different model size, first download it, then specify it when initializing:
|
115
132
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
# For enhanced accuracy (manual installation)
|
121
|
-
# Medium German model - better accuracy
|
122
|
-
uv run python -m spacy download de_core_news_md
|
123
|
-
|
124
|
-
# Large German model - highest accuracy
|
125
|
-
uv run python -m spacy download de_core_news_lg
|
126
|
-
```
|
127
|
-
|
128
|
-
#### Using Different Models
|
133
|
+
```python
|
134
|
+
from inconnu import Inconnu
|
135
|
+
from inconnu.nlp.entity_redactor import SpacyModels
|
129
136
|
|
130
|
-
|
137
|
+
# First, download the model you want
|
138
|
+
# $ inconnu-download en --size large
|
131
139
|
|
132
|
-
|
133
|
-
|
140
|
+
# Then use it in your code
|
141
|
+
inconnu = Inconnu(
|
142
|
+
language="en",
|
143
|
+
model_name=SpacyModels.EN_CORE_WEB_LG # Use large model
|
144
|
+
)
|
134
145
|
|
135
|
-
#
|
136
|
-
|
137
|
-
custom_components=None,
|
146
|
+
# For highest accuracy (transformer model)
|
147
|
+
inconnu_trf = Inconnu(
|
138
148
|
language="en",
|
139
|
-
model_name=SpacyModels.EN_CORE_WEB_TRF
|
149
|
+
model_name=SpacyModels.EN_CORE_WEB_TRF
|
140
150
|
)
|
141
151
|
```
|
142
152
|
|
143
153
|
**Model Selection Guide:**
|
144
|
-
- `en_core_web_sm`: Fast processing, good for high-volume
|
145
|
-
- `en_core_web_lg`: Better accuracy, moderate
|
146
|
-
- `en_core_web_trf`: Highest accuracy,
|
154
|
+
- `en_core_web_sm`: Fast processing, good for high-volume
|
155
|
+
- `en_core_web_lg`: Better accuracy, moderate speed
|
156
|
+
- `en_core_web_trf`: Highest accuracy, GPU-optimized (recommended for sensitive data)
|
147
157
|
|
148
|
-
For
|
158
|
+
For a complete list of supported models, run `inconnu-download --list`
|
149
159
|
|
150
160
|
## Development Setup
|
151
161
|
|
@@ -4,8 +4,10 @@ Model installer for Inconnu - downloads spaCy language models.
|
|
4
4
|
"""
|
5
5
|
|
6
6
|
import argparse
|
7
|
+
import os
|
7
8
|
import sys
|
8
|
-
from
|
9
|
+
from pathlib import Path
|
10
|
+
from subprocess import CalledProcessError, run
|
9
11
|
from typing import Optional
|
10
12
|
|
11
13
|
# Mapping of language codes to spaCy model names
|
@@ -27,8 +29,60 @@ DEFAULT_MODELS = {
|
|
27
29
|
}
|
28
30
|
|
29
31
|
|
32
|
+
def is_uv_environment() -> bool:
|
33
|
+
"""Check if running in a UV environment."""
|
34
|
+
# Check for UV environment markers
|
35
|
+
return (
|
36
|
+
os.environ.get("UV_PROJECT_ROOT") is not None
|
37
|
+
or Path(sys.prefix).name == ".venv"
|
38
|
+
and Path(sys.prefix).parent.joinpath("uv.lock").exists()
|
39
|
+
)
|
40
|
+
|
41
|
+
|
42
|
+
def ensure_pip_available() -> bool:
|
43
|
+
"""Ensure pip is available, install it if running in UV environment."""
|
44
|
+
try:
|
45
|
+
# Try importing pip to check if it's available
|
46
|
+
import pip # type: ignore # noqa: F401
|
47
|
+
|
48
|
+
return True
|
49
|
+
except ImportError:
|
50
|
+
if is_uv_environment():
|
51
|
+
print("📦 UV environment detected. Installing pip...")
|
52
|
+
try:
|
53
|
+
result = run( # noqa: S603
|
54
|
+
["uv", "pip", "install", "pip", "--upgrade"], # noqa: S607
|
55
|
+
capture_output=True,
|
56
|
+
text=True,
|
57
|
+
)
|
58
|
+
if result.returncode == 0:
|
59
|
+
print("✓ pip installed successfully")
|
60
|
+
return True
|
61
|
+
else:
|
62
|
+
print(f"✗ Failed to install pip: {result.stderr}")
|
63
|
+
return False
|
64
|
+
except (CalledProcessError, FileNotFoundError) as e:
|
65
|
+
print(f"✗ Error installing pip: {e}")
|
66
|
+
return False
|
67
|
+
return False
|
68
|
+
|
69
|
+
|
30
70
|
def download_model(model_name: str, upgrade: bool = False) -> bool:
|
31
71
|
"""Download a spaCy model using subprocess."""
|
72
|
+
# First, ensure pip is available
|
73
|
+
if not ensure_pip_available():
|
74
|
+
print("\n⚠️ pip is not available and could not be installed.")
|
75
|
+
if is_uv_environment():
|
76
|
+
print("\n💡 For UV environments, you can install models directly:")
|
77
|
+
print(
|
78
|
+
f" uv add 'inconnu[{model_name.split('_')[0]}]' # for default model"
|
79
|
+
)
|
80
|
+
print(
|
81
|
+
f" uv add 'inconnu[{model_name.split('_')[0]}-lg]' # for large model"
|
82
|
+
)
|
83
|
+
print("\n Or install all languages: uv add 'inconnu[all]'")
|
84
|
+
return False
|
85
|
+
|
32
86
|
try:
|
33
87
|
cmd = [sys.executable, "-m", "spacy", "download", model_name]
|
34
88
|
if upgrade:
|
@@ -126,12 +180,26 @@ def download_language_models(
|
|
126
180
|
def download_all_default_models(upgrade: bool = False) -> bool:
|
127
181
|
"""Download all default models."""
|
128
182
|
success = True
|
129
|
-
for
|
183
|
+
for model in DEFAULT_MODELS.values():
|
130
184
|
if not download_model(model, upgrade):
|
131
185
|
success = False
|
132
186
|
return success
|
133
187
|
|
134
188
|
|
189
|
+
def print_uv_instructions():
|
190
|
+
"""Print instructions for UV users."""
|
191
|
+
print("\n📘 UV Installation Instructions:")
|
192
|
+
print("\nFor UV environments, models can be installed as dependencies:")
|
193
|
+
print(" uv add 'inconnu[en]' # English")
|
194
|
+
print(" uv add 'inconnu[de]' # German")
|
195
|
+
print(" uv add 'inconnu[en,de,fr]' # Multiple languages")
|
196
|
+
print(" uv add 'inconnu[all]' # All languages")
|
197
|
+
print("\n Larger models:")
|
198
|
+
print(" uv add 'inconnu[en-lg]' # English large")
|
199
|
+
print(" uv add 'inconnu[en-trf]' # English transformer")
|
200
|
+
print("\n Available sizes: sm (default), md, lg, trf (English only)")
|
201
|
+
|
202
|
+
|
135
203
|
def main():
|
136
204
|
"""Main CLI entry point."""
|
137
205
|
parser = argparse.ArgumentParser(
|
@@ -162,9 +230,17 @@ Examples:
|
|
162
230
|
"--upgrade", action="store_true", help="Upgrade existing models"
|
163
231
|
)
|
164
232
|
parser.add_argument("--list", action="store_true", help="List all available models")
|
233
|
+
parser.add_argument(
|
234
|
+
"--uv-help", action="store_true", help="Show UV installation instructions"
|
235
|
+
)
|
165
236
|
|
166
237
|
args = parser.parse_args()
|
167
238
|
|
239
|
+
# Handle UV help
|
240
|
+
if args.uv_help:
|
241
|
+
print_uv_instructions()
|
242
|
+
return
|
243
|
+
|
168
244
|
# Handle list command
|
169
245
|
if args.list:
|
170
246
|
list_available_models()
|
@@ -172,6 +248,14 @@ Examples:
|
|
172
248
|
|
173
249
|
# Require at least one language if not listing
|
174
250
|
if not args.languages:
|
251
|
+
if is_uv_environment():
|
252
|
+
print("⚠️ UV environment detected!")
|
253
|
+
print_uv_instructions()
|
254
|
+
print("\nOr use 'inconnu-download --list' to see available models")
|
255
|
+
print(
|
256
|
+
"Or use 'inconnu-download LANG' to download via this tool (requires pip)"
|
257
|
+
)
|
258
|
+
return
|
175
259
|
parser.error("Please specify language(s) to download or use --list")
|
176
260
|
|
177
261
|
# Handle 'all' keyword
|
@@ -19,6 +19,8 @@ class SpacyModels(StrEnum):
|
|
19
19
|
EN_CORE_WEB_TRF = "en_core_web_trf"
|
20
20
|
DE_CORE_NEWS_SM = "de_core_news_sm"
|
21
21
|
IT_CORE_NEWS_SM = "it_core_news_sm"
|
22
|
+
ES_CORE_NEWS_SM = "es_core_news_sm"
|
23
|
+
FR_CORE_NEWS_SM = "fr_core_news_sm"
|
22
24
|
EN_CORE_WEB_SM = "en_core_web_sm"
|
23
25
|
|
24
26
|
|
@@ -155,6 +157,10 @@ class EntityRedactor:
|
|
155
157
|
model_name = SpacyModels.EN_CORE_WEB_SM
|
156
158
|
case "it":
|
157
159
|
model_name = SpacyModels.IT_CORE_NEWS_SM
|
160
|
+
case "es":
|
161
|
+
model_name = SpacyModels.ES_CORE_NEWS_SM
|
162
|
+
case "fr":
|
163
|
+
model_name = SpacyModels.FR_CORE_NEWS_SM
|
158
164
|
case _:
|
159
165
|
# Default to English small model for unsupported languages
|
160
166
|
model_name = SpacyModels.EN_CORE_WEB_SM
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "inconnu"
|
3
|
-
version = "0.1.
|
3
|
+
version = "0.1.1"
|
4
4
|
description = "GDPR-compliant data privacy tool for entity redaction and de-anonymization"
|
5
5
|
readme = "README.md"
|
6
6
|
requires-python = ">=3.10"
|
@@ -35,13 +35,9 @@ Documentation = "https://github.com/0xjgv/inconnu#readme"
|
|
35
35
|
Repository = "https://github.com/0xjgv/inconnu"
|
36
36
|
Issues = "https://github.com/0xjgv/inconnu/issues"
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
de
|
41
|
-
it = []
|
42
|
-
es = []
|
43
|
-
fr = []
|
44
|
-
all = ["inconnu[en,de,it,es,fr]"]
|
38
|
+
# Note: spaCy models are not included as optional dependencies to avoid downloading
|
39
|
+
# all models when running `uv lock`. Use the `inconnu-download` command or the
|
40
|
+
# Makefile targets (make model-de, make model-it, etc.) to install models as needed.
|
45
41
|
|
46
42
|
[project.scripts]
|
47
43
|
inconnu-download = "inconnu.model_installer:main"
|
@@ -33,6 +33,15 @@ wheels = [
|
|
33
33
|
{ url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" },
|
34
34
|
]
|
35
35
|
|
36
|
+
[[package]]
|
37
|
+
name = "backports-asyncio-runner"
|
38
|
+
version = "1.2.0"
|
39
|
+
source = { registry = "https://pypi.org/simple" }
|
40
|
+
sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" }
|
41
|
+
wheels = [
|
42
|
+
{ url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" },
|
43
|
+
]
|
44
|
+
|
36
45
|
[[package]]
|
37
46
|
name = "blis"
|
38
47
|
version = "1.3.0"
|
@@ -92,11 +101,11 @@ wheels = [
|
|
92
101
|
|
93
102
|
[[package]]
|
94
103
|
name = "certifi"
|
95
|
-
version = "2025.
|
104
|
+
version = "2025.7.14"
|
96
105
|
source = { registry = "https://pypi.org/simple" }
|
97
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
106
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b3/76/52c535bcebe74590f296d6c77c86dabf761c41980e1347a2422e4aa2ae41/certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995", size = 163981, upload-time = "2025-07-14T03:29:28.449Z" }
|
98
107
|
wheels = [
|
99
|
-
{ url = "https://files.pythonhosted.org/packages/
|
108
|
+
{ url = "https://files.pythonhosted.org/packages/4f/52/34c6cf5bb9285074dc3531c437b3919e825d976fde097a7a73f79e726d03/certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2", size = 162722, upload-time = "2025-07-14T03:29:26.863Z" },
|
100
109
|
]
|
101
110
|
|
102
111
|
[[package]]
|
@@ -313,27 +322,27 @@ wheels = [
|
|
313
322
|
|
314
323
|
[[package]]
|
315
324
|
name = "debugpy"
|
316
|
-
version = "1.8.
|
317
|
-
source = { registry = "https://pypi.org/simple" }
|
318
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
319
|
-
wheels = [
|
320
|
-
{ url = "https://files.pythonhosted.org/packages/
|
321
|
-
{ url = "https://files.pythonhosted.org/packages/
|
322
|
-
{ url = "https://files.pythonhosted.org/packages/
|
323
|
-
{ url = "https://files.pythonhosted.org/packages/
|
324
|
-
{ url = "https://files.pythonhosted.org/packages/
|
325
|
-
{ url = "https://files.pythonhosted.org/packages/
|
326
|
-
{ url = "https://files.pythonhosted.org/packages/
|
327
|
-
{ url = "https://files.pythonhosted.org/packages/
|
328
|
-
{ url = "https://files.pythonhosted.org/packages/
|
329
|
-
{ url = "https://files.pythonhosted.org/packages/
|
330
|
-
{ url = "https://files.pythonhosted.org/packages/
|
331
|
-
{ url = "https://files.pythonhosted.org/packages/
|
332
|
-
{ url = "https://files.pythonhosted.org/packages/
|
333
|
-
{ url = "https://files.pythonhosted.org/packages/
|
334
|
-
{ url = "https://files.pythonhosted.org/packages/
|
335
|
-
{ url = "https://files.pythonhosted.org/packages/
|
336
|
-
{ url = "https://files.pythonhosted.org/packages/
|
325
|
+
version = "1.8.15"
|
326
|
+
source = { registry = "https://pypi.org/simple" }
|
327
|
+
sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/3a9a28ddb750a76eaec445c7f4d3147ea2c579a97dbd9e25d39001b92b21/debugpy-1.8.15.tar.gz", hash = "sha256:58d7a20b7773ab5ee6bdfb2e6cf622fdf1e40c9d5aef2857d85391526719ac00", size = 1643279, upload-time = "2025-07-15T16:43:29.135Z" }
|
328
|
+
wheels = [
|
329
|
+
{ url = "https://files.pythonhosted.org/packages/69/51/0b4315169f0d945271db037ae6b98c0548a2d48cc036335cd1b2f5516c1b/debugpy-1.8.15-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e9a8125c85172e3ec30985012e7a81ea5e70bbb836637f8a4104f454f9b06c97", size = 2084890, upload-time = "2025-07-15T16:43:31.239Z" },
|
330
|
+
{ url = "https://files.pythonhosted.org/packages/36/cc/a5391dedb079280d7b72418022e00ba8227ae0b5bc8b2e3d1ecffc5d6b01/debugpy-1.8.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fd0b6b5eccaa745c214fd240ea82f46049d99ef74b185a3517dad3ea1ec55d9", size = 3561470, upload-time = "2025-07-15T16:43:32.515Z" },
|
331
|
+
{ url = "https://files.pythonhosted.org/packages/e8/92/acf64b92010c66b33c077dee3862c733798a2c90e7d14b25c01d771e2a0d/debugpy-1.8.15-cp310-cp310-win32.whl", hash = "sha256:8181cce4d344010f6bfe94a531c351a46a96b0f7987750932b2908e7a1e14a55", size = 5229194, upload-time = "2025-07-15T16:43:33.997Z" },
|
332
|
+
{ url = "https://files.pythonhosted.org/packages/3f/f5/c58c015c9ff78de35901bea3ab4dbf7946d7a4aa867ee73875df06ba6468/debugpy-1.8.15-cp310-cp310-win_amd64.whl", hash = "sha256:af2dcae4e4cd6e8b35f982ccab29fe65f7e8766e10720a717bc80c464584ee21", size = 5260900, upload-time = "2025-07-15T16:43:35.413Z" },
|
333
|
+
{ url = "https://files.pythonhosted.org/packages/d2/b3/1c44a2ed311199ab11c2299c9474a6c7cd80d19278defd333aeb7c287995/debugpy-1.8.15-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:babc4fb1962dd6a37e94d611280e3d0d11a1f5e6c72ac9b3d87a08212c4b6dd3", size = 2183442, upload-time = "2025-07-15T16:43:36.733Z" },
|
334
|
+
{ url = "https://files.pythonhosted.org/packages/f6/69/e2dcb721491e1c294d348681227c9b44fb95218f379aa88e12a19d85528d/debugpy-1.8.15-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f778e68f2986a58479d0ac4f643e0b8c82fdd97c2e200d4d61e7c2d13838eb53", size = 3134215, upload-time = "2025-07-15T16:43:38.116Z" },
|
335
|
+
{ url = "https://files.pythonhosted.org/packages/17/76/4ce63b95d8294dcf2fd1820860b300a420d077df4e93afcaa25a984c2ca7/debugpy-1.8.15-cp311-cp311-win32.whl", hash = "sha256:f9d1b5abd75cd965e2deabb1a06b0e93a1546f31f9f621d2705e78104377c702", size = 5154037, upload-time = "2025-07-15T16:43:39.471Z" },
|
336
|
+
{ url = "https://files.pythonhosted.org/packages/c2/a7/e5a7c784465eb9c976d84408873d597dc7ce74a0fc69ed009548a1a94813/debugpy-1.8.15-cp311-cp311-win_amd64.whl", hash = "sha256:62954fb904bec463e2b5a415777f6d1926c97febb08ef1694da0e5d1463c5c3b", size = 5178133, upload-time = "2025-07-15T16:43:40.969Z" },
|
337
|
+
{ url = "https://files.pythonhosted.org/packages/ab/4a/4508d256e52897f5cdfee6a6d7580974811e911c6d01321df3264508a5ac/debugpy-1.8.15-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:3dcc7225cb317469721ab5136cda9ff9c8b6e6fb43e87c9e15d5b108b99d01ba", size = 2511197, upload-time = "2025-07-15T16:43:42.343Z" },
|
338
|
+
{ url = "https://files.pythonhosted.org/packages/99/8d/7f6ef1097e7fecf26b4ef72338d08e41644a41b7ee958a19f494ffcffc29/debugpy-1.8.15-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:047a493ca93c85ccede1dbbaf4e66816794bdc214213dde41a9a61e42d27f8fc", size = 4229517, upload-time = "2025-07-15T16:43:44.14Z" },
|
339
|
+
{ url = "https://files.pythonhosted.org/packages/3f/e8/e8c6a9aa33a9c9c6dacbf31747384f6ed2adde4de2e9693c766bdf323aa3/debugpy-1.8.15-cp312-cp312-win32.whl", hash = "sha256:b08e9b0bc260cf324c890626961dad4ffd973f7568fbf57feb3c3a65ab6b6327", size = 5276132, upload-time = "2025-07-15T16:43:45.529Z" },
|
340
|
+
{ url = "https://files.pythonhosted.org/packages/e9/ad/231050c6177b3476b85fcea01e565dac83607b5233d003ff067e2ee44d8f/debugpy-1.8.15-cp312-cp312-win_amd64.whl", hash = "sha256:e2a4fe357c92334272eb2845fcfcdbec3ef9f22c16cf613c388ac0887aed15fa", size = 5317645, upload-time = "2025-07-15T16:43:46.968Z" },
|
341
|
+
{ url = "https://files.pythonhosted.org/packages/28/70/2928aad2310726d5920b18ed9f54b9f06df5aa4c10cf9b45fa18ff0ab7e8/debugpy-1.8.15-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:f5e01291ad7d6649aed5773256c5bba7a1a556196300232de1474c3c372592bf", size = 2495538, upload-time = "2025-07-15T16:43:48.927Z" },
|
342
|
+
{ url = "https://files.pythonhosted.org/packages/9e/c6/9b8ffb4ca91fac8b2877eef63c9cc0e87dd2570b1120054c272815ec4cd0/debugpy-1.8.15-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94dc0f0d00e528d915e0ce1c78e771475b2335b376c49afcc7382ee0b146bab6", size = 4221874, upload-time = "2025-07-15T16:43:50.282Z" },
|
343
|
+
{ url = "https://files.pythonhosted.org/packages/55/8a/9b8d59674b4bf489318c7c46a1aab58e606e583651438084b7e029bf3c43/debugpy-1.8.15-cp313-cp313-win32.whl", hash = "sha256:fcf0748d4f6e25f89dc5e013d1129ca6f26ad4da405e0723a4f704583896a709", size = 5275949, upload-time = "2025-07-15T16:43:52.079Z" },
|
344
|
+
{ url = "https://files.pythonhosted.org/packages/72/83/9e58e6fdfa8710a5e6ec06c2401241b9ad48b71c0a7eb99570a1f1edb1d3/debugpy-1.8.15-cp313-cp313-win_amd64.whl", hash = "sha256:73c943776cb83e36baf95e8f7f8da765896fd94b05991e7bc162456d25500683", size = 5317720, upload-time = "2025-07-15T16:43:53.703Z" },
|
345
|
+
{ url = "https://files.pythonhosted.org/packages/07/d5/98748d9860e767a1248b5e31ffa7ce8cb7006e97bf8abbf3d891d0a8ba4e/debugpy-1.8.15-py2.py3-none-any.whl", hash = "sha256:bce2e6c5ff4f2e00b98d45e7e01a49c7b489ff6df5f12d881c67d2f1ac635f3d", size = 5282697, upload-time = "2025-07-15T16:44:07.996Z" },
|
337
346
|
]
|
338
347
|
|
339
348
|
[[package]]
|
@@ -350,7 +359,7 @@ name = "exceptiongroup"
|
|
350
359
|
version = "1.3.0"
|
351
360
|
source = { registry = "https://pypi.org/simple" }
|
352
361
|
dependencies = [
|
353
|
-
{ name = "typing-extensions", marker = "python_full_version < '3.
|
362
|
+
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
354
363
|
]
|
355
364
|
sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
|
356
365
|
wheels = [
|
@@ -394,11 +403,9 @@ dev = [
|
|
394
403
|
|
395
404
|
[package.metadata]
|
396
405
|
requires-dist = [
|
397
|
-
{ name = "inconnu", extras = ["en", "de", "it", "es", "fr"], marker = "extra == 'all'" },
|
398
406
|
{ name = "phonenumbers", specifier = ">=9.0.8" },
|
399
407
|
{ name = "spacy", specifier = ">=3.8.7" },
|
400
408
|
]
|
401
|
-
provides-extras = ["en", "de", "it", "es", "fr", "all"]
|
402
409
|
|
403
410
|
[package.metadata.requires-dev]
|
404
411
|
dev = [
|
@@ -419,14 +426,14 @@ wheels = [
|
|
419
426
|
|
420
427
|
[[package]]
|
421
428
|
name = "ipykernel"
|
422
|
-
version = "6.
|
429
|
+
version = "6.30.0"
|
423
430
|
source = { registry = "https://pypi.org/simple" }
|
424
431
|
dependencies = [
|
425
432
|
{ name = "appnope", marker = "sys_platform == 'darwin'" },
|
426
433
|
{ name = "comm" },
|
427
434
|
{ name = "debugpy" },
|
428
435
|
{ name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
|
429
|
-
{ name = "ipython", version = "9.
|
436
|
+
{ name = "ipython", version = "9.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
|
430
437
|
{ name = "jupyter-client" },
|
431
438
|
{ name = "jupyter-core" },
|
432
439
|
{ name = "matplotlib-inline" },
|
@@ -437,9 +444,9 @@ dependencies = [
|
|
437
444
|
{ name = "tornado" },
|
438
445
|
{ name = "traitlets" },
|
439
446
|
]
|
440
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
447
|
+
sdist = { url = "https://files.pythonhosted.org/packages/38/27/9e6e30ed92f2ac53d29f70b09da8b2dc456e256148e289678fa0e825f46a/ipykernel-6.30.0.tar.gz", hash = "sha256:b7b808ddb2d261aae2df3a26ff3ff810046e6de3dfbc6f7de8c98ea0a6cb632c", size = 165125, upload-time = "2025-07-21T10:36:09.259Z" }
|
441
448
|
wheels = [
|
442
|
-
{ url = "https://files.pythonhosted.org/packages/
|
449
|
+
{ url = "https://files.pythonhosted.org/packages/1f/3d/00813c3d9b46e3dcd88bd4530e0a3c63c0509e5d8c9eff34723ea243ab04/ipykernel-6.30.0-py3-none-any.whl", hash = "sha256:fd2936e55c4a1c2ee8b1e5fa6a372b8eecc0ab1338750dee76f48fa5cca1301e", size = 117264, upload-time = "2025-07-21T10:36:06.854Z" },
|
443
450
|
]
|
444
451
|
|
445
452
|
[[package]]
|
@@ -469,7 +476,7 @@ wheels = [
|
|
469
476
|
|
470
477
|
[[package]]
|
471
478
|
name = "ipython"
|
472
|
-
version = "9.
|
479
|
+
version = "9.4.0"
|
473
480
|
source = { registry = "https://pypi.org/simple" }
|
474
481
|
resolution-markers = [
|
475
482
|
"python_full_version >= '3.11'",
|
@@ -487,9 +494,9 @@ dependencies = [
|
|
487
494
|
{ name = "traitlets", marker = "python_full_version >= '3.11'" },
|
488
495
|
{ name = "typing-extensions", marker = "python_full_version == '3.11.*'" },
|
489
496
|
]
|
490
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
497
|
+
sdist = { url = "https://files.pythonhosted.org/packages/54/80/406f9e3bde1c1fd9bf5a0be9d090f8ae623e401b7670d8f6fdf2ab679891/ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270", size = 4385338, upload-time = "2025-07-01T11:11:30.606Z" }
|
491
498
|
wheels = [
|
492
|
-
{ url = "https://files.pythonhosted.org/packages/
|
499
|
+
{ url = "https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066", size = 611021, upload-time = "2025-07-01T11:11:27.85Z" },
|
493
500
|
]
|
494
501
|
|
495
502
|
[[package]]
|
@@ -931,11 +938,11 @@ wheels = [
|
|
931
938
|
|
932
939
|
[[package]]
|
933
940
|
name = "phonenumbers"
|
934
|
-
version = "9.0.
|
941
|
+
version = "9.0.10"
|
935
942
|
source = { registry = "https://pypi.org/simple" }
|
936
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
943
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d0/b3/0092ef7813f663a06cc0474adfaee5e9c327a2fde416a7926d958fd6cd8a/phonenumbers-9.0.10.tar.gz", hash = "sha256:c2d15a6a9d0534b14a7764f51246ada99563e263f65b80b0251d1a760ac4a1ba", size = 2297752, upload-time = "2025-07-18T08:47:39.477Z" }
|
937
944
|
wheels = [
|
938
|
-
{ url = "https://files.pythonhosted.org/packages/
|
945
|
+
{ url = "https://files.pythonhosted.org/packages/93/44/4a200f2e06f6ece2de33ff09978cdccc03e2df8007fadcc706f846167dec/phonenumbers-9.0.10-py2.py3-none-any.whl", hash = "sha256:13b12d269be1f2b363c9bc2868656a7e2e8b50f1a1cef629c75005da6c374c6b", size = 2583494, upload-time = "2025-07-18T08:47:35.808Z" },
|
939
946
|
]
|
940
947
|
|
941
948
|
[[package]]
|
@@ -1181,14 +1188,15 @@ wheels = [
|
|
1181
1188
|
|
1182
1189
|
[[package]]
|
1183
1190
|
name = "pytest-asyncio"
|
1184
|
-
version = "1.
|
1191
|
+
version = "1.1.0"
|
1185
1192
|
source = { registry = "https://pypi.org/simple" }
|
1186
1193
|
dependencies = [
|
1194
|
+
{ name = "backports-asyncio-runner", marker = "python_full_version < '3.11'" },
|
1187
1195
|
{ name = "pytest" },
|
1188
1196
|
]
|
1189
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
1197
|
+
sdist = { url = "https://files.pythonhosted.org/packages/4e/51/f8794af39eeb870e87a8c8068642fc07bce0c854d6865d7dd0f2a9d338c2/pytest_asyncio-1.1.0.tar.gz", hash = "sha256:796aa822981e01b68c12e4827b8697108f7205020f24b5793b3c41555dab68ea", size = 46652, upload-time = "2025-07-16T04:29:26.393Z" }
|
1190
1198
|
wheels = [
|
1191
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1199
|
+
{ url = "https://files.pythonhosted.org/packages/c7/9d/bf86eddabf8c6c9cb1ea9a869d6873b46f105a5d292d3a6f7071f5b07935/pytest_asyncio-1.1.0-py3-none-any.whl", hash = "sha256:5fe2d69607b0bd75c656d1211f969cadba035030156745ee09e7d71740e58ecf", size = 15157, upload-time = "2025-07-16T04:29:24.929Z" },
|
1192
1200
|
]
|
1193
1201
|
|
1194
1202
|
[[package]]
|
@@ -1205,21 +1213,24 @@ wheels = [
|
|
1205
1213
|
|
1206
1214
|
[[package]]
|
1207
1215
|
name = "pywin32"
|
1208
|
-
version = "
|
1216
|
+
version = "311"
|
1209
1217
|
source = { registry = "https://pypi.org/simple" }
|
1210
1218
|
wheels = [
|
1211
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1212
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1213
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1214
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1215
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1216
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1217
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1218
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1219
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1220
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1221
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1222
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1219
|
+
{ url = "https://files.pythonhosted.org/packages/7b/40/44efbb0dfbd33aca6a6483191dae0716070ed99e2ecb0c53683f400a0b4f/pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3", size = 8760432, upload-time = "2025-07-14T20:13:05.9Z" },
|
1220
|
+
{ url = "https://files.pythonhosted.org/packages/5e/bf/360243b1e953bd254a82f12653974be395ba880e7ec23e3731d9f73921cc/pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b", size = 9590103, upload-time = "2025-07-14T20:13:07.698Z" },
|
1221
|
+
{ url = "https://files.pythonhosted.org/packages/57/38/d290720e6f138086fb3d5ffe0b6caa019a791dd57866940c82e4eeaf2012/pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b", size = 8778557, upload-time = "2025-07-14T20:13:11.11Z" },
|
1222
|
+
{ url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" },
|
1223
|
+
{ url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" },
|
1224
|
+
{ url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" },
|
1225
|
+
{ url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" },
|
1226
|
+
{ url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" },
|
1227
|
+
{ url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" },
|
1228
|
+
{ url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" },
|
1229
|
+
{ url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" },
|
1230
|
+
{ url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" },
|
1231
|
+
{ url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" },
|
1232
|
+
{ url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" },
|
1233
|
+
{ url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" },
|
1223
1234
|
]
|
1224
1235
|
|
1225
1236
|
[[package]]
|
@@ -1313,27 +1324,27 @@ wheels = [
|
|
1313
1324
|
|
1314
1325
|
[[package]]
|
1315
1326
|
name = "ruff"
|
1316
|
-
version = "0.12.
|
1317
|
-
source = { registry = "https://pypi.org/simple" }
|
1318
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
1319
|
-
wheels = [
|
1320
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1321
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1322
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1323
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1324
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1325
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1326
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1327
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1328
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1329
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1330
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1331
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1332
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1333
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1334
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1335
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1336
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1327
|
+
version = "0.12.4"
|
1328
|
+
source = { registry = "https://pypi.org/simple" }
|
1329
|
+
sdist = { url = "https://files.pythonhosted.org/packages/9b/ce/8d7dbedede481245b489b769d27e2934730791a9a82765cb94566c6e6abd/ruff-0.12.4.tar.gz", hash = "sha256:13efa16df6c6eeb7d0f091abae50f58e9522f3843edb40d56ad52a5a4a4b6873", size = 5131435, upload-time = "2025-07-17T17:27:19.138Z" }
|
1330
|
+
wheels = [
|
1331
|
+
{ url = "https://files.pythonhosted.org/packages/ae/9f/517bc5f61bad205b7f36684ffa5415c013862dee02f55f38a217bdbe7aa4/ruff-0.12.4-py3-none-linux_armv6l.whl", hash = "sha256:cb0d261dac457ab939aeb247e804125a5d521b21adf27e721895b0d3f83a0d0a", size = 10188824, upload-time = "2025-07-17T17:26:31.412Z" },
|
1332
|
+
{ url = "https://files.pythonhosted.org/packages/28/83/691baae5a11fbbde91df01c565c650fd17b0eabed259e8b7563de17c6529/ruff-0.12.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:55c0f4ca9769408d9b9bac530c30d3e66490bd2beb2d3dae3e4128a1f05c7442", size = 10884521, upload-time = "2025-07-17T17:26:35.084Z" },
|
1333
|
+
{ url = "https://files.pythonhosted.org/packages/d6/8d/756d780ff4076e6dd035d058fa220345f8c458391f7edfb1c10731eedc75/ruff-0.12.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a8224cc3722c9ad9044da7f89c4c1ec452aef2cfe3904365025dd2f51daeae0e", size = 10277653, upload-time = "2025-07-17T17:26:37.897Z" },
|
1334
|
+
{ url = "https://files.pythonhosted.org/packages/8d/97/8eeee0f48ece153206dce730fc9e0e0ca54fd7f261bb3d99c0a4343a1892/ruff-0.12.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9949d01d64fa3672449a51ddb5d7548b33e130240ad418884ee6efa7a229586", size = 10485993, upload-time = "2025-07-17T17:26:40.68Z" },
|
1335
|
+
{ url = "https://files.pythonhosted.org/packages/49/b8/22a43d23a1f68df9b88f952616c8508ea6ce4ed4f15353b8168c48b2d7e7/ruff-0.12.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:be0593c69df9ad1465e8a2d10e3defd111fdb62dcd5be23ae2c06da77e8fcffb", size = 10022824, upload-time = "2025-07-17T17:26:43.564Z" },
|
1336
|
+
{ url = "https://files.pythonhosted.org/packages/cd/70/37c234c220366993e8cffcbd6cadbf332bfc848cbd6f45b02bade17e0149/ruff-0.12.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7dea966bcb55d4ecc4cc3270bccb6f87a337326c9dcd3c07d5b97000dbff41c", size = 11524414, upload-time = "2025-07-17T17:26:46.219Z" },
|
1337
|
+
{ url = "https://files.pythonhosted.org/packages/14/77/c30f9964f481b5e0e29dd6a1fae1f769ac3fd468eb76fdd5661936edd262/ruff-0.12.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:afcfa3ab5ab5dd0e1c39bf286d829e042a15e966b3726eea79528e2e24d8371a", size = 12419216, upload-time = "2025-07-17T17:26:48.883Z" },
|
1338
|
+
{ url = "https://files.pythonhosted.org/packages/6e/79/af7fe0a4202dce4ef62c5e33fecbed07f0178f5b4dd9c0d2fcff5ab4a47c/ruff-0.12.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c057ce464b1413c926cdb203a0f858cd52f3e73dcb3270a3318d1630f6395bb3", size = 11976756, upload-time = "2025-07-17T17:26:51.754Z" },
|
1339
|
+
{ url = "https://files.pythonhosted.org/packages/09/d1/33fb1fc00e20a939c305dbe2f80df7c28ba9193f7a85470b982815a2dc6a/ruff-0.12.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e64b90d1122dc2713330350626b10d60818930819623abbb56535c6466cce045", size = 11020019, upload-time = "2025-07-17T17:26:54.265Z" },
|
1340
|
+
{ url = "https://files.pythonhosted.org/packages/64/f4/e3cd7f7bda646526f09693e2e02bd83d85fff8a8222c52cf9681c0d30843/ruff-0.12.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2abc48f3d9667fdc74022380b5c745873499ff827393a636f7a59da1515e7c57", size = 11277890, upload-time = "2025-07-17T17:26:56.914Z" },
|
1341
|
+
{ url = "https://files.pythonhosted.org/packages/5e/d0/69a85fb8b94501ff1a4f95b7591505e8983f38823da6941eb5b6badb1e3a/ruff-0.12.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2b2449dc0c138d877d629bea151bee8c0ae3b8e9c43f5fcaafcd0c0d0726b184", size = 10348539, upload-time = "2025-07-17T17:26:59.381Z" },
|
1342
|
+
{ url = "https://files.pythonhosted.org/packages/16/a0/91372d1cb1678f7d42d4893b88c252b01ff1dffcad09ae0c51aa2542275f/ruff-0.12.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:56e45bb11f625db55f9b70477062e6a1a04d53628eda7784dce6e0f55fd549eb", size = 10009579, upload-time = "2025-07-17T17:27:02.462Z" },
|
1343
|
+
{ url = "https://files.pythonhosted.org/packages/23/1b/c4a833e3114d2cc0f677e58f1df6c3b20f62328dbfa710b87a1636a5e8eb/ruff-0.12.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:478fccdb82ca148a98a9ff43658944f7ab5ec41c3c49d77cd99d44da019371a1", size = 10942982, upload-time = "2025-07-17T17:27:05.343Z" },
|
1344
|
+
{ url = "https://files.pythonhosted.org/packages/ff/ce/ce85e445cf0a5dd8842f2f0c6f0018eedb164a92bdf3eda51984ffd4d989/ruff-0.12.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0fc426bec2e4e5f4c4f182b9d2ce6a75c85ba9bcdbe5c6f2a74fcb8df437df4b", size = 11343331, upload-time = "2025-07-17T17:27:08.652Z" },
|
1345
|
+
{ url = "https://files.pythonhosted.org/packages/35/cf/441b7fc58368455233cfb5b77206c849b6dfb48b23de532adcc2e50ccc06/ruff-0.12.4-py3-none-win32.whl", hash = "sha256:4de27977827893cdfb1211d42d84bc180fceb7b72471104671c59be37041cf93", size = 10267904, upload-time = "2025-07-17T17:27:11.814Z" },
|
1346
|
+
{ url = "https://files.pythonhosted.org/packages/ce/7e/20af4a0df5e1299e7368d5ea4350412226afb03d95507faae94c80f00afd/ruff-0.12.4-py3-none-win_amd64.whl", hash = "sha256:fe0b9e9eb23736b453143d72d2ceca5db323963330d5b7859d60d101147d461a", size = 11209038, upload-time = "2025-07-17T17:27:14.417Z" },
|
1347
|
+
{ url = "https://files.pythonhosted.org/packages/11/02/8857d0dfb8f44ef299a5dfd898f673edefb71e3b533b3b9d2db4c832dd13/ruff-0.12.4-py3-none-win_arm64.whl", hash = "sha256:0618ec4442a83ab545e5b71202a5c0ed7791e8471435b94e655b570a5031a98e", size = 10469336, upload-time = "2025-07-17T17:27:16.913Z" },
|
1337
1348
|
]
|
1338
1349
|
|
1339
1350
|
[[package]]
|
@@ -1365,14 +1376,14 @@ wheels = [
|
|
1365
1376
|
|
1366
1377
|
[[package]]
|
1367
1378
|
name = "smart-open"
|
1368
|
-
version = "7.
|
1379
|
+
version = "7.3.0.post1"
|
1369
1380
|
source = { registry = "https://pypi.org/simple" }
|
1370
1381
|
dependencies = [
|
1371
1382
|
{ name = "wrapt" },
|
1372
1383
|
]
|
1373
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
1384
|
+
sdist = { url = "https://files.pythonhosted.org/packages/18/2b/5e7234c68ed5bc872ad6ae77b8a421c2ed70dcb1190b44dc1abdeed5e347/smart_open-7.3.0.post1.tar.gz", hash = "sha256:ce6a3d9bc1afbf6234ad13c010b77f8cd36d24636811e3c52c3b5160f5214d1e", size = 51557, upload-time = "2025-07-03T10:06:31.271Z" }
|
1374
1385
|
wheels = [
|
1375
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1386
|
+
{ url = "https://files.pythonhosted.org/packages/08/5b/a2a3d4514c64818925f4e886d39981f1926eeb5288a4549c6b3c17ed66bb/smart_open-7.3.0.post1-py3-none-any.whl", hash = "sha256:c73661a2c24bf045c1e04e08fffc585b59af023fe783d57896f590489db66fb4", size = 61946, upload-time = "2025-07-03T10:06:29.599Z" },
|
1376
1387
|
]
|
1377
1388
|
|
1378
1389
|
[[package]]
|
@@ -1651,11 +1662,11 @@ wheels = [
|
|
1651
1662
|
|
1652
1663
|
[[package]]
|
1653
1664
|
name = "typing-extensions"
|
1654
|
-
version = "4.14.
|
1665
|
+
version = "4.14.1"
|
1655
1666
|
source = { registry = "https://pypi.org/simple" }
|
1656
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
1667
|
+
sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" }
|
1657
1668
|
wheels = [
|
1658
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1669
|
+
{ url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" },
|
1659
1670
|
]
|
1660
1671
|
|
1661
1672
|
[[package]]
|
inconnu-0.1.0/Makefile
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
install:
|
2
|
-
uv sync --group dev
|
3
|
-
|
4
|
-
activate:
|
5
|
-
uv venv
|
6
|
-
|
7
|
-
install-pip:
|
8
|
-
uv pip install pip --upgrade
|
9
|
-
|
10
|
-
model-de: install-pip
|
11
|
-
uv run python -m spacy download de_core_news_sm
|
12
|
-
|
13
|
-
model-it: install-pip
|
14
|
-
uv run python -m spacy download it_core_news_sm
|
15
|
-
|
16
|
-
model-es: install-pip
|
17
|
-
uv run python -m spacy download es_core_news_sm
|
18
|
-
|
19
|
-
model-fr: install-pip
|
20
|
-
uv run python -m spacy download fr_core_news_sm
|
21
|
-
|
22
|
-
update-deps:
|
23
|
-
uv update
|
24
|
-
|
25
|
-
fix:
|
26
|
-
uv run ruff check --fix .
|
27
|
-
|
28
|
-
format:
|
29
|
-
uv run ruff format .
|
30
|
-
|
31
|
-
lint:
|
32
|
-
uv run ruff check .
|
33
|
-
|
34
|
-
clean: fix format lint
|
35
|
-
rm -fr .pytest_cache */__pycache__ */*/__pycache__
|
36
|
-
uv run ruff clean
|
37
|
-
|
38
|
-
test:
|
39
|
-
uv run pytest -vv
|
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
|