uncia/uncia/database/get.py

97 lines
1.7 KiB
Python

from izzylib import DotDict
def cmd_ban_list(self, types='domain'):
if types == 'domain':
return self.search('ban', handle=None)
bans = []
for row in self.search('ban'):
if row.handle:
bans.append(row)
return bans
def cmd_ban(self, handle=None, domain=None):
cache_key = f'{handle}{domain}'
cache = self.cache.ban.fetch(cache_key)
if cache:
return cache
if handle and not domain:
return self.fetch('ban', handle=handle)
elif not handle and domain:
return self.fetch('ban', domain=domain)
elif handle and domain:
return self.fetch('ban', handle=handle, domain=domain)
raise ValueError('handle or domain not specified')
def cmd_config(self, key):
if key not in self.config_defaults:
raise KeyError(f'Invalid config option: {key}')
cache = self.cache.config.fetch(key)
if cache:
return cache
row = self.fetch('config', key=key)
if not row:
return self.config_defaults[key][0]
value = self.config_defaults[key][1](row.value)
self.cache.config.store(key, value)
return value
def cmd_config_all(self):
data = DotDict()
for key in self.config_defaults:
data[key] = self.get.config(key)
return data
def cmd_inbox(self, data):
for line in ['domain', 'inbox', 'actor']:
row = self.fetch('inbox', **{line: data})
if row:
return row
def cmd_inbox_list(self, value=None):
data = []
if value not in [None, 'domain', 'inbox', 'actor']:
raise ValueError('Invalid row data')
for row in self.search('inbox'):
if not row.followid:
if value:
data.append(row[value])
else:
data.append(row)
return data
def cmd_instance(self, data):
for field in ['domain', 'inbox', 'actor']:
row = self.fetch('inbox', **{field: data})
if row:
break
return row