This commit is contained in:
Izalia Mae 2021-10-04 22:08:25 -04:00
parent 4895c86f9f
commit ab87e880a1
4 changed files with 64 additions and 25 deletions

View file

@ -44,8 +44,9 @@ class DBusClientBase(DBusBase):
super().__init__(*args, **kwargs)
self.proxy = None
self.methods = DotDict()
self.signals = DotDict()
self.method = DotDict()
self.prop = DotDict()
self.signal = DotDict()
def __enter__(self):
@ -57,6 +58,35 @@ class DBusClientBase(DBusBase):
self.disconnect()
def __getattr__(self, key, default=Exception):
try:
return self.method[key]
except KeyError as e:
if default != Exception:
return default
raise e from None
def __getattr__2(self, key):
try:
return self.method[key]
except:
pass
try:
return self.prop[key]
except:
pass
try:
return self.signal[key]
except:
pass
raise AttributeError(f'Not a method, property, or signal: {key}')
def connect(self):
self.proxy = self.get_proxy(self.dbuspath)
@ -92,21 +122,29 @@ class DBusClientBase(DBusBase):
def sig_connect(self, signal, callback, *args, original_args=True, **kwargs):
if original_args:
self.signals[signal].connect(lambda *sigargs, **sigkwargs: callback(*sigargs, *args, **sigkwargs, **kwargs))
self.signal[signal].connect(lambda *sigargs, **sigkwargs: callback(*sigargs, *args, **sigkwargs, **kwargs))
else:
self.signals[signal].connect(lambda *sigargs, **sigkargs: callback(*args, **kwargs))
self.signal[signal].connect(lambda *sigargs, **sigkargs: callback(*args, **kwargs))
def sig_disconnect(self, signal):
self.signal[signal].disconnect()
def set_method(self, name):
self.methods[name] = partial(self.cmd, name)
setattr(self, name, partial(self.cmd, name))
if name not in self.method:
self.method[name] = partial(self.cmd, name)
def set_property(self, name):
if name not in self.prop:
self.prop[name] = getattr(self.proxy, name)
def set_signal(self, name):
signal = getattr(self.proxy, name)
self.signals[name] = signal
setattr(self, name, partial(self.connect, name))
if name not in self.signal:
self.signal[name] = getattr(self.proxy, name)
def set_methods_and_signals(self, namespace=None):
@ -115,13 +153,12 @@ class DBusClientBase(DBusBase):
for e in element:
name = e.attrib['name']
if getattr(self, name, None):
izzylog.verbose('Tried to add an existing method or signal:', name)
continue
if e.tag == 'method':
self.set_method(name)
if e.tag == 'property':
self.set_property(name)
elif e.tag == 'signal':
self.set_signal(name)

View file

@ -80,7 +80,7 @@ class Path(str):
def delete(self):
if self.isdir:
rmtree(self)
shutil.rmtree(self, ignore_errors=True)
else:
os.remove(self)
@ -125,7 +125,7 @@ class Path(str):
if recursive:
return tuple(self.join(f) for dp, dn, fn in os.walk(self) for f in fn)
return [self.join(path) for path in os.listdir(self)]
return tuple(self.join(path) for path in os.listdir(self))
def mkdir(self, mode=0o755):
@ -139,10 +139,12 @@ class Path(str):
def move(self, path, overwrite=False):
if not overwrite and self.exists:
raise FileExistsError(f'Refusing to move file to existing destination: {path}')
dest = Path(path)
shutil.move(self, path)
if not overwrite and dest.exists:
raise FileExistsError(f'Refusing to move file to existing destination: {dest}')
shutil.move(self, dest)
def open(self, *args, **kwargs):

View file

@ -108,7 +108,7 @@ class Database:
if dbtype == 'sqlite':
url = URL.create(
drivername='sqlite',
database=kwargs.pop('name')
database=kwargs.get('name')
)
else:
@ -122,11 +122,11 @@ class Database:
url = URL.create(
drivername = dbtype,
username = kwargs.pop('user', None),
password = kwargs.pop('password', None),
host = kwargs.pop('host', None),
port = kwargs.pop('port', None),
database = kwargs.pop('name'),
username = kwargs.get('user', None),
password = kwargs.get('password', None),
host = kwargs.get('host', None),
port = kwargs.get('port', None),
database = kwargs.get('name'),
)
self.db = create_engine(url, **engine_kwargs)

View file

@ -19,7 +19,7 @@ class Session(sqlalchemy_session):
self.cache = db.cache
self.sessionid = random_gen(10)
self.database.sessions[self.sessionid] = self
db.sessions[self.sessionid] = self
# remove in the future
self.db = db