0.9.4: Add missing file database.py patch.

epel8
Alec Leamas 10 years ago
parent a0e1f48424
commit 59f2b49f64

File diff suppressed because it is too large Load Diff

@ -0,0 +1,185 @@
From afd89cd1a0f41bdfd0bf049e4245258abe7deffb Mon Sep 17 00:00:00 2001
From: Alec Leamas <leamas.alec@gmail.com>
Date: Mon, 7 Sep 2015 13:36:30 +0200
Subject: [PATCH] tools: Add missing file lirc-setup/database.py.
---
tools/Makefile.am | 3 +-
tools/lirc-setup/database.py | 151 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 153 insertions(+), 1 deletion(-)
create mode 100644 tools/lirc-setup/database.py
diff --git a/tools/Makefile.am b/tools/Makefile.am
index f3fd3c4..d0d820c 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -85,7 +85,8 @@ pkgpython_PYTHON = lirc-setup/mvc_control.py \
lirc-setup/mvc_view.py \
lirc-setup/mvc_model.py \
lirc-setup/choosers.py \
- lirc-setup/baseview.py
+ lirc-setup/baseview.py \
+ lirc-setup/database.py
dist_pkgpython_SCRIPTS = lirc-setup/lirc-setup
dist_pkgpython_DATA = lirc-setup/lirc-setup.ui
endif
diff --git a/tools/lirc-setup/database.py b/tools/lirc-setup/database.py
new file mode 100644
index 0000000..1c1e70b
--- /dev/null
+++ b/tools/lirc-setup/database.py
@@ -0,0 +1,151 @@
+''' Simple lirc setup tool - database part.
+
+The database is loaded from some YAML files:
+
+ - kernel-drivers.yaml: Info on the kernel drivers.
+ - drivers,yaml, Info on the uerspace drivers, collected from their
+ compiled information.
+ - confs_by_driver.yaml: Mapping of drivers -> suggested remote files,
+ created by irdb-get.
+
+The directory used to load these files is (first match used):
+ - Current directory
+ - The 'configs' dir.
+ - The ../../configs
+
+Although python cannot guarantee this, the database is designed to be a
+read-only structure.
+
+'''
+
+
+import glob
+import os
+import os.path
+import sys
+
+YAML_MSG = '''
+"Cannot import the yaml library. Please install the python3
+yaml package, on many distributions known as python3-PyYAML. It is also
+available as a pypi package at https://pypi.python.org/pypi/PyYAML.'''
+
+try:
+ import yaml
+except ImportError:
+ print(YAML_MSG)
+ sys.exit(1)
+
+
+def _here(path):
+ ''' Return path added to current dir for __file__. '''
+ return os.path.join(os.path.dirname(os.path.abspath(__file__)), path)
+
+
+class Config(object):
+ ''' The configuration selected, and it's sources. '''
+ # pylint: disable=too-many-instance-attributes
+
+ def __init__(self, config=None):
+ self.device = None # << selected device.
+ self.driver = {} # << Read-only driver dict in db
+ self.config = {} # << Read-only config dict in db
+ self.modinit = "" # << Substituted data from driver
+ self.modprobe = "" # << Substituted data from driver
+ self.lircd_conf = "" # << Name of lircd.conf file
+ self.lircmd_conf = "" # << Name of lircmd.conf file
+ self.label = "" # << Label for driver + device
+ if config:
+ for key, value in config.items():
+ setattr(self, key, value)
+
+
+class Database(object):
+ ''' Reflects the *.yaml files in the configs/ directory. '''
+
+ def __init__(self, path=None):
+
+ if path and os.path.exists(path):
+ configdir = path
+ elif path:
+ raise FileNotFoundError(path)
+ elif os.path.exists(_here('configs')):
+ configdir = _here('configs')
+ elif os.path.exists(_here('../configs')):
+ configdir = _here('../configs')
+ else:
+ raise FileNotFoundError(configdir)
+ db = {}
+ with open(os.path.join(configdir, "confs_by_driver.yaml")) as f:
+ cf = yaml.load(f.read())
+ db['lircd_by_driver'] = cf['lircd_by_driver'].copy()
+ db['lirmcd_by_driver'] = cf['lircmd_by_driver'].copy()
+
+ with open(os.path.join(configdir, "kernel-drivers.yaml")) as f:
+ cf = yaml.load(f.read())
+ db['kernel-drivers'] = cf['drivers'].copy()
+ db['drivers'] = cf['drivers'].copy()
+ with open(os.path.join(configdir, "drivers.yaml")) as f:
+ cf = yaml.load(f.read())
+ db['drivers'].update(cf['drivers'].copy())
+ for key, d in db['drivers'].items():
+ d['id'] = key
+
+ configs = {}
+ for path in glob.glob(configdir + '/*.conf'):
+ with open(path) as f:
+ cf = yaml.load(f.read())
+ configs[cf['config']['id']] = cf['config']
+ db['configs'] = configs
+ self.db = db
+
+ @property
+ def kernel_drivers(self):
+ ''' The kernel-drivers dictionary, drivers.yaml + kernel-drivers.yaml.
+ '''
+ return self.db['kernel-drivers']
+
+ @property
+ def drivers(self):
+ ''' The drivers dictionary, drivers.yaml + kernel-drivers.yaml. '''
+ return self.db['drivers']
+
+ @property
+ def configs(self):
+ ''' Return dict of parsed config/*.conf files, keyd by id. '''
+ return self.db['configs']
+
+ def remotes_by_driver(self, driver):
+ ''' Return the list of remotes suggested for a given driver. '''
+ if isinstance(driver, dict):
+ driver = driver['id']
+ try:
+ return self.db['lircd_by_driver'][driver]
+ except KeyError:
+ return []
+
+ def driver_by_remote(self, remote):
+ ''' Return the driver (possibly None) suggested for a remote. '''
+ for driver, files in self.db['lircd_by_driver'].items():
+ if remote in files:
+ return self.db['drivers'][driver]
+ return None
+
+ def find_config(self, key, value):
+ ''' Return item (a config) in configs where config[key] == value. '''
+ found = [c for c in self.db['configs'].values()
+ if key in c and c[key] == value]
+ if len(found) > 1:
+ print("find_config: not properly found %s, %s): " % (key, value)
+ + ', '.join([c['id'] for c in found]))
+ return None
+ elif not found:
+ print("find_config: Nothing found for %s, %s): " % (key, value))
+ return None
+ found = dict(found[0])
+ if 'device_hint' not in found:
+ found['device_hint'] = \
+ self.db['drivers'][found['driver']]['device_hint']
+ return found
+
+
+# vim: set expandtab ts=4 sw=4:
--
2.4.2

