drogon/db_layer/capturing_tasks_interface.py

77 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()