|
|
import time |
|
|
import asyncio |
|
|
|
|
|
from functools import wraps |
|
|
|
|
|
|
|
|
def execution_time(func): |
|
|
@wraps(func) |
|
|
def sync_wrapper(*args, **kwargs): |
|
|
start_time = time.time() |
|
|
result = func(*args, **kwargs) |
|
|
end_time = time.time() |
|
|
elapsed_time = end_time - start_time |
|
|
print(f"Execution time of {func.__name__}: {elapsed_time:.4f} seconds") |
|
|
return result |
|
|
|
|
|
@wraps(func) |
|
|
async def async_wrapper(*args, **kwargs): |
|
|
start_time = time.time() |
|
|
result = await func(*args, **kwargs) |
|
|
end_time = time.time() |
|
|
elapsed_time = end_time - start_time |
|
|
print(f"Execution time of {func.__name__}: {elapsed_time:.4f} seconds") |
|
|
return result |
|
|
|
|
|
if asyncio.iscoroutinefunction(func): |
|
|
return async_wrapper |
|
|
else: |
|
|
return sync_wrapper |
|
|
|
|
|
|
|
|
def escape_csv_field(field): |
|
|
""" |
|
|
Escapes fields to ensure proper CSV formatting. |
|
|
- Wraps the field in double quotes if it contains a comma, double quote, or newline. |
|
|
- Escapes double quotes inside the field by doubling them. |
|
|
""" |
|
|
field_str = str(field) |
|
|
if ',' in field_str or '"' in field_str or '\n' in field_str: |
|
|
field_str = '"' + field_str.replace('"', '""') + '"' |
|
|
return field_str |
|
|
|