iziproxy 0.4.0__tar.gz → 0.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. iziproxy-0.4.2/PKG-INFO +398 -0
  2. iziproxy-0.4.2/README.md +341 -0
  3. {iziproxy-0.4.0 → iziproxy-0.4.2}/pyproject.toml +1 -1
  4. iziproxy-0.4.2/src/iziproxy.egg-info/PKG-INFO +398 -0
  5. iziproxy-0.4.0/PKG-INFO +0 -204
  6. iziproxy-0.4.0/README.md +0 -147
  7. iziproxy-0.4.0/src/iziproxy.egg-info/PKG-INFO +0 -204
  8. {iziproxy-0.4.0 → iziproxy-0.4.2}/LICENSE +0 -0
  9. {iziproxy-0.4.0 → iziproxy-0.4.2}/setup.cfg +0 -0
  10. {iziproxy-0.4.0 → iziproxy-0.4.2}/setup.py +0 -0
  11. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy/__init__.py +0 -0
  12. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy/config_manager.py +0 -0
  13. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy/env_detector.py +0 -0
  14. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy/logger.py +0 -0
  15. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy/ntlm_auth.py +0 -0
  16. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy/proxy_detector.py +0 -0
  17. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy/proxy_manager.py +0 -0
  18. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy/secure_config.py +0 -0
  19. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy.egg-info/SOURCES.txt +0 -0
  20. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy.egg-info/dependency_links.txt +0 -0
  21. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy.egg-info/requires.txt +0 -0
  22. {iziproxy-0.4.0 → iziproxy-0.4.2}/src/iziproxy.egg-info/top_level.txt +0 -0
  23. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_config_manager.py +0 -0
  24. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_config_manager_extended.py +0 -0
  25. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_edge_cases.py +0 -0
  26. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_env_detector.py +0 -0
  27. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_integration.py +0 -0
  28. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_logger.py +0 -0
  29. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_ntlm_auth.py +0 -0
  30. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_proxy_detector.py +0 -0
  31. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_proxy_manager.py +0 -0
  32. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_public_api.py +0 -0
  33. {iziproxy-0.4.0 → iziproxy-0.4.2}/tests/test_secure_config.py +0 -0
