Files
new_dbsync/update.py
T
2025-05-20 12:02:07 -04:00

171 lines
5.3 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import time
import url.urls
import url.process
import api.tvmaze.cast as mazecast
import api.tvmaze.crew as mazecrew
import api.tvmaze.episodes as mazeepisodes
import api.tvmaze.series as mazeseries
import db.sql
import jprocessor.process
import logs.Logger
from db.functions import settype, dbmongo
from datetime import datetime
response = None
def set_apienv(urls, dbExec, updatesBase):
updatetable = updatesBase[8]
inputdata = uprocess.get_data(urls["updatesurl"])
availableupdates = jget.jconvert(inputdata)
print(f"Retrieved {len(availableupdates)} rows for processing......")
dbExec.update_tvupdates(dbengine["engine"], availableupdates, updatetable)
newupdates = dbExec.rawsql_select(
dbengine["engine"],
"select seriesid,timestamp from updates.tvupdates",
lprint
)
return newupdates
def print_starttime(lprint, ts1):
lprint.logprint("info", f"Sync start time: {str(ts1)}")
def get_tvdb():
tvdb_urls = TVDBURLS.get_data()
return tvdb_urls
def get_tvmaze():
tvmaze_urls = TVMAZEURLS.get_data()
return tvmaze_urls
if __name__ == "__main__":
ROOTDIR = os.getcwd()
directories = {}
if os.name == "nt":
LOGDIR = f"{ROOTDIR}\\log"
directories["SERIESDIR"] = f"{ROOTDIR}\\cache\\series\\"
directories["EPISODEDIR"] = f"{ROOTDIR}\\cache\\episodes\\"
directories["CASTDIR"] = f"{ROOTDIR}\\cache\\cast\\"
directories["CREWDIR"] = f"{ROOTDIR}\\cache\\crew\\"
else:
LOGDIR = f"{ROOTDIR}/log"
directories["SERIESDIR"] = f"{ROOTDIR}/cache/series/"
directories["EPISODEDIR"] = f"{ROOTDIR}/cache/episodes/"
directories["CASTDIR"] = f"{ROOTDIR}/cache/cast/"
directories["CREWDIR"] = f"{ROOTDIR}/cache/crew/"
lprint = logs.Logger.LPrint(LOGDIR, False)
lprint.start_log()
import settings.config
config_options = settings.config.Config(ROOTDIR)
options = config_options.config_options
dbtype, apitype = options["dbtype"], options["apitype"]
dbs = settype(dbtype, apitype, options)
dbclass, dbengine, apiengine = dbs.dbclass, dbs.dbengine, dbs.apiengine
uprocess = url.process.Loadurl()
TVMAZEURLS = url.urls.Tvmazeurls()
TVMAZE_URLS = get_tvmaze()
TVDBURLS = url.urls.TVDBurls()
TVDB_URLS = get_tvdb()
mseries = mazeseries.tvshow()
mcast = mazecast.cast()
mepisode = mazeepisodes.episodes()
mcrew = mazecrew.crew()
countrydictionary = {}
updateRange = None
lprint.logprint("info", "Creating JSON instance for data retrieval.")
jget = jprocessor.process.Jsonload()
lprint.logprint("info", "JSON instance created.")
print(f"Update type is {options['updatetype']}")
timedifference = options["updatetype"]
currenttimestamp = time.time()
if timedifference.lower() == "full":
timedifference = int(currenttimestamp)
basetime = str(currenttimestamp).split(".")
currenttimestamp = int(basetime[0])
ts1 = str(datetime.now()).split(".")[0]
print("Sync start time: " + str(ts1))
print_starttime(lprint, ts1)
updatesBase = dbengine["updatesBase"]
dboBase = dbengine["dboBase"]
session = dbengine["session"]
dbExec = db.sql.Dbexec()
createTables = dbclass["Createtables"]
Tables = dbclass["Tables"]
createTempTables = dbclass["CreateTemptables"]
new_updates = {}
sqlexec = db.sql.SQLGenerate()
mt = createTables(
dbengine["session"],
dbengine["metadata"],
dbengine["engine"]
)
ct = createTempTables(
dbengine["session"],
dbengine["metadata"],
dbengine["engine"]
)
tempTableList = ct.tablelist
if options["apitype"].lower() == "tvmaze":
new_updates = set_apienv(TVMAZE_URLS, dbExec, tempTableList)
from cache.process import Cacher
cacher = Cacher()
cacher.process(options, jget, new_updates, ROOTDIR, TVMAZE_URLS)
timeDifference = options["updatetype"]
currentTimestamp = time.time()
baseTime = str(currentTimestamp).split(".")
if timeDifference.lower() == "full" or options["initload"] == "1":
tdifference = 0
else:
tdifference = int(currentTimestamp) - int(
options[options["updatetype"]]
)
needed_updates = []
updateList = []
for result in new_updates:
updateid = result[0]
updatestamp = int(result[1])
tdif = int(tdifference)
if updatestamp > tdif:
needed_updates.append(updateid)
updateList.append(updateid)
print("Update Type: " + str(options["updatetype"]))
updateRange = len(updateList)
print("Number of updates: " + str(updateRange))
cacher.update_cache(
jget, updateList, ROOTDIR, TVMAZE_URLS, options, lprint
)
countrylisting = dbExec.rawsql_select(
dbengine["engine"],
"select row_id, country_name from dbo.countrydata",
lprint
)
for country in countrylisting:
country_name = country[1]
country_id = country[0]
countrydictionary[country_name] = country_id
mongo_updater = dbmongo(options)
mongo_updater.update_mongo(
updateList,
ROOTDIR,
directories,
jget,
countrydictionary,
dbExec,
dbengine,
dboBase,
lprint,
)
exit(0)