quantcli 0.1.15__tar.gz → 0.1.16__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.
- {quantcli-0.1.15/quantcli.egg-info → quantcli-0.1.16}/PKG-INFO +1 -1
- {quantcli-0.1.15 → quantcli-0.1.16}/pyproject.toml +1 -1
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/cli.py +3 -1
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/core/data.py +28 -37
- {quantcli-0.1.15 → quantcli-0.1.16/quantcli.egg-info}/PKG-INFO +1 -1
- {quantcli-0.1.15 → quantcli-0.1.16}/LICENSE +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/README.md +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/core/__init__.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/core/backtest.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/core/factor.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/__init__.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/akshare.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/baostock.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/base.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/cache.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/fundamentals/__init__.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/fundamentals/provider.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/mixed.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/mysql.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/sync/__init__.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/sync/akshare.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/sync/base.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/sync/gm.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/datasources/sync/gm_fundamental.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/__init__.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_001.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_002.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_003.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_004.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_005.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_006.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_007.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_008.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_009.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_010.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_011.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_012.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_013.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_014.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_015.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_016.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_017.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_018.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_019.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_020.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_021.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_022.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_023.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_024.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_025.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_026.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_027.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_028.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_029.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_030.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_031.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_032.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_033.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_034.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_035.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_036.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_037.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_038.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_039.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/alpha101/alpha_040.yaml +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/base.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/compute.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/loader.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/pipeline.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/ranking.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/ranking_executor.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/screening.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/factors/screening_executor.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/models/bar.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/parser/__init__.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/parser/constants.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/parser/formula.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/utils/__init__.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/utils/env.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/utils/logger.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/utils/path.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/utils/symbol_utils.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/utils/time.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli/utils/validate.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli.egg-info/SOURCES.txt +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli.egg-info/dependency_links.txt +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli.egg-info/entry_points.txt +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli.egg-info/requires.txt +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/quantcli.egg-info/top_level.txt +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/setup.cfg +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_akshare_integration.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_builtin_factors.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_cli.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_datasources.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_factors.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_gm_executors.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_mixed_datasource.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_multi_factor.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_pipeline_integration.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_symbol_utils.py +0 -0
- {quantcli-0.1.15 → quantcli-0.1.16}/tests/test_time.py +0 -0
|
@@ -78,10 +78,12 @@ def quantcli(ctx, verbose):
|
|
|
78
78
|
|
|
79
79
|
if verbose:
|
|
80
80
|
import logging
|
|
81
|
+
import importlib.metadata
|
|
81
82
|
|
|
82
83
|
logging.basicConfig(level=logging.DEBUG)
|
|
83
84
|
|
|
84
|
-
|
|
85
|
+
version = importlib.metadata.version("quantcli")
|
|
86
|
+
logger.info(f"QuantCLI v{version} started")
|
|
85
87
|
|
|
86
88
|
|
|
87
89
|
# =============================================================================
|
|
@@ -315,50 +315,41 @@ class DataManager:
|
|
|
315
315
|
"""清理缓存"""
|
|
316
316
|
count = 0
|
|
317
317
|
|
|
318
|
-
|
|
319
|
-
|
|
318
|
+
def clear_cache(
|
|
319
|
+
self, older_than: Optional[int] = None, pattern: Optional[str] = None
|
|
320
|
+
) -> int:
|
|
321
|
+
"""清理缓存"""
|
|
322
|
+
count = 0
|
|
320
323
|
|
|
321
324
|
if older_than:
|
|
322
325
|
from datetime import timedelta
|
|
323
326
|
|
|
324
327
|
cutoff = today() - timedelta(days=older_than)
|
|
325
|
-
for
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
mtime = parse_date(cache_file.stat().st_mtime)
|
|
331
|
-
if mtime < cutoff:
|
|
332
|
-
cache_file.unlink()
|
|
333
|
-
count += 1
|
|
334
|
-
except OSError:
|
|
335
|
-
continue
|
|
336
|
-
elif pattern:
|
|
337
|
-
for subdir in cache_subdirs:
|
|
338
|
-
dir_path = self.cache_dir / subdir
|
|
339
|
-
if dir_path.exists():
|
|
340
|
-
for cache_file in dir_path.rglob(pattern):
|
|
341
|
-
if cache_file.is_file():
|
|
342
|
-
try:
|
|
343
|
-
cache_file.unlink()
|
|
344
|
-
count += 1
|
|
345
|
-
except OSError:
|
|
346
|
-
continue
|
|
347
|
-
else:
|
|
348
|
-
# 清理所有缓存目录
|
|
349
|
-
for subdir in cache_subdirs:
|
|
350
|
-
dir_path = self.cache_dir / subdir
|
|
351
|
-
if dir_path.exists():
|
|
352
|
-
for cache_file in dir_path.rglob("*.parquet"):
|
|
353
|
-
try:
|
|
328
|
+
for cache_file in self.cache_dir.rglob("*.parquet"):
|
|
329
|
+
try:
|
|
330
|
+
if cache_file.is_file():
|
|
331
|
+
mtime = parse_date(cache_file.stat().st_mtime)
|
|
332
|
+
if mtime < cutoff:
|
|
354
333
|
cache_file.unlink()
|
|
355
334
|
count += 1
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
335
|
+
except OSError:
|
|
336
|
+
continue
|
|
337
|
+
elif pattern:
|
|
338
|
+
for cache_file in self.cache_dir.rglob(pattern):
|
|
339
|
+
try:
|
|
340
|
+
if cache_file.is_file():
|
|
341
|
+
cache_file.unlink()
|
|
342
|
+
count += 1
|
|
343
|
+
except OSError:
|
|
344
|
+
continue
|
|
345
|
+
else:
|
|
346
|
+
for cache_file in self.cache_dir.rglob("*.parquet"):
|
|
347
|
+
try:
|
|
348
|
+
if cache_file.is_file():
|
|
349
|
+
cache_file.unlink()
|
|
350
|
+
count += 1
|
|
351
|
+
except OSError:
|
|
352
|
+
continue
|
|
362
353
|
|
|
363
354
|
logger.info(f"Cleared {count} cache files")
|
|
364
355
|
return count
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|