heck
This commit is contained in:
parent
4895c86f9f
commit
ab87e880a1
|
@ -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)
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue