From ab87e880a15b3eb2bb1420b6f169653cc00bfcd6 Mon Sep 17 00:00:00 2001 From: Izalia Mae Date: Mon, 4 Oct 2021 22:08:25 -0400 Subject: [PATCH] heck --- izzylib/dbus.py | 63 ++++++++++++++++++++++++++++++++--------- izzylib/path.py | 12 ++++---- izzylib/sql/database.py | 12 ++++---- izzylib/sql/session.py | 2 +- 4 files changed, 64 insertions(+), 25 deletions(-) diff --git a/izzylib/dbus.py b/izzylib/dbus.py index 7e0ad0f..e0c602a 100644 --- a/izzylib/dbus.py +++ b/izzylib/dbus.py @@ -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) diff --git a/izzylib/path.py b/izzylib/path.py index db11acb..da9d095 100644 --- a/izzylib/path.py +++ b/izzylib/path.py @@ -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): diff --git a/izzylib/sql/database.py b/izzylib/sql/database.py index 355a569..7febbc8 100644 --- a/izzylib/sql/database.py +++ b/izzylib/sql/database.py @@ -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) diff --git a/izzylib/sql/session.py b/izzylib/sql/session.py index 0ceb5f6..74cd8ed 100644 --- a/izzylib/sql/session.py +++ b/izzylib/sql/session.py @@ -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