From c3ccf505a8581df1d1d931e6cadebf6b99357f3c Mon Sep 17 00:00:00 2001 From: Xander Date: Wed, 9 Apr 2025 21:49:59 +0300 Subject: [PATCH] reffresh token --- logs/app.log | 699 ++++++++++++++++++++++++++++++++++++++++ main.py | 29 +- pyproject.toml | 3 + routers/logins.py | 140 +++++++- templates/productf.html | 1 + uv.lock | 168 ++++++++++ 6 files changed, 1037 insertions(+), 3 deletions(-) diff --git a/logs/app.log b/logs/app.log index 6cd410e..ed5b4a2 100644 --- a/logs/app.log +++ b/logs/app.log @@ -6263,3 +6263,702 @@ WHERE jobs.job_id IN (%s) FROM users 2025-04-09 19:02:11,536 - INFO - [cached since 743.6s ago] () 2025-04-09 19:02:11,623 - INFO - ROLLBACK +2025-04-09 19:08:23,889 - INFO - SELECT DATABASE() +2025-04-09 19:08:23,889 - INFO - [raw sql] () +2025-04-09 19:08:24,003 - INFO - SELECT @@sql_mode +2025-04-09 19:08:24,003 - INFO - [raw sql] () +2025-04-09 19:08:24,060 - INFO - SELECT @@lower_case_table_names +2025-04-09 19:08:24,061 - INFO - [raw sql] () +2025-04-09 19:08:24,176 - INFO - BEGIN (implicit) +2025-04-09 19:08:24,176 - INFO - DESCRIBE `ch7a461e0f_link`.`users` +2025-04-09 19:08:24,177 - INFO - [raw sql] () +2025-04-09 19:08:24,236 - INFO - DESCRIBE `ch7a461e0f_link`.`profile` +2025-04-09 19:08:24,237 - INFO - [raw sql] () +2025-04-09 19:08:24,296 - INFO - DESCRIBE `ch7a461e0f_link`.`jobs` +2025-04-09 19:08:24,296 - INFO - [raw sql] () +2025-04-09 19:08:24,356 - INFO - DESCRIBE `ch7a461e0f_link`.`client` +2025-04-09 19:08:24,356 - INFO - [raw sql] () +2025-04-09 19:08:24,416 - INFO - DESCRIBE `ch7a461e0f_link`.`meta_client` +2025-04-09 19:08:24,416 - INFO - [raw sql] () +2025-04-09 19:08:24,476 - INFO - DESCRIBE `ch7a461e0f_link`.`applied_jobs` +2025-04-09 19:08:24,477 - INFO - [raw sql] () +2025-04-09 19:08:24,536 - INFO - COMMIT +2025-04-09 19:08:24,713 - INFO - BEGIN (implicit) +2025-04-09 19:08:24,792 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users + LIMIT %s +2025-04-09 19:08:24,792 - INFO - [generated in 0.00037s] (1,) +2025-04-09 19:08:24,852 - INFO - ROLLBACK +2025-04-09 19:08:26,937 - INFO - BEGIN (implicit) +2025-04-09 19:08:26,938 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 19:08:26,939 - INFO - [generated in 0.00038s] ('admin',) +2025-04-09 19:08:27,008 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 19:08:27,009 - INFO - [generated in 0.00050s] () +2025-04-09 19:08:27,991 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 19:08:27,991 - INFO - [generated in 0.00037s] () +2025-04-09 19:08:28,100 - INFO - ROLLBACK +2025-04-09 19:10:40,696 - INFO - BEGIN (implicit) +2025-04-09 19:10:40,698 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 19:10:40,698 - INFO - [cached since 133.8s ago] ('admin',) +2025-04-09 19:10:40,757 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 19:10:40,757 - INFO - [cached since 133.7s ago] () +2025-04-09 19:10:41,690 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 19:10:41,691 - INFO - [cached since 133.7s ago] () +2025-04-09 19:10:41,768 - INFO - ROLLBACK +2025-04-09 19:10:45,847 - INFO - BEGIN (implicit) +2025-04-09 19:10:45,847 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 19:10:45,848 - INFO - [cached since 138.9s ago] ('admin',) +2025-04-09 19:10:45,908 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 19:10:45,908 - INFO - [cached since 137.9s ago] () +2025-04-09 19:10:45,977 - INFO - ROLLBACK +2025-04-09 19:10:57,083 - INFO - BEGIN (implicit) +2025-04-09 19:10:57,084 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 19:10:57,085 - INFO - [cached since 150.1s ago] ('admin',) +2025-04-09 19:10:57,144 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 19:10:57,144 - INFO - [cached since 150.1s ago] () +2025-04-09 19:10:58,058 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 19:10:58,058 - INFO - [cached since 150.1s ago] () +2025-04-09 19:10:58,134 - INFO - ROLLBACK +2025-04-09 19:11:12,661 - INFO - BEGIN (implicit) +2025-04-09 19:11:12,662 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 19:11:12,663 - INFO - [cached since 165.7s ago] ('admin',) +2025-04-09 19:11:12,722 - INFO - SELECT users.id +FROM users +WHERE users.username = %s +2025-04-09 19:11:12,722 - INFO - [generated in 0.00028s] ('admin',) +2025-04-09 19:11:12,795 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +WHERE applied_jobs.status IN (%s) AND applied_jobs.assignee = %s +2025-04-09 19:11:12,796 - INFO - [generated in 0.00128s] ('In-Progress', 5) +2025-04-09 19:11:12,920 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 19:11:12,920 - INFO - [cached since 164.9s ago] () +2025-04-09 19:11:12,991 - INFO - ROLLBACK +2025-04-09 21:29:55,527 - INFO - SELECT DATABASE() +2025-04-09 21:29:55,527 - INFO - [raw sql] () +2025-04-09 21:29:55,643 - INFO - SELECT @@sql_mode +2025-04-09 21:29:55,644 - INFO - [raw sql] () +2025-04-09 21:29:55,700 - INFO - SELECT @@lower_case_table_names +2025-04-09 21:29:55,701 - INFO - [raw sql] () +2025-04-09 21:29:55,814 - INFO - BEGIN (implicit) +2025-04-09 21:29:55,815 - INFO - DESCRIBE `ch7a461e0f_link`.`users` +2025-04-09 21:29:55,815 - INFO - [raw sql] () +2025-04-09 21:29:55,873 - INFO - DESCRIBE `ch7a461e0f_link`.`profile` +2025-04-09 21:29:55,874 - INFO - [raw sql] () +2025-04-09 21:29:55,933 - INFO - DESCRIBE `ch7a461e0f_link`.`jobs` +2025-04-09 21:29:55,933 - INFO - [raw sql] () +2025-04-09 21:29:55,993 - INFO - DESCRIBE `ch7a461e0f_link`.`client` +2025-04-09 21:29:55,993 - INFO - [raw sql] () +2025-04-09 21:29:56,050 - INFO - DESCRIBE `ch7a461e0f_link`.`meta_client` +2025-04-09 21:29:56,050 - INFO - [raw sql] () +2025-04-09 21:29:56,108 - INFO - DESCRIBE `ch7a461e0f_link`.`applied_jobs` +2025-04-09 21:29:56,108 - INFO - [raw sql] () +2025-04-09 21:29:56,166 - INFO - COMMIT +2025-04-09 21:29:56,339 - INFO - BEGIN (implicit) +2025-04-09 21:29:56,396 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users + LIMIT %s +2025-04-09 21:29:56,396 - INFO - [generated in 0.00035s] (1,) +2025-04-09 21:29:56,454 - INFO - ROLLBACK +2025-04-09 21:34:52,090 - INFO - SELECT DATABASE() +2025-04-09 21:34:52,091 - INFO - [raw sql] () +2025-04-09 21:34:52,205 - INFO - SELECT @@sql_mode +2025-04-09 21:34:52,205 - INFO - [raw sql] () +2025-04-09 21:34:52,262 - INFO - SELECT @@lower_case_table_names +2025-04-09 21:34:52,262 - INFO - [raw sql] () +2025-04-09 21:34:52,376 - INFO - BEGIN (implicit) +2025-04-09 21:34:52,376 - INFO - DESCRIBE `ch7a461e0f_link`.`users` +2025-04-09 21:34:52,376 - INFO - [raw sql] () +2025-04-09 21:34:52,434 - INFO - DESCRIBE `ch7a461e0f_link`.`profile` +2025-04-09 21:34:52,434 - INFO - [raw sql] () +2025-04-09 21:34:52,492 - INFO - DESCRIBE `ch7a461e0f_link`.`jobs` +2025-04-09 21:34:52,492 - INFO - [raw sql] () +2025-04-09 21:34:52,550 - INFO - DESCRIBE `ch7a461e0f_link`.`client` +2025-04-09 21:34:52,551 - INFO - [raw sql] () +2025-04-09 21:34:52,608 - INFO - DESCRIBE `ch7a461e0f_link`.`meta_client` +2025-04-09 21:34:52,608 - INFO - [raw sql] () +2025-04-09 21:34:52,666 - INFO - DESCRIBE `ch7a461e0f_link`.`applied_jobs` +2025-04-09 21:34:52,666 - INFO - [raw sql] () +2025-04-09 21:34:52,725 - INFO - COMMIT +2025-04-09 21:34:52,897 - INFO - BEGIN (implicit) +2025-04-09 21:34:52,910 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users + LIMIT %s +2025-04-09 21:34:52,910 - INFO - [generated in 0.00040s] (1,) +2025-04-09 21:34:52,970 - INFO - ROLLBACK +2025-04-09 21:36:18,880 - INFO - SELECT DATABASE() +2025-04-09 21:36:18,881 - INFO - [raw sql] () +2025-04-09 21:36:18,995 - INFO - SELECT @@sql_mode +2025-04-09 21:36:18,995 - INFO - [raw sql] () +2025-04-09 21:36:19,052 - INFO - SELECT @@lower_case_table_names +2025-04-09 21:36:19,052 - INFO - [raw sql] () +2025-04-09 21:36:19,167 - INFO - BEGIN (implicit) +2025-04-09 21:36:19,167 - INFO - DESCRIBE `ch7a461e0f_link`.`users` +2025-04-09 21:36:19,168 - INFO - [raw sql] () +2025-04-09 21:36:19,226 - INFO - DESCRIBE `ch7a461e0f_link`.`profile` +2025-04-09 21:36:19,226 - INFO - [raw sql] () +2025-04-09 21:36:19,285 - INFO - DESCRIBE `ch7a461e0f_link`.`jobs` +2025-04-09 21:36:19,286 - INFO - [raw sql] () +2025-04-09 21:36:19,344 - INFO - DESCRIBE `ch7a461e0f_link`.`client` +2025-04-09 21:36:19,344 - INFO - [raw sql] () +2025-04-09 21:36:19,402 - INFO - DESCRIBE `ch7a461e0f_link`.`meta_client` +2025-04-09 21:36:19,402 - INFO - [raw sql] () +2025-04-09 21:36:19,470 - INFO - DESCRIBE `ch7a461e0f_link`.`applied_jobs` +2025-04-09 21:36:19,470 - INFO - [raw sql] () +2025-04-09 21:36:19,530 - INFO - COMMIT +2025-04-09 21:36:19,701 - INFO - BEGIN (implicit) +2025-04-09 21:36:19,719 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users + LIMIT %s +2025-04-09 21:36:19,719 - INFO - [generated in 0.00045s] (1,) +2025-04-09 21:36:19,778 - INFO - ROLLBACK +2025-04-09 21:40:31,745 - INFO - SELECT DATABASE() +2025-04-09 21:40:31,745 - INFO - [raw sql] () +2025-04-09 21:40:31,861 - INFO - SELECT @@sql_mode +2025-04-09 21:40:31,861 - INFO - [raw sql] () +2025-04-09 21:40:31,918 - INFO - SELECT @@lower_case_table_names +2025-04-09 21:40:31,918 - INFO - [raw sql] () +2025-04-09 21:40:32,035 - INFO - BEGIN (implicit) +2025-04-09 21:40:32,036 - INFO - DESCRIBE `ch7a461e0f_link`.`users` +2025-04-09 21:40:32,036 - INFO - [raw sql] () +2025-04-09 21:40:32,094 - INFO - DESCRIBE `ch7a461e0f_link`.`profile` +2025-04-09 21:40:32,094 - INFO - [raw sql] () +2025-04-09 21:40:32,152 - INFO - DESCRIBE `ch7a461e0f_link`.`jobs` +2025-04-09 21:40:32,152 - INFO - [raw sql] () +2025-04-09 21:40:32,210 - INFO - DESCRIBE `ch7a461e0f_link`.`client` +2025-04-09 21:40:32,210 - INFO - [raw sql] () +2025-04-09 21:40:32,268 - INFO - DESCRIBE `ch7a461e0f_link`.`meta_client` +2025-04-09 21:40:32,268 - INFO - [raw sql] () +2025-04-09 21:40:32,326 - INFO - DESCRIBE `ch7a461e0f_link`.`applied_jobs` +2025-04-09 21:40:32,326 - INFO - [raw sql] () +2025-04-09 21:40:32,384 - INFO - COMMIT +2025-04-09 21:40:32,559 - INFO - BEGIN (implicit) +2025-04-09 21:40:32,582 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users + LIMIT %s +2025-04-09 21:40:32,582 - INFO - [generated in 0.00047s] (1,) +2025-04-09 21:40:32,640 - INFO - ROLLBACK +2025-04-09 21:40:42,113 - INFO - BEGIN (implicit) +2025-04-09 21:40:42,115 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:40:42,115 - INFO - [generated in 0.00045s] ('admin',) +2025-04-09 21:40:42,174 - WARNING - (trapped) error reading bcrypt version +Traceback (most recent call last): + File "/home/blues/Nextcloud/2025/admins/.venv/lib/python3.12/site-packages/passlib/handlers/bcrypt.py", line 620, in _load_backend_mixin + version = _bcrypt.__about__.__version__ + ^^^^^^^^^^^^^^^^^ +AttributeError: module 'bcrypt' has no attribute '__about__' +2025-04-09 21:40:42,477 - INFO - ROLLBACK +2025-04-09 21:40:42,654 - INFO - BEGIN (implicit) +2025-04-09 21:40:42,654 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:40:42,654 - INFO - [cached since 0.5392s ago] ('admin',) +2025-04-09 21:40:42,722 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:40:42,722 - INFO - [generated in 0.00034s] () +2025-04-09 21:40:44,102 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:40:44,102 - INFO - [generated in 0.00028s] () +2025-04-09 21:40:44,196 - INFO - ROLLBACK +2025-04-09 21:40:50,624 - INFO - BEGIN (implicit) +2025-04-09 21:40:50,624 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:40:50,624 - INFO - [cached since 8.509s ago] ('admin',) +2025-04-09 21:40:50,722 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:40:50,723 - INFO - [cached since 6.621s ago] () +2025-04-09 21:40:50,788 - INFO - ROLLBACK +2025-04-09 21:40:52,307 - INFO - BEGIN (implicit) +2025-04-09 21:40:52,308 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:40:52,308 - INFO - [cached since 10.19s ago] ('admin',) +2025-04-09 21:40:52,366 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:40:52,367 - INFO - [cached since 9.645s ago] () +2025-04-09 21:40:53,417 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:40:53,417 - INFO - [cached since 9.316s ago] () +2025-04-09 21:40:53,491 - INFO - ROLLBACK +2025-04-09 21:40:56,945 - INFO - BEGIN (implicit) +2025-04-09 21:40:56,945 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:40:56,945 - INFO - [cached since 14.83s ago] ('admin',) +2025-04-09 21:40:57,005 - INFO - SELECT users.id +FROM users +WHERE users.username = %s +2025-04-09 21:40:57,006 - INFO - [generated in 0.00028s] ('admin',) +2025-04-09 21:40:57,071 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +WHERE applied_jobs.status IN (%s) AND applied_jobs.assignee = %s +2025-04-09 21:40:57,071 - INFO - [generated in 0.00062s] ('In-Progress', 5) +2025-04-09 21:40:57,189 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:40:57,189 - INFO - [cached since 13.09s ago] () +2025-04-09 21:40:57,262 - INFO - ROLLBACK +2025-04-09 21:40:59,636 - INFO - BEGIN (implicit) +2025-04-09 21:40:59,637 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:40:59,637 - INFO - [cached since 17.52s ago] ('admin',) +2025-04-09 21:40:59,695 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:40:59,695 - INFO - [cached since 16.97s ago] () +2025-04-09 21:41:00,960 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:41:00,960 - INFO - [cached since 16.86s ago] () +2025-04-09 21:41:01,032 - INFO - ROLLBACK +2025-04-09 21:41:47,018 - INFO - SELECT DATABASE() +2025-04-09 21:41:47,018 - INFO - [raw sql] () +2025-04-09 21:41:47,132 - INFO - SELECT @@sql_mode +2025-04-09 21:41:47,132 - INFO - [raw sql] () +2025-04-09 21:41:47,189 - INFO - SELECT @@lower_case_table_names +2025-04-09 21:41:47,189 - INFO - [raw sql] () +2025-04-09 21:41:47,304 - INFO - BEGIN (implicit) +2025-04-09 21:41:47,305 - INFO - DESCRIBE `ch7a461e0f_link`.`users` +2025-04-09 21:41:47,305 - INFO - [raw sql] () +2025-04-09 21:41:47,363 - INFO - DESCRIBE `ch7a461e0f_link`.`profile` +2025-04-09 21:41:47,363 - INFO - [raw sql] () +2025-04-09 21:41:47,422 - INFO - DESCRIBE `ch7a461e0f_link`.`jobs` +2025-04-09 21:41:47,422 - INFO - [raw sql] () +2025-04-09 21:41:47,480 - INFO - DESCRIBE `ch7a461e0f_link`.`client` +2025-04-09 21:41:47,480 - INFO - [raw sql] () +2025-04-09 21:41:47,538 - INFO - DESCRIBE `ch7a461e0f_link`.`meta_client` +2025-04-09 21:41:47,538 - INFO - [raw sql] () +2025-04-09 21:41:47,598 - INFO - DESCRIBE `ch7a461e0f_link`.`applied_jobs` +2025-04-09 21:41:47,598 - INFO - [raw sql] () +2025-04-09 21:41:47,656 - INFO - COMMIT +2025-04-09 21:41:47,828 - INFO - BEGIN (implicit) +2025-04-09 21:41:47,843 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users + LIMIT %s +2025-04-09 21:41:47,843 - INFO - [generated in 0.00034s] (1,) +2025-04-09 21:41:47,901 - INFO - ROLLBACK +2025-04-09 21:41:48,080 - INFO - BEGIN (implicit) +2025-04-09 21:41:48,082 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:41:48,082 - INFO - [generated in 0.00027s] ('admin',) +2025-04-09 21:41:48,145 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:41:48,145 - INFO - [generated in 0.00032s] () +2025-04-09 21:41:49,205 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:41:49,205 - INFO - [generated in 0.00029s] () +2025-04-09 21:41:49,300 - INFO - ROLLBACK +2025-04-09 21:41:54,807 - INFO - BEGIN (implicit) +2025-04-09 21:41:54,807 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:41:54,807 - INFO - [cached since 6.726s ago] ('admin',) +2025-04-09 21:41:54,865 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:41:54,865 - INFO - [cached since 5.661s ago] () +2025-04-09 21:41:54,931 - INFO - ROLLBACK +2025-04-09 21:41:57,255 - INFO - BEGIN (implicit) +2025-04-09 21:41:57,255 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:41:57,255 - INFO - [cached since 9.174s ago] ('admin',) +2025-04-09 21:41:57,313 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:41:57,314 - INFO - [cached since 9.168s ago] () +2025-04-09 21:41:58,569 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:41:58,569 - INFO - [cached since 9.364s ago] () +2025-04-09 21:41:58,644 - INFO - ROLLBACK +2025-04-09 21:42:01,311 - INFO - BEGIN (implicit) +2025-04-09 21:42:01,311 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:42:01,312 - INFO - [cached since 13.23s ago] ('admin',) +2025-04-09 21:42:01,379 - INFO - SELECT users.id +FROM users +WHERE users.username = %s +2025-04-09 21:42:01,379 - INFO - [generated in 0.00029s] ('admin',) +2025-04-09 21:42:01,442 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +WHERE applied_jobs.status IN (%s) AND applied_jobs.assignee = %s +2025-04-09 21:42:01,442 - INFO - [generated in 0.00043s] ('In-Progress', 5) +2025-04-09 21:42:01,563 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:42:01,563 - INFO - [cached since 12.36s ago] () +2025-04-09 21:42:01,630 - INFO - ROLLBACK +2025-04-09 21:42:15,819 - INFO - BEGIN (implicit) +2025-04-09 21:42:15,820 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:42:15,820 - INFO - [cached since 27.74s ago] ('admin',) +2025-04-09 21:42:15,882 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE jobs.data_requested >= %s AND jobs.data_requested < %s AND jobs.date_posted >= %s AND jobs.date_posted < %s AND applied_jobs.applied_on >= %s AND applied_jobs.applied_on < %s +2025-04-09 21:42:15,882 - INFO - [generated in 0.00033s] (datetime.date(2025, 4, 3), datetime.date(2025, 4, 10), datetime.date(2025, 4, 3), datetime.date(2025, 4, 10), datetime.date(2025, 4, 3), datetime.date(2025, 4, 10)) +2025-04-09 21:42:15,940 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:42:15,940 - INFO - [cached since 26.74s ago] () +2025-04-09 21:42:16,020 - INFO - ROLLBACK +2025-04-09 21:42:21,161 - INFO - BEGIN (implicit) +2025-04-09 21:42:21,162 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:42:21,162 - INFO - [cached since 33.08s ago] ('admin',) +2025-04-09 21:42:21,221 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:42:21,221 - INFO - [cached since 33.08s ago] () +2025-04-09 21:42:22,440 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:42:22,440 - INFO - [cached since 33.24s ago] () +2025-04-09 21:42:22,513 - INFO - ROLLBACK +2025-04-09 21:42:35,627 - INFO - BEGIN (implicit) +2025-04-09 21:42:35,628 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:42:35,628 - INFO - [cached since 47.55s ago] ('admin',) +2025-04-09 21:42:35,687 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE jobs.data_requested >= %s AND jobs.data_requested < %s AND jobs.date_posted >= %s AND jobs.date_posted < %s AND applied_jobs.applied_on >= %s AND applied_jobs.applied_on < %s +2025-04-09 21:42:35,687 - INFO - [cached since 19.81s ago] (datetime.date(2025, 4, 3), datetime.date(2025, 4, 10), datetime.date(2025, 4, 3), datetime.date(2025, 4, 10), datetime.date(2025, 4, 3), datetime.date(2025, 4, 10)) +2025-04-09 21:42:35,746 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:42:35,746 - INFO - [cached since 46.54s ago] () +2025-04-09 21:42:35,804 - INFO - ROLLBACK +2025-04-09 21:42:42,872 - INFO - BEGIN (implicit) +2025-04-09 21:42:42,873 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:42:42,873 - INFO - [cached since 54.79s ago] ('admin',) +2025-04-09 21:42:42,932 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE applied_jobs.applied_on >= %s AND applied_jobs.applied_on < %s +2025-04-09 21:42:42,933 - INFO - [generated in 0.00029s] (datetime.date(2025, 4, 3), datetime.date(2025, 4, 10)) +2025-04-09 21:42:43,002 - INFO - SELECT users.id AS users_id, users.username AS users_username, users.hashed_password AS users_hashed_password, users.`role` AS users_role, users.is_active AS users_is_active +FROM users +WHERE users.id IN (%s) +2025-04-09 21:42:43,002 - INFO - [generated in 0.00037s] (7,) +2025-04-09 21:42:43,061 - INFO - SELECT client.id AS client_id, client.user_login AS client_user_login, client.user_nicename AS client_user_nicename, client.user_email AS client_user_email, client.phone AS client_phone, client.json_data AS client_json_data, client.user_status AS client_user_status +FROM client +WHERE client.id IN (%s) +2025-04-09 21:42:43,061 - INFO - [generated in 0.00036s] (1,) +2025-04-09 21:42:43,121 - INFO - SELECT jobs.job_id AS jobs_job_id, jobs.job_title AS jobs_job_title, jobs.job_company AS jobs_job_company, jobs.minimum_annual_salary AS jobs_minimum_annual_salary, jobs.salary_currency AS jobs_salary_currency, jobs.location_type AS jobs_location_type, jobs.location AS jobs_location, jobs.job_level AS jobs_job_level, jobs.job_type AS jobs_job_type, jobs.days_posted AS jobs_days_posted, jobs.hourly_rate AS jobs_hourly_rate, jobs.link AS jobs_link, jobs.link_company AS jobs_link_company, jobs.active AS jobs_active, jobs.about AS jobs_about, jobs.date_posted AS jobs_date_posted, jobs.data_requested AS jobs_data_requested, jobs.text AS jobs_text +FROM jobs +WHERE jobs.job_id IN (%s) +2025-04-09 21:42:43,122 - INFO - [generated in 0.00049s] (4192694362,) +2025-04-09 21:42:43,238 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:42:43,238 - INFO - [cached since 54.03s ago] () +2025-04-09 21:42:43,296 - INFO - ROLLBACK +2025-04-09 21:42:52,815 - INFO - BEGIN (implicit) +2025-04-09 21:42:52,815 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:42:52,815 - INFO - [cached since 64.73s ago] ('admin',) +2025-04-09 21:42:52,875 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:42:52,875 - INFO - [cached since 64.73s ago] () +2025-04-09 21:42:54,052 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:42:54,053 - INFO - [cached since 64.85s ago] () +2025-04-09 21:42:54,139 - INFO - ROLLBACK +2025-04-09 21:43:13,691 - INFO - BEGIN (implicit) +2025-04-09 21:43:13,691 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:43:13,691 - INFO - [cached since 85.61s ago] ('admin',) +2025-04-09 21:43:13,761 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE jobs.data_requested BETWEEN %s AND %s AND jobs.date_posted BETWEEN %s AND %s AND applied_jobs.applied_on >= %s AND applied_jobs.applied_on < %s +2025-04-09 21:43:13,761 - INFO - [generated in 0.00033s] (datetime.datetime(2025, 4, 2, 0, 0), datetime.datetime(2025, 4, 9, 0, 0), datetime.datetime(2025, 4, 1, 0, 0), datetime.datetime(2025, 4, 9, 0, 0), datetime.date(2025, 4, 3), datetime.date(2025, 4, 10)) +2025-04-09 21:43:13,820 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:43:13,820 - INFO - [cached since 84.62s ago] () +2025-04-09 21:43:13,878 - INFO - ROLLBACK +2025-04-09 21:43:23,188 - INFO - BEGIN (implicit) +2025-04-09 21:43:23,188 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:43:23,189 - INFO - [cached since 95.11s ago] ('admin',) +2025-04-09 21:43:23,247 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:43:23,247 - INFO - [cached since 95.1s ago] () +2025-04-09 21:43:24,426 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:43:24,426 - INFO - [cached since 95.22s ago] () +2025-04-09 21:43:24,500 - INFO - ROLLBACK +2025-04-09 21:43:31,975 - INFO - BEGIN (implicit) +2025-04-09 21:43:31,976 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:43:31,976 - INFO - [cached since 103.9s ago] ('admin',) +2025-04-09 21:43:32,042 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE jobs.data_requested >= %s AND jobs.data_requested < %s +2025-04-09 21:43:32,043 - INFO - [generated in 0.00193s] (datetime.date(2025, 4, 3), datetime.date(2025, 4, 10)) +2025-04-09 21:43:32,114 - INFO - SELECT users.id AS users_id, users.username AS users_username, users.hashed_password AS users_hashed_password, users.`role` AS users_role, users.is_active AS users_is_active +FROM users +WHERE users.id IN (%s) +2025-04-09 21:43:32,114 - INFO - [cached since 49.11s ago] (8,) +2025-04-09 21:43:32,173 - INFO - SELECT client.id AS client_id, client.user_login AS client_user_login, client.user_nicename AS client_user_nicename, client.user_email AS client_user_email, client.phone AS client_phone, client.json_data AS client_json_data, client.user_status AS client_user_status +FROM client +WHERE client.id IN (%s, %s) +2025-04-09 21:43:32,174 - INFO - [cached since 49.11s ago] (1, 69) +2025-04-09 21:43:32,234 - INFO - SELECT jobs.job_id AS jobs_job_id, jobs.job_title AS jobs_job_title, jobs.job_company AS jobs_job_company, jobs.minimum_annual_salary AS jobs_minimum_annual_salary, jobs.salary_currency AS jobs_salary_currency, jobs.location_type AS jobs_location_type, jobs.location AS jobs_location, jobs.job_level AS jobs_job_level, jobs.job_type AS jobs_job_type, jobs.days_posted AS jobs_days_posted, jobs.hourly_rate AS jobs_hourly_rate, jobs.link AS jobs_link, jobs.link_company AS jobs_link_company, jobs.active AS jobs_active, jobs.about AS jobs_about, jobs.date_posted AS jobs_date_posted, jobs.data_requested AS jobs_data_requested, jobs.text AS jobs_text +FROM jobs +WHERE jobs.job_id IN (%s) +2025-04-09 21:43:32,234 - INFO - [cached since 49.11s ago] (4193183601,) +2025-04-09 21:43:32,295 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:43:32,295 - INFO - [cached since 103.1s ago] () +2025-04-09 21:43:32,355 - INFO - ROLLBACK +2025-04-09 21:43:39,228 - INFO - BEGIN (implicit) +2025-04-09 21:43:39,228 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:43:39,229 - INFO - [cached since 111.1s ago] ('admin',) +2025-04-09 21:43:39,288 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE jobs.data_requested >= %s AND jobs.data_requested < %s AND jobs.date_posted >= %s AND jobs.date_posted < %s +2025-04-09 21:43:39,288 - INFO - [generated in 0.00031s] (datetime.date(2025, 4, 3), datetime.date(2025, 4, 10), datetime.date(2025, 4, 3), datetime.date(2025, 4, 10)) +2025-04-09 21:43:39,347 - INFO - SELECT users.id AS users_id, users.username AS users_username, users.hashed_password AS users_hashed_password, users.`role` AS users_role, users.is_active AS users_is_active +FROM users +WHERE users.id IN (%s) +2025-04-09 21:43:39,347 - INFO - [cached since 56.35s ago] (8,) +2025-04-09 21:43:39,405 - INFO - SELECT client.id AS client_id, client.user_login AS client_user_login, client.user_nicename AS client_user_nicename, client.user_email AS client_user_email, client.phone AS client_phone, client.json_data AS client_json_data, client.user_status AS client_user_status +FROM client +WHERE client.id IN (%s, %s) +2025-04-09 21:43:39,405 - INFO - [cached since 56.34s ago] (1, 69) +2025-04-09 21:43:39,466 - INFO - SELECT jobs.job_id AS jobs_job_id, jobs.job_title AS jobs_job_title, jobs.job_company AS jobs_job_company, jobs.minimum_annual_salary AS jobs_minimum_annual_salary, jobs.salary_currency AS jobs_salary_currency, jobs.location_type AS jobs_location_type, jobs.location AS jobs_location, jobs.job_level AS jobs_job_level, jobs.job_type AS jobs_job_type, jobs.days_posted AS jobs_days_posted, jobs.hourly_rate AS jobs_hourly_rate, jobs.link AS jobs_link, jobs.link_company AS jobs_link_company, jobs.active AS jobs_active, jobs.about AS jobs_about, jobs.date_posted AS jobs_date_posted, jobs.data_requested AS jobs_data_requested, jobs.text AS jobs_text +FROM jobs +WHERE jobs.job_id IN (%s) +2025-04-09 21:43:39,466 - INFO - [cached since 56.34s ago] (4193183601,) +2025-04-09 21:43:39,526 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:43:39,526 - INFO - [cached since 110.3s ago] () +2025-04-09 21:43:39,585 - INFO - ROLLBACK +2025-04-09 21:43:50,816 - INFO - BEGIN (implicit) +2025-04-09 21:43:50,817 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:43:50,817 - INFO - [cached since 122.7s ago] ('admin',) +2025-04-09 21:43:50,875 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:43:50,875 - INFO - [cached since 122.7s ago] () +2025-04-09 21:43:52,305 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:43:52,305 - INFO - [cached since 123.1s ago] () +2025-04-09 21:43:52,378 - INFO - ROLLBACK +2025-04-09 21:44:07,529 - INFO - BEGIN (implicit) +2025-04-09 21:44:07,529 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:44:07,530 - INFO - [cached since 139.4s ago] ('admin',) +2025-04-09 21:44:07,589 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE applied_jobs.applied_on BETWEEN %s AND %s +2025-04-09 21:44:07,590 - INFO - [generated in 0.00033s] (datetime.datetime(2025, 4, 1, 0, 0), datetime.datetime(2025, 4, 9, 0, 0)) +2025-04-09 21:44:07,648 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:44:07,648 - INFO - [cached since 138.4s ago] () +2025-04-09 21:44:07,706 - INFO - ROLLBACK +2025-04-09 21:44:13,516 - INFO - BEGIN (implicit) +2025-04-09 21:44:13,517 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:44:13,517 - INFO - [cached since 145.4s ago] ('admin',) +2025-04-09 21:44:13,576 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE applied_jobs.applied_on >= %s AND applied_jobs.applied_on < %s +2025-04-09 21:44:13,576 - INFO - [cached since 90.64s ago] (datetime.date(2025, 4, 9), datetime.date(2025, 4, 10)) +2025-04-09 21:44:13,634 - INFO - SELECT users.id AS users_id, users.username AS users_username, users.hashed_password AS users_hashed_password, users.`role` AS users_role, users.is_active AS users_is_active +FROM users +WHERE users.id IN (%s) +2025-04-09 21:44:13,634 - INFO - [cached since 90.63s ago] (7,) +2025-04-09 21:44:13,694 - INFO - SELECT client.id AS client_id, client.user_login AS client_user_login, client.user_nicename AS client_user_nicename, client.user_email AS client_user_email, client.phone AS client_phone, client.json_data AS client_json_data, client.user_status AS client_user_status +FROM client +WHERE client.id IN (%s) +2025-04-09 21:44:13,695 - INFO - [cached since 90.63s ago] (1,) +2025-04-09 21:44:13,753 - INFO - SELECT jobs.job_id AS jobs_job_id, jobs.job_title AS jobs_job_title, jobs.job_company AS jobs_job_company, jobs.minimum_annual_salary AS jobs_minimum_annual_salary, jobs.salary_currency AS jobs_salary_currency, jobs.location_type AS jobs_location_type, jobs.location AS jobs_location, jobs.job_level AS jobs_job_level, jobs.job_type AS jobs_job_type, jobs.days_posted AS jobs_days_posted, jobs.hourly_rate AS jobs_hourly_rate, jobs.link AS jobs_link, jobs.link_company AS jobs_link_company, jobs.active AS jobs_active, jobs.about AS jobs_about, jobs.date_posted AS jobs_date_posted, jobs.data_requested AS jobs_data_requested, jobs.text AS jobs_text +FROM jobs +WHERE jobs.job_id IN (%s) +2025-04-09 21:44:13,753 - INFO - [cached since 90.63s ago] (4192694362,) +2025-04-09 21:44:13,871 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:44:13,871 - INFO - [cached since 144.7s ago] () +2025-04-09 21:44:13,930 - INFO - ROLLBACK +2025-04-09 21:44:22,054 - INFO - BEGIN (implicit) +2025-04-09 21:44:22,055 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:44:22,055 - INFO - [cached since 154s ago] ('admin',) +2025-04-09 21:44:22,115 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE jobs.data_requested >= %s AND jobs.data_requested < %s AND jobs.date_posted >= %s AND jobs.date_posted < %s AND applied_jobs.applied_on >= %s AND applied_jobs.applied_on < %s +2025-04-09 21:44:22,115 - INFO - [cached since 126.2s ago] (datetime.date(2025, 4, 3), datetime.date(2025, 4, 10), datetime.date(2025, 4, 3), datetime.date(2025, 4, 10), datetime.date(2025, 4, 9), datetime.date(2025, 4, 10)) +2025-04-09 21:44:22,177 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:44:22,177 - INFO - [cached since 153s ago] () +2025-04-09 21:44:22,236 - INFO - ROLLBACK +2025-04-09 21:44:44,374 - INFO - BEGIN (implicit) +2025-04-09 21:44:44,374 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:44:44,374 - INFO - [cached since 176.3s ago] ('admin',) +2025-04-09 21:44:44,433 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE applied_jobs.applied_on >= %s AND applied_jobs.applied_on < %s +2025-04-09 21:44:44,433 - INFO - [cached since 121.5s ago] (datetime.date(2025, 4, 3), datetime.date(2025, 4, 10)) +2025-04-09 21:44:44,493 - INFO - SELECT users.id AS users_id, users.username AS users_username, users.hashed_password AS users_hashed_password, users.`role` AS users_role, users.is_active AS users_is_active +FROM users +WHERE users.id IN (%s) +2025-04-09 21:44:44,494 - INFO - [cached since 121.5s ago] (7,) +2025-04-09 21:44:44,553 - INFO - SELECT client.id AS client_id, client.user_login AS client_user_login, client.user_nicename AS client_user_nicename, client.user_email AS client_user_email, client.phone AS client_phone, client.json_data AS client_json_data, client.user_status AS client_user_status +FROM client +WHERE client.id IN (%s) +2025-04-09 21:44:44,553 - INFO - [cached since 121.5s ago] (1,) +2025-04-09 21:44:44,611 - INFO - SELECT jobs.job_id AS jobs_job_id, jobs.job_title AS jobs_job_title, jobs.job_company AS jobs_job_company, jobs.minimum_annual_salary AS jobs_minimum_annual_salary, jobs.salary_currency AS jobs_salary_currency, jobs.location_type AS jobs_location_type, jobs.location AS jobs_location, jobs.job_level AS jobs_job_level, jobs.job_type AS jobs_job_type, jobs.days_posted AS jobs_days_posted, jobs.hourly_rate AS jobs_hourly_rate, jobs.link AS jobs_link, jobs.link_company AS jobs_link_company, jobs.active AS jobs_active, jobs.about AS jobs_about, jobs.date_posted AS jobs_date_posted, jobs.data_requested AS jobs_data_requested, jobs.text AS jobs_text +FROM jobs +WHERE jobs.job_id IN (%s) +2025-04-09 21:44:44,612 - INFO - [cached since 121.5s ago] (4192694362,) +2025-04-09 21:44:44,727 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:44:44,727 - INFO - [cached since 175.5s ago] () +2025-04-09 21:44:44,788 - INFO - ROLLBACK +2025-04-09 21:44:50,988 - INFO - BEGIN (implicit) +2025-04-09 21:44:50,989 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:44:50,989 - INFO - [cached since 182.9s ago] ('admin',) +2025-04-09 21:44:51,050 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority +FROM applied_jobs INNER JOIN jobs ON jobs.job_id = applied_jobs.job_id +WHERE jobs.date_posted >= %s AND jobs.date_posted < %s AND applied_jobs.applied_on >= %s AND applied_jobs.applied_on < %s +2025-04-09 21:44:51,050 - INFO - [generated in 0.00027s] (datetime.date(2025, 4, 3), datetime.date(2025, 4, 10), datetime.date(2025, 4, 3), datetime.date(2025, 4, 10)) +2025-04-09 21:44:51,118 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:44:51,118 - INFO - [cached since 181.9s ago] () +2025-04-09 21:44:51,176 - INFO - ROLLBACK +2025-04-09 21:45:12,028 - INFO - BEGIN (implicit) +2025-04-09 21:45:12,029 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:45:12,029 - INFO - [cached since 203.9s ago] ('admin',) +2025-04-09 21:45:12,087 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:45:12,087 - INFO - [cached since 203.9s ago] () +2025-04-09 21:45:13,451 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:45:13,451 - INFO - [cached since 204.2s ago] () +2025-04-09 21:45:13,529 - INFO - ROLLBACK +2025-04-09 21:45:15,823 - INFO - BEGIN (implicit) +2025-04-09 21:45:15,823 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:45:15,823 - INFO - [cached since 207.7s ago] ('admin',) +2025-04-09 21:45:15,881 - INFO - SELECT users.id +FROM users +WHERE users.username = %s +2025-04-09 21:45:15,882 - INFO - [cached since 194.5s ago] ('admin',) +2025-04-09 21:45:15,939 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +WHERE applied_jobs.status IN (%s) AND applied_jobs.assignee = %s +2025-04-09 21:45:15,940 - INFO - [cached since 194.5s ago] ('In-Progress', 5) +2025-04-09 21:45:16,058 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:45:16,058 - INFO - [cached since 206.9s ago] () +2025-04-09 21:45:16,116 - INFO - ROLLBACK +2025-04-09 21:45:21,005 - INFO - BEGIN (implicit) +2025-04-09 21:45:21,006 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:45:21,006 - INFO - [cached since 212.9s ago] ('admin',) +2025-04-09 21:45:21,065 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:45:21,066 - INFO - [cached since 212.9s ago] () +2025-04-09 21:45:22,391 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:45:22,391 - INFO - [cached since 213.2s ago] () +2025-04-09 21:45:22,511 - INFO - ROLLBACK +2025-04-09 21:48:51,649 - INFO - BEGIN (implicit) +2025-04-09 21:48:51,649 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:48:51,649 - INFO - [cached since 423.6s ago] ('admin',) +2025-04-09 21:48:51,708 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:48:51,708 - INFO - [cached since 422.5s ago] () +2025-04-09 21:48:51,766 - INFO - ROLLBACK +2025-04-09 21:48:53,543 - INFO - BEGIN (implicit) +2025-04-09 21:48:53,544 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +WHERE users.username = %s +2025-04-09 21:48:53,544 - INFO - [cached since 425.5s ago] ('admin',) +2025-04-09 21:48:53,602 - INFO - SELECT applied_jobs.id, applied_jobs.client_id, applied_jobs.job_id, applied_jobs.applied_on, applied_jobs.status, applied_jobs.assignee, applied_jobs.priority, client_1.id AS id_1, client_1.user_login, client_1.user_nicename, client_1.user_email, client_1.phone, client_1.json_data, client_1.user_status, jobs_1.job_id AS job_id_1, jobs_1.job_title, jobs_1.job_company, jobs_1.minimum_annual_salary, jobs_1.salary_currency, jobs_1.location_type, jobs_1.location, jobs_1.job_level, jobs_1.job_type, jobs_1.days_posted, jobs_1.hourly_rate, jobs_1.link, jobs_1.link_company, jobs_1.active, jobs_1.about, jobs_1.date_posted, jobs_1.data_requested, jobs_1.text, users_1.id AS id_2, users_1.username, users_1.hashed_password, users_1.`role`, users_1.is_active +FROM applied_jobs LEFT OUTER JOIN client AS client_1 ON client_1.id = applied_jobs.client_id LEFT OUTER JOIN jobs AS jobs_1 ON jobs_1.job_id = applied_jobs.job_id LEFT OUTER JOIN users AS users_1 ON users_1.id = applied_jobs.assignee +2025-04-09 21:48:53,602 - INFO - [cached since 425.5s ago] () +2025-04-09 21:48:54,909 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users +2025-04-09 21:48:54,910 - INFO - [cached since 425.7s ago] () +2025-04-09 21:48:54,982 - INFO - ROLLBACK +2025-04-09 21:49:01,244 - INFO - BEGIN (implicit) +2025-04-09 21:49:01,245 - INFO - SELECT client.id, client.user_login, client.user_nicename, client.user_email, client.phone, client.json_data, client.user_status +FROM client +WHERE client.id = %s +2025-04-09 21:49:01,246 - INFO - [generated in 0.00033s] (1,) +2025-04-09 21:49:01,305 - INFO - ROLLBACK +2025-04-09 21:49:05,890 - INFO - BEGIN (implicit) +2025-04-09 21:49:05,891 - INFO - SELECT client.id, client.user_login, client.user_nicename, client.user_email, client.phone, client.json_data, client.user_status +FROM client +WHERE client.id = %s +2025-04-09 21:49:05,891 - INFO - [cached since 4.646s ago] (69,) +2025-04-09 21:49:05,949 - INFO - ROLLBACK +2025-04-09 21:49:15,841 - INFO - BEGIN (implicit) +2025-04-09 21:49:15,841 - INFO - SELECT client.id, client.user_login, client.user_nicename, client.user_email, client.phone, client.json_data, client.user_status +FROM client +WHERE client.id = %s +2025-04-09 21:49:15,841 - INFO - [cached since 14.6s ago] (69,) +2025-04-09 21:49:15,899 - INFO - ROLLBACK +2025-04-09 21:49:30,744 - INFO - SELECT DATABASE() +2025-04-09 21:49:30,745 - INFO - [raw sql] () +2025-04-09 21:49:30,859 - INFO - SELECT @@sql_mode +2025-04-09 21:49:30,859 - INFO - [raw sql] () +2025-04-09 21:49:30,916 - INFO - SELECT @@lower_case_table_names +2025-04-09 21:49:30,916 - INFO - [raw sql] () +2025-04-09 21:49:31,030 - INFO - BEGIN (implicit) +2025-04-09 21:49:31,031 - INFO - DESCRIBE `ch7a461e0f_link`.`users` +2025-04-09 21:49:31,031 - INFO - [raw sql] () +2025-04-09 21:49:31,088 - INFO - DESCRIBE `ch7a461e0f_link`.`profile` +2025-04-09 21:49:31,088 - INFO - [raw sql] () +2025-04-09 21:49:31,146 - INFO - DESCRIBE `ch7a461e0f_link`.`jobs` +2025-04-09 21:49:31,146 - INFO - [raw sql] () +2025-04-09 21:49:31,204 - INFO - DESCRIBE `ch7a461e0f_link`.`client` +2025-04-09 21:49:31,204 - INFO - [raw sql] () +2025-04-09 21:49:31,262 - INFO - DESCRIBE `ch7a461e0f_link`.`meta_client` +2025-04-09 21:49:31,262 - INFO - [raw sql] () +2025-04-09 21:49:31,320 - INFO - DESCRIBE `ch7a461e0f_link`.`applied_jobs` +2025-04-09 21:49:31,320 - INFO - [raw sql] () +2025-04-09 21:49:31,378 - INFO - COMMIT +2025-04-09 21:49:31,555 - INFO - BEGIN (implicit) +2025-04-09 21:49:31,568 - INFO - SELECT users.id, users.username, users.hashed_password, users.`role`, users.is_active +FROM users + LIMIT %s +2025-04-09 21:49:31,569 - INFO - [generated in 0.00035s] (1,) +2025-04-09 21:49:31,627 - INFO - ROLLBACK diff --git a/main.py b/main.py index 75e54ae..4d0c952 100644 --- a/main.py +++ b/main.py @@ -5,6 +5,9 @@ from fastapi.staticfiles import StaticFiles from model.database import init_db from routers import index, logins, users, product, profile, jobs, client, auth1 from fastapi.middleware.cors import CORSMiddleware +from fastapi.middleware import Middleware +from starlette.middleware.base import BaseHTTPMiddleware + import logging @@ -66,4 +69,28 @@ async def auth_exception_handler(request: Request, exc: HTTPException): @app.on_event("startup") async def startup(): - await init_db() \ No newline at end of file + await init_db() + + +class TokenRefreshMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + response = await call_next(request) + + # If new tokens were set during the request + if hasattr(request.state, "new_tokens"): + for cookie in request.state.new_tokens.cookies: + response.set_cookie( + key=cookie.key, + value=cookie.value, + max_age=cookie.max_age, + expires=cookie.expires, + path=cookie.path, + domain=cookie.domain, + secure=cookie.secure, + httponly=cookie.http_only, + samesite=cookie.samesite + ) + + return response + +app.add_middleware(TokenRefreshMiddleware) \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 1746ec6..b275c1c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,11 +11,14 @@ dependencies = [ "beautifulsoup4>=4.13.3", "fastapi>=0.115.8", "jinja2>=3.1.5", + "jose>=1.0.0", "linkedin-api>=2.3.1", "passlib[bcrypt]>=1.7.4", + "pycryptodome>=3.22.0", "pyjwt>=2.10.1", "pymysql>=1.1.1", "python-dotenv>=1.0.1", + "python-jose[cryptography]>=3.4.0", "python-multipart>=0.0.20", "requests>=2.32.3", "schedule>=1.2.2", diff --git a/routers/logins.py b/routers/logins.py index 8ba6225..8069c7a 100644 --- a/routers/logins.py +++ b/routers/logins.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter, Depends, HTTPException, Request, Form, Response +from fastapi import APIRouter, Depends, HTTPException, Request, Form, Response, status from fastapi.responses import RedirectResponse from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.future import select @@ -7,9 +7,9 @@ from fastapi.templating import Jinja2Templates from passlib.context import CryptContext from datetime import datetime, timedelta import jwt +from jose import JWTError from model.database import get_async_session, User -# from model.models import User router = APIRouter() templates = Jinja2Templates(directory="templates") @@ -17,6 +17,7 @@ templates = Jinja2Templates(directory="templates") SECRET_KEY = "your_secret_key" ALGORITHM = "HS256" ACCESS_TOKEN_EXPIRE_MINUTES = 30 +REFRESH_TOKEN_EXPIRE_DAYS = 7 pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") @@ -27,6 +28,77 @@ def create_access_token(data: dict, expires_delta: timedelta = None): to_encode.update({"exp": expire}) return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM) +def create_refresh_token(data: dict, expires_delta: timedelta = None): + to_encode = data.copy() + expire = datetime.utcnow() + (expires_delta or timedelta(days=REFRESH_TOKEN_EXPIRE_DAYS)) + to_encode.update({"exp": expire, "type": "refresh"}) + return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM) + +async def get_current_user(request: Request, db: AsyncSession = Depends(get_async_session)): + token = request.cookies.get("access_token") + refresh_token = request.cookies.get("refresh_token") + + if not token and not refresh_token: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Not authenticated", + headers={"WWW-Authenticate": "Bearer"}, + ) + + try: + if token: + payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) + username: str = payload.get("sub") + if username is None: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid authentication credentials", + headers={"WWW-Authenticate": "Bearer"}, + ) + else: + # Если access_token истек, пробуем обновить через refresh_token + payload = jwt.decode(refresh_token, SECRET_KEY, algorithms=[ALGORITHM]) + if payload.get("type") != "refresh": + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid refresh token", + ) + username: str = payload.get("sub") + if username is None: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid authentication credentials", + headers={"WWW-Authenticate": "Bearer"}, + ) + + # Создаем новые токены + new_access_token = create_access_token(data={"sub": username}) + new_refresh_token = create_refresh_token(data={"sub": username}) + + # Обновляем токены в куках через response + response = Response() + response.set_cookie(key="access_token", value=new_access_token, httponly=True) + response.set_cookie(key="refresh_token", value=new_refresh_token, httponly=True) + request.state.new_tokens = response + + except JWTError: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid token", + headers={"WWW-Authenticate": "Bearer"}, + ) + + stmt = select(User).where(User.username == username) + result = await db.execute(stmt) + user = result.scalar_one_or_none() + if user is None: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="User not found", + headers={"WWW-Authenticate": "Bearer"}, + ) + return user + async def authenticate_user(db: AsyncSession, username: str, password: str): stmt = select(User).where(User.username == username) result = await db.execute(stmt) @@ -52,12 +124,76 @@ async def login( return Response(content="Неправильный логин или пароль", media_type="text/html") access_token = create_access_token(data={"sub": username, "role": user.role}) + refresh_token = create_refresh_token(data={"sub": username, "role": user.role}) + response = RedirectResponse(url="/product", status_code=303) response.set_cookie(key="access_token", value=access_token, httponly=True) + response.set_cookie(key="refresh_token", value=refresh_token, httponly=True) return response @router.get("/logout") async def logout(): response = RedirectResponse(url="/login", status_code=303) response.delete_cookie("access_token") + response.delete_cookie("refresh_token") return response + +@router.get("/refresh") +async def refresh_token(request: Request, db: AsyncSession = Depends(get_async_session)): + refresh_token = request.cookies.get("refresh_token") + if not refresh_token: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Refresh token is missing", + ) + + try: + payload = jwt.decode(refresh_token, SECRET_KEY, algorithms=[ALGORITHM]) + if payload.get("type") != "refresh": + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid refresh token", + ) + username = payload.get("sub") + if username is None: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid refresh token", + ) + + # Создаем новые токены + access_token = create_access_token(data={"sub": username}) + new_refresh_token = create_refresh_token(data={"sub": username}) + + response = RedirectResponse(url=request.headers.get("referer", "/"), status_code=303) + response.set_cookie(key="access_token", value=access_token, httponly=True) + response.set_cookie(key="refresh_token", value=new_refresh_token, httponly=True) + return response + + except JWTError: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid refresh token", + ) + + + +async def token_refresh_middleware(request: Request, call_next): + response = await call_next(request) + + # Если в запросе есть новые токены (установленные в get_current_user) + if hasattr(request.state, "new_tokens"): + for cookie in request.state.new_tokens.cookies: + response.set_cookie( + key=cookie.key, + value=cookie.value, + max_age=cookie.max_age, + expires=cookie.expires, + path=cookie.path, + domain=cookie.domain, + secure=cookie.secure, + httponly=cookie.http_only, + samesite=cookie.samesite + ) + + return response \ No newline at end of file diff --git a/templates/productf.html b/templates/productf.html index 9a86c1c..ab3d031 100644 --- a/templates/productf.html +++ b/templates/productf.html @@ -191,6 +191,7 @@ + diff --git a/uv.lock b/uv.lock index 3f6776f..531ce53 100644 --- a/uv.lock +++ b/uv.lock @@ -12,11 +12,14 @@ dependencies = [ { name = "beautifulsoup4" }, { name = "fastapi" }, { name = "jinja2" }, + { name = "jose" }, { name = "linkedin-api" }, { name = "passlib", extra = ["bcrypt"] }, + { name = "pycryptodome" }, { name = "pyjwt" }, { name = "pymysql" }, { name = "python-dotenv" }, + { name = "python-jose", extra = ["cryptography"] }, { name = "python-multipart" }, { name = "requests" }, { name = "schedule" }, @@ -32,11 +35,14 @@ requires-dist = [ { name = "beautifulsoup4", specifier = ">=4.13.3" }, { name = "fastapi", specifier = ">=0.115.8" }, { name = "jinja2", specifier = ">=3.1.5" }, + { name = "jose", specifier = ">=1.0.0" }, { name = "linkedin-api", specifier = ">=2.3.1" }, { name = "passlib", extras = ["bcrypt"], specifier = ">=1.7.4" }, + { name = "pycryptodome", specifier = ">=3.22.0" }, { name = "pyjwt", specifier = ">=2.10.1" }, { name = "pymysql", specifier = ">=1.1.1" }, { name = "python-dotenv", specifier = ">=1.0.1" }, + { name = "python-jose", extras = ["cryptography"], specifier = ">=3.4.0" }, { name = "python-multipart", specifier = ">=0.0.20" }, { name = "requests", specifier = ">=2.32.3" }, { name = "schedule", specifier = ">=1.2.2" }, @@ -157,6 +163,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, ] +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +] + [[package]] name = "charset-normalizer" version = "3.4.1" @@ -213,6 +252,53 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] +[[package]] +name = "cryptography" +version = "44.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/25/4ce80c78963834b8a9fd1cc1266be5ed8d1840785c0f2e1b73b8d128d505/cryptography-44.0.2.tar.gz", hash = "sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0", size = 710807 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/ef/83e632cfa801b221570c5f58c0369db6fa6cef7d9ff859feab1aae1a8a0f/cryptography-44.0.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7", size = 6676361 }, + { url = "https://files.pythonhosted.org/packages/30/ec/7ea7c1e4c8fc8329506b46c6c4a52e2f20318425d48e0fe597977c71dbce/cryptography-44.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1", size = 3952350 }, + { url = "https://files.pythonhosted.org/packages/27/61/72e3afdb3c5ac510330feba4fc1faa0fe62e070592d6ad00c40bb69165e5/cryptography-44.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb", size = 4166572 }, + { url = "https://files.pythonhosted.org/packages/26/e4/ba680f0b35ed4a07d87f9e98f3ebccb05091f3bf6b5a478b943253b3bbd5/cryptography-44.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843", size = 3958124 }, + { url = "https://files.pythonhosted.org/packages/9c/e8/44ae3e68c8b6d1cbc59040288056df2ad7f7f03bbcaca6b503c737ab8e73/cryptography-44.0.2-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5", size = 3678122 }, + { url = "https://files.pythonhosted.org/packages/27/7b/664ea5e0d1eab511a10e480baf1c5d3e681c7d91718f60e149cec09edf01/cryptography-44.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c", size = 4191831 }, + { url = "https://files.pythonhosted.org/packages/2a/07/79554a9c40eb11345e1861f46f845fa71c9e25bf66d132e123d9feb8e7f9/cryptography-44.0.2-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a", size = 3960583 }, + { url = "https://files.pythonhosted.org/packages/bb/6d/858e356a49a4f0b591bd6789d821427de18432212e137290b6d8a817e9bf/cryptography-44.0.2-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308", size = 4191753 }, + { url = "https://files.pythonhosted.org/packages/b2/80/62df41ba4916067fa6b125aa8c14d7e9181773f0d5d0bd4dcef580d8b7c6/cryptography-44.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688", size = 4079550 }, + { url = "https://files.pythonhosted.org/packages/f3/cd/2558cc08f7b1bb40683f99ff4327f8dcfc7de3affc669e9065e14824511b/cryptography-44.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7", size = 4298367 }, + { url = "https://files.pythonhosted.org/packages/71/59/94ccc74788945bc3bd4cf355d19867e8057ff5fdbcac781b1ff95b700fb1/cryptography-44.0.2-cp37-abi3-win32.whl", hash = "sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79", size = 2772843 }, + { url = "https://files.pythonhosted.org/packages/ca/2c/0d0bbaf61ba05acb32f0841853cfa33ebb7a9ab3d9ed8bb004bd39f2da6a/cryptography-44.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa", size = 3209057 }, + { url = "https://files.pythonhosted.org/packages/9e/be/7a26142e6d0f7683d8a382dd963745e65db895a79a280a30525ec92be890/cryptography-44.0.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3", size = 6677789 }, + { url = "https://files.pythonhosted.org/packages/06/88/638865be7198a84a7713950b1db7343391c6066a20e614f8fa286eb178ed/cryptography-44.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639", size = 3951919 }, + { url = "https://files.pythonhosted.org/packages/d7/fc/99fe639bcdf58561dfad1faa8a7369d1dc13f20acd78371bb97a01613585/cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd", size = 4167812 }, + { url = "https://files.pythonhosted.org/packages/53/7b/aafe60210ec93d5d7f552592a28192e51d3c6b6be449e7fd0a91399b5d07/cryptography-44.0.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181", size = 3958571 }, + { url = "https://files.pythonhosted.org/packages/16/32/051f7ce79ad5a6ef5e26a92b37f172ee2d6e1cce09931646eef8de1e9827/cryptography-44.0.2-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea", size = 3679832 }, + { url = "https://files.pythonhosted.org/packages/78/2b/999b2a1e1ba2206f2d3bca267d68f350beb2b048a41ea827e08ce7260098/cryptography-44.0.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699", size = 4193719 }, + { url = "https://files.pythonhosted.org/packages/72/97/430e56e39a1356e8e8f10f723211a0e256e11895ef1a135f30d7d40f2540/cryptography-44.0.2-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9", size = 3960852 }, + { url = "https://files.pythonhosted.org/packages/89/33/c1cf182c152e1d262cac56850939530c05ca6c8d149aa0dcee490b417e99/cryptography-44.0.2-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23", size = 4193906 }, + { url = "https://files.pythonhosted.org/packages/e1/99/87cf26d4f125380dc674233971069bc28d19b07f7755b29861570e513650/cryptography-44.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922", size = 4081572 }, + { url = "https://files.pythonhosted.org/packages/b3/9f/6a3e0391957cc0c5f84aef9fbdd763035f2b52e998a53f99345e3ac69312/cryptography-44.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4", size = 4298631 }, + { url = "https://files.pythonhosted.org/packages/e2/a5/5bc097adb4b6d22a24dea53c51f37e480aaec3465285c253098642696423/cryptography-44.0.2-cp39-abi3-win32.whl", hash = "sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5", size = 2773792 }, + { url = "https://files.pythonhosted.org/packages/33/cf/1f7649b8b9a3543e042d3f348e398a061923ac05b507f3f4d95f11938aa9/cryptography-44.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6", size = 3210957 }, +] + +[[package]] +name = "ecdsa" +version = "0.19.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/1f/924e3caae75f471eae4b26bd13b698f6af2c44279f67af317439c2f4c46a/ecdsa-0.19.1.tar.gz", hash = "sha256:478cba7b62555866fcb3bb3fe985e06decbdb68ef55713c4e5ab98c57d508e61", size = 201793 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/a3/460c57f094a4a165c84a1341c373b0a4f5ec6ac244b998d5021aade89b77/ecdsa-0.19.1-py2.py3-none-any.whl", hash = "sha256:30638e27cf77b7e15c4c4cc1973720149e1033827cfd00661ca5c8cc0cdb24c3", size = 150607 }, +] + [[package]] name = "fastapi" version = "0.115.8" @@ -290,6 +376,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb", size = 134596 }, ] +[[package]] +name = "jose" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/3d/832caa69cd0d3be2d608d8290be2221072669aa88e87690837f6b31c480f/jose-1.0.0.tar.gz", hash = "sha256:8436c3617cd94e1ba97828fbb1ce27c129f66c78fb855b4bb47e122b5f345fba", size = 9153 } + [[package]] name = "linkedin-api" version = "2.3.1" @@ -410,6 +502,42 @@ bcrypt = [ { name = "bcrypt" }, ] +[[package]] +name = "pyasn1" +version = "0.4.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a4/db/fffec68299e6d7bad3d504147f9094830b704527a7fc098b721d38cc7fa7/pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", size = 146820 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/1e/a94a8d635fa3ce4cfc7f506003548d0a2447ae76fd5ca53932970fe3053f/pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", size = 77145 }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + +[[package]] +name = "pycryptodome" +version = "3.22.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/44/e6/099310419df5ada522ff34ffc2f1a48a11b37fc6a76f51a6854c182dbd3e/pycryptodome-3.22.0.tar.gz", hash = "sha256:fd7ab568b3ad7b77c908d7c3f7e167ec5a8f035c64ff74f10d47a4edd043d723", size = 4917300 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/65/a05831c3e4bcd1bf6c2a034e399f74b3d6f30bb4e37e36b9c310c09dc8c0/pycryptodome-3.22.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:009e1c80eea42401a5bd5983c4bab8d516aef22e014a4705622e24e6d9d703c6", size = 2490637 }, + { url = "https://files.pythonhosted.org/packages/5c/76/ff3c2e7a60d17c080c4c6120ebaf60f38717cd387e77f84da4dcf7f64ff0/pycryptodome-3.22.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3b76fa80daeff9519d7e9f6d9e40708f2fce36b9295a847f00624a08293f4f00", size = 1635372 }, + { url = "https://files.pythonhosted.org/packages/cc/7f/cc5d6da0dbc36acd978d80a72b228e33aadaec9c4f91c93221166d8bdc05/pycryptodome-3.22.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a31fa5914b255ab62aac9265654292ce0404f6b66540a065f538466474baedbc", size = 2177456 }, + { url = "https://files.pythonhosted.org/packages/92/65/35f5063e68790602d892ad36e35ac723147232a9084d1999630045c34593/pycryptodome-3.22.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0092fd476701eeeb04df5cc509d8b739fa381583cda6a46ff0a60639b7cd70d", size = 2263744 }, + { url = "https://files.pythonhosted.org/packages/cc/67/46acdd35b1081c3dbc72dc466b1b95b80d2f64cad3520f994a9b6c5c7d00/pycryptodome-3.22.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18d5b0ddc7cf69231736d778bd3ae2b3efb681ae33b64b0c92fb4626bb48bb89", size = 2303356 }, + { url = "https://files.pythonhosted.org/packages/3d/f9/a4f8a83384626098e3f55664519bec113002b9ef751887086ae63a53135a/pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f6cf6aa36fcf463e622d2165a5ad9963b2762bebae2f632d719dfb8544903cf5", size = 2176714 }, + { url = "https://files.pythonhosted.org/packages/88/65/e5f8c3a885f70a6e05c84844cd5542120576f4369158946e8cfc623a464d/pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:aec7b40a7ea5af7c40f8837adf20a137d5e11a6eb202cde7e588a48fb2d871a8", size = 2337329 }, + { url = "https://files.pythonhosted.org/packages/b8/2a/25e0be2b509c28375c7f75c7e8d8d060773f2cce4856a1654276e3202339/pycryptodome-3.22.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d21c1eda2f42211f18a25db4eaf8056c94a8563cd39da3683f89fe0d881fb772", size = 2262255 }, + { url = "https://files.pythonhosted.org/packages/41/58/60917bc4bbd91712e53ce04daf237a74a0ad731383a01288130672994328/pycryptodome-3.22.0-cp37-abi3-win32.whl", hash = "sha256:f02baa9f5e35934c6e8dcec91fcde96612bdefef6e442813b8ea34e82c84bbfb", size = 1763403 }, + { url = "https://files.pythonhosted.org/packages/55/f4/244c621afcf7867e23f63cfd7a9630f14cfe946c9be7e566af6c3915bcde/pycryptodome-3.22.0-cp37-abi3-win_amd64.whl", hash = "sha256:d086aed307e96d40c23c42418cbbca22ecc0ab4a8a0e24f87932eeab26c08627", size = 1794568 }, +] + [[package]] name = "pydantic" version = "2.10.6" @@ -490,6 +618,25 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863 }, ] +[[package]] +name = "python-jose" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ecdsa" }, + { name = "pyasn1" }, + { name = "rsa" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/a0/c49687cf40cb6128ea4e0559855aff92cd5ebd1a60a31c08526818c0e51e/python-jose-3.4.0.tar.gz", hash = "sha256:9a9a40f418ced8ecaf7e3b28d69887ceaa76adad3bcaa6dae0d9e596fec1d680", size = 92145 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/b0/2586ea6b6fd57a994ece0b56418cbe93fff0efb85e2c9eb6b0caf24a4e37/python_jose-3.4.0-py2.py3-none-any.whl", hash = "sha256:9c9f616819652d109bd889ecd1e15e9a162b9b94d682534c9c2146092945b78f", size = 34616 }, +] + +[package.optional-dependencies] +cryptography = [ + { name = "cryptography" }, +] + [[package]] name = "python-multipart" version = "0.0.20" @@ -514,6 +661,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, ] +[[package]] +name = "rsa" +version = "4.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyasn1" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/aa/65/7d973b89c4d2351d7fb232c2e452547ddfa243e93131e7cfa766da627b52/rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21", size = 29711 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7", size = 34315 }, +] + [[package]] name = "schedule" version = "1.2.2" @@ -523,6 +682,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/20/a7/84c96b61fd13205f2cafbe263cdb2745965974bdf3e0078f121dfeca5f02/schedule-1.2.2-py3-none-any.whl", hash = "sha256:5bef4a2a0183abf44046ae0d164cadcac21b1db011bdd8102e4a0c1e91e06a7d", size = 12220 }, ] +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + [[package]] name = "sniffio" version = "1.3.1"