drogon/db_layer/capturing_tasks_interface.py
2020-11-03 07:29:17 +01:00

78 lines
3 KiB
Python

import uuid
from core.mysql_wrapper import get_tasksdb
class CapturingTasksInterface:
def __init__(self):
self.tasksdb = get_tasksdb()
def create_capturing_task(self, referencia, uuid_exploring=None):
ads_root = "https://www.idealista.com/inmueble/"
query_parameters = {
"ad_url": ads_root + referencia,
"uuid": str(uuid.uuid4()),
"status": "Pending",
}
if uuid_exploring is None:
query_statement = """INSERT INTO capturing_tasks_logs
(uuid, write_time, status, ad_url)
VALUES (%(uuid)s, NOW(), %(status)s, %(ad_url)s)"""
else:
query_parameters["uuid_exploring"] = uuid_exploring
query_statement = """INSERT INTO capturing_tasks_logs
(uuid, write_time, status, ad_url, fk_uuid_exploring)
VALUES (%(uuid)s, NOW(), %(status)s, %(ad_url)s, %(uuid_exploring)s)"""
self.tasksdb.query(query_statement, query_parameters)
def get_pending_task(self):
query_statement = """SELECT logs.*
FROM capturing_tasks_logs as logs
INNER JOIN capturing_last as last
ON logs.uuid = last.uuid
WHERE last.status = 'Pending'
ORDER BY logs.write_time ASC
LIMIT 1
"""
cursor = self.tasksdb.query(query_statement, dictionary=True)
try:
return cursor.fetchone()
except:
return None
def update_capturing_task(self, uuid, uuid_exploring, status, ad_url):
query_parameters = {"ad_url": ad_url, "uuid": uuid, "status": status}
if uuid_exploring is None:
query_statement = """INSERT INTO capturing_tasks_logs
(uuid, write_time, status, ad_url)
VALUES (%(uuid)s, NOW(), %(status)s, %(ad_url)s)"""
else:
query_parameters["uuid_exploring"] = uuid_exploring
query_statement = """INSERT INTO capturing_tasks_logs
(uuid, write_time, status, ad_url, fk_uuid_exploring)
VALUES (%(uuid)s, NOW(), %(status)s, %(ad_url)s, %(uuid_exploring)s)"""
self.tasksdb.query(query_statement, query_parameters)
def seconds_since_last_try(self):
query_statement = """SELECT TIME_TO_SEC(TIMEDIFF(now(), write_time))
FROM capturing_tasks_logs
WHERE status = 'Loading'
ORDER BY write_time DESC
LIMIT 1
"""
cursor = self.tasksdb.query(query_statement)
try:
return cursor.fetchone()[0]
except:
return 999
capturing_interface = CapturingTasksInterface()