@@ -0,0 +1,398 @@
1
+ Metadata-Version: 2.4
2
+ Name: iziproxy
3
+ Version: 0.4.2
4
+ Summary: Une bibliothèque Python pour la gestion simplifiée des proxys d'entreprise
5
+ Author: sanjuant
6
+ License: MIT License
7
+
8
+ Copyright (c) 2025 IziProxy Contributors
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Project-URL: Homepage, https://github.com/sanjuant/iziproxy
29
+ Project-URL: Bug Tracker, https://github.com/sanjuant/iziproxy/issues
30
+ Keywords: proxy,enterprise,authentication,ntlm,requests,configuration,development,pac
31
+ Classifier: Programming Language :: Python :: 3
32
+ Classifier: License :: OSI Approved :: MIT License
33
+ Classifier: Operating System :: OS Independent
34
+ Classifier: Development Status :: 4 - Beta
35
+ Classifier: Intended Audience :: Developers
36
+ Classifier: Topic :: Internet :: Proxy Servers
37
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
38
+ Requires-Python: >=3.7
39
+ Description-Content-Type: text/markdown
40
+ License-File: LICENSE
41
+ Requires-Dist: requests>=2.25.0
42
+ Requires-Dist: PyYAML>=6.0
43
+ Requires-Dist: keyring>=23.0.0
44
+ Requires-Dist: cryptography>=36.0.0
45
+ Requires-Dist: importlib_metadata>=4.0.0; python_version < "3.8"
46
+ Provides-Extra: ntlm
47
+ Requires-Dist: ntlm-auth>=1.5.0; extra == "ntlm"
48
+ Requires-Dist: pycryptodomex>=3.14.1; extra == "ntlm"
49
+ Provides-Extra: dev
50
+ Requires-Dist: pytest>=6.0.0; extra == "dev"
51
+ Requires-Dist: pytest-cov>=2.12.0; extra == "dev"
52
+ Requires-Dist: black>=22.0.0; extra == "dev"
53
+ Requires-Dist: flake8>=4.0.0; extra == "dev"
54
+ Requires-Dist: sphinx>=4.0.0; extra == "dev"
55
+ Requires-Dist: sphinx-rtd-theme>=1.0.0; extra == "dev"
56
+ Dynamic: license-file
57
+
58
+ # IziProxy
59
+
60
+ Une bibliothèque Python pour la gestion simplifiée des proxys d'entreprise.
61
+
62
+ [![PyPI version](https://img.shields.io/pypi/v/iziproxy.svg)](https://pypi.org/project/iziproxy/)
63
+ [![Python versions](https://img.shields.io/pypi/pyversions/iziproxy.svg)](https://pypi.org/project/iziproxy/)
64
+ [![License](https://img.shields.io/github/license/sanjuant/iziproxy.svg)](https://github.com/sanjuant/iziproxy/blob/main/LICENSE)
65
+
66
+ ## 🚀 Fonctionnalités
67
+
68
+ - 🔍 **Détection intelligente** - Reconnaissance automatique de l'environnement (local, dev, prod)
69
+ - 🌐 **Proxy système** - Détection automatique des configurations de proxy système et support des fichiers PAC
70
+ - 🔐 **Gestion sécurisée** - Stockage des identifiants via keyring, variables d'environnement et fichiers .env
71
+ - 🔄 **Support complet** - Compatible avec l'authentification basique et NTLM pour les proxys d'entreprise
72
+ - 🛠️ **API flexible** - Multiples façons d'intégrer le proxy dans vos applications Python
73
+ - 🔌 **Intégration transparente** - Patching dynamique du module requests pour les applications existantes
74
+
75
+ ## 📦 Installation
76
+
77
+ Installation standard :
78
+ ```bash
79
+ pip install iziproxy
80
+ ```
81
+
82
+ Avec support NTLM (recommandé pour les environnements Windows d'entreprise) :
83
+ ```bash
84
+ pip install iziproxy[ntlm]
85
+ ```
86
+
87
+ Avec outils de développement :
88
+ ```bash
89
+ pip install iziproxy[dev]
90
+ ```
91
+
92
+ ## 🚦 Utilisation rapide
93
+
94
+ ```python
95
+ from iziproxy import IziProxy
96
+
97
+ # Création avec détection automatique
98
+ proxy = IziProxy()
99
+
100
+ # Méthode 1: Obtenir une session requests préconfigurée
101
+ session = proxy.create_session()
102
+ response = session.get('https://example.com')
103
+
104
+ # Méthode 2: Utiliser comme dictionnaire de proxy standard
105
+ proxies = proxy.get_proxy_dict()
106
+ response = requests.get('https://example.com', proxies=proxies)
107
+
108
+ # Méthode 3: Configurer les variables d'environnement
109
+ proxy.set_environment_variables()
110
+ # Les bibliothèques qui respectent les variables d'environnement utiliseront le proxy
111
+ # N'oubliez pas de nettoyer après utilisation avec proxy.clear_environment_variables()
112
+
113
+ # Méthode 4: Patcher le module requests (monkey patching)
114
+ proxy.patch_requests()
115
+ # Désormais, toutes les requêtes requests utiliseront le proxy
116
+ import requests
117
+ response = requests.get('https://example.com')
118
+ # Pour restaurer le comportement d'origine: proxy.unpatch_requests()
119
+ ```
120
+
121
+ ## ⚙️ Configuration
122
+
123
+ IziProxy fonctionne sans configuration, mais vous pouvez personnaliser son comportement :
124
+
125
+ ### Configuration par code
126
+
127
+ ```python
128
+ from iziproxy import IziProxy
129
+
130
+ proxy = IziProxy(
131
+ proxy_url="http://proxy.example.com:8080", # URL spécifique du proxy
132
+ pac_url="http://pac.example.com/proxy.pac", # URL d'un fichier PAC
133
+ username="user", # Nom d'utilisateur
134
+ password="pass", # Mot de passe
135
+ domain="DOMAIN", # Domaine (pour NTLM)
136
+ environment="prod", # Forcer l'environnement
137
+ debug=True # Activer les logs détaillés
138
+ )
139
+ ```
140
+
141
+ ### Configuration par fichier YAML
142
+
143
+ Créez un fichier `iziproxy.yml` dans votre répertoire courant ou dans `~/.config/` :
144
+
145
+ ```yaml
146
+ environments:
147
+ local:
148
+ proxy_url: "http://proxy.example.com:8080"
149
+ requires_auth: true
150
+ auth_type: "ntlm" # Authentification NTLM en local (poste Windows)
151
+ dev:
152
+ proxy_url: "http://dev-proxy.example.com:8080"
153
+ requires_auth: true
154
+ auth_type: "basic" # Authentification basique
155
+ prod:
156
+ proxy_url: "http://prod-proxy.example.com:8080"
157
+ requires_auth: false # Souvent pas d'authentification en prod (réseau sécurisé)
158
+
159
+ environment_detection:
160
+ method: "auto" # Méthodes: auto, env_var, hostname, ip, ask
161
+ hostname_patterns: # Patterns pour la détection par hostname
162
+ dev: ["dev-", "-dev", "development"]
163
+ prod: ["prod-", "-prod", "production"]
164
+ hostname_regex: # Expressions régulières pour la détection par nom d'hôte
165
+ local: ["^laptop-\\w+$", "^pc-\\w+$", "^desktop-\\w+$"]
166
+ dev: ["^dev\\d*-", "^staging\\d*-", "^test\\d*-"]
167
+ prod: ["^prod\\d*-", "^production\\d*-"]
168
+ ip_ranges: # Plages IP pour la détection
169
+ dev: ["10.0.0.0/8"]
170
+ prod: ["192.168.0.0/16"]
171
+ env_var_name: "APP_ENV" # Variable d'environnement pour la détection
172
+
173
+ system_proxy:
174
+ detect_pac: true # Détecter les fichiers PAC
175
+ detect_env_vars: true # Détecter les variables d'environnement
176
+ ```
177
+
178
+ ### Configuration des identifiants
179
+
180
+ Pour la sécurité, les identifiants (nom d'utilisateur, mot de passe, domaine) ne doivent pas être stockés dans le fichier de configuration. Utilisez plutôt :
181
+
182
+ #### Variables d'environnement
183
+
184
+ IziProxy recherche les variables d'environnement suivantes :
185
+
186
+ ```bash
187
+ # Format recommandé
188
+ IZI_USERNAME=mon_utilisateur
189
+ IZI_PASSWORD=mon_mot_de_passe
190
+ IZI_DOMAIN=mon_domaine
191
+
192
+ # Format alternatif (rétrocompatibilité)
193
+ PROXY_USERNAME=mon_utilisateur
194
+ PROXY_PASSWORD=mon_mot_de_passe
195
+ PROXY_DOMAIN=mon_domaine
196
+ ```
197
+
198
+ #### Fichier .env
199
+
200
+ Vous pouvez également définir ces variables dans un fichier `.env` :
201
+
202
+ ```bash
203
+ # Identifiants pour l'authentification proxy
204
+ IZI_USERNAME=mon_utilisateur
205
+ IZI_PASSWORD=mon_mot_de_passe
206
+ IZI_DOMAIN=mon_domaine
207
+ ```
208
+
209
+ Le fichier `.env` peut être placé :
210
+ - Dans le répertoire courant (`./.env`)
211
+ - Dans le répertoire de configuration utilisateur (`~/.config/.env`)
212
+ - Dans le répertoire personnel de l'utilisateur (`~/.env`)
213
+
214
+ #### Stockage sécurisé avec keyring
215
+
216
+ Si un nom d'utilisateur est défini mais que le mot de passe est manquant, IziProxy tentera de récupérer le mot de passe depuis le trousseau de clés du système (via `keyring`).
217
+
218
+ Lorsque vous fournissez un mot de passe la première fois, il sera automatiquement enregistré dans le trousseau de clés pour les utilisations futures.
219
+
220
+ ## 🧠 Fonctionnalités avancées
221
+
222
+ ### Authentification NTLM
223
+
224
+ L'authentification NTLM est souvent utilisée dans les environnements Windows d'entreprise et nécessite une configuration spécifique :
225
+
226
+ ```python
227
+ # Installation avec le support NTLM
228
+ # pip install iziproxy[ntlm]
229
+
230
+ from iziproxy import IziProxy
231
+
232
+ # Configuration explicite pour NTLM
233
+ proxy = IziProxy(
234
+ proxy_url="http://proxy.example.com:8080",
235
+ username="utilisateur",
236
+ password="mot_de_passe",
237
+ domain="DOMAIN" # Domaine Windows requis pour NTLM
238
+ )
239
+
240
+ # Le type d'authentification est détecté automatiquement depuis la configuration
241
+ session = proxy.create_session()
242
+ ```
243
+
244
+ ### Détection d'environnement
245
+
246
+ IziProxy peut automatiquement détecter l'environnement d'exécution :
247
+
248
+ ```python
249
+ from iziproxy import IziProxy
250
+
251
+ proxy = IziProxy()
252
+ env = proxy.get_current_environment() # 'local', 'dev', 'prod'
253
+ print(f"Environnement détecté : {env}")
254
+
255
+ # Forcer un rafraîchissement de toutes les détections
256
+ proxy.refresh()
257
+ ```
258
+
259
+ ### Récupération des informations de proxy
260
+
261
+ ```python
262
+ from iziproxy import IziProxy
263
+
264
+ proxy = IziProxy()
265
+
266
+ # Obtenir l'hôte et le port du proxy
267
+ host = proxy.get_proxy_host()
268
+ port = proxy.get_proxy_port()
269
+ print(f"Proxy : {host}:{port}")
270
+
271
+ # Obtenir le dictionnaire complet
272
+ proxy_dict = proxy.get_proxy_dict()
273
+ print(f"Configuration complète : {proxy_dict}")
274
+ ```
275
+
276
+ ### Intégration avec des bibliothèques tierces
277
+
278
+ L'une des fonctionnalités les plus puissantes d'IziProxy est sa capacité à s'intégrer avec des bibliothèques tierces via le monkey patching :
279
+
280
+ ```python
281
+ from iziproxy import IziProxy
282
+
283
+ # Patch global du module requests
284
+ IziProxy().patch_requests()
285
+
286
+ # À partir de maintenant, toutes les bibliothèques utilisant requests bénéficieront
287
+ # automatiquement de la configuration proxy, sans modification du code source
288
+ import requests
289
+ import pandas as pd
290
+ import boto3
291
+ import any_library_using_requests
292
+
293
+ # Pour restaurer le comportement d'origine
294
+ IziProxy().unpatch_requests()
295
+ ```
296
+
297
+ ### Gestion du cache
298
+
299
+ IziProxy met en cache les détections pour optimiser les performances. Vous pouvez contrôler ce comportement :
300
+
301
+ ```python
302
+ from iziproxy import IziProxy
303
+
304
+ proxy = IziProxy()
305
+
306
+ # Obtenir une configuration spécifique pour une URL donnée (peut utiliser le cache)
307
+ config = proxy.get_proxy_config(url="https://api.example.com")
308
+
309
+ # Forcer un rafraîchissement du cache
310
+ fresh_config = proxy.get_proxy_config(url="https://api.example.com", force_refresh=True)
311
+ ```
312
+
313
+ ### Mode débogage
314
+
315
+ Pour diagnostiquer les problèmes, activez le mode débogage :
316
+
317
+ ```python
318
+ from iziproxy import IziProxy
319
+
320
+ # À l'initialisation
321
+ proxy = IziProxy(debug=True)
322
+
323
+ # Ou plus tard
324
+ proxy.set_debug(enabled=True) # Désactiver avec False
325
+ ```
326
+
327
+ ## 🛠️ Compatibilité
328
+
329
+ IziProxy fonctionne avec Python 3.7 et versions ultérieures, et est compatible avec :
330
+
331
+ - Windows, Linux et macOS
332
+ - Proxys standards HTTP/HTTPS
333
+ - Authentification Basic et NTLM
334
+ - Fichiers de configuration automatique de proxy (PAC)
335
+ - Proxys avec ou sans authentification
336
+
337
+ ## 📚 Exemples
338
+
339
+ ### Utilisation avec une API wrapper
340
+
341
+ ```python
342
+ from some_api_library import ApiClient
343
+ from iziproxy import IziProxy
344
+
345
+ # Créer une session configurée
346
+ session = IziProxy().create_session()
347
+
348
+ # Utiliser cette session avec l'API
349
+ client = ApiClient(session=session)
350
+ ```
351
+
352
+ ### Utilisation avec un fichier PAC
353
+
354
+ ```python
355
+ from iziproxy import IziProxy
356
+
357
+ # Configurer avec un fichier PAC explicite
358
+ proxy = IziProxy(pac_url="http://intranet.example.com/proxy.pac")
359
+
360
+ # Ou laisser IziProxy détecter automatiquement le fichier PAC système
361
+ proxy = IziProxy() # Détection automatique si disponible
362
+ ```
363
+
364
+ ## 🔄 Migration depuis CNTLM
365
+
366
+ Si vous utilisez actuellement CNTLM, IziProxy offre une alternative 100% Python :
367
+
368
+ 1. Installez IziProxy avec support NTLM: `pip install iziproxy[ntlm]`
369
+ 2. Sur Windows, IziProxy détecte automatiquement votre domaine et nom d'utilisateur Windows
370
+ 3. Pour les autres systèmes, configurez vos identifiants via les variables d'environnement
371
+ 4. Utilisez IziProxy directement dans votre code Python sans avoir à configurer un proxy local
372
+
373
+ La détection automatique sur Windows simplifie considérablement la transition depuis CNTLM, puisque vous n'avez généralement pas besoin de configuration supplémentaire pour l'authentification.
374
+
375
+ ## 🤝 Contribuer
376
+
377
+ Les contributions sont les bienvenues ! Consultez notre [guide de contribution](CONTRIBUTING.md) pour plus d'informations.
378
+
379
+ ## 📚 Documentation
380
+
381
+ Une documentation complète est disponible sur Read the Docs :
382
+
383
+ [![Documentation Status](https://readthedocs.org/projects/iziproxy/badge/?version=latest)](https://iziproxy.readthedocs.io/fr/latest/?badge=latest)
384
+
385
+ Visitez [iziproxy.readthedocs.io](https://iziproxy.readthedocs.io/) pour accéder à :
386
+ - Guide de démarrage rapide
387
+ - Exemples détaillés
388
+ - Documentation complète de l'API
389
+ - Guides de migration
390
+ - Tutoriels et cas d'usage
391
+
392
+ ## 📄 Licence
393
+
394
+ Ce projet est sous licence MIT - voir le fichier [LICENSE](LICENSE) pour plus de détails.
395
+
396
+ ---
397
+
398
+ Développé avec ❤️ pour simplifier la vie des développeurs dans les environnements d'entreprise.