|
11 | 11 | from ..config import * |
12 | 12 | from ..exceptions import * |
13 | 13 | from ..__init__ import __version__ |
14 | | - |
15 | | - |
16 | | -def user_agent_extended(be_geo_id, caller): |
17 | | - # Generate extended portion of the User-Agent |
18 | | - user_agent_extended = be_geo_id |
19 | | - user_agent_extended = {} |
20 | | - |
21 | | - # Mimic pip system data collection per https://github.com/pypa/pip/blob/master/src/pip/_internal/network/session.py |
22 | | - user_agent_extended['implementation'] = { |
23 | | - "name": platform.python_implementation(), |
24 | | - } |
25 | | - |
26 | | - if user_agent_extended["implementation"]["name"] in ('CPython','Jython','IronPython'): |
27 | | - user_agent_extended["implementation"]["version"] = platform.python_version() |
28 | | - elif user_agent_extended["implementation"]["name"] == 'PyPy': |
29 | | - if sys.pypy_version_info.releaselevel == 'final': |
30 | | - pypy_version_info = sys.pypy_version_info[:3] |
31 | | - else: |
32 | | - pypy_version_info = sys.pypy_version_info |
33 | | - user_agent_extended["implementation"]["version"] = ".".join( |
34 | | - [str(x) for x in pypy_version_info] |
35 | | - ) |
36 | | - |
37 | | - if sys.platform.startswith("darwin") and platform.mac_ver()[0]: |
38 | | - user_agent_extended["distro"] = {"name": "macOS", "version": platform.mac_ver()[0]} |
39 | | - |
40 | | - if platform.system(): |
41 | | - user_agent_extended.setdefault("system", {})["name"] = platform.system() |
42 | | - |
43 | | - if platform.release(): |
44 | | - user_agent_extended.setdefault("system", {})["release"] = platform.release() |
45 | | - |
46 | | - if platform.machine(): |
47 | | - user_agent_extended["cpu"] = platform.machine() |
48 | | - |
49 | | - if be_geo_id: |
50 | | - user_agent_extended["be_geo_id"] = be_geo_id |
51 | | - |
52 | | - if caller: |
53 | | - user_agent_extended["caller"] = caller |
54 | | - |
55 | | - return urllib.parse.quote(json.dumps(user_agent_extended)) |
56 | | - |
| 14 | +from ..rest_session import user_agent_extended |
57 | 15 |
|
58 | 16 | # Main module interface |
59 | 17 | class AsyncRestSession: |
@@ -92,8 +50,7 @@ def __init__( |
92 | 50 | self._retry_4xx_error_wait_time = retry_4xx_error_wait_time |
93 | 51 | self._maximum_retries = maximum_retries |
94 | 52 | self._simulate = simulate |
95 | | - self._maximum_concurrent_sessions = maximum_concurrent_requests |
96 | | - self._current_sessions = 0 |
| 53 | + self._concurrent_requests_semaphore = asyncio.Semaphore(maximum_concurrent_requests) |
97 | 54 | self._be_geo_id = be_geo_id |
98 | 55 | self._caller = caller |
99 | 56 |
|
@@ -132,14 +89,8 @@ def __init__( |
132 | 89 | self._logger.info(f"Meraki dashboard API session initialized with these parameters: {self._parameters}") |
133 | 90 |
|
134 | 91 | async def request(self, metadata, method, url, **kwargs): |
135 | | - while self._current_sessions >= self._maximum_concurrent_sessions: |
136 | | - await asyncio.sleep(0.3) # wait for a free slot |
137 | | - |
138 | | - self._current_sessions = self._current_sessions + 1 |
139 | | - try: |
| 92 | + async with self._concurrent_requests_semaphore: |
140 | 93 | return await self._request(metadata, method, url, allow_redirects=False, **kwargs) |
141 | | - finally: |
142 | | - self._current_sessions = self._current_sessions - 1 |
143 | 94 |
|
144 | 95 | async def _request(self, metadata, method, url, **kwargs): |
145 | 96 | # Metadata on endpoint |
|
0 commit comments