Projekt

Obecné

Profil

Stáhnout (11.3 KB) Statistiky
| Větev: | Tag: | Revize:
1
<!doctype html>
2
<html lang="en">
3
<head>
4
<meta charset="utf-8">
5
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
6
<meta name="generator" content="pdoc 0.10.0" />
7
<title>main API documentation</title>
8
<meta name="description" content="" />
9
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
10
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
11
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
12
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
13
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
14
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
15
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
16
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
17
</head>
18
<body>
19
<main>
20
<article id="content">
21
<header>
22
<h1 class="title">Module <code>main</code></h1>
23
</header>
24
<section id="section-intro">
25
<details class="source">
26
<summary>
27
<span>Expand source code</span>
28
</summary>
29
<pre><code class="python">import logging
30
import logging.config
31
import argparse
32
from os.path import exists
33
from threading import Thread
34
from tendo import singleton
35
from sys import exit
36

    
37
from config_manager import Config
38
from usb_detector.detector import register_listener, usb_detector_run, usb_detector_set_config
39
from usb_detector.event_listener import usb_connected_callback, usb_disconnected_callback
40
from usb_detector.api_client import api_client_run, api_client_set_config
41

    
42

    
43
def init_logging(app_config: Config):
44
    &#34;&#34;&#34;Initializes logging, api client, and usb detector.
45

    
46
    The function checks whether the path to the logger configuration
47
    file is valid or not. The path is defined in the logger section of the
48
    main configuration file. It also calls api_client_set_config and
49
    usb_detector_set_config to fully initialize the application.
50

    
51
    :param app_config: instance of Config (config manager)
52
    &#34;&#34;&#34;
53
    # If the logger configuration file exists.
54
    if exists(app_config.logger_config_file):
55
        # Initialize logging according to the logger config file.
56
        logging.config.fileConfig(fname=app_config.logger_config_file)
57

    
58
        # Initialize the rest of the application.
59
        api_client_set_config(app_config)
60
        usb_detector_set_config(app_config)
61
    else:
62
        # If the file does not exist, terminate the application.
63
        print(f&#34;Cannot find logger configuration \&#34;{app_config.logger_config_file}\&#34;! Please specify valid a path or define a new one.&#34;)
64
        exit(1)
65

    
66

    
67
if __name__ == &#34;__main__&#34;:
68
    &#34;&#34;&#34;Main entry point of the application.
69
    
70
    The application expects one parameter to be passed in -
71
    the path to the configuration file. The user can print out help
72
    using the &#39;-h&#39; option.
73
    &#34;&#34;&#34;
74
    # Make sure that there is only one running instance (process) of this application.
75
    try:
76
        app_instance = singleton.SingleInstance()
77
    except singleton.SingleInstanceException:
78
        exit(1)
79

    
80
    # Parse the arguments passed in from the command line.
81
    arg_parser = argparse.ArgumentParser(description=&#34;ZF USB License Detector&#34;)
82
    arg_parser.add_argument(&#34;-c&#34;, &#34;--config&#34;, dest=&#34;config&#34;, required=True, help=&#34;Path to the configuration file&#34;)
83
    args = arg_parser.parse_args()
84

    
85
    # Read the configuration file and initialize the application (logging).
86
    config = Config(args.config)
87
    init_logging(config)
88

    
89
    # Register callbacks (connected/disconnected USB device).
90
    register_listener(callback=usb_connected_callback, connected=True)
91
    register_listener(callback=usb_disconnected_callback, connected=False)
92

    
93
    # Create a thread for the USB detector.
94
    usb_detector_thread = Thread(target=usb_detector_run)
95
    usb_detector_thread.setDaemon(True)
96

    
97
    # Create a thread for resending failed payloads to the server.
98
    api_thread = Thread(target=api_client_run)
99
    api_thread.setDaemon(True)
100

    
101
    # Start the USB detector thread.
102
    logging.info(&#34;Starting USB detector.&#34;)
103
    usb_detector_thread.start()
104

    
105
    # Start the API client thread.
106
    logging.info(&#34;Starting API communication manager.&#34;)
107
    api_thread.start()
108

    
109
    # The execution should never get here as both
110
    # threads are infinite loops.
111
    usb_detector_thread.join()
112
    api_thread.join()</code></pre>
113
</details>
114
</section>
115
<section>
116
</section>
117
<section>
118
</section>
119
<section>
120
<h2 class="section-title" id="header-functions">Functions</h2>
121
<dl>
122
<dt id="main.init_logging"><code class="name flex">
123
<span>def <span class="ident">init_logging</span></span>(<span>app_config: <a title="config_manager.Config" href="config_manager.html#config_manager.Config">Config</a>)</span>
124
</code></dt>
125
<dd>
126
<div class="desc"><p>Initializes logging, api client, and usb detector.</p>
127
<p>The function checks whether the path to the logger configuration
128
file is valid or not. The path is defined in the logger section of the
129
main configuration file. It also calls api_client_set_config and
130
usb_detector_set_config to fully initialize the application.</p>
131
<p>:param app_config: instance of Config (config manager)</p></div>
132
<details class="source">
133
<summary>
134
<span>Expand source code</span>
135
</summary>
136
<pre><code class="python">def init_logging(app_config: Config):
137
    &#34;&#34;&#34;Initializes logging, api client, and usb detector.
138

    
139
    The function checks whether the path to the logger configuration
140
    file is valid or not. The path is defined in the logger section of the
141
    main configuration file. It also calls api_client_set_config and
142
    usb_detector_set_config to fully initialize the application.
143

    
144
    :param app_config: instance of Config (config manager)
145
    &#34;&#34;&#34;
146
    # If the logger configuration file exists.
147
    if exists(app_config.logger_config_file):
148
        # Initialize logging according to the logger config file.
149
        logging.config.fileConfig(fname=app_config.logger_config_file)
150

    
151
        # Initialize the rest of the application.
152
        api_client_set_config(app_config)
153
        usb_detector_set_config(app_config)
154
    else:
155
        # If the file does not exist, terminate the application.
156
        print(f&#34;Cannot find logger configuration \&#34;{app_config.logger_config_file}\&#34;! Please specify valid a path or define a new one.&#34;)
157
        exit(1)</code></pre>
158
</details>
159
</dd>
160
</dl>
161
</section>
162
<section>
163
</section>
164
</article>
165
<nav id="sidebar">
166
<h1>Index</h1>
167
<div class="toc">
168
<ul></ul>
169
</div>
170
<ul id="index">
171
<li><h3><a href="#header-functions">Functions</a></h3>
172
<ul class="">
173
<li><code><a title="main.init_logging" href="#main.init_logging">init_logging</a></code></li>
174
</ul>
175
</li>
176
</ul>
177
</nav>
178
</main>
179
<footer id="footer">
180
<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
181
</footer>
182
</body>
183
</html>
(2-2/2)