PythonExtensionsCollection 0.2.0__py3-none-any.whl → 0.13.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. PythonExtensionsCollection/Comparison/CComparison.py +341 -0
  2. PythonExtensionsCollection/Comparison/__init__.py +13 -0
  3. PythonExtensionsCollection/File/CFile.py +326 -106
  4. PythonExtensionsCollection/File/__init__.py +1 -1
  5. PythonExtensionsCollection/Folder/CFolder.py +460 -0
  6. PythonExtensionsCollection/Folder/__init__.py +13 -0
  7. PythonExtensionsCollection/PythonExtensionsCollection.pdf +0 -0
  8. PythonExtensionsCollection/String/CString.py +128 -344
  9. PythonExtensionsCollection/String/__init__.py +1 -1
  10. PythonExtensionsCollection/Utils/CUtils.py +77 -74
  11. PythonExtensionsCollection/Utils/__init__.py +1 -1
  12. PythonExtensionsCollection/__init__.py +1 -1
  13. PythonExtensionsCollection/version.py +23 -0
  14. {PythonExtensionsCollection-0.2.0.dist-info → PythonExtensionsCollection-0.13.0.dist-info}/METADATA +57 -44
  15. PythonExtensionsCollection-0.13.0.dist-info/RECORD +18 -0
  16. {PythonExtensionsCollection-0.2.0.dist-info → PythonExtensionsCollection-0.13.0.dist-info}/WHEEL +1 -1
  17. PythonExtensionsCollection/doc/.buildinfo +0 -4
  18. PythonExtensionsCollection/doc/File.html +0 -315
  19. PythonExtensionsCollection/doc/String.html +0 -590
  20. PythonExtensionsCollection/doc/Utils.html +0 -209
  21. PythonExtensionsCollection/doc/_modules/PythonExtensionsCollection/File/CFile.html +0 -960
  22. PythonExtensionsCollection/doc/_modules/PythonExtensionsCollection/String/CString.html +0 -1221
  23. PythonExtensionsCollection/doc/_modules/PythonExtensionsCollection/Utils/CUtils.html +0 -431
  24. PythonExtensionsCollection/doc/_modules/index.html +0 -106
  25. PythonExtensionsCollection/doc/_sources/File.rst.txt +0 -28
  26. PythonExtensionsCollection/doc/_sources/String.rst.txt +0 -28
  27. PythonExtensionsCollection/doc/_sources/Utils.rst.txt +0 -28
  28. PythonExtensionsCollection/doc/_sources/additional_doc/Introduction.rst.txt +0 -365
  29. PythonExtensionsCollection/doc/_sources/index.rst.txt +0 -27
  30. PythonExtensionsCollection/doc/_static/_sphinx_javascript_frameworks_compat.js +0 -134
  31. PythonExtensionsCollection/doc/_static/alabaster.css +0 -701
  32. PythonExtensionsCollection/doc/_static/basic.css +0 -930
  33. PythonExtensionsCollection/doc/_static/custom.css +0 -1
  34. PythonExtensionsCollection/doc/_static/doctools.js +0 -264
  35. PythonExtensionsCollection/doc/_static/documentation_options.js +0 -14
  36. PythonExtensionsCollection/doc/_static/file.png +0 -0
  37. PythonExtensionsCollection/doc/_static/jquery-3.6.0.js +0 -10881
  38. PythonExtensionsCollection/doc/_static/jquery.js +0 -2
  39. PythonExtensionsCollection/doc/_static/language_data.js +0 -199
  40. PythonExtensionsCollection/doc/_static/minus.png +0 -0
  41. PythonExtensionsCollection/doc/_static/plus.png +0 -0
  42. PythonExtensionsCollection/doc/_static/pygments.css +0 -82
  43. PythonExtensionsCollection/doc/_static/searchtools.js +0 -531
  44. PythonExtensionsCollection/doc/_static/underscore-1.13.1.js +0 -2042
  45. PythonExtensionsCollection/doc/_static/underscore.js +0 -6
  46. PythonExtensionsCollection/doc/additional_doc/Introduction.html +0 -365
  47. PythonExtensionsCollection/doc/genindex.html +0 -292
  48. PythonExtensionsCollection/doc/index.html +0 -123
  49. PythonExtensionsCollection/doc/objects.inv +0 -0
  50. PythonExtensionsCollection/doc/py-modindex.html +0 -138
  51. PythonExtensionsCollection/doc/search.html +0 -127
  52. PythonExtensionsCollection/doc/searchindex.js +0 -1
  53. PythonExtensionsCollection-0.2.0.dist-info/RECORD +0 -48
  54. {PythonExtensionsCollection-0.2.0.dist-info → PythonExtensionsCollection-0.13.0.dist-info}/LICENSE +0 -0
  55. {PythonExtensionsCollection-0.2.0.dist-info → PythonExtensionsCollection-0.13.0.dist-info}/top_level.txt +0 -0
