swiftshadow 2.0.0__tar.gz → 2.0.1__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/PKG-INFO +1 -1
  2. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/pyproject.toml +1 -1
  3. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/swiftshadow/validator.py +47 -1
  4. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/.github/CODEOWNERS +0 -0
  5. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/.github/workflows/pyfix.yml +0 -0
  6. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/.github/workflows/python-publish-manual.yml +0 -0
  7. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/.github/workflows/python-publish.yml +0 -0
  8. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/.gitignore +0 -0
  9. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/.python-version +0 -0
  10. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/LICENSE +0 -0
  11. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/README.md +0 -0
  12. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/404.html +0 -0
  13. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/API Reference/Classes/proxyInterface/index.html +0 -0
  14. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/API Reference/Classes/quickProxy/index.html +0 -0
  15. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/API Reference/Models/cache-data/index.html +0 -0
  16. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/API Reference/Models/provider/index.html +0 -0
  17. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/API Reference/Models/proxy/index.html +0 -0
  18. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/Getting Started/Using-Proxy-Class/index.html +0 -0
  19. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/Getting Started/Using-QuickProxy/index.html +0 -0
  20. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/Getting Started/examples/index.html +0 -0
  21. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/Use Swiftshadow with/AWS-Lambda/index.html +0 -0
  22. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/Use Swiftshadow with/https/index.html +0 -0
  23. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/Use Swiftshadow with/requests/index.html +0 -0
  24. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/_mkdocstrings.css +0 -0
  25. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/images/favicon.png +0 -0
  26. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/bundle.60a45f97.min.js +0 -0
  27. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/bundle.60a45f97.min.js.map +0 -0
  28. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.ar.min.js +0 -0
  29. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.da.min.js +0 -0
  30. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.de.min.js +0 -0
  31. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.du.min.js +0 -0
  32. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.el.min.js +0 -0
  33. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.es.min.js +0 -0
  34. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.fi.min.js +0 -0
  35. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.fr.min.js +0 -0
  36. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.he.min.js +0 -0
  37. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.hi.min.js +0 -0
  38. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.hu.min.js +0 -0
  39. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.hy.min.js +0 -0
  40. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.it.min.js +0 -0
  41. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.ja.min.js +0 -0
  42. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.jp.min.js +0 -0
  43. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.kn.min.js +0 -0
  44. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.ko.min.js +0 -0
  45. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.multi.min.js +0 -0
  46. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.nl.min.js +0 -0
  47. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.no.min.js +0 -0
  48. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.pt.min.js +0 -0
  49. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.ro.min.js +0 -0
  50. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.ru.min.js +0 -0
  51. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.sa.min.js +0 -0
  52. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +0 -0
  53. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.sv.min.js +0 -0
  54. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.ta.min.js +0 -0
  55. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.te.min.js +0 -0
  56. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.th.min.js +0 -0
  57. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.tr.min.js +0 -0
  58. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.vi.min.js +0 -0
  59. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/min/lunr.zh.min.js +0 -0
  60. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/tinyseg.js +0 -0
  61. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/lunr/wordcut.js +0 -0
  62. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/workers/search.f8cc74c7.min.js +0 -0
  63. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/javascripts/workers/search.f8cc74c7.min.js.map +0 -0
  64. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/logo.png +0 -0
  65. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/stylesheets/main.a40c8224.min.css +0 -0
  66. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/stylesheets/main.a40c8224.min.css.map +0 -0
  67. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/stylesheets/palette.06af60db.min.css +0 -0
  68. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/assets/stylesheets/palette.06af60db.min.css.map +0 -0
  69. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/index.html +0 -0
  70. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/objects.inv +0 -0
  71. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/providers/index.html +0 -0
  72. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/search/search_index.json +0 -0
  73. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/sitemap.xml +0 -0
  74. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs/sitemap.xml.gz +0 -0
  75. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/API Reference/Classes/proxyInterface.md +0 -0
  76. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/API Reference/Classes/quickProxy.md +0 -0
  77. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/API Reference/Models/cache-data.md +0 -0
  78. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/API Reference/Models/provider.md +0 -0
  79. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/API Reference/Models/proxy.md +0 -0
  80. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/Getting Started/Using-Proxy-Class.md +0 -0
  81. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/Getting Started/Using-QuickProxy.md +0 -0
  82. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/Getting Started/examples.md +0 -0
  83. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/Use Swiftshadow with/AWS-Lambda.md +0 -0
  84. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/Use Swiftshadow with/https.md +0 -0
  85. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/Use Swiftshadow with/requests.md +0 -0
  86. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/assets/logo.png +0 -0
  87. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/index.md +0 -0
  88. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/docs-src/providers.md +0 -0
  89. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/mkdocs.yml +0 -0
  90. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/setup.py +0 -0
  91. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/swiftshadow/__init__.py +0 -0
  92. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/swiftshadow/cache.py +0 -0
  93. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/swiftshadow/classes.py +0 -0
  94. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/swiftshadow/exceptions.py +0 -0
  95. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/swiftshadow/helpers.py +0 -0
  96. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/swiftshadow/models.py +0 -0
  97. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/swiftshadow/providers.py +0 -0
  98. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/swiftshadow/types.py +0 -0
  99. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/tests/test_models.py +0 -0
  100. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/tests/test_proxy.py +0 -0
  101. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/tests/test_quickproxy.py +0 -0
  102. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/tox.ini +0 -0
  103. {swiftshadow-2.0.0 → swiftshadow-2.0.1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: swiftshadow
3
- Version: 2.0.0
3
+ Version: 2.0.1
4
4
  Summary: Free IP Proxy rotator for python
5
5
  Author-email: sachin-sankar <mail.sachinsankar@gmail.com>
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "swiftshadow"
3
- version = "2.0.0"
3
+ version = "2.0.1"
4
4
  description = "Free IP Proxy rotator for python"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -1,10 +1,47 @@
1
1
  import asyncio
2
+ import re
2
3
 
3
4
  import aiohttp
4
5
 
5
6
  from swiftshadow.models import Proxy
6
7
 
7
8
 
9
+ def find_ipv4_in_string(input_string: str) -> str | None:
10
+ """
11
+ Extract IPv4 Address from input and return the same.
12
+
13
+ Args:
14
+ input_string: Input string
15
+
16
+ Returns:
17
+ ipv4_address: If found
18
+ """
19
+ ipv4_pattern = r"\b((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\b"
20
+
21
+ match = re.search(ipv4_pattern, input_string)
22
+
23
+ if match:
24
+ return match.group(0)
25
+ else:
26
+ return None
27
+
28
+
29
+ async def get_host_ip(async_session: aiohttp.ClientSession) -> str | None:
30
+ """
31
+ Gets the hosts external IP for validation.
32
+
33
+ Args:
34
+ async_session: AioHTTP client session object
35
+
36
+ Returns:
37
+ text: Host IP
38
+ """
39
+ async with async_session.get("http://checkip.amazonaws.com") as response:
40
+ text = await response.text()
41
+ ip = find_ipv4_in_string(text)
42
+ return ip
43
+
44
+
8
45
  async def check_proxy(async_session: aiohttp.ClientSession, proxy: Proxy) -> str:
9
46
  """
10
47
  Check one proxy abject.
@@ -38,13 +75,22 @@ async def validate_proxies(proxies: list[Proxy]) -> list[Proxy]:
38
75
  working_proxies: list[Proxy] = []
39
76
  async with aiohttp.ClientSession() as async_session:
40
77
  tasks = []
78
+
79
+ host_task = asyncio.create_task(coro=get_host_ip(async_session))
80
+ tasks.append(host_task)
81
+
41
82
  for proxy in proxies:
42
83
  task = asyncio.create_task(coro=check_proxy(async_session, proxy))
43
84
  tasks.append(task)
85
+
44
86
  results = await asyncio.gather(*tasks, return_exceptions=True)
87
+ host_ip = results[0]
88
+ results = results[1:]
89
+
45
90
  for proxy, result in zip(proxies, results):
46
91
  if type(result) is not str:
47
92
  continue
48
- if result.count(".") == 3:
93
+ result_ip = find_ipv4_in_string(result)
94
+ if result_ip and result_ip != host_ip:
49
95
  working_proxies.append(proxy)
50
96
  return working_proxies
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