|
5 | 5 | import requests |
6 | 6 | import time |
7 | 7 | import calendar |
8 | | -from datetime import datetime, timedelta |
| 8 | +from datetime import date, datetime, timedelta |
9 | 9 | from stix2arango.stix2arango.stix2arango import Stix2Arango |
10 | 10 | from manager import VersionManager |
11 | 11 | from pathlib import Path |
@@ -51,17 +51,26 @@ def parse_arguments(): |
51 | 51 | parser = argparse.ArgumentParser(description="Process NVD CVE versions.") |
52 | 52 | parser.add_argument('--min_date', type=str, help='Start date in yyyy-mm-dd format.') |
53 | 53 | parser.add_argument('--max_date', type=str, help='End date in yyyy-mm-dd format.') |
| 54 | + parser.add_argument('--days', type=lambda x: datetime.fromisoformat(x).date(), nargs='+', help='manually select days to run.') |
54 | 55 | parser.add_argument('--ignore_embedded_relationships', action='store_true', help='Flag to ignore embedded relationships. Default is false.') |
55 | 56 | parser.add_argument('--database', type=str, default="cti_knowledge_base_store", help='Name of the database to use. Default is "cti_knowledge_base_store".') |
56 | 57 | parser.add_argument('--start_over', action='store_true', help='Delete database holding previous attempts.') |
57 | 58 | parser.add_argument('--download_path', type=parse_path, help='Path where the database is to be downloaded to. Default is `./cti_knowledge_base_store`', default='./cti_knowledge_base_store/') |
58 | 59 | return parser.parse_args() |
59 | 60 |
|
60 | | -def filter_versions_by_date(min_date, max_date): |
| 61 | +def filter_versions_by_date_range(min_date, max_date): |
61 | 62 | min_dt = datetime.strptime(min_date, "%Y-%m-%d") |
62 | 63 | max_dt = datetime.strptime(max_date, "%Y-%m-%d") |
63 | 64 | return [item for item in all_versions if min_dt <= datetime(item[0], item[1], item[2]) <= max_dt] |
64 | 65 |
|
| 66 | +def filter_versions_by_date_list(dates): |
| 67 | + versions = [] |
| 68 | + for version in all_versions: |
| 69 | + d = date(version[0], version[1], version[2]) |
| 70 | + if d in dates: |
| 71 | + versions.append(version) |
| 72 | + return versions |
| 73 | + |
65 | 74 | def create_directory(path): |
66 | 75 | if not os.path.exists(path): |
67 | 76 | os.makedirs(path) |
@@ -104,10 +113,12 @@ def main(): |
104 | 113 | print(f"Database to be used: {args.database}") |
105 | 114 |
|
106 | 115 | if args.min_date and args.max_date: |
107 | | - versions = filter_versions_by_date(args.min_date, args.max_date) |
| 116 | + versions = filter_versions_by_date_range(args.min_date, args.max_date) |
108 | 117 | elif args.min_date or args.max_date: |
109 | 118 | print("Both --min_date and --max_date must be provided.") |
110 | 119 | return |
| 120 | + elif args.days: |
| 121 | + versions = filter_versions_by_date_list(args.days) |
111 | 122 | else: |
112 | 123 | versions = all_versions # If no filter is applied, process all versions. |
113 | 124 |
|
|
0 commit comments