diff --git a/README.md b/README.md index 802a7a0..122a27e 100644 --- a/README.md +++ b/README.md @@ -39,8 +39,6 @@ czds [-h] [-u USERNAME] [-p PASSWORD] [-z] [-c CONCURRENCY] [-d] [-k] [-r] [-s] ###### Zone Options | `-z`, `--zones` | Download zone files | | | `-c`, `--concurrency` | Number of concurrent downloads | `3` | -| `-d`, `--decompress` | Decompress zone files after download | | -| `-k`, `--keep` | Keep original gzip files after decompression | | ###### Report Options | `-r`, `--report` | Download the zone stats report | | diff --git a/czds/__init__.py b/czds/__init__.py index 2ec56ee..eb026dd 100644 --- a/czds/__init__.py +++ b/czds/__init__.py @@ -2,10 +2,7 @@ # ICANN API for the Centralized Zones Data Service - developed by acidvegas (https://git.acid.vegas/czds) # czds/__init__.py -from .client import CZDS - - -__version__ = '1.3.3' +__version__ = '1.3.4' __author__ = 'acidvegas' __email__ = 'acid.vegas@acid.vegas' __github__ = 'https://github.com/acidvegas/czds' \ No newline at end of file diff --git a/czds/__main__.py b/czds/__main__.py index ce1301f..33b653f 100644 --- a/czds/__main__.py +++ b/czds/__main__.py @@ -10,11 +10,6 @@ import os from .client import CZDS -from dotenv import load_dotenv - - -load_dotenv() - async def main(): '''Entry point for the command line interface''' diff --git a/czds/client.py b/czds/client.py index 6df97cd..56e9fee 100644 --- a/czds/client.py +++ b/czds/client.py @@ -44,8 +44,21 @@ class CZDS: self.username = username self.password = password - # Set the session with longer timeouts - self.session = aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=None, connect=60, sock_connect=60, sock_read=60)) + # Configure TCP keepalive + connector = aiohttp.TCPConnector( + keepalive_timeout=300, # Keep connections alive for 5 minutes + force_close=False, # Don't force close connections + enable_cleanup_closed=True, # Cleanup closed connections + ttl_dns_cache=300, # Cache DNS results for 5 minutes + ) + + # Set the session with longer timeouts and keepalive + self.session = aiohttp.ClientSession( + connector=connector, + timeout=aiohttp.ClientTimeout(total=None, connect=60, sock_connect=60, sock_read=None), + headers={'Connection': 'keep-alive'}, + raise_for_status=True + ) # Placeholder for the headers after authentication self.headers = None @@ -171,15 +184,22 @@ class CZDS: tld_name = url.split('/')[-1].split('.')[0] # Extract TLD from URL max_retries = 10 # Maximum number of retries for failed downloads retry_delay = 5 # Delay between retries in seconds - timeout = aiohttp.ClientTimeout(total=None, connect=60, sock_connect=60, sock_read=None) + # Headers for better connection stability + download_headers = { + **self.headers, + 'Connection': 'keep-alive', + 'Keep-Alive': 'timeout=600', # 10 minutes + 'Accept-Encoding': 'gzip' + } + # Start the attempt loop for attempt in range(max_retries): try: logging.info(f'Starting download of {tld_name} zone file{" (attempt " + str(attempt + 1) + ")" if attempt > 0 else ""}') # Send the request to the API - async with self.session.get(url, headers=self.headers, timeout=timeout) as response: + async with self.session.get(url, headers=download_headers) as response: # Check if the request was successful if response.status != 200: logging.error(f'Failed to download {tld_name}: {response.status} {await response.text()}') diff --git a/czds/utils.py b/czds/utils.py index c222671..379ad70 100644 --- a/czds/utils.py +++ b/czds/utils.py @@ -51,8 +51,6 @@ async def gzip_decompress(filepath: str, cleanup: bool = True): # Write the chunk to the output file await f_out.write(chunk) - - # Update the progress bar pbar.update(len(chunk)) # Get the decompressed size of the file diff --git a/setup.py b/setup.py index a7d1bbf..35b94b5 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ with open('README.md', 'r', encoding='utf-8') as fh: setup( name='czds-api', - version='1.3.3', + version='1.3.4', author='acidvegas', author_email='acid.vegas@acid.vegas', description='ICANN API for the Centralized Zones Data Service',