File diff suppressed because it is too large Load Diff

@ -10,9 +10,9 @@ Name: lirc
Version: 0.9.3
%global src_vers %(echo %{version} | sed 's/_/-/g' )
%if 0%{?released}
Release: 3%{?dist}
Release: 4%{?dist}
%else
Release: 0.6.pre3%{tag}
Release: 0.7.pre3%{tag}
%endif
Summary: The Linux Infrared Remote Control package
@ -31,6 +31,7 @@ Source6: README.fedora
Source7: 99-remote-control-lirc.rules
# Config only, cannot be upstreamed.
Patch1: 0001-Changing-effective-user-default.patch
Patch2: 0002-tools-Add-missing-file-lirc-setup-database.py.patch
BuildRequires: alsa-lib-devel
Buildrequires: autoconf
@ -217,6 +218,7 @@ full support for the ftdi device.
%setup -qn %{name}-%{src_vers}-%{tag}
%endif
%patch1 -p1
%patch2 -p1
sed -i -e 's|/usr/local/etc/|/etc/|' contrib/irman2lirc
@ -375,6 +377,9 @@ find /etc/systemd -name lirc.service -xtype l -delete || :
%{_udevrulesdir}/99-remote-control-lirc.rules
%changelog
* Mon Sep 07 2015 Alec Leamas <leamas.alec@gmail.com> - 0.9.3-4
- Fix missing file database.py (lirc-setup cannot start).
* Sun Sep 06 2015 Alec Leamas <leamas.alec@gmail.com> - 0.9.3-3
- Fix missing lirc-drv-irman.

Loading…
Cancel
Save