@@ -1,1221 +0,0 @@
1
-
2
- <!DOCTYPE html>
3
-
4
- <html lang="en">
5
- <head>
6
- <meta charset="utf-8" />
7
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
- <title>PythonExtensionsCollection.String.CString &#8212; Python Extensions Collection documentation</title>
9
- <link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
10
- <link rel="stylesheet" type="text/css" href="../../../_static/alabaster.css" />
11
- <script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
12
- <script src="../../../_static/jquery.js"></script>
13
- <script src="../../../_static/underscore.js"></script>
14
- <script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
15
- <script src="../../../_static/doctools.js"></script>
16
- <link rel="index" title="Index" href="../../../genindex.html" />
17
- <link rel="search" title="Search" href="../../../search.html" />
18
-
19
- <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
20
-
21
-
22
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
23
-
24
- </head><body>
25
-
26
-
27
- <div class="document">
28
- <div class="documentwrapper">
29
- <div class="bodywrapper">
30
-
31
-
32
- <div class="body" role="main">
33
-
34
- <h1>Source code for PythonExtensionsCollection.String.CString</h1><div class="highlight"><pre>
35
- <span></span><span class="c1"># **************************************************************************************************************</span>
36
- <span class="c1">#</span>
37
- <span class="c1"># Copyright 2020-2022 Robert Bosch GmbH</span>
38
- <span class="c1">#</span>
39
- <span class="c1"># Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span>
40
- <span class="c1"># you may not use this file except in compliance with the License.</span>
41
- <span class="c1"># You may obtain a copy of the License at</span>
42
- <span class="c1">#</span>
43
- <span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
44
- <span class="c1">#</span>
45
- <span class="c1"># Unless required by applicable law or agreed to in writing, software</span>
46
- <span class="c1"># distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
47
- <span class="c1"># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
48
- <span class="c1"># See the License for the specific language governing permissions and</span>
49
- <span class="c1"># limitations under the License.</span>
50
- <span class="c1">#</span>
51
- <span class="c1"># **************************************************************************************************************</span>
52
- <span class="c1">#</span>
53
- <span class="c1"># CString.py</span>
54
- <span class="c1">#</span>
55
- <span class="c1"># XC-CT/ECA3-Queckenstedt</span>
56
- <span class="c1">#</span>
57
- <span class="c1"># 26.01.2022</span>
58
- <span class="c1">#</span>
59
- <span class="c1"># **************************************************************************************************************</span>
60
-
61
- <span class="c1"># -- import standard Python modules</span>
62
- <span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">ntpath</span><span class="o">,</span> <span class="nn">re</span>
63
-
64
- <span class="c1"># **************************************************************************************************************</span>
65
-
66
- <div class="viewcode-block" id="CString"><a class="viewcode-back" href="../../../String.html#PythonExtensionsCollection.String.CString.CString">[docs]</a><span class="k">class</span> <span class="nc">CString</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
67
- <span class="sd">&quot;&quot;&quot;Contains some string computation methods like e.g. normalizing a path.&quot;&quot;&quot;</span>
68
-
69
- <span class="c1"># --------------------------------------------------------------------------------------------------------------</span>
70
- <span class="c1">#TM***</span>
71
-
72
- <div class="viewcode-block" id="CString.NormalizePath"><a class="viewcode-back" href="../../../String.html#PythonExtensionsCollection.String.CString.CString.NormalizePath">[docs]</a> <span class="k">def</span> <span class="nf">NormalizePath</span><span class="p">(</span><span class="n">sPath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">bWin</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">sReferencePathAbs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">bConsiderBlanks</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">bExpandEnvVars</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">bMask</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
73
- <span class="sd">&quot;&quot;&quot;</span>
74
- <span class="sd">|</span>
75
-
76
- <span class="sd">**Method:**</span>
77
-
78
- <span class="sd">**NormalizePath**</span>
79
-
80
- <span class="sd"> Normalizes local paths, paths to local network resources and internet addresses</span>
81
-
82
- <span class="sd">**Args:**</span>
83
-
84
- <span class="sd">**sPath** (*string*)</span>
85
-
86
- <span class="sd"> The path to be normalized</span>
87
-
88
- <span class="sd">**bWin** (*boolean; optional; default: False*)</span>
89
-
90
- <span class="sd"> If ``True`` then returned path contains masked backslashes as separator, otherwise slashes</span>
91
-
92
- <span class="sd">**sReferencePathAbs** (*string, optional*)</span>
93
-
94
- <span class="sd"> In case of ``sPath`` is relative and ``sReferencePathAbs`` (expected to be absolute) is given, then</span>
95
- <span class="sd"> the returned absolute path is a join of both input paths</span>
96
-
97
- <span class="sd">**bConsiderBlanks** (*boolean; optional; default: False*)</span>
98
-
99
- <span class="sd"> If ``True`` then the returned path is encapsulated in quotes - in case of the path contains blanks</span>
100
-
101
- <span class="sd">**bExpandEnvVars** (*boolean; optional; default: True*)</span>
102
-
103
- <span class="sd"> If ``True`` then in the returned path environment variables are resolved, otherwise not.</span>
104
-
105
- <span class="sd">**bMask** (*boolean; optional; default: True; requires bWin=True*)</span>
106
-
107
- <span class="sd"> If ``bWin`` is ``True`` and ``bMask`` is ``True`` then the returned path contains masked backslashes as separator.</span>
108
- <span class="sd"> If ``bWin`` is ``True`` and ``bMask`` is ``False`` then the returned path contains single backslashes only - this might be</span>
109
- <span class="sd"> required for applications, that are not able to handle masked backslashes. In case of ``bWin`` is ``False`` ``bMask`` has no effect.</span>
110
-
111
- <span class="sd">**Returns:**</span>
112
-
113
- <span class="sd">**sPath** (*string*)</span>
114
-
115
- <span class="sd"> The normalized path (is ``None`` in case of ``sPath`` is ``None``)</span>
116
-
117
- <span class="sd">|</span>
118
- <span class="sd"> &quot;&quot;&quot;</span>
119
-
120
- <span class="k">if</span> <span class="n">sPath</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
121
-
122
- <span class="c1"># -- expand Windows environment variables</span>
123
- <span class="k">if</span> <span class="n">bExpandEnvVars</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
124
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">sPath</span><span class="p">)</span>
125
-
126
- <span class="c1"># - remove leading and trailing horizontal space</span>
127
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">sPath</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot; </span><span class="se">\t\r\n</span><span class="s2">&quot;</span><span class="p">)</span>
128
-
129
- <span class="c1"># - remove leading and trailing quotes</span>
130
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">sPath</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\&quot;</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
131
-
132
- <span class="c1"># - remove once more leading and trailing horizontal space</span>
133
- <span class="c1"># (after the removal of leading and trailing quotes further horizontal space might be there, that has to be removed;</span>
134
- <span class="c1"># but further levels of nesting are not considered)</span>
135
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">sPath</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot; </span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
136
-
137
- <span class="k">if</span> <span class="n">sPath</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
138
- <span class="k">return</span> <span class="n">sPath</span>
139
-
140
- <span class="c1"># - remove trailing slash or backslash (maybe at end of path to folder)</span>
141
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">sPath</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&quot;/</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">)</span>
142
-
143
- <span class="c1"># --------------------------------------------------------------------------------------------------------------</span>
144
- <span class="c1"># consider internet addresses and local network resources</span>
145
- <span class="c1"># --------------------------------------------------------------------------------------------------------------</span>
146
- <span class="c1"># -- local network resource / file server</span>
147
- <span class="c1"># (prepare for Windows explorer)</span>
148
- <span class="c1"># either (default)</span>
149
- <span class="c1"># //server.com/abc/xyz</span>
150
- <span class="c1"># or (with bWin=True); bMask must be False because \\server.com\\abc\\xyz is not allowed</span>
151
- <span class="c1"># \\server.com\abc\xyz</span>
152
- <span class="c1"># (=&gt; user is allowed to select bWin but not bMask)</span>
153
- <span class="c1">#</span>
154
- <span class="c1"># -- local network resource / file server</span>
155
- <span class="c1"># (prepare for web browser)</span>
156
- <span class="c1"># after &#39;file://///&#39; only single slashes allowed; bWin and bMask must be False</span>
157
- <span class="c1"># file://///server.com/abc/xyz</span>
158
- <span class="c1"># (=&gt; user is NOT allowed to select bWin and bMask)</span>
159
- <span class="c1">#</span>
160
- <span class="c1"># -- internet address</span>
161
- <span class="c1"># after server name only single slashes allowed; bWin and bMask must be False</span>
162
- <span class="c1"># http://server.com/abc/xyz</span>
163
- <span class="c1"># https://server.com/abc/xyz</span>
164
- <span class="c1"># (=&gt; user is NOT allowed to select bWin and bMask)</span>
165
- <span class="c1">#</span>
166
- <span class="c1"># - not allowed (=&gt; this method must not return this format):</span>
167
- <span class="c1"># http:\\server.com</span>
168
- <span class="c1"># https:\\server.com</span>
169
- <span class="c1"># --------------------------------------------------------------------------------------------------------------</span>
170
-
171
- <span class="n">sPathPrefix</span> <span class="o">=</span> <span class="kc">None</span>
172
-
173
- <span class="c1"># In case there is any prefix, we remove this prefix, we compute the remaining part of the path separately,</span>
174
- <span class="c1"># we also modify this prefix manually, and at the end we put the new prefix back to the path.</span>
175
-
176
- <span class="k">if</span> <span class="p">(</span> <span class="p">(</span><span class="n">sPath</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">sPath</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;//&quot;</span><span class="p">)</span> <span class="p">):</span>
177
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">sPath</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>
178
- <span class="k">if</span> <span class="n">bWin</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
179
- <span class="n">sPathPrefix</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span>
180
- <span class="k">else</span><span class="p">:</span>
181
- <span class="n">sPathPrefix</span> <span class="o">=</span> <span class="s2">&quot;//&quot;</span>
182
- <span class="n">bMask</span> <span class="o">=</span> <span class="kc">False</span> <span class="c1"># !!! this overrules the input parameter value, because masked backslashes are not allowed in remaining path !!!</span>
183
- <span class="k">elif</span> <span class="n">sPath</span><span class="p">[:</span><span class="mi">10</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;file://///&quot;</span><span class="p">:</span> <span class="c1"># exactly this must be given; all other combinations of slashes and backslashes are not handled</span>
184
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">sPath</span><span class="p">[</span><span class="mi">10</span><span class="p">:]</span>
185
- <span class="n">sPathPrefix</span> <span class="o">=</span> <span class="s2">&quot;file://///&quot;</span>
186
- <span class="n">bWin</span> <span class="o">=</span> <span class="kc">False</span> <span class="c1"># !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!</span>
187
- <span class="n">bMask</span> <span class="o">=</span> <span class="kc">False</span> <span class="c1"># !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!</span>
188
- <span class="k">elif</span> <span class="p">(</span> <span class="p">(</span><span class="n">sPath</span><span class="p">[:</span><span class="mi">7</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;http://&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">sPath</span><span class="p">[:</span><span class="mi">7</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;http:</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">)</span> <span class="p">):</span>
189
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">sPath</span><span class="p">[</span><span class="mi">7</span><span class="p">:]</span>
190
- <span class="n">sPathPrefix</span> <span class="o">=</span> <span class="s2">&quot;http://&quot;</span>
191
- <span class="n">bWin</span> <span class="o">=</span> <span class="kc">False</span> <span class="c1"># !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!</span>
192
- <span class="n">bMask</span> <span class="o">=</span> <span class="kc">False</span> <span class="c1"># !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!</span>
193
- <span class="k">elif</span> <span class="p">(</span> <span class="p">(</span><span class="n">sPath</span><span class="p">[:</span><span class="mi">8</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;https://&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">sPath</span><span class="p">[:</span><span class="mi">8</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;https:</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">)</span> <span class="p">):</span>
194
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">sPath</span><span class="p">[</span><span class="mi">8</span><span class="p">:]</span>
195
- <span class="n">sPathPrefix</span> <span class="o">=</span> <span class="s2">&quot;https://&quot;</span>
196
- <span class="n">bWin</span> <span class="o">=</span> <span class="kc">False</span> <span class="c1"># !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!</span>
197
- <span class="n">bMask</span> <span class="o">=</span> <span class="kc">False</span> <span class="c1"># !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!</span>
198
- <span class="k">else</span><span class="p">:</span>
199
- <span class="c1"># Internet addresses and local network resources handled, now checking for relative paths:</span>
200
- <span class="c1"># In case of sPath is a relative path AND an absolute reference path is provided</span>
201
- <span class="c1"># merge them to an absolute path; without reference path use standard function to</span>
202
- <span class="c1"># convert relative path to absolute path</span>
203
- <span class="k">if</span> <span class="p">(</span> <span class="p">(</span><span class="n">sPath</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;%&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">sPath</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">)</span> <span class="p">):</span>
204
- <span class="c1"># If sPath starts with &#39;%&#39; or with &#39;$&#39; it is assumed that the path starts with an environment variable (Windows or Linux).</span>
205
- <span class="c1"># But in this case &#39;os.path.isabs(sPath)&#39; will not detect this to be an absolute path and will call</span>
206
- <span class="c1"># &#39;sPath = os.path.abspath(sPath)&#39; (depending on sReferencePathAbs). This will accidently merge</span>
207
- <span class="c1"># the root path together with the path starting with the environment variable and cause invalid results.</span>
208
- <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isabs</span><span class="p">(</span><span class="n">sPath</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
209
- <span class="k">if</span> <span class="n">sReferencePathAbs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
210
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sReferencePathAbs</span><span class="p">,</span> <span class="n">sPath</span><span class="p">)</span>
211
- <span class="k">else</span><span class="p">:</span>
212
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">sPath</span><span class="p">)</span>
213
-
214
- <span class="c1"># eof computation of sPathPrefix</span>
215
-
216
- <span class="c1"># - normalize the path (collapse redundant separators and up-level references)</span>
217
- <span class="c1"># on Windows this converts slashes to backward slashes</span>
218
- <span class="c1"># sPath = os.path.normpath(sPath) # under Linux this unfortunately keeps redundant separators (in opposite to Windows)</span>
219
- <span class="c1"># -- alternative</span>
220
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">ntpath</span><span class="o">.</span><span class="n">normpath</span><span class="p">(</span><span class="n">sPath</span><span class="p">)</span>
221
-
222
- <span class="c1"># - exchange single backslashes by single slashes (= partly we have to repair the outcome of normpath)</span>
223
- <span class="k">if</span> <span class="n">bWin</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
224
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">sPath</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">)</span>
225
- <span class="k">else</span><span class="p">:</span>
226
- <span class="k">if</span> <span class="n">bMask</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
227
- <span class="n">sPath</span> <span class="o">=</span> <span class="n">sPath</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\\\\</span><span class="s2">&quot;</span><span class="p">)</span>
228
-
229
- <span class="c1"># - restore the path prefix</span>
230
- <span class="k">if</span> <span class="n">sPathPrefix</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
231
- <span class="n">sPath</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sPathPrefix</span><span class="si">}{</span><span class="n">sPath</span><span class="si">}</span><span class="s2">&quot;</span>
232
-
233
- <span class="c1"># - consider blanks (prepare path for usage in Windows command line)</span>
234
- <span class="k">if</span> <span class="n">bConsiderBlanks</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
235
- <span class="k">if</span> <span class="n">sPath</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
236
- <span class="n">sPath</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\&quot;</span><span class="si">{</span><span class="n">sPath</span><span class="si">}</span><span class="se">\&quot;</span><span class="s2">&quot;</span>
237
-
238
- <span class="c1"># eof if sPath is not None:</span>
239
-
240
- <span class="k">return</span> <span class="n">sPath</span></div>
241
-
242
- <span class="c1"># eof NormalizePath(sPath=None, bWin=False, sReferencePathAbs=None, bConsiderBlanks=False, bExpandEnvVars=True, bMask=True)</span>
243
-
244
- <span class="c1"># --------------------------------------------------------------------------------------------------------------</span>
245
- <span class="c1">#TM***</span>
246
-
247
- <div class="viewcode-block" id="CString.DetectParentPath"><a class="viewcode-back" href="../../../String.html#PythonExtensionsCollection.String.CString.CString.DetectParentPath">[docs]</a> <span class="k">def</span> <span class="nf">DetectParentPath</span><span class="p">(</span><span class="n">sStartPath</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sFolderName</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sFileName</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
248
- <span class="sd">&quot;&quot;&quot;</span>
249
- <span class="sd">|</span>
250
-
251
- <span class="sd">**Method:**</span>
252
-
253
- <span class="sd">**DetectParentPath**</span>
254
-
255
- <span class="sd"> Computes the path to any parent folder inside a given path. Optionally DetectParentPath is able</span>
256
- <span class="sd"> to search for files inside the parent folder.</span>
257
-
258
- <span class="sd">**Args:**</span>
259
-
260
- <span class="sd">**sStartPath** (*string*)</span>
261
-
262
- <span class="sd"> The path in which to search for a parent folder</span>
263
-
264
- <span class="sd">**sFolderName** (*string*)</span>
265
-
266
- <span class="sd"> The name of the folder to search for within ``sStartPath``. It is possible to provide more than one folder name separated by semicolon</span>
267
-
268
- <span class="sd">**sFileName** (*string, optional*)</span>
269
-
270
- <span class="sd"> The name of a file to search within the detected parent folder</span>
271
-
272
- <span class="sd">**Returns:**</span>
273
-
274
- <span class="sd">**sDestPath** (*string*)</span>
275
-
276
- <span class="sd"> Path and name of parent folder found inside ``sStartPath``, ``None`` in case of ``sFolderName`` is not found inside ``sStartPath``.</span>
277
- <span class="sd"> In case of more than one parent folder is found ``sDestPath`` contains the first result and ``listDestPaths`` contains all results.</span>
278
-
279
- <span class="sd">**listDestPaths** (*list*)</span>
280
-
281
- <span class="sd"> If ``sFolderName`` contains a single folder name this list contains only one element that is ``sDestPath``.</span>
282
- <span class="sd"> In case of ``FolderName`` contains a semicolon separated list of several folder names this list contains all found paths of the given folder names.</span>
283
- <span class="sd"> ``listDestPaths`` is ``None`` (and not an empty list!) in case of ``sFolderName`` is not found inside ``sStartPath``.</span>
284
-
285
- <span class="sd">**sDestFile** (*string*)</span>
286
-
287
- <span class="sd"> Path and name of ``sFileName``, in case of ``sFileName`` is given and found inside ``listDestPaths``.</span>
288
- <span class="sd"> In case of more than one file is found ``sDestFile`` contains the first result and ``listDestFiles`` contains all results.</span>
289
- <span class="sd"> ``sDestFile`` is ``None`` in case of ``sFileName`` is ``None`` and also in case of ``sFileName`` is not found inside ``listDestPaths``</span>
290
- <span class="sd"> (and therefore also in case of ``sFolderName`` is not found inside ``sStartPath``).</span>
291
-
292
- <span class="sd">**listDestFiles** (*list*)</span>
293
-
294
- <span class="sd"> Contains all positions of ``sFileName`` found inside ``listDestPaths``.</span>
295
- <span class="sd"> ``listDestFiles`` is ``None`` (and not an empty list!) in case of ``sFileName`` is ``None`` and also in case of ``sFileName``</span>
296
- <span class="sd"> is not found inside ``listDestPaths`` (and therefore also in case of ``sFolderName`` is not found inside ``sStartPath``).</span>
297
-
298
- <span class="sd">**sDestPathParent** (*string*)</span>
299
-
300
- <span class="sd"> The parent folder of ``sDestPath``, ``None`` in case of ``sFolderName`` is not found inside ``sStartPath`` (``sDestPath`` is ``None``).</span>
301
-
302
- <span class="sd">|</span>
303
- <span class="sd"> &quot;&quot;&quot;</span>
304
-
305
- <span class="n">sDestPath</span> <span class="o">=</span> <span class="kc">None</span>
306
- <span class="n">listDestPaths</span> <span class="o">=</span> <span class="kc">None</span>
307
- <span class="n">sDestFile</span> <span class="o">=</span> <span class="kc">None</span>
308
- <span class="n">listDestFiles</span> <span class="o">=</span> <span class="kc">None</span>
309
- <span class="n">sDestPathParent</span> <span class="o">=</span> <span class="kc">None</span>
310
-
311
- <span class="k">if</span> <span class="n">sStartPath</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
312
- <span class="k">return</span> <span class="n">sDestPath</span><span class="p">,</span> <span class="n">listDestPaths</span><span class="p">,</span> <span class="n">sDestFile</span><span class="p">,</span> <span class="n">listDestFiles</span><span class="p">,</span> <span class="n">sDestPathParent</span>
313
-
314
- <span class="k">if</span> <span class="n">sFolderName</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
315
- <span class="k">return</span> <span class="n">sDestPath</span><span class="p">,</span> <span class="n">listDestPaths</span><span class="p">,</span> <span class="n">sDestFile</span><span class="p">,</span> <span class="n">listDestFiles</span><span class="p">,</span> <span class="n">sDestPathParent</span>
316
-
317
- <span class="n">sStartPath</span> <span class="o">=</span> <span class="n">sStartPath</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
318
- <span class="k">if</span> <span class="n">sStartPath</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
319
- <span class="k">return</span> <span class="n">sDestPath</span><span class="p">,</span> <span class="n">listDestPaths</span><span class="p">,</span> <span class="n">sDestFile</span><span class="p">,</span> <span class="n">listDestFiles</span><span class="p">,</span> <span class="n">sDestPathParent</span>
320
-
321
- <span class="n">sFolderName</span> <span class="o">=</span> <span class="n">sFolderName</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
322
- <span class="k">if</span> <span class="n">sFolderName</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
323
- <span class="k">return</span> <span class="n">sDestPath</span><span class="p">,</span> <span class="n">listDestPaths</span><span class="p">,</span> <span class="n">sDestFile</span><span class="p">,</span> <span class="n">listDestFiles</span><span class="p">,</span> <span class="n">sDestPathParent</span>
324
-
325
- <span class="n">listSplit</span> <span class="o">=</span> <span class="n">sFolderName</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;;&#39;</span><span class="p">)</span>
326
-
327
- <span class="n">listTopLevelFolders</span> <span class="o">=</span> <span class="p">[]</span>
328
- <span class="k">for</span> <span class="n">sFolder</span> <span class="ow">in</span> <span class="n">listSplit</span><span class="p">:</span>
329
- <span class="c1"># removing duplicates</span>
330
- <span class="n">sFolder</span> <span class="o">=</span> <span class="n">sFolder</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
331
- <span class="k">if</span> <span class="n">sFolder</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
332
- <span class="k">if</span> <span class="n">sFolder</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">listTopLevelFolders</span><span class="p">:</span>
333
- <span class="n">listTopLevelFolders</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sFolder</span><span class="p">)</span>
334
- <span class="c1"># eof for sFolder in listSplit:</span>
335
-
336
- <span class="n">nNrOfFolders</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">listTopLevelFolders</span><span class="p">)</span>
337
- <span class="n">sStartPath</span> <span class="o">=</span> <span class="n">CString</span><span class="o">.</span><span class="n">NormalizePath</span><span class="p">(</span><span class="n">sStartPath</span><span class="p">)</span>
338
- <span class="n">listLevels</span> <span class="o">=</span> <span class="n">sStartPath</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">)</span>
339
-
340
- <span class="n">listDestPaths</span> <span class="o">=</span> <span class="p">[]</span>
341
-
342
- <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">listLevels</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
343
- <span class="c1"># -- merging paths with folder names and search for existing combinations</span>
344
- <span class="n">sPathParent</span> <span class="o">=</span> <span class="s2">&quot;/&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">listLevels</span><span class="p">)</span>
345
- <span class="k">for</span> <span class="n">sTLFolder</span> <span class="ow">in</span> <span class="n">listTopLevelFolders</span><span class="p">:</span>
346
- <span class="n">sSubPath</span> <span class="o">=</span> <span class="n">sPathParent</span> <span class="o">+</span> <span class="s2">&quot;/&quot;</span> <span class="o">+</span> <span class="n">sTLFolder</span>
347
- <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">sSubPath</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
348
- <span class="n">listDestPaths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sSubPath</span><span class="p">)</span>
349
- <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">listTopLevelFolders</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">listDestPaths</span><span class="p">):</span>
350
- <span class="c1"># all folders found</span>
351
- <span class="k">break</span>
352
- <span class="k">else</span><span class="p">:</span>
353
- <span class="n">listLevels</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
354
- <span class="c1"># eof while len(listLevels) &gt; 0:</span>
355
-
356
- <span class="n">sDestPath</span> <span class="o">=</span> <span class="kc">None</span>
357
- <span class="n">sDestPathParent</span> <span class="o">=</span> <span class="kc">None</span>
358
- <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">listDestPaths</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
359
- <span class="c1"># -- returning sDestPath and sDestPathParent related to first entry in list; just to return anything else than None</span>
360
- <span class="n">sDestPath</span> <span class="o">=</span> <span class="n">listDestPaths</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
361
- <span class="n">sDestPathParent</span> <span class="o">=</span> <span class="n">CString</span><span class="o">.</span><span class="n">NormalizePath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">sDestPath</span><span class="p">))</span>
362
-
363
- <span class="c1"># -- optionally searching also for a single file</span>
364
- <span class="c1"># Input: file name</span>
365
- <span class="c1"># Output: full path of file and list of full paths of files (!!! limited to &#39;listDestPaths&#39; !!!)</span>
366
-
367
- <span class="n">listDestFiles</span> <span class="o">=</span> <span class="p">[]</span>
368
-
369
- <span class="k">if</span> <span class="p">(</span> <span class="p">(</span><span class="n">sFileName</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">listDestPaths</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">):</span>
370
- <span class="k">for</span> <span class="n">sDestPathToWalk</span> <span class="ow">in</span> <span class="n">listDestPaths</span><span class="p">:</span>
371
- <span class="k">for</span> <span class="n">sLocalRootPath</span><span class="p">,</span> <span class="n">listFolderNames</span><span class="p">,</span> <span class="n">listFileNames</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">sDestPathToWalk</span><span class="p">):</span>
372
- <span class="k">for</span> <span class="n">sFileNameTmp</span> <span class="ow">in</span> <span class="n">listFileNames</span><span class="p">:</span>
373
- <span class="k">if</span> <span class="n">sFileNameTmp</span> <span class="o">==</span> <span class="n">sFileName</span><span class="p">:</span>
374
- <span class="n">sFile</span> <span class="o">=</span> <span class="n">CString</span><span class="o">.</span><span class="n">NormalizePath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sLocalRootPath</span><span class="p">,</span> <span class="n">sFileName</span><span class="p">))</span>
375
- <span class="n">listDestFiles</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sFile</span><span class="p">)</span>
376
- <span class="c1"># eof for sLocalRootPath, listFolderNames, listFileNames in os.walk(sDestPathToWalk):</span>
377
- <span class="c1"># eof for sDestPathToWalk in listDestPaths:</span>
378
- <span class="c1"># eof if ( (sFileName is not None) and (len(listDestPaths) &gt; 0) ):</span>
379
-
380
- <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">listDestFiles</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
381
- <span class="n">listDestFiles</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
382
- <span class="n">sDestFile</span> <span class="o">=</span> <span class="n">listDestFiles</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># just to return anything else than None</span>
383
-
384
- <span class="c1"># -- preparing output (setting empty lists to None, to have unique criteria for results not available)</span>
385
- <span class="k">if</span> <span class="n">listDestPaths</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
386
- <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">listDestPaths</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
387
- <span class="n">listDestPaths</span> <span class="o">=</span> <span class="kc">None</span>
388
- <span class="k">if</span> <span class="n">listDestFiles</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
389
- <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">listDestFiles</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
390
- <span class="n">listDestFiles</span> <span class="o">=</span> <span class="kc">None</span>
391
-
392
- <span class="k">return</span> <span class="n">sDestPath</span><span class="p">,</span> <span class="n">listDestPaths</span><span class="p">,</span> <span class="n">sDestFile</span><span class="p">,</span> <span class="n">listDestFiles</span><span class="p">,</span> <span class="n">sDestPathParent</span></div>
393
-
394
- <span class="c1"># eof def DetectParentPath(sStartPath=None, sFolderName=None, sFileName=None):</span>
395
-
396
- <span class="c1"># --------------------------------------------------------------------------------------------------------------</span>
397
- <span class="c1">#TM***</span>
398
-
399
- <div class="viewcode-block" id="CString.StringFilter"><a class="viewcode-back" href="../../../String.html#PythonExtensionsCollection.String.CString.CString.StringFilter">[docs]</a> <span class="k">def</span> <span class="nf">StringFilter</span><span class="p">(</span><span class="n">sString</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
400
- <span class="n">bCaseSensitive</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
401
- <span class="n">bSkipBlankStrings</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
402
- <span class="n">sComment</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
403
- <span class="n">sStartsWith</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
404
- <span class="n">sEndsWith</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
405
- <span class="n">sStartsNotWith</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
406
- <span class="n">sEndsNotWith</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
407
- <span class="n">sContains</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
408
- <span class="n">sContainsNot</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
409
- <span class="n">sInclRegEx</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
410
- <span class="n">sExclRegEx</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
411
- <span class="n">bDebug</span> <span class="o">=</span> <span class="kc">False</span><span class="p">):</span>
412
- <span class="sd">&quot;&quot;&quot;</span>
413
- <span class="sd">|</span>
414
-
415
- <span class="sd">During the computation of strings there might occur the need to get to know if this string fulfils certain criteria or not.</span>
416
- <span class="sd">Such a criterion can e.g. be that the string contains a certain substring. Also an inverse logic might be required:</span>
417
- <span class="sd">In this case the criterion is that the string does **not** contain this substring.</span>
418
-
419
- <span class="sd">It might also be required to combine several criteria to a final conclusion if in total the criterion for a string is fulfilled or not.</span>
420
- <span class="sd">For example: The string must start with the string *prefix* and must also contain either the string *substring1* or the string *substring2*</span>
421
- <span class="sd">but must also **not** end with the string *suffix*.</span>
422
-
423
- <span class="sd">This method provides a bunch of predefined filters that can be used singly or combined to come to a final conclusion if the string fulfils all criteria or not.</span>
424
-
425
- <span class="sd">The filters are divided into three different types:</span>
426
-
427
- <span class="sd">1. Filters that are interpreted as raw strings (called &#39;standard filters&#39;; no wild cards supported)</span>
428
- <span class="sd">2. Filters that are interpreted as regular expressions (called &#39;regular expression based filters&#39;; the syntax of regular expressions has to be considered)</span>
429
- <span class="sd">3. Boolean switches (e.g. indicating if also an empty string is accepted or not)</span>
430
-
431
- <span class="sd">The input string might contain leading and trailing blanks and tabs. This kind of horizontal space is removed from the input string</span>
432
- <span class="sd">before the standard filters start their work (except the regular expression based filters).</span>
433
-
434
- <span class="sd">The regular expression based filters consider the original input string (including the leading and trailing space). </span>
435
-
436
- <span class="sd">The outcome is that in case of the leading and trailing space shall be part of the criterion, the regular expression based filters can be used only.</span>
437
-
438
- <span class="sd">It is possible to decide if the standard filters shall work case sensitive or not. This decision has no effect on the regular expression based filters.</span>
439
-
440
- <span class="sd">The regular expression based filters always work with the original input string that is not modified in any way.</span>
441
-
442
- <span class="sd">Except the regular expression based filters it is possible to provide more than one string for every standard filter (must be a semikolon separated list in this case).</span>
443
- <span class="sd">A semicolon that shall be part of the search string, has to be masked in this way: ``\;``.</span>
444
-
445
- <span class="sd">This method returns a boolean value that is ``True`` in case of all criteria are fulfilled, and ``False`` in case of some or all of them are not fulfilled.</span>
446
-
447
- <span class="sd">The default value for all filters is ``None`` (except ``bSkipBlankStrings``). In case of a filter value is ``None`` this filter has no influence on the result.</span>
448
-
449
- <span class="sd">In case of all filters are ``None`` (default) the return value is ``True`` (except the string itself is ``None``</span>
450
- <span class="sd">or the string is empty and ``bSkipBlankStrings`` is ``True``).</span>
451
-
452
- <span class="sd">In case of the string is ``None``, the return value is ``False``, because nothing concrete can be done with ``None`` strings.</span>
453
-
454
- <span class="sd">Internally every filter has his own individual acknowledge that indicates if the criterion of this filter is fulfilled or not.</span>
455
-
456
- <span class="sd">The meaning of *criterion fulfilled* of a filter is that the filter supports the final return value ``bAck`` of this method with ``True``.</span>
457
-
458
- <span class="sd">The final return value ``bAck`` of this method is a logical join (``AND``) of all individual acknowledges (except ``bSkipBlankStrings`` and ``sComment``;</span>
459
- <span class="sd">in case of their criteria are **not** fulfilled, immediately ``False`` is returned).</span>
460
-
461
- <span class="sd">Summarized:</span>
462
-
463
- <span class="sd">* Filters are used to define *criteria*</span>
464
- <span class="sd">* The return value of this method provides the *conclusion* - indicating if all criteria are fulfilled or not</span>
465
-
466
-
467
- <span class="sd">*The following filters are available:*</span>
468
-
469
- <span class="sd">**bSkipBlankStrings**</span>
470
-
471
- <span class="sd"> * Like already mentioned above leading and trailing spaces are removed from the input string at the beginning</span>
472
- <span class="sd"> * In case of the result is an empty string and ``bSkipBlankStrings`` is ``True``, the method immediately returns ``False``</span>
473
- <span class="sd"> and all other filters are ignored</span>
474
-
475
- <span class="sd">**sComment**</span>
476
-
477
- <span class="sd"> * In case of the input string starts with the string ``sComment``, the method immediately returns ``False``</span>
478
- <span class="sd"> and all other filters are ignored</span>
479
- <span class="sd"> * Leading blanks within the input string have no effect</span>
480
- <span class="sd"> * The decision also depends on ``bCaseSensitive``</span>
481
- <span class="sd"> * The idea behind this decision is: Ignore a string that is commented out</span>
482
-
483
- <span class="sd">**sStartsWith**</span>
484
-
485
- <span class="sd"> * The criterion of this filter is fulfilled in case of the input string starts with the string ``sStartsWith``</span>
486
- <span class="sd"> * Leading blanks within the input string have no effect</span>
487
- <span class="sd"> * The decision also depends on ``bCaseSensitive``</span>
488
- <span class="sd"> * More than one string can be provided (semicolon separated; logical join: ``OR``)</span>
489
-
490
- <span class="sd">**sEndsWith**</span>
491
-
492
- <span class="sd"> * The criterion of this filter is fulfilled in case of the input string ends with the string ``sEndsWith``</span>
493
- <span class="sd"> * Trailing blanks within the input string have no effect</span>
494
- <span class="sd"> * The decision also depends on ``bCaseSensitive``</span>
495
- <span class="sd"> * More than one string can be provided (semicolon separated; logical join: ``OR``)</span>
496
-
497
- <span class="sd">**sStartsNotWith**</span>
498
-
499
- <span class="sd"> * The criterion of this filter is fulfilled in case of the input string does **not** start with the string ``sStartsNotWith``</span>
500
- <span class="sd"> * Leading blanks within the input string have no effect</span>
501
- <span class="sd"> * The decision also depends on ``bCaseSensitive``</span>
502
- <span class="sd"> * More than one string can be provided (semicolon separated; logical join: ``AND``)</span>
503
-
504
- <span class="sd">**sEndsNotWith**</span>
505
-
506
- <span class="sd"> * The criterion of this filter is fulfilled in case of the input string does **not** end with the string ``sEndsNotWith``</span>
507
- <span class="sd"> * Trailing blanks within the input string have no effect</span>
508
- <span class="sd"> * The decision also depends on ``bCaseSensitive``</span>
509
- <span class="sd"> * More than one string can be provided (semicolon separated; logical join: ``AND``)</span>
510
-
511
- <span class="sd">**sContains**</span>
512
-
513
- <span class="sd"> * The criterion of this filter is fulfilled in case of the input string contains the string ``sContains`` at any position</span>
514
- <span class="sd"> * Leading and trailing blanks within the input string have no effect</span>
515
- <span class="sd"> * The decision also depends on ``bCaseSensitive``</span>
516
- <span class="sd"> * More than one string can be provided (semicolon separated; logical join: ``OR``)</span>
517
-
518
- <span class="sd">**sContainsNot**</span>
519
-
520
- <span class="sd"> * The criterion of this filter is fulfilled in case of the input string does **not** contain the string ``sContainsNot`` at any position</span>
521
- <span class="sd"> * Leading and trailing blanks within the input string have no effect</span>
522
- <span class="sd"> * The decision also depends on ``bCaseSensitive``</span>
523
- <span class="sd"> * More than one string can be provided (semicolon separated; logical join: ``AND``)</span>
524
-
525
- <span class="sd">**sInclRegEx**</span>
526
-
527
- <span class="sd"> * *Include* filter based on regular expressions (consider the syntax of regular expressions!)</span>
528
- <span class="sd"> * The criterion of this filter is fulfilled in case of the regular expression ``sInclRegEx`` matches the input string</span>
529
- <span class="sd"> * Leading and trailing blanks within the input string are considered</span>
530
- <span class="sd"> * ``bCaseSensitive`` has no effect</span>
531
- <span class="sd"> * A semicolon separated list of several regular expressions is **not** supported</span>
532
-
533
- <span class="sd">**sExclRegEx**</span>
534
-
535
- <span class="sd"> * *Exclude* filter based on regular expressions (consider the syntax of regular expressions!)</span>
536
- <span class="sd"> * The criterion of this filter is fulfilled in case of the regular expression ``sExclRegEx`` does **not** match the input string</span>
537
- <span class="sd"> * Leading and trailing blanks within the input string are considered</span>
538
- <span class="sd"> * ``bCaseSensitive`` has no effect</span>
539
- <span class="sd"> * A semicolon separated list of several regular expressions is **not** supported</span>
540
-
541
- <span class="sd">*Further parameter:*</span>
542
-
543
- <span class="sd">**sString**</span>
544
-
545
- <span class="sd"> The input string that has to be investigated. </span>
546
-
547
- <span class="sd">**bCaseSensitive** (*boolean, optional, default*: ``True``)</span>
548
-
549
- <span class="sd"> If ``True``, the standard filters work case sensitive, otherwise not.</span>
550
-
551
- <span class="sd">**bDebug** (*boolean, optional, default*: ``False``)</span>
552
-
553
- <span class="sd"> If ``True``, additional output is printed to console (e.g. the decision of every single filter), otherwise not.</span>
554
-
555
- <span class="sd">*Examples:*</span>
556
-
557
- <span class="sd">Returns ``True``:</span>
558
-
559
- <span class="sd">.. code::</span>
560
-
561
- <span class="sd"> bAck = CString.StringFilter(sString = &quot;Speed is 25 beats per minute&quot;,</span>
562
- <span class="sd"> bCaseSensitive = True,</span>
563
- <span class="sd"> bSkipBlankStrings = True,</span>
564
- <span class="sd"> sComment = None,</span>
565
- <span class="sd"> sStartsWith = &quot;Sp&quot;,</span>
566
- <span class="sd"> sEndsWith = None,</span>
567
- <span class="sd"> sStartsNotWith = None,</span>
568
- <span class="sd"> sEndsNotWith = None,</span>
569
- <span class="sd"> sContains = &quot;beats&quot;,</span>
570
- <span class="sd"> sContainsNot = None,</span>
571
- <span class="sd"> sInclRegEx = None,</span>
572
- <span class="sd"> sExclRegEx = None)</span>
573
-
574
- <span class="sd">Returns ``False``:</span>
575
-
576
- <span class="sd">.. code::</span>
577
-
578
- <span class="sd"> bAck = CString.StringFilter(sString = &quot;Speed is 25 beats per minute&quot;,</span>
579
- <span class="sd"> bCaseSensitive = True,</span>
580
- <span class="sd"> bSkipBlankStrings = True,</span>
581
- <span class="sd"> sComment = None,</span>
582
- <span class="sd"> sStartsWith = &quot;Sp&quot;,</span>
583
- <span class="sd"> sEndsWith = None,</span>
584
- <span class="sd"> sStartsNotWith = None,</span>
585
- <span class="sd"> sEndsNotWith = &quot;minute&quot;,</span>
586
- <span class="sd"> sContains = &quot;beats&quot;,</span>
587
- <span class="sd"> sContainsNot = None,</span>
588
- <span class="sd"> sInclRegEx = None,</span>
589
- <span class="sd"> sExclRegEx = None)</span>
590
-
591
- <span class="sd">Returns ``True``:</span>
592
-
593
- <span class="sd">.. code::</span>
594
-
595
- <span class="sd"> bAck = CString.StringFilter(sString = &quot;Speed is 25 beats per minute&quot;,</span>
596
- <span class="sd"> bCaseSensitive = True,</span>
597
- <span class="sd"> bSkipBlankStrings = True,</span>
598
- <span class="sd"> sComment = None,</span>
599
- <span class="sd"> sStartsWith = None,</span>
600
- <span class="sd"> sEndsWith = None,</span>
601
- <span class="sd"> sStartsNotWith = None,</span>
602
- <span class="sd"> sEndsNotWith = None,</span>
603
- <span class="sd"> sContains = None,</span>
604
- <span class="sd"> sContainsNot = &quot;Beats&quot;,</span>
605
- <span class="sd"> sInclRegEx = None,</span>
606
- <span class="sd"> sExclRegEx = None)</span>
607
-
608
- <span class="sd">Returns ``True``:</span>
609
-
610
- <span class="sd">.. code::</span>
611
-
612
- <span class="sd"> bAck = CString.StringFilter(sString = &quot;Speed is 25 beats per minute&quot;,</span>
613
- <span class="sd"> bCaseSensitive = True,</span>
614
- <span class="sd"> bSkipBlankStrings = True,</span>
615
- <span class="sd"> sComment = None,</span>
616
- <span class="sd"> sStartsWith = None,</span>
617
- <span class="sd"> sEndsWith = None,</span>
618
- <span class="sd"> sStartsNotWith = None,</span>
619
- <span class="sd"> sEndsNotWith = None,</span>
620
- <span class="sd"> sContains = None,</span>
621
- <span class="sd"> sContainsNot = None,</span>
622
- <span class="sd"> sInclRegEx = r&quot;\d{2}&quot;,</span>
623
- <span class="sd"> sExclRegEx = None)</span>
624
-
625
- <span class="sd">Returns ``False``:</span>
626
-
627
- <span class="sd">.. code::</span>
628
-
629
- <span class="sd"> bAck = CString.StringFilter(sString = &quot;Speed is 25 beats per minute&quot;,</span>
630
- <span class="sd"> bCaseSensitive = True,</span>
631
- <span class="sd"> bSkipBlankStrings = True,</span>
632
- <span class="sd"> sComment = None,</span>
633
- <span class="sd"> sStartsWith = &quot;Speed&quot;,</span>
634
- <span class="sd"> sEndsWith = None,</span>
635
- <span class="sd"> sStartsNotWith = None,</span>
636
- <span class="sd"> sEndsNotWith = None,</span>
637
- <span class="sd"> sContains = None,</span>
638
- <span class="sd"> sContainsNot = None,</span>
639
- <span class="sd"> sInclRegEx = r&quot;\d{3}&quot;,</span>
640
- <span class="sd"> sExclRegEx = None)</span>
641
-
642
- <span class="sd">Returns ``False``:</span>
643
-
644
- <span class="sd">.. code::</span>
645
-
646
- <span class="sd"> bAck = CString.StringFilter(sString = &quot;Speed is 25 beats per minute&quot;,</span>
647
- <span class="sd"> bCaseSensitive = True,</span>
648
- <span class="sd"> bSkipBlankStrings = True,</span>
649
- <span class="sd"> sComment = None,</span>
650
- <span class="sd"> sStartsWith = &quot;Speed&quot;,</span>
651
- <span class="sd"> sEndsWith = &quot;minute&quot;,</span>
652
- <span class="sd"> sStartsNotWith = &quot;speed&quot;,</span>
653
- <span class="sd"> sEndsNotWith = None,</span>
654
- <span class="sd"> sContains = &quot;beats&quot;,</span>
655
- <span class="sd"> sContainsNot = None,</span>
656
- <span class="sd"> sInclRegEx = r&quot;\d{2}&quot;,</span>
657
- <span class="sd"> sExclRegEx = r&quot;\d{2}&quot;)</span>
658
-
659
- <span class="sd">Returns ``False``:</span>
660
-
661
- <span class="sd">.. code::</span>
662
-
663
- <span class="sd"> bAck = CString.StringFilter(sString = &quot; &quot;,</span>
664
- <span class="sd"> bCaseSensitive = True,</span>
665
- <span class="sd"> bSkipBlankStrings = True,</span>
666
- <span class="sd"> sComment = None,</span>
667
- <span class="sd"> sStartsWith = None,</span>
668
- <span class="sd"> sEndsWith = None,</span>
669
- <span class="sd"> sStartsNotWith = None,</span>
670
- <span class="sd"> sEndsNotWith = None,</span>
671
- <span class="sd"> sContains = None,</span>
672
- <span class="sd"> sContainsNot = None,</span>
673
- <span class="sd"> sInclRegEx = None,</span>
674
- <span class="sd"> sExclRegEx = None)</span>
675
-
676
- <span class="sd">Returns ``False``:</span>
677
-
678
- <span class="sd">.. code::</span>
679
-
680
- <span class="sd"> bAck = CString.StringFilter(sString = &quot;# Speed is 25 beats per minute&quot;,</span>
681
- <span class="sd"> bCaseSensitive = True,</span>
682
- <span class="sd"> bSkipBlankStrings = True,</span>
683
- <span class="sd"> sComment = &quot;#&quot;,</span>
684
- <span class="sd"> sStartsWith = None,</span>
685
- <span class="sd"> sEndsWith = None,</span>
686
- <span class="sd"> sStartsNotWith = None,</span>
687
- <span class="sd"> sEndsNotWith = None,</span>
688
- <span class="sd"> sContains = &quot;beats&quot;,</span>
689
- <span class="sd"> sContainsNot = None,</span>
690
- <span class="sd"> sInclRegEx = None,</span>
691
- <span class="sd"> sExclRegEx = None)</span>
692
-
693
-
694
- <span class="sd">Returns ``False``:</span>
695
-
696
- <span class="sd">.. code::</span>
697
-
698
- <span class="sd"> bAck = CString.StringFilter(sString = &quot; Alpha is not beta; and beta is not gamma &quot;,</span>
699
- <span class="sd"> bCaseSensitive = True,</span>
700
- <span class="sd"> bSkipBlankStrings = True,</span>
701
- <span class="sd"> sComment = None,</span>
702
- <span class="sd"> sStartsWith = None,</span>
703
- <span class="sd"> sEndsWith = None,</span>
704
- <span class="sd"> sStartsNotWith = None,</span>
705
- <span class="sd"> sEndsNotWith = None,</span>
706
- <span class="sd"> sContains = &quot; Alpha &quot;,</span>
707
- <span class="sd"> sContainsNot = None,</span>
708
- <span class="sd"> sInclRegEx = None,</span>
709
- <span class="sd"> sExclRegEx = None)</span>
710
-
711
- <span class="sd">Because blanks around search strings (here ``&quot; Alpha &quot;``) are considered, whereas the blanks around the input string are removed before computation.</span>
712
- <span class="sd">Therefore ``&quot; Alpha &quot;`` cannot be found within the (shortened) input string.</span>
713
-
714
-
715
- <span class="sd">This alternative solution returns ``True``:</span>
716
-
717
- <span class="sd">.. code::</span>
718
-
719
- <span class="sd"> bAck = CString.StringFilter(sString = &quot; Alpha is not beta; and beta is not gamma &quot;,</span>
720
- <span class="sd"> bCaseSensitive = True,</span>
721
- <span class="sd"> bSkipBlankStrings = True,</span>
722
- <span class="sd"> sComment = None,</span>
723
- <span class="sd"> sStartsWith = None,</span>
724
- <span class="sd"> sEndsWith = None,</span>
725
- <span class="sd"> sStartsNotWith = None,</span>
726
- <span class="sd"> sEndsNotWith = None,</span>
727
- <span class="sd"> sContains = None,</span>
728
- <span class="sd"> sContainsNot = None,</span>
729
- <span class="sd"> sInclRegEx = r&quot;\s{3}Alpha&quot;,</span>
730
- <span class="sd"> sExclRegEx = None)</span>
731
-
732
-
733
- <span class="sd">Returns ``True``:</span>
734
-
735
- <span class="sd">.. code::</span>
736
-
737
- <span class="sd"> bAck = CString.StringFilter(sString = &quot;Alpha is not beta; and beta is not gamma&quot;,</span>
738
- <span class="sd"> bCaseSensitive = True,</span>
739
- <span class="sd"> bSkipBlankStrings = True,</span>
740
- <span class="sd"> sComment = None,</span>
741
- <span class="sd"> sStartsWith = None,</span>
742
- <span class="sd"> sEndsWith = None,</span>
743
- <span class="sd"> sStartsNotWith = None,</span>
744
- <span class="sd"> sEndsNotWith = None,</span>
745
- <span class="sd"> sContains = &quot;beta; and&quot;,</span>
746
- <span class="sd"> sContainsNot = None,</span>
747
- <span class="sd"> sInclRegEx = None,</span>
748
- <span class="sd"> sExclRegEx = None)</span>
749
-
750
- <span class="sd">The meaning of ``&quot;beta; and&quot;`` is: The criterion is fulfilled in case of either ``&quot;beta&quot;`` or ``&quot; and&quot;`` can be found. That&#39;s ``True`` in this example - but this</span>
751
- <span class="sd">has nothing to do with the fact, that also this string ``&quot;beta; and&quot;`` can be found. A semicolon that shall be part of the search, has to be masked!</span>
752
-
753
- <span class="sd">The meaning of ``&quot;beta\; not&quot;`` in the following example is: The criterion is fulfilled in case of ``&quot;beta; not&quot;`` can be found.</span>
754
-
755
- <span class="sd">That&#39;s **not** ``True``. Therefore the method returns ``False``:</span>
756
-
757
- <span class="sd">.. code::</span>
758
-
759
- <span class="sd"> bAck = CString.StringFilter(sString = &quot;Alpha is not beta; and beta is not gamma&quot;,</span>
760
- <span class="sd"> bCaseSensitive = True,</span>
761
- <span class="sd"> bSkipBlankStrings = True,</span>
762
- <span class="sd"> sComment = None,</span>
763
- <span class="sd"> sStartsWith = None,</span>
764
- <span class="sd"> sEndsWith = None,</span>
765
- <span class="sd"> sStartsNotWith = None,</span>
766
- <span class="sd"> sEndsNotWith = None,</span>
767
- <span class="sd"> sContains = r&quot;beta\; not&quot;,</span>
768
- <span class="sd"> sContainsNot = None,</span>
769
- <span class="sd"> sInclRegEx = None,</span>
770
- <span class="sd"> sExclRegEx = None)</span>
771
-
772
- <span class="sd">|</span>
773
- <span class="sd"> &quot;&quot;&quot;</span>
774
-
775
- <span class="k">if</span> <span class="n">sString</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
776
- <span class="k">return</span> <span class="kc">False</span> <span class="c1"># hard coded here; no separate filter for that decision</span>
777
-
778
- <span class="c1"># The original string &#39;sString&#39; is used by regular expression filters sInclRegEx and sExclRegEx.</span>
779
- <span class="c1"># The stripped string &#39;sStringStripped&#39; is used by all other filters.</span>
780
- <span class="n">sStringStripped</span> <span class="o">=</span> <span class="n">sString</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot; </span><span class="se">\t\r\n</span><span class="s2">&quot;</span><span class="p">)</span>
781
-
782
- <span class="c1"># -- skipping blank strings or strings commented out; other filters will not be considered any more in this case</span>
783
-
784
- <span class="k">if</span> <span class="n">bSkipBlankStrings</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
785
- <span class="k">if</span> <span class="n">sStringStripped</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
786
- <span class="k">return</span> <span class="kc">False</span>
787
-
788
- <span class="k">if</span> <span class="n">sComment</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
789
- <span class="k">if</span> <span class="n">sComment</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
790
- <span class="k">if</span> <span class="n">bCaseSensitive</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
791
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">sComment</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
792
- <span class="k">return</span> <span class="kc">False</span>
793
- <span class="k">else</span><span class="p">:</span>
794
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">sComment</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
795
- <span class="k">return</span> <span class="kc">False</span>
796
-
797
- <span class="c1"># -- consider further filters</span>
798
- <span class="c1">#</span>
799
- <span class="c1"># No filter set (= no criteria defined) =&gt; use this string (bAck is True).</span>
800
- <span class="c1">#</span>
801
- <span class="c1"># At least one filter set (except sExclRegEx), at least one set filter fits (except sExclRegEx) =&gt; use this string.</span>
802
- <span class="c1"># Filter sExclRegEx is set and fits =&gt; skip this string (final veto).</span>
803
- <span class="c1"># At least one filter does not fit (except sExclRegEx) =&gt; skip this string.</span>
804
- <span class="c1">#</span>
805
- <span class="c1"># All filters (except sExclRegEx) are include filter (bAck is True in case of all set filters fit, also the &#39;not&#39; filters)</span>
806
- <span class="c1"># The filter sExclRegEx is an exclude filter and has final veto right (can revoke the True from other filters).</span>
807
- <span class="c1">#</span>
808
- <span class="c1"># All filters (except sInclRegEx and sExclRegEx) are handled as &#39;raw strings&#39;: no wild cards, just strings, considering bCaseSensitive.</span>
809
- <span class="c1"># The filters sInclRegEx and sExclRegEx are handled as regular expressions; bCaseSensitive is not considered here.</span>
810
-
811
- <span class="c1"># -- filter specific flags (containing the names of the criteria within their names)</span>
812
- <span class="n">bStartsWith</span> <span class="o">=</span> <span class="kc">None</span>
813
- <span class="n">bEndsWith</span> <span class="o">=</span> <span class="kc">None</span>
814
- <span class="n">bStartsNotWith</span> <span class="o">=</span> <span class="kc">None</span>
815
- <span class="n">bEndsNotWith</span> <span class="o">=</span> <span class="kc">None</span>
816
- <span class="n">bContains</span> <span class="o">=</span> <span class="kc">None</span>
817
- <span class="n">bContainsNot</span> <span class="o">=</span> <span class="kc">None</span>
818
- <span class="n">bInclRegEx</span> <span class="o">=</span> <span class="kc">None</span>
819
- <span class="n">bExclRegEx</span> <span class="o">=</span> <span class="kc">None</span>
820
-
821
- <span class="c1"># Meaning:</span>
822
- <span class="c1"># - Flag is None : filter not set =&gt; filter has no effect</span>
823
- <span class="c1"># - Flag is True : filter set =&gt; result: use the input string (from this single filter flag point of view)</span>
824
- <span class="c1"># - Flag is False: filter set =&gt; result: do not use the input string (from this single filter flag point of view)</span>
825
- <span class="c1"># The results of all flags will be merged at the end of this function to one final conclusion to use the input string</span>
826
- <span class="c1"># (bAck is True) or not (bAck is False).</span>
827
- <span class="c1"># Logical join between all set filters: AND</span>
828
-
829
- <span class="c1"># substitute for the masked filter separator &#39;\n&#39; (hopefully the input string does not contain this substitute)</span>
830
- <span class="n">sSeparatorSubstitute</span> <span class="o">=</span> <span class="s2">&quot;#|S#|E#|P#|A#|R#|A#|T#|O#|R#&quot;</span>
831
-
832
- <span class="c1"># -- filter: starts with</span>
833
- <span class="c1"># &gt; several filter strings possible (separated by semicolon; logical join: OR)</span>
834
- <span class="k">if</span> <span class="n">sStartsWith</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
835
- <span class="k">if</span> <span class="n">sStartsWith</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
836
- <span class="n">sStartsWithModified</span> <span class="o">=</span> <span class="n">sStartsWith</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="n">sSeparatorSubstitute</span><span class="p">)</span> <span class="c1"># replace the masked separator by a substitute separator</span>
837
- <span class="n">listStartsWith</span> <span class="o">=</span> <span class="p">[]</span>
838
- <span class="k">if</span> <span class="n">sStartsWith</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
839
- <span class="n">listParts</span> <span class="o">=</span> <span class="n">sStartsWithModified</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span>
840
- <span class="k">for</span> <span class="n">sPart</span> <span class="ow">in</span> <span class="n">listParts</span><span class="p">:</span>
841
- <span class="n">sPart</span> <span class="o">=</span> <span class="n">sPart</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">sSeparatorSubstitute</span> <span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># recover the original version</span>
842
- <span class="n">listStartsWith</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sPart</span><span class="p">)</span>
843
- <span class="k">else</span><span class="p">:</span>
844
- <span class="n">sStartsWithModified</span> <span class="o">=</span> <span class="n">sStartsWith</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># convert to unmasked version</span>
845
- <span class="n">listStartsWith</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sStartsWithModified</span><span class="p">)</span>
846
-
847
- <span class="n">bStartsWith</span> <span class="o">=</span> <span class="kc">False</span>
848
- <span class="k">for</span> <span class="n">sStartsWith</span> <span class="ow">in</span> <span class="n">listStartsWith</span><span class="p">:</span>
849
- <span class="k">if</span> <span class="n">bCaseSensitive</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
850
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">sStartsWith</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
851
- <span class="n">bStartsWith</span> <span class="o">=</span> <span class="kc">True</span>
852
- <span class="k">break</span>
853
- <span class="k">else</span><span class="p">:</span>
854
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">sStartsWith</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
855
- <span class="n">bStartsWith</span> <span class="o">=</span> <span class="kc">True</span>
856
- <span class="k">break</span>
857
-
858
- <span class="c1"># -- filter: ends with</span>
859
- <span class="c1"># &gt; several filter strings possible (separated by semicolon; logical join: OR)</span>
860
- <span class="k">if</span> <span class="n">sEndsWith</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
861
- <span class="k">if</span> <span class="n">sEndsWith</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
862
- <span class="n">sEndsWithModified</span> <span class="o">=</span> <span class="n">sEndsWith</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="n">sSeparatorSubstitute</span><span class="p">)</span> <span class="c1"># replace the masked separator by a substitute separator</span>
863
- <span class="n">listEndsWith</span> <span class="o">=</span> <span class="p">[]</span>
864
- <span class="k">if</span> <span class="n">sEndsWith</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
865
- <span class="n">listParts</span> <span class="o">=</span> <span class="n">sEndsWithModified</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span>
866
- <span class="k">for</span> <span class="n">sPart</span> <span class="ow">in</span> <span class="n">listParts</span><span class="p">:</span>
867
- <span class="n">sPart</span> <span class="o">=</span> <span class="n">sPart</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">sSeparatorSubstitute</span> <span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># recover the original version</span>
868
- <span class="n">listEndsWith</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sPart</span><span class="p">)</span>
869
- <span class="k">else</span><span class="p">:</span>
870
- <span class="n">sEndsWithModified</span> <span class="o">=</span> <span class="n">sEndsWith</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># convert to unmasked version</span>
871
- <span class="n">listEndsWith</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sEndsWithModified</span><span class="p">)</span>
872
-
873
- <span class="n">bEndsWith</span> <span class="o">=</span> <span class="kc">False</span>
874
- <span class="k">for</span> <span class="n">sEndsWith</span> <span class="ow">in</span> <span class="n">listEndsWith</span><span class="p">:</span>
875
- <span class="k">if</span> <span class="n">bCaseSensitive</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
876
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">sEndsWith</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
877
- <span class="n">bEndsWith</span> <span class="o">=</span> <span class="kc">True</span>
878
- <span class="k">break</span>
879
- <span class="k">else</span><span class="p">:</span>
880
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">sEndsWith</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
881
- <span class="n">bEndsWith</span> <span class="o">=</span> <span class="kc">True</span>
882
- <span class="k">break</span>
883
-
884
- <span class="c1"># -- filter: starts not with</span>
885
- <span class="c1"># &gt; several filter strings possible (separated by semicolon; logical join: AND)</span>
886
- <span class="k">if</span> <span class="n">sStartsNotWith</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
887
- <span class="k">if</span> <span class="n">sStartsNotWith</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
888
- <span class="n">sStartsNotWithModified</span> <span class="o">=</span> <span class="n">sStartsNotWith</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="n">sSeparatorSubstitute</span><span class="p">)</span> <span class="c1"># replace the masked separator by a substitute separator</span>
889
- <span class="n">listStartsNotWith</span> <span class="o">=</span> <span class="p">[]</span>
890
- <span class="k">if</span> <span class="n">sStartsNotWith</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
891
- <span class="n">listParts</span> <span class="o">=</span> <span class="n">sStartsNotWithModified</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span>
892
- <span class="k">for</span> <span class="n">sPart</span> <span class="ow">in</span> <span class="n">listParts</span><span class="p">:</span>
893
- <span class="n">sPart</span> <span class="o">=</span> <span class="n">sPart</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">sSeparatorSubstitute</span> <span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># recover the original version</span>
894
- <span class="n">listStartsNotWith</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sPart</span><span class="p">)</span>
895
- <span class="k">else</span><span class="p">:</span>
896
- <span class="n">sStartsNotWithModified</span> <span class="o">=</span> <span class="n">sStartsNotWith</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># convert to unmasked version</span>
897
- <span class="n">listStartsNotWith</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sStartsNotWithModified</span><span class="p">)</span>
898
-
899
- <span class="n">bStartsNotWith</span> <span class="o">=</span> <span class="kc">True</span>
900
- <span class="k">for</span> <span class="n">sStartsNotWith</span> <span class="ow">in</span> <span class="n">listStartsNotWith</span><span class="p">:</span>
901
- <span class="k">if</span> <span class="n">bCaseSensitive</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
902
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">sStartsNotWith</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
903
- <span class="n">bStartsNotWith</span> <span class="o">=</span> <span class="kc">False</span>
904
- <span class="k">break</span>
905
- <span class="k">else</span><span class="p">:</span>
906
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">sStartsNotWith</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
907
- <span class="n">bStartsNotWith</span> <span class="o">=</span> <span class="kc">False</span>
908
- <span class="k">break</span>
909
-
910
- <span class="c1"># -- filter: ends not with</span>
911
- <span class="c1"># &gt; several filter strings possible (separated by semicolon; logical join: AND)</span>
912
- <span class="k">if</span> <span class="n">sEndsNotWith</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
913
- <span class="k">if</span> <span class="n">sEndsNotWith</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
914
- <span class="n">sEndsNotWithModified</span> <span class="o">=</span> <span class="n">sEndsNotWith</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="n">sSeparatorSubstitute</span><span class="p">)</span> <span class="c1"># replace the masked separator by a substitute separator</span>
915
- <span class="n">listEndsNotWith</span> <span class="o">=</span> <span class="p">[]</span>
916
- <span class="k">if</span> <span class="n">sEndsNotWith</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
917
- <span class="n">listParts</span> <span class="o">=</span> <span class="n">sEndsNotWithModified</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span>
918
- <span class="k">for</span> <span class="n">sPart</span> <span class="ow">in</span> <span class="n">listParts</span><span class="p">:</span>
919
- <span class="n">sPart</span> <span class="o">=</span> <span class="n">sPart</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">sSeparatorSubstitute</span> <span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># recover the original version</span>
920
- <span class="n">listEndsNotWith</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sPart</span><span class="p">)</span>
921
- <span class="k">else</span><span class="p">:</span>
922
- <span class="n">sEndsNotWithModified</span> <span class="o">=</span> <span class="n">sEndsNotWith</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># convert to unmasked version</span>
923
- <span class="n">listEndsNotWith</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sEndsNotWithModified</span><span class="p">)</span>
924
-
925
- <span class="n">bEndsNotWith</span> <span class="o">=</span> <span class="kc">True</span>
926
- <span class="k">for</span> <span class="n">sEndsNotWith</span> <span class="ow">in</span> <span class="n">listEndsNotWith</span><span class="p">:</span>
927
- <span class="k">if</span> <span class="n">bCaseSensitive</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
928
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">sEndsNotWith</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
929
- <span class="n">bEndsNotWith</span> <span class="o">=</span> <span class="kc">False</span>
930
- <span class="k">break</span>
931
- <span class="k">else</span><span class="p">:</span>
932
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">sEndsNotWith</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
933
- <span class="n">bEndsNotWith</span> <span class="o">=</span> <span class="kc">False</span>
934
- <span class="k">break</span>
935
-
936
- <span class="c1"># -- filter: contains</span>
937
- <span class="c1"># &gt; several filter strings possible (separated by semicolon; logical join: OR)</span>
938
- <span class="k">if</span> <span class="n">sContains</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
939
- <span class="k">if</span> <span class="n">sContains</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
940
- <span class="n">sContainsModified</span> <span class="o">=</span> <span class="n">sContains</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="n">sSeparatorSubstitute</span><span class="p">)</span> <span class="c1"># replace the masked separator by a substitute separator</span>
941
- <span class="n">listContains</span> <span class="o">=</span> <span class="p">[]</span>
942
- <span class="k">if</span> <span class="n">sContainsModified</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
943
- <span class="n">listParts</span> <span class="o">=</span> <span class="n">sContainsModified</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span>
944
- <span class="k">for</span> <span class="n">sPart</span> <span class="ow">in</span> <span class="n">listParts</span><span class="p">:</span>
945
- <span class="n">sPart</span> <span class="o">=</span> <span class="n">sPart</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">sSeparatorSubstitute</span> <span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># recover the original version</span>
946
- <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;- Part: &#39;</span><span class="si">{</span><span class="n">sPart</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
947
- <span class="n">listContains</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sPart</span><span class="p">)</span>
948
- <span class="k">else</span><span class="p">:</span>
949
- <span class="n">sContainsModified</span> <span class="o">=</span> <span class="n">sContains</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># convert to unmasked version</span>
950
- <span class="n">listContains</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sContainsModified</span><span class="p">)</span>
951
-
952
- <span class="n">bContains</span> <span class="o">=</span> <span class="kc">False</span>
953
- <span class="k">for</span> <span class="n">sContains</span> <span class="ow">in</span> <span class="n">listContains</span><span class="p">:</span>
954
- <span class="k">if</span> <span class="n">bCaseSensitive</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
955
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">sContains</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
956
- <span class="n">bContains</span> <span class="o">=</span> <span class="kc">True</span>
957
- <span class="k">break</span>
958
- <span class="k">else</span><span class="p">:</span>
959
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">sContains</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
960
- <span class="n">bContains</span> <span class="o">=</span> <span class="kc">True</span>
961
- <span class="k">break</span>
962
-
963
- <span class="c1"># -- filter: contains not</span>
964
- <span class="c1"># &gt; several filter strings possible (separated by semicolon; logical join: AND)</span>
965
- <span class="k">if</span> <span class="n">sContainsNot</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
966
- <span class="k">if</span> <span class="n">sContainsNot</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
967
- <span class="n">sContainsNotModified</span> <span class="o">=</span> <span class="n">sContainsNot</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="n">sSeparatorSubstitute</span><span class="p">)</span> <span class="c1"># replace the masked separator by a substitute separator</span>
968
- <span class="n">listContainsNot</span> <span class="o">=</span> <span class="p">[]</span>
969
- <span class="k">if</span> <span class="n">sContainsNot</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
970
- <span class="n">listParts</span> <span class="o">=</span> <span class="n">sContainsNotModified</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span>
971
- <span class="k">for</span> <span class="n">sPart</span> <span class="ow">in</span> <span class="n">listParts</span><span class="p">:</span>
972
- <span class="n">sPart</span> <span class="o">=</span> <span class="n">sPart</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">sSeparatorSubstitute</span> <span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># recover the original version</span>
973
- <span class="n">listContainsNot</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sPart</span><span class="p">)</span>
974
- <span class="k">else</span><span class="p">:</span>
975
- <span class="n">sContainsNotModified</span> <span class="o">=</span> <span class="n">sContainsNot</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\;&quot;</span><span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="c1"># convert to unmasked version</span>
976
- <span class="n">listContainsNot</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sContainsNotModified</span><span class="p">)</span>
977
-
978
- <span class="n">bContainsNot</span> <span class="o">=</span> <span class="kc">True</span>
979
- <span class="k">for</span> <span class="n">sContainsNot</span> <span class="ow">in</span> <span class="n">listContainsNot</span><span class="p">:</span>
980
- <span class="k">if</span> <span class="n">bCaseSensitive</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
981
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">sContainsNot</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
982
- <span class="n">bContainsNot</span> <span class="o">=</span> <span class="kc">False</span>
983
- <span class="k">break</span>
984
- <span class="k">else</span><span class="p">:</span>
985
- <span class="k">if</span> <span class="n">sStringStripped</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">sContainsNot</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
986
- <span class="n">bContainsNot</span> <span class="o">=</span> <span class="kc">False</span>
987
- <span class="k">break</span>
988
-
989
- <span class="c1"># -- filter: sInclRegEx</span>
990
- <span class="c1"># &gt; (take care to mask special characters that are part of the syntax of regular expressions!)</span>
991
- <span class="c1"># &gt; bCaseSensitive not considered here</span>
992
- <span class="k">if</span> <span class="n">sInclRegEx</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
993
- <span class="k">if</span> <span class="n">sInclRegEx</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
994
- <span class="n">bInclRegEx</span> <span class="o">=</span> <span class="kc">False</span>
995
- <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">sInclRegEx</span><span class="p">,</span> <span class="n">sString</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
996
- <span class="n">bInclRegEx</span> <span class="o">=</span> <span class="kc">True</span>
997
-
998
- <span class="c1"># -- last filter: sExclRegEx (final veto right)</span>
999
- <span class="c1"># &gt; (take care to mask special characters that are part of the syntax of regular expressions!)</span>
1000
- <span class="c1"># &gt; bCaseSensitive not considered here</span>
1001
- <span class="k">if</span> <span class="n">sExclRegEx</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
1002
- <span class="k">if</span> <span class="n">sExclRegEx</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
1003
- <span class="n">bExclRegEx</span> <span class="o">=</span> <span class="kc">True</span>
1004
- <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">sExclRegEx</span><span class="p">,</span> <span class="n">sString</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
1005
- <span class="n">bExclRegEx</span> <span class="o">=</span> <span class="kc">False</span>
1006
-
1007
- <span class="c1"># -- debug info</span>
1008
- <span class="k">if</span> <span class="n">bDebug</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
1009
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">* [sString] : &#39;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">sString</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&#39;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
1010
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; -&gt; [bStartsWith] : &#39;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bStartsWith</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)</span>
1011
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; -&gt; [bEndsWith] : &#39;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bEndsWith</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)</span>
1012
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; -&gt; [bStartsNotWith] : &#39;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bStartsNotWith</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)</span>
1013
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; -&gt; [bEndsNotWith] : &#39;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bEndsNotWith</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)</span>
1014
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; -&gt; [bContains] : &#39;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bContains</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)</span>
1015
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; -&gt; [bContainsNot] : &#39;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bContainsNot</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)</span>
1016
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; -&gt; [bInclRegEx] : &#39;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bInclRegEx</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)</span>
1017
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; -&gt; [bExclRegEx] : &#39;&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bExclRegEx</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;&#39;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
1018
-
1019
- <span class="c1"># -- final conclusion (AND condition between filters)</span>
1020
-
1021
- <span class="n">listDecisions</span> <span class="o">=</span> <span class="p">[]</span>
1022
- <span class="n">listDecisions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bStartsWith</span><span class="p">)</span>
1023
- <span class="n">listDecisions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bEndsWith</span><span class="p">)</span>
1024
- <span class="n">listDecisions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bStartsNotWith</span><span class="p">)</span>
1025
- <span class="n">listDecisions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bEndsNotWith</span><span class="p">)</span>
1026
- <span class="n">listDecisions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bContains</span><span class="p">)</span>
1027
- <span class="n">listDecisions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bContainsNot</span><span class="p">)</span>
1028
- <span class="n">listDecisions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bInclRegEx</span><span class="p">)</span>
1029
- <span class="n">listDecisions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bExclRegEx</span><span class="p">)</span>
1030
-
1031
- <span class="n">bAck</span> <span class="o">=</span> <span class="kc">False</span> <span class="c1"># initial</span>
1032
-
1033
- <span class="c1"># -- 1.) no filter set (all None)</span>
1034
- <span class="n">nCntDecisions</span> <span class="o">=</span> <span class="mi">0</span>
1035
- <span class="k">for</span> <span class="n">bDecision</span> <span class="ow">in</span> <span class="n">listDecisions</span><span class="p">:</span>
1036
- <span class="k">if</span> <span class="n">bDecision</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1037
- <span class="n">nCntDecisions</span> <span class="o">=</span> <span class="n">nCntDecisions</span> <span class="o">+</span> <span class="mi">1</span>
1038
- <span class="k">if</span> <span class="n">nCntDecisions</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">listDecisions</span><span class="p">):</span>
1039
- <span class="n">bAck</span> <span class="o">=</span> <span class="kc">True</span>
1040
- <span class="k">if</span> <span class="n">bDebug</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
1041
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; &gt; case [1] - bAck: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bAck</span><span class="p">))</span>
1042
-
1043
- <span class="c1"># -- 2.) final veto from exclude filter</span>
1044
- <span class="k">if</span> <span class="n">bExclRegEx</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
1045
- <span class="n">bAck</span> <span class="o">=</span> <span class="kc">False</span>
1046
- <span class="k">if</span> <span class="n">bDebug</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
1047
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; &gt; case [2] - bAck: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bAck</span><span class="p">))</span>
1048
-
1049
- <span class="c1"># -- 3.) exclude filter not set; decision only made by other filters (include)</span>
1050
- <span class="k">if</span> <span class="n">bExclRegEx</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1051
- <span class="n">bAck</span> <span class="o">=</span> <span class="kc">True</span>
1052
- <span class="k">for</span> <span class="n">bDecision</span> <span class="ow">in</span> <span class="n">listDecisions</span><span class="p">:</span>
1053
- <span class="k">if</span> <span class="n">bDecision</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
1054
- <span class="n">bAck</span> <span class="o">=</span> <span class="kc">False</span>
1055
- <span class="k">break</span>
1056
- <span class="k">if</span> <span class="n">bDebug</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
1057
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; &gt; case [3] - bAck: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bAck</span><span class="p">))</span>
1058
-
1059
- <span class="c1"># -- 4.) exclude filter is True (only relevant in case of all other filters are not set; otherwise decision only made by other filters (include))</span>
1060
- <span class="k">if</span> <span class="n">bExclRegEx</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
1061
- <span class="k">if</span> <span class="p">(</span> <span class="p">(</span><span class="n">bStartsWith</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span>
1062
- <span class="p">(</span><span class="n">bEndsWith</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span>
1063
- <span class="p">(</span><span class="n">bStartsNotWith</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span>
1064
- <span class="p">(</span><span class="n">bEndsNotWith</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span>
1065
- <span class="p">(</span><span class="n">bContains</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span>
1066
- <span class="p">(</span><span class="n">bContainsNot</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span>
1067
- <span class="p">(</span><span class="n">bInclRegEx</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">)</span> <span class="p">):</span>
1068
- <span class="n">bAck</span> <span class="o">=</span> <span class="kc">True</span>
1069
- <span class="k">if</span> <span class="n">bDebug</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
1070
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; &gt; case [4.1] - bAck: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bAck</span><span class="p">))</span>
1071
- <span class="k">else</span><span class="p">:</span>
1072
- <span class="n">bAck</span> <span class="o">=</span> <span class="kc">True</span>
1073
- <span class="k">for</span> <span class="n">bDecision</span> <span class="ow">in</span> <span class="n">listDecisions</span><span class="p">:</span>
1074
- <span class="k">if</span> <span class="n">bDecision</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
1075
- <span class="n">bAck</span> <span class="o">=</span> <span class="kc">False</span>
1076
- <span class="k">break</span>
1077
- <span class="k">if</span> <span class="n">bDebug</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
1078
- <span class="nb">print</span><span class="p">(</span><span class="s2">&quot; &gt; case [4.2] - bAck: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">bAck</span><span class="p">))</span>
1079
-
1080
- <span class="k">if</span> <span class="n">bDebug</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
1081
- <span class="nb">print</span><span class="p">()</span>
1082
-
1083
- <span class="k">return</span> <span class="n">bAck</span></div>
1084
-
1085
- <span class="c1"># eof def StringFilter(...)</span>
1086
-
1087
- <span class="c1"># --------------------------------------------------------------------------------------------------------------</span>
1088
- <span class="c1">#TM***</span>
1089
-
1090
- <div class="viewcode-block" id="CString.FormatResult"><a class="viewcode-back" href="../../../String.html#PythonExtensionsCollection.String.CString.CString.FormatResult">[docs]</a> <span class="k">def</span> <span class="nf">FormatResult</span><span class="p">(</span><span class="n">sMethod</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">bSuccess</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">sResult</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
1091
- <span class="sd">&quot;&quot;&quot;</span>
1092
- <span class="sd">|</span>
1093
-
1094
- <span class="sd">**Method:**</span>
1095
-
1096
- <span class="sd">**FormatResult**</span>
1097
-
1098
- <span class="sd"> Formats the result string ``sResult`` depending on ``bSuccess``:</span>
1099
-
1100
- <span class="sd"> * ``bSuccess`` is ``True`` indicates *success*</span>
1101
- <span class="sd"> * ``bSuccess`` is ``False`` indicates an *error*</span>
1102
- <span class="sd"> * ``bSuccess`` is ``None`` indicates an *exception*</span>
1103
-
1104
- <span class="sd"> Additionally the name of the method that causes the result, can be provided (*optional*).</span>
1105
- <span class="sd"> This is useful for debugging.</span>
1106
-
1107
- <span class="sd"> Returns the formatted result string.</span>
1108
-
1109
- <span class="sd">|</span>
1110
- <span class="sd"> &quot;&quot;&quot;</span>
1111
-
1112
- <span class="k">if</span> <span class="n">sMethod</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1113
- <span class="n">sMethod</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">sMethod</span><span class="p">)</span>
1114
- <span class="k">if</span> <span class="n">sResult</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
1115
- <span class="n">sResult</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">sResult</span><span class="p">)</span>
1116
- <span class="k">if</span> <span class="n">bSuccess</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
1117
- <span class="k">if</span> <span class="n">sMethod</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
1118
- <span class="n">sResult</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">sMethod</span><span class="si">}</span><span class="s2">] : </span><span class="si">{</span><span class="n">sResult</span><span class="si">}</span><span class="s2">&quot;</span>
1119
- <span class="k">elif</span> <span class="n">bSuccess</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
1120
- <span class="n">sError</span> <span class="o">=</span> <span class="s2">&quot;!!! ERROR !!!&quot;</span>
1121
- <span class="k">if</span> <span class="n">sMethod</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
1122
- <span class="n">sResult</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sError</span><span class="si">}</span><span class="se">\n</span><span class="s2">[</span><span class="si">{</span><span class="n">sMethod</span><span class="si">}</span><span class="s2">] : </span><span class="si">{</span><span class="n">sResult</span><span class="si">}</span><span class="s2">&quot;</span>
1123
- <span class="k">else</span><span class="p">:</span>
1124
- <span class="n">sResult</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sError</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">sResult</span><span class="si">}</span><span class="s2">&quot;</span>
1125
- <span class="k">else</span><span class="p">:</span>
1126
- <span class="n">sException</span> <span class="o">=</span> <span class="s2">&quot;!!! EXCEPTION !!!&quot;</span>
1127
- <span class="k">if</span> <span class="n">sMethod</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
1128
- <span class="n">sResult</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sException</span><span class="si">}</span><span class="se">\n</span><span class="s2">[</span><span class="si">{</span><span class="n">sMethod</span><span class="si">}</span><span class="s2">] : </span><span class="si">{</span><span class="n">sResult</span><span class="si">}</span><span class="s2">&quot;</span>
1129
- <span class="k">else</span><span class="p">:</span>
1130
- <span class="n">sResult</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sException</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">sResult</span><span class="si">}</span><span class="s2">&quot;</span>
1131
- <span class="k">return</span> <span class="n">sResult</span></div>
1132
-
1133
- <span class="c1"># eof def FormatResult(sMethod=&quot;&quot;, bSuccess=True, sResult=&quot;&quot;):</span>
1134
-
1135
- <span class="c1"># --------------------------------------------------------------------------------------------------------------</span>
1136
- <span class="c1">#TM***</span>
1137
-
1138
- <span class="c1"># - make the methods static</span>
1139
-
1140
- <span class="n">NormalizePath</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">NormalizePath</span><span class="p">)</span>
1141
- <span class="n">DetectParentPath</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">DetectParentPath</span><span class="p">)</span>
1142
- <span class="n">StringFilter</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">StringFilter</span><span class="p">)</span>
1143
- <span class="n">FormatResult</span> <span class="o">=</span> <span class="nb">staticmethod</span><span class="p">(</span><span class="n">FormatResult</span><span class="p">)</span></div>
1144
-
1145
- <span class="c1"># eof class CString(object):</span>
1146
-
1147
- <span class="c1"># **************************************************************************************************************</span>
1148
-
1149
-
1150
-
1151
- </pre></div>
1152
-
1153
- </div>
1154
-
1155
- </div>
1156
- </div>
1157
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
1158
- <div class="sphinxsidebarwrapper">
1159
- <h1 class="logo"><a href="../../../index.html">Python Extensions Collection</a></h1>
1160
-
1161
-
1162
-
1163
-
1164
-
1165
-
1166
-
1167
-
1168
- <h3>Navigation</h3>
1169
- <ul>
1170
- <li class="toctree-l1"><a class="reference internal" href="../../../additional_doc/Introduction.html">1. Introduction</a></li>
1171
- <li class="toctree-l1"><a class="reference internal" href="../../../additional_doc/Introduction.html#examples">2. Examples</a></li>
1172
- <li class="toctree-l1"><a class="reference internal" href="../../../String.html">3. CString module</a></li>
1173
- <li class="toctree-l1"><a class="reference internal" href="../../../Utils.html">4. CUtils module</a></li>
1174
- <li class="toctree-l1"><a class="reference internal" href="../../../File.html">5. CFile module</a></li>
1175
- </ul>
1176
-
1177
- <div class="relations">
1178
- <h3>Related Topics</h3>
1179
- <ul>
1180
- <li><a href="../../../index.html">Documentation overview</a><ul>
1181
- <li><a href="../../index.html">Module code</a><ul>
1182
- </ul></li>
1183
- </ul></li>
1184
- </ul>
1185
- </div>
1186
- <div id="searchbox" style="display: none" role="search">
1187
- <h3 id="searchlabel">Quick search</h3>
1188
- <div class="searchformwrapper">
1189
- <form class="search" action="../../../search.html" method="get">
1190
- <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
1191
- <input type="submit" value="Go" />
1192
- </form>
1193
- </div>
1194
- </div>
1195
- <script>document.getElementById('searchbox').style.display = "block"</script>
1196
-
1197
-
1198
-
1199
-
1200
-
1201
-
1202
-
1203
-
1204
- </div>
1205
- </div>
1206
- <div class="clearer"></div>
1207
- </div>
1208
- <div class="footer">
1209
- &copy;2022, Queckenstedt Holger (XC-CT/ECA3).
1210
-
1211
- |
1212
- Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.0</a>
1213
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
1214
-
1215
- </div>
1216
-
1217
-
1218
-
1219
-
1220
- </body>
1221
- </html>