Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/modules/wiki/dbutils.py

110 lines
3.3 KiB
Python
Raw Normal View History

2021-07-28 18:51:24 +00:00
import json
2021-08-07 07:56:48 +00:00
from core.elements import MessageSession
2021-07-30 19:32:58 +00:00
from .orm import session, WikiTargetSetInfo, WikiInfo
2021-07-28 18:51:24 +00:00
class WikiTargetInfo:
2021-08-23 14:17:04 +00:00
def __init__(self, msg: [MessageSession, str]):
if isinstance(msg, MessageSession):
targetId = msg.target.targetId
else:
targetId = msg
self.query = session.query(WikiTargetSetInfo).filter_by(targetId=targetId).first()
2021-07-28 18:51:24 +00:00
if self.query is None:
2021-08-26 16:29:58 +00:00
try:
session.add_all([WikiTargetSetInfo(targetId=targetId, iws='{}', headers='{}')])
session.commit()
except Exception:
session.rollback()
raise
2021-08-23 14:17:04 +00:00
self.query = session.query(WikiTargetSetInfo).filter_by(targetId=targetId).first()
2021-07-28 18:51:24 +00:00
def add_start_wiki(self, url):
2021-08-26 16:29:58 +00:00
try:
self.query.link = url
session.commit()
session.expire_all()
return True
except Exception:
session.rollback()
raise
2021-07-28 18:51:24 +00:00
def get_start_wiki(self):
2021-07-30 19:32:58 +00:00
if self.query is not None:
return self.query.link if self.query.link is not None else False
2021-07-28 18:51:24 +00:00
return False
def config_interwikis(self, iw: str, iwlink: str = None, let_it=True):
2021-08-26 16:29:58 +00:00
try:
interwikis = json.loads(self.query.iws)
if let_it:
interwikis[iw] = iwlink
else:
if iw in interwikis:
del interwikis[iw]
self.query.iws = json.dumps(interwikis)
session.commit()
session.expire_all()
return True
except Exception:
session.rollback()
raise
2021-07-28 18:51:24 +00:00
def get_interwikis(self):
q = self.query.iws
if q is not None:
iws = json.loads(q)
return iws
else:
return False
def config_headers(self, headers, let_it: [bool, None] = True):
2021-08-26 16:29:58 +00:00
try:
headers_ = json.loads(self.query.headers)
if let_it:
for x in headers:
headers_[x] = headers[x]
elif let_it is None:
headers_ = {}
else:
for x in headers:
if x in headers_:
del headers_[x]
self.query.headers = json.dumps(headers_)
session.commit()
return True
except Exception:
session.rollback()
raise
2021-07-28 18:51:24 +00:00
def get_headers(self):
2021-07-30 18:06:04 +00:00
if self.query is not None:
q = self.query.headers
2021-07-28 18:51:24 +00:00
headers = json.loads(q)
else:
headers = {'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6'}
return headers
class WikiSiteInfo:
def __init__(self, api_link):
self.api_link = api_link
self.query = session.query(WikiInfo).filter_by(apiLink=api_link).first()
def get(self):
if self.query is not None:
return self.query.siteInfo, self.query.timestamp
return False
def update(self, info: dict):
2021-08-26 16:29:58 +00:00
try:
if self.query is None:
session.add_all([WikiInfo(apiLink=self.api_link, siteInfo=json.dumps(info))])
else:
self.query.siteInfo = json.dumps(info)
session.commit()
return True
except Exception:
session.rollback()
raise