<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.15"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>LIRC libraries: /home/iurt/rpmbuild/BUILD/lirc-0.10.1/python-pkg/lirc/database.py Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="navtree.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="resize.js"></script> <script type="text/javascript" src="navtreedata.js"></script> <script type="text/javascript" src="navtree.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(document).ready(initResizable); /* @license-end */</script> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/searchdata.js"></script> <script type="text/javascript" src="search/search.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectlogo"><img alt="Logo" src="diode-2.gif"/></td> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">LIRC libraries </div> <div id="projectbrief">LinuxInfraredRemoteControl</div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.15 --> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ var searchBox = new SearchBox("searchBox", "search",false,'Search'); /* @license-end */ </script> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('',true,false,'search.php','Search'); $(document).ready(function() { init_search(); }); }); /* @license-end */</script> <div id="main-nav"></div> </div><!-- top --> <div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="nav-tree"> <div id="nav-tree-contents"> <div id="nav-sync" class="sync"></div> </div> </div> <div id="splitbar" style="-moz-user-select:none;" class="ui-resizable-handle"> </div> </div> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(document).ready(function(){initNavTree('database_8py_source.html','');}); /* @license-end */ </script> <div id="doc-content"> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> </div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> <iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults"> </iframe> </div> <div class="header"> <div class="headertitle"> <div class="title">database.py</div> </div> </div><!--header--> <div class="contents"> <a href="database_8py.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="stringliteral">''' Read-only configuration database. '''</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">import</span> glob</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">import</span> os</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">import</span> os.path</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">import</span> subprocess</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">import</span> sys</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keywordflow">try</span>:</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">import</span> yaml</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">except</span> ImportError:</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  _YAML_MSG = <span class="stringliteral">'''</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="stringliteral">"Cannot import the yaml library. Please install the python3</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="stringliteral">yaml package, on many distributions known as python3-PyYAML. It is also</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="stringliteral">available as a pypi package at https://pypi.python.org/pypi/PyYAML.'''</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  print(_YAML_MSG)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  sys.exit(1)</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">import</span> config</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">def </span>_here(path):</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="stringliteral">''' Return path added to current dir for __file__. '''</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">return</span> os.path.join(os.path.dirname(os.path.abspath(__file__)), path)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">def </span>_load_kerneldrivers(configdir):</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="stringliteral">''' Parse the kerneldrivers.yaml file, discard unavailable</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="stringliteral"> drivers.</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="stringliteral"> '''</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">with</span> open(os.path.join(configdir, <span class="stringliteral">"kernel-drivers.yaml"</span>)) <span class="keyword">as</span> f:</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  cf = yaml.load(f.read())</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  drivers = cf[<span class="stringliteral">'drivers'</span>].copy()</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">for</span> driver <span class="keywordflow">in</span> cf[<span class="stringliteral">'drivers'</span>]:</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">if</span> driver == <span class="stringliteral">'default'</span>:</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">continue</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">with</span> open(<span class="stringliteral">'/dev/null'</span>, <span class="stringliteral">'w'</span>) <span class="keyword">as</span> f:</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">try</span>:</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  subprocess.check_output([config.MODINFO, driver],</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  stderr=f)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">except</span> subprocess.CalledProcessError:</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  del drivers[driver]</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">return</span> drivers</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">class </span>ItemLookupError(Exception):</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="stringliteral">"""A lookup failed, either too namy or no matches found. """</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">pass</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">class </span>Config(object):</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="stringliteral">''' The configuration selected, and it's sources. '''</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment"># pylint: disable=too-many-instance-attributes</span></div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1ItemLookupError.html"> 91</a></span> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">def </span>__init__(self, cf=None):</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  self.device = <span class="keywordtype">None</span> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  self.driver = {} </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  self.config = {} </div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Config.html"> 96</a></span>  self.<a class="code" href="classlirc_1_1database_1_1Config.html#aead17e529927d2fa0f13d94fc5b8e741">modinit</a> = <span class="stringliteral">""</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  self.<a class="code" href="classlirc_1_1database_1_1Config.html#ae4b4386935c5da5764115e8f7b02e6cc">modprobe</a> = <span class="stringliteral">""</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  self.<a class="code" href="classlirc_1_1database_1_1Config.html#af5cbcd7f1f9d0b85a2a0dbdfc5f417ff">lircd_conf</a> = <span class="stringliteral">""</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  self.<a class="code" href="classlirc_1_1database_1_1Config.html#abdc84b94836ee7c02bf00b9d6c02c0ba">lircmd_conf</a> = <span class="stringliteral">""</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  self.<a class="code" href="classlirc_1_1database_1_1Config.html#af6e9f414dd6ef8d8d7612bb303b29ce0">label</a> = <span class="stringliteral">""</span> </div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Config.html#afee3fd524fb85b8ffbe39a5639ce7fb5"> 101</a></span>  <span class="keywordflow">if</span> cf:</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Config.html#a3486cd23389279fbb80bb5c4d547eee7"> 102</a></span>  <span class="keywordflow">for</span> key, value <span class="keywordflow">in</span> cf.items():</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Config.html#aead17e529927d2fa0f13d94fc5b8e741"> 103</a></span>  setattr(self, key, value)</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Config.html#ae4b4386935c5da5764115e8f7b02e6cc"> 104</a></span> </div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Config.html#af5cbcd7f1f9d0b85a2a0dbdfc5f417ff"> 105</a></span>  @property</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Config.html#abdc84b94836ee7c02bf00b9d6c02c0ba"> 106</a></span>  <span class="keyword">def </span><a class="code" href="classlirc_1_1database_1_1Config.html#a422c5b90676cdf1df9e1de9dd8efc6e6">note</a>(self):</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Config.html#af6e9f414dd6ef8d8d7612bb303b29ce0"> 107</a></span>  <span class="stringliteral">''' The possible note to display when selected. '''</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">if</span> <span class="stringliteral">'note'</span> <span class="keywordflow">in</span> self.<a class="code" href="classlirc_1_1database_1_1Config.html#a3486cd23389279fbb80bb5c4d547eee7">config</a>:</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">return</span> self.<a class="code" href="classlirc_1_1database_1_1Config.html#a3486cd23389279fbb80bb5c4d547eee7">config</a>[<span class="stringliteral">'note'</span>]</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">else</span>:</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">return</span> <span class="keywordtype">None</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Config.html#a422c5b90676cdf1df9e1de9dd8efc6e6"> 114</a></span> <span class="keyword">class </span><a class="code" href="classlirc_1_1database_1_1Database.html">Database</a>(object):</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="stringliteral">''' Reflects the *.yaml files in the configs/ directory. '''</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">def </span>__init__(self, path=None, yamlpath=None):</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  devel_path = _here(<span class="stringliteral">'../../configs'</span>)</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  installed_path = os.path.join(config.DATADIR, <span class="stringliteral">'lirc'</span>,<span class="stringliteral">'configs'</span>)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span> path <span class="keywordflow">and</span> os.path.exists(path):</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Database.html"> 122</a></span>  configdir = path</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">elif</span> path:</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">raise</span> FileNotFoundError(path)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">elif</span> os.path.exists(devel_path):</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  configdir = devel_path</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">elif</span> os.path.exists(installed_path):</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  configdir = installed_path</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">else</span>:</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">raise</span> FileNotFoundError(devel_path + <span class="stringliteral">':'</span> + installed_path)</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">if</span> <span class="keywordflow">not</span> yamlpath:</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  yamlpath = configdir</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  db = {}</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keyword">with</span> open(os.path.join(yamlpath, <span class="stringliteral">"confs_by_driver.yaml"</span>)) <span class="keyword">as</span> f:</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  cf = yaml.load(f.read())</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  db[<span class="stringliteral">'lircd_by_driver'</span>] = cf[<span class="stringliteral">'lircd_by_driver'</span>].copy()</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  db[<span class="stringliteral">'lircmd_by_driver'</span>] = cf[<span class="stringliteral">'lircmd_by_driver'</span>].copy()</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  db[<span class="stringliteral">'kernel-drivers'</span>] = _load_kerneldrivers(configdir)</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  db[<span class="stringliteral">'drivers'</span>] = db[<span class="stringliteral">'kernel-drivers'</span>].copy()</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keyword">with</span> open(os.path.join(yamlpath, <span class="stringliteral">"drivers.yaml"</span>)) <span class="keyword">as</span> f:</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  cf = yaml.load(f.read())</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  db[<span class="stringliteral">'drivers'</span>].update(cf[<span class="stringliteral">'drivers'</span>].copy())</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">for</span> key, d <span class="keywordflow">in</span> db[<span class="stringliteral">'drivers'</span>].items():</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  d[<span class="stringliteral">'id'</span>] = key</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  hint = d[<span class="stringliteral">'device_hint'</span>]</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">if</span> <span class="keywordflow">not</span> hint:</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">continue</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  hint = hint.strip()</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span> hint.startswith(<span class="stringliteral">'"'</span>) <span class="keywordflow">and</span> hint.endswith(<span class="stringliteral">'"'</span>):</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  hint = hint[1:-1]</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  hint = hint.replace(<span class="stringliteral">r'\"'</span>, <span class="stringliteral">"@$#!"</span>)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  hint = hint.replace(<span class="stringliteral">'"'</span>, <span class="stringliteral">''</span>)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  hint = hint.replace(<span class="stringliteral">"@$#!"</span>, <span class="stringliteral">'"'</span>)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  hint = hint.replace(<span class="stringliteral">"\\\\"</span>, <span class="stringliteral">"\\"</span>)</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  d[<span class="stringliteral">'device_hint'</span>] = hint</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  configs = {}</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">for</span> path <span class="keywordflow">in</span> glob.glob(configdir + <span class="stringliteral">'/*.conf'</span>):</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keyword">with</span> open(path) <span class="keyword">as</span> f:</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  cf = yaml.load(f.read())</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  configs[cf[<span class="stringliteral">'config'</span>][<span class="stringliteral">'id'</span>]] = cf[<span class="stringliteral">'config'</span>]</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  db[<span class="stringliteral">'configs'</span>] = configs</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a> = db</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  @property</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">def </span><a class="code" href="classlirc_1_1database_1_1Database.html#aea621bb5f1c278b60461fe72d01e7d20">kernel_drivers</a>(self):</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="stringliteral">''' The kernel-drivers dictionary, drivers.yaml + kernel-drivers.yaml.</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="stringliteral"> '''</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">return</span> self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a>[<span class="stringliteral">'kernel-drivers'</span>]</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  @property</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">def </span><a class="code" href="classlirc_1_1database_1_1Database.html#a98fb7e9064458e00f9aa09e64f870784">drivers</a>(self):</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="stringliteral">''' The drivers dictionary, drivers.yaml + kernel-drivers.yaml. '''</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">return</span> self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a>[<span class="stringliteral">'drivers'</span>]</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Database.html#aea621bb5f1c278b60461fe72d01e7d20"> 176</a></span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  @property</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keyword">def </span><a class="code" href="classlirc_1_1database_1_1Database.html#a2a596119ada4c89a4b7ef907e41a6397">configs</a>(self):</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="stringliteral">''' Return dict of parsed config/*.conf files, keyd by id. '''</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">return</span> self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a>[<span class="stringliteral">'configs'</span>]</div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Database.html#a98fb7e9064458e00f9aa09e64f870784"> 181</a></span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">def </span><a class="code" href="classlirc_1_1database_1_1Database.html#a90b90d724ba55dc82773fac995e58151">remotes_by_driver</a>(self, driver):</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="stringliteral">''' Return the list of remotes suggested for a given driver. '''</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">if</span> isinstance(driver, dict):</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  driver = driver[<span class="stringliteral">'id'</span>]</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Database.html#a2a596119ada4c89a4b7ef907e41a6397"> 186</a></span>  <span class="keywordflow">try</span>:</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">return</span> self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a>[<span class="stringliteral">'lircd_by_driver'</span>][driver]</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">except</span> KeyError:</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">return</span> []</div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Database.html#a90b90d724ba55dc82773fac995e58151"> 190</a></span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keyword">def </span><a class="code" href="classlirc_1_1database_1_1Database.html#ad27dec7a9c067024e6af5aab55c8e30a">lircmd_by_driver</a>(self, driver):</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="stringliteral">''' Return list of lircmd.conf file for given driver or None. '''</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">if</span> isinstance(driver, dict):</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  driver = driver[<span class="stringliteral">'id'</span>]</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">try</span>:</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a>[<span class="stringliteral">'lircmd_by_driver'</span>][driver]</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">except</span> KeyError:</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">return</span> []</div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Database.html#ad27dec7a9c067024e6af5aab55c8e30a"> 199</a></span> </div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keyword">def </span><a class="code" href="classlirc_1_1database_1_1Database.html#a58108a333e583f23b64a14478d4a7c7e">driver_by_remote</a>(self, remote):</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="stringliteral">''' Return the driver (possibly None) suggested for a remote. '''</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">for</span> driver, files <span class="keywordflow">in</span> self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a>[<span class="stringliteral">'lircd_by_driver'</span>].items():</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span> remote <span class="keywordflow">in</span> files:</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">return</span> self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a>[<span class="stringliteral">'drivers'</span>][driver]</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">return</span> <span class="keywordtype">None</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">def </span><a class="code" href="classlirc_1_1database_1_1Database.html#a7219fd90c7d6ea27db55fa3ffe12a824">find_config</a>(self, key, value):</div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Database.html#a58108a333e583f23b64a14478d4a7c7e"> 208</a></span>  <span class="stringliteral">''' Return item (a config) in configs where config[key] == value. '''</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  found = [c <span class="keywordflow">for</span> c <span class="keywordflow">in</span> self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a>[<span class="stringliteral">'configs'</span>].values()</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">if</span> key <span class="keywordflow">in</span> c <span class="keywordflow">and</span> c[key] == value]</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">if</span> len(found) > 1:</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">raise</span> <a class="code" href="classlirc_1_1database_1_1ItemLookupError.html">ItemLookupError</a>(</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="stringliteral">"find_config: Too many matches for %s, %s): "</span> % (key, value)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  + <span class="stringliteral">', '</span>.join([c[<span class="stringliteral">'id'</span>] <span class="keywordflow">for</span> c <span class="keywordflow">in</span> found]))</div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classlirc_1_1database_1_1Database.html#a7219fd90c7d6ea27db55fa3ffe12a824"> 215</a></span>  <span class="keywordflow">elif</span> <span class="keywordflow">not</span> found:</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">raise</span> <a class="code" href="classlirc_1_1database_1_1ItemLookupError.html">ItemLookupError</a>(</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="stringliteral">"find_config: Nothing found for %s, %s): "</span> % (key, value))</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  found = dict(found[0])</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">if</span> <span class="stringliteral">'device_hint'</span> <span class="keywordflow">not</span> <span class="keywordflow">in</span> found:</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">try</span>:</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  found[<span class="stringliteral">'device_hint'</span>] = \</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a>[<span class="stringliteral">'drivers'</span>][found[<span class="stringliteral">'driver'</span>]][<span class="stringliteral">'device_hint'</span>]</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">except</span> KeyError:</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  found[<span class="stringliteral">'device_hint'</span>] = \</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  self.<a class="code" href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">db</a>[<span class="stringliteral">'kernel-drivers'</span>][found[<span class="stringliteral">'driver'</span>]][<span class="stringliteral">'device_hint'</span>]</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">return</span> found</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="comment"># vim: set expandtab ts=4 sw=4:</span></div><div class="ttc" id="classlirc_1_1database_1_1Config_html_af5cbcd7f1f9d0b85a2a0dbdfc5f417ff"><div class="ttname"><a href="classlirc_1_1database_1_1Config.html#af5cbcd7f1f9d0b85a2a0dbdfc5f417ff">lirc.database.Config.lircd_conf</a></div><div class="ttdeci">lircd_conf</div><div class="ttdoc">Substituted data from driver.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00105">database.py:105</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Database_html_a58108a333e583f23b64a14478d4a7c7e"><div class="ttname"><a href="classlirc_1_1database_1_1Database.html#a58108a333e583f23b64a14478d4a7c7e">lirc.database.Database.driver_by_remote</a></div><div class="ttdeci">def driver_by_remote(self, remote)</div><div class="ttdoc">Return the driver (possibly None) suggested for a remote.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00208">database.py:208</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Database_html_aea621bb5f1c278b60461fe72d01e7d20"><div class="ttname"><a href="classlirc_1_1database_1_1Database.html#aea621bb5f1c278b60461fe72d01e7d20">lirc.database.Database.kernel_drivers</a></div><div class="ttdeci">def kernel_drivers(self)</div><div class="ttdoc">The kernel-drivers dictionary, drivers.yaml + kernel-drivers.yaml.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00176">database.py:176</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Database_html_a98fb7e9064458e00f9aa09e64f870784"><div class="ttname"><a href="classlirc_1_1database_1_1Database.html#a98fb7e9064458e00f9aa09e64f870784">lirc.database.Database.drivers</a></div><div class="ttdeci">def drivers(self)</div><div class="ttdoc">The drivers dictionary, drivers.yaml + kernel-drivers.yaml.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00181">database.py:181</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1ItemLookupError_html"><div class="ttname"><a href="classlirc_1_1database_1_1ItemLookupError.html">lirc.database.ItemLookupError</a></div><div class="ttdoc">A lookup failed, either too namy or no matches found.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00091">database.py:91</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Config_html_ae4b4386935c5da5764115e8f7b02e6cc"><div class="ttname"><a href="classlirc_1_1database_1_1Config.html#ae4b4386935c5da5764115e8f7b02e6cc">lirc.database.Config.modprobe</a></div><div class="ttdeci">modprobe</div><div class="ttdoc">Substituted data from driver.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00104">database.py:104</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Database_html_a7219fd90c7d6ea27db55fa3ffe12a824"><div class="ttname"><a href="classlirc_1_1database_1_1Database.html#a7219fd90c7d6ea27db55fa3ffe12a824">lirc.database.Database.find_config</a></div><div class="ttdeci">def find_config(self, key, value)</div><div class="ttdoc">Return item (a config) in configs where config[key] == value.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00215">database.py:215</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Config_html_af6e9f414dd6ef8d8d7612bb303b29ce0"><div class="ttname"><a href="classlirc_1_1database_1_1Config.html#af6e9f414dd6ef8d8d7612bb303b29ce0">lirc.database.Config.label</a></div><div class="ttdeci">label</div><div class="ttdoc">Name of lircmd.conf file.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00107">database.py:107</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Config_html_a422c5b90676cdf1df9e1de9dd8efc6e6"><div class="ttname"><a href="classlirc_1_1database_1_1Config.html#a422c5b90676cdf1df9e1de9dd8efc6e6">lirc.database.Config.note</a></div><div class="ttdeci">def note(self)</div><div class="ttdoc">The possible note to display when selected.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00114">database.py:114</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Database_html"><div class="ttname"><a href="classlirc_1_1database_1_1Database.html">lirc.database.Database</a></div><div class="ttdoc">Reflects the *.yaml files in the configs/ directory.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00122">database.py:122</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Config_html_abdc84b94836ee7c02bf00b9d6c02c0ba"><div class="ttname"><a href="classlirc_1_1database_1_1Config.html#abdc84b94836ee7c02bf00b9d6c02c0ba">lirc.database.Config.lircmd_conf</a></div><div class="ttdeci">lircmd_conf</div><div class="ttdoc">Name of lircd.conf file.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00106">database.py:106</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Database_html_a90b90d724ba55dc82773fac995e58151"><div class="ttname"><a href="classlirc_1_1database_1_1Database.html#a90b90d724ba55dc82773fac995e58151">lirc.database.Database.remotes_by_driver</a></div><div class="ttdeci">def remotes_by_driver(self, driver)</div><div class="ttdoc">Return the list of remotes suggested for a given driver.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00190">database.py:190</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Database_html_a2a596119ada4c89a4b7ef907e41a6397"><div class="ttname"><a href="classlirc_1_1database_1_1Database.html#a2a596119ada4c89a4b7ef907e41a6397">lirc.database.Database.configs</a></div><div class="ttdeci">def configs(self)</div><div class="ttdoc">Return dict of parsed config/*.conf files, keyd by id.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00186">database.py:186</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Database_html_ad27dec7a9c067024e6af5aab55c8e30a"><div class="ttname"><a href="classlirc_1_1database_1_1Database.html#ad27dec7a9c067024e6af5aab55c8e30a">lirc.database.Database.lircmd_by_driver</a></div><div class="ttdeci">def lircmd_by_driver(self, driver)</div><div class="ttdoc">Return list of lircmd.conf file for given driver or None.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00199">database.py:199</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Config_html_aead17e529927d2fa0f13d94fc5b8e741"><div class="ttname"><a href="classlirc_1_1database_1_1Config.html#aead17e529927d2fa0f13d94fc5b8e741">lirc.database.Config.modinit</a></div><div class="ttdeci">modinit</div><div class="ttdoc">Read-only config dict in db.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00103">database.py:103</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Config_html_a3486cd23389279fbb80bb5c4d547eee7"><div class="ttname"><a href="classlirc_1_1database_1_1Config.html#a3486cd23389279fbb80bb5c4d547eee7">lirc.database.Config.config</a></div><div class="ttdeci">config</div><div class="ttdoc">Read-only driver dict in db.</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00102">database.py:102</a></div></div> <div class="ttc" id="classlirc_1_1database_1_1Database_html_a745d55a5679ae8253c98bae376c8b3eb"><div class="ttname"><a href="classlirc_1_1database_1_1Database.html#a745d55a5679ae8253c98bae376c8b3eb">lirc.database.Database.db</a></div><div class="ttdeci">db</div><div class="ttdef"><b>Definition:</b> <a href="database_8py_source.html#l00171">database.py:171</a></div></div> </div><!-- fragment --></div><!-- contents --> </div><!-- doc-content --> <!-- start footer part --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> <li class="navelem"><a class="el" href="dir_9c9327e253e064359f0fc89af76d6d9d.html">python-pkg</a></li><li class="navelem"><a class="el" href="dir_de06fbad444f0d6ad18055e8286d4c67.html">lirc</a></li><li class="navelem"><a class="el" href="database_8py.html">database.py</a></li> <li class="footer">Generated by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li> </ul> </div> </body> </html>