|
1 | 1 | import argparse |
2 | | -from src import make_extract, transform_article_debug, transform_article_web, load_news, init_database, create_news_tables, load_web_pipeline, make_extract_web, make_extract_debug |
3 | 2 | import logging |
4 | 3 |
|
| 4 | +from src import ( |
| 5 | + init_database, |
| 6 | + create_app_users_table, |
| 7 | + create_search_requests_table, |
| 8 | + create_articles_table, |
| 9 | + create_user_news_table, |
| 10 | + create_request_stats_table, |
| 11 | + create_news_tables, |
| 12 | + run_pipeline_for_web_user, |
| 13 | + run_debug_pipeline |
| 14 | +) |
| 15 | + |
5 | 16 | logging.basicConfig( |
6 | 17 | level=logging.INFO, |
7 | 18 | format = "%(asctime)s | %(levelname)s | %(name)s | %(message)s" |
@@ -39,46 +50,42 @@ def parse_args(): |
39 | 50 | help="Amount of articels on 1 page" |
40 | 51 |
|
41 | 52 | ) |
| 53 | + parser.add_argument( |
| 54 | + "--debug", |
| 55 | + action="store_true" |
| 56 | + ) |
| 57 | + parser.add_argument( |
| 58 | + "--user_id", |
| 59 | + type=int, |
| 60 | + default=1 |
| 61 | + ) |
| 62 | + parser.add_argument( |
| 63 | + "--serch_request_id", |
| 64 | + type=int, |
| 65 | + default=1 |
| 66 | + ) |
42 | 67 | return parser.parse_args() |
43 | 68 |
|
44 | | -def pipeline_for_web_user(user_id: int, search_request_id: int, key_word: str, limit: int, page_size: int, debug:bool = False) -> int: |
| 69 | +def init_all_tables(debug: bool) -> None: |
| 70 | + init_database() |
| 71 | + create_app_users_table() |
| 72 | + create_articles_table() |
| 73 | + create_request_stats_table() |
| 74 | + create_search_requests_table() |
| 75 | + create_user_news_table() |
45 | 76 | if debug: |
46 | | - args = parse_args() |
47 | | - key_word = args.keyword |
48 | | - limit = args.limit |
49 | | - page_size = args.page_size |
50 | | - user_id = 1 |
51 | | - search_request_id = 1 |
52 | | - num_of_news = 0 |
53 | | - page = 1 |
54 | | - while num_of_news < limit: |
55 | | - remaining = limit - num_of_news |
56 | | - if debug: |
57 | | - raw_file_name, raw_articles_count = make_extract_debug(key_word, page, page_size) |
58 | | - if raw_articles_count == 0: |
59 | | - logger.warning("there is no more artical") |
60 | | - break |
61 | | - clean_file_name = transform_article_debug(raw_file_name, key_word, page) |
62 | | - result_num_of_news = load_news(clean_file_name, max_rows=remaining) |
63 | | - else: |
64 | | - payload, raw_articles_count = make_extract_web(key_word, page, page_size) |
65 | | - if raw_articles_count == 0: |
66 | | - logger.warning("there is no more artical") |
67 | | - break |
68 | | - clean_data, stats = transform_article_web(payload) |
69 | | - result_num_of_news = load_web_pipeline(user_id, search_request_id, clean_data, stats) |
70 | | - |
71 | | - num_of_news += result_num_of_news |
72 | | - page += 1 |
73 | | - logger.info(f"{num_of_news} news on key word {key_word} already aploaded") |
74 | | - return num_of_news |
| 77 | + create_news_tables() |
| 78 | + |
75 | 79 |
|
76 | 80 | def main()-> None: |
| 81 | + args = parse_args() |
77 | 82 | logger.info("Starting pipeline, init database, build table..") |
78 | 83 | try: |
79 | | - init_database() |
80 | | - create_news_tables() |
81 | | - loaded = pipeline_for_web_user() |
| 84 | + init_all_tables(debug=args.debug) |
| 85 | + if args.debug: |
| 86 | + loaded = run_debug_pipeline(args.keyword, args.limit, args.page_size) |
| 87 | + else: |
| 88 | + loaded = run_pipeline_for_web_user(args.user_id, args.search_request_id, args.ketword, args.limit, args.page_size) |
82 | 89 | logger.info("Pipline finished. loaded rows: %s", loaded) |
83 | 90 | except Exception as e: |
84 | 91 | logger.exception("pipeline failed: %s", e) |
|
0 commit comments