diff options
Diffstat (limited to 'coverage-report/d_e9c451f4ae334f76___init___py.html')
-rw-r--r-- | coverage-report/d_e9c451f4ae334f76___init___py.html | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/coverage-report/d_e9c451f4ae334f76___init___py.html b/coverage-report/d_e9c451f4ae334f76___init___py.html new file mode 100644 index 0000000..8183ffa --- /dev/null +++ b/coverage-report/d_e9c451f4ae334f76___init___py.html @@ -0,0 +1,290 @@ +<!DOCTYPE html> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> + <title>Coverage for src/debputy/lsp/vendoring/_deb822_repro/__init__.py: 100%</title> + <link rel="icon" sizes="32x32" href="favicon_32.png"> + <link rel="stylesheet" href="style.css" type="text/css"> + <script type="text/javascript" src="coverage_html.js" defer></script> +</head> +<body class="pyfile"> +<header> + <div class="content"> + <h1> + <span class="text">Coverage for </span><b>src/debputy/lsp/vendoring/_deb822_repro/__init__.py</b>: + <span class="pc_cov">100%</span> + </h1> + <aside id="help_panel_wrapper"> + <input id="help_panel_state" type="checkbox"> + <label for="help_panel_state"> + <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> + </label> + <div id="help_panel"> + <p class="legend">Shortcuts on this page</p> + <div class="keyhelp"> + <p> + <kbd>r</kbd> + <kbd>m</kbd> + <kbd>x</kbd> + <kbd>p</kbd> + toggle line displays + </p> + <p> + <kbd>j</kbd> + <kbd>k</kbd> + next/prev highlighted chunk + </p> + <p> + <kbd>0</kbd> (zero) top of page + </p> + <p> + <kbd>1</kbd> (one) first highlighted chunk + </p> + <p> + <kbd>[</kbd> + <kbd>]</kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> + </div> + </div> + </aside> + <h2> + <span class="text">3 statements </span> + <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">3<span class="text"> run</span></button> + <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> + <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">1<span class="text"> excluded</span></button> + <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">0<span class="text"> partial</span></button> + </h2> + <p class="text"> + <a id="prevFileLink" class="nav" href="d_50e3cc0df0cc5f51___init___py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="d_e9c451f4ae334f76__util_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.7">coverage.py v7.2.7</a>, + created at 2024-04-07 12:14 +0200 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut="["/> + <button type="button" class="button_next_file" data-shortcut="]"/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> + </div> +</header> +<main id="source"> + <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="com"># The "from X import Y as Y" looks weird, but we are stuck in a fight</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="com"># between mypy and pylint in the CI.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="com">#</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="com"># mypy --strict insists on either of following for re-exporting</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="com"># 1) Do a "from debian._deb822_repro.X import *"</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="com"># 2) Do a "from .X import Y"</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="com"># 3) Do a "from debian._deb822_repro.X import Y as Z"</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="com">#</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="com"># pylint on the CI fails on relative imports (it assumes "lib" is a</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="com"># part of the python package name in relative imports). This rules</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="com"># out 2) from the mypy list. The use of 1) would cause overlapping</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="com"># imports (and also it felt prudent to import only what was exported).</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="com">#</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="com"># This left 3) as the only option for now, which pylint then complains</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="com"># about (not unreasonably in general). Unfortunately, we can disable</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="com"># that warning in this work around. But once 2) becomes an option</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="com"># without pylint tripping over itself on the CI, then it considerably</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="com"># better than this approach.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="com">#</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"> </span><span class="r"></span></p> + <p class="exc show_exc"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="str">""" Round-trip safe dictionary-like interfaces to RFC822-like files</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="str">This module is a round-trip safe API for working with RFC822-like Debian data</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"><span class="str">formats. It is primarily aimed files managed by humans, like debian/control.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"><span class="str">While it is be able to process any Deb822 file, you might find the debian.deb822</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"><span class="str">module better suited for larger files such as the `Packages` and `Sources`</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="str">from the Debian archive due to reasons explained below.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"><span class="str">Being round-trip safe means that this module will faithfully preserve the original</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"><span class="str">formatting including whitespace and comments from the input where not modified.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"><span class="str">A concrete example::</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"><span class="str"> >>> from debian._deb822_repro import parse_deb822_file</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"><span class="str"> >>> example_deb822_paragraph = '''</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"><span class="str"> ... Package: foo</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"><span class="str"> ... # Field comment (because it becomes just before a field)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"><span class="str"> ... Section: main/devel</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"><span class="str"> ... Depends: libfoo,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"><span class="str"> ... # Inline comment (associated with the next line)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t"><span class="str"> ... libbar,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"><span class="str"> ... '''</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"><span class="str"> >>> deb822_file = parse_deb822_file(example_deb822_paragraph.splitlines())</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t"><span class="str"> >>> paragraph = next(iter(deb822_file))</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t"><span class="str"> >>> paragraph['Section'] = 'devel'</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"><span class="str"> >>> output = deb822_file.dump()</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t"><span class="str"> >>> output == example_deb822_paragraph.replace('Section: main/devel', 'Section: devel')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t"><span class="str"> True</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"><span class="str">This makes it particularly good for automated changes/corrections to files (partly)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"><span class="str">maintained by humans.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t"><span class="str">Compared to debian.deb822</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"><span class="str">-------------------------</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t"><span class="str">The round-trip safe API is primarily useful when your program is editing files</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"><span class="str">and the file in question is (likely) to be hand-edited or formatted directly by</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"><span class="str">human maintainers. This includes files like debian/control and the</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"><span class="str">debian/copyright using the "DEP-5" format.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t"><span class="str">The round-trip safe API also supports parsing and working with invalid files.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t"><span class="str">This enables programs to work on the file in cases where the file was a left</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"><span class="str">with an error in an attempt to correct it (or ignore it).</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"><span class="str">On the flip side, the debian.deb822 module generally uses less memory than the</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"><span class="str">round trip safe API. In some cases, it will also have faster data structures</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"><span class="str">because its internal data structures are simpler. Accordingly, when you are doing</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"><span class="str">read-only work or/and working with large files a la the Packages or Sources</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"><span class="str">files from the Debian archive, then the round-trip safe API either provides no</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t"><span class="str">advantages or its trade-offs might show up in performance statistics.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"><span class="str">The memory and runtime performance difference should generally be constant for</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"><span class="str">valid files but not necessarily a small one. For invalid files, some operations</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"><span class="str">can degrade in runtime performance in particular cases (memory performance for</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t"><span class="str">invalid files are comparable to that of valid files).</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t"><span class="str">Converting from debian.deb822</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"><span class="str">=============================</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t"><span class="str">The following is a short example for how to migrate from debian.deb822 to</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t"><span class="str">the round-trip safe API. Given the following source text::</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t"><span class="str"> >>> dctrl_input = b'''</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t"><span class="str"> ... Source: foo</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t"><span class="str"> ... Build-Depends: debhelper-compat (= 13)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t"><span class="str"> ...</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t"><span class="str"> ... Package: bar</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t"><span class="str"> ... Architecture: any</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t"><span class="str"> ... Depends: ${misc:Depends},</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t"><span class="str"> ... ${shlibs:Depends},</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t"><span class="str"> ... Description: provides some exciting feature</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t"><span class="str"> ... yada yada yada</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t"><span class="str"> ... .</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t"><span class="str"> ... more deskription with a misspelling</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t"><span class="str"> ... '''.lstrip() # To remove the leading newline</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"><span class="str"> >>> # A few definitions to emulate file I/O (would be different in the program)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t"><span class="str"> >>> import contextlib, os</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"><span class="str"> >>> @contextlib.contextmanager</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t"><span class="str"> ... def open_input():</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t"><span class="str"> ... # Works with and without keepends=True.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t"><span class="str"> ... # Keep the ends here to truly emulate an open file.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t"><span class="str"> ... yield dctrl_input.splitlines(keepends=True)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t"><span class="str"> >>> def open_output():</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t"><span class="str"> ... return open(os.devnull, 'wb')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t"><span class="str">With debian.deb822, your code might look like this::</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t"><span class="str"> >>> from debian.deb822 import Deb822</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t"><span class="str"> >>> with open_input() as in_fd, open_output() as out_fd:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t"><span class="str"> ... for paragraph in Deb822.iter_paragraphs(in_fd):</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t"><span class="str"> ... if 'Description' not in paragraph:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t"><span class="str"> ... continue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t"><span class="str"> ... description = paragraph['Description']</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t"><span class="str"> ... # Fix typo</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t"><span class="str"> ... paragraph['Description'] = description.replace('deskription', 'description')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"><span class="str"> ... paragraph.dump(out_fd)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t"><span class="str">With the round-trip safe API, the rewrite would look like this::</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t"><span class="str"> >>> from debian._deb822_repro import parse_deb822_file</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t"><span class="str"> >>> with open_input() as in_fd, open_output() as out_fd:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t"><span class="str"> ... parsed_file = parse_deb822_file(in_fd)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t"><span class="str"> ... for paragraph in parsed_file:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t123" href="#t123">123</a></span><span class="t"><span class="str"> ... if 'Description' not in paragraph:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t124" href="#t124">124</a></span><span class="t"><span class="str"> ... continue</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t125" href="#t125">125</a></span><span class="t"><span class="str"> ... description = paragraph['Description']</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t"><span class="str"> ... # Fix typo</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t127" href="#t127">127</a></span><span class="t"><span class="str"> ... paragraph['Description'] = description.replace('deskription', 'description')</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t128" href="#t128">128</a></span><span class="t"><span class="str"> ... parsed_file.dump(out_fd)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t129" href="#t129">129</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t130" href="#t130">130</a></span><span class="t"><span class="str">Key changes are:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t"><span class="str"> 1. Imports are different.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t"><span class="str"> 2. Deb822.iter_paragraphs is replaced by parse_deb822_file and a reference to</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t134" href="#t134">134</a></span><span class="t"><span class="str"> its return value is kept for later.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t"><span class="str"> 3. Instead of dumping paragraphs one by one, the return value from</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t136" href="#t136">136</a></span><span class="t"><span class="str"> parse_deb822_file is dumped at the end.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t137" href="#t137">137</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t"><span class="str"> - The round-trip safe api does support "per-paragraph" but formatting</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t139" href="#t139">139</a></span><span class="t"><span class="str"> and comments between paragraphs would be lost in the output. This may</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t140" href="#t140">140</a></span><span class="t"><span class="str"> be an acceptable tradeoff or desired for some cases.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t141" href="#t141">141</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t142" href="#t142">142</a></span><span class="t"><span class="str">Note that the round trip safe API does not accept all the same parameters as the</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t143" href="#t143">143</a></span><span class="t"><span class="str">debian.deb822 module does. Often this is because the feature is not relevant for</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t144" href="#t144">144</a></span><span class="t"><span class="str">the round-trip safe API (e.g., python-apt cannot be used as it discard comments)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t145" href="#t145">145</a></span><span class="t"><span class="str">or is obsolete in the debian.deb822 module and therefore omitted.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t147" href="#t147">147</a></span><span class="t"><span class="str">For list based fields, you may want to have a look at the</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t148" href="#t148">148</a></span><span class="t"><span class="str">Deb822ParagraphElement.as_interpreted_dict_view method.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t150" href="#t150">150</a></span><span class="t"><span class="str">Stability of this API</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t151" href="#t151">151</a></span><span class="t"><span class="str">---------------------</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t152" href="#t152">152</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t153" href="#t153">153</a></span><span class="t"><span class="str">The API is subject to change based on feedback from early adopters and beta</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t154" href="#t154">154</a></span><span class="t"><span class="str">testers. That said, the code for valid files is unlikely to change in</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t155" href="#t155">155</a></span><span class="t"><span class="str">a backwards incompatible way.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t156" href="#t156">156</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t157" href="#t157">157</a></span><span class="t"><span class="str">Things that might change in an incompatible way include:</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t158" href="#t158">158</a></span><span class="t"><span class="str"> * Whether invalid files are accepted (parsed without errors) by default.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t159" href="#t159">159</a></span><span class="t"><span class="str"> (currently they are)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t160" href="#t160">160</a></span><span class="t"><span class="str"> * How invalid files are parsed. As an example, currently a syntax error acts</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t161" href="#t161">161</a></span><span class="t"><span class="str"> as a paragraph separator. Whether it should is open to debate.</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t162" href="#t162">162</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t163" href="#t163">163</a></span><span class="t"><span class="str">"""</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t164" href="#t164">164</a></span><span class="t"> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t"><span class="com"># pylint: disable=useless-import-alias</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t166" href="#t166">166</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">parsing</span> <span class="key">import</span> <span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t167" href="#t167">167</a></span><span class="t"> <span class="nam">parse_deb822_file</span> <span class="key">as</span> <span class="nam">parse_deb822_file</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t168" href="#t168">168</a></span><span class="t"> <span class="nam">LIST_SPACE_SEPARATED_INTERPRETATION</span> <span class="key">as</span> <span class="nam">LIST_SPACE_SEPARATED_INTERPRETATION</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t169" href="#t169">169</a></span><span class="t"> <span class="nam">LIST_COMMA_SEPARATED_INTERPRETATION</span> <span class="key">as</span> <span class="nam">LIST_COMMA_SEPARATED_INTERPRETATION</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t170" href="#t170">170</a></span><span class="t"> <span class="nam">Interpretation</span> <span class="key">as</span> <span class="nam">Interpretation</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t171" href="#t171">171</a></span><span class="t"> <span class="com"># Primarily for documentation purposes / help()</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t172" href="#t172">172</a></span><span class="t"> <span class="nam">Deb822FileElement</span> <span class="key">as</span> <span class="nam">Deb822FileElement</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t173" href="#t173">173</a></span><span class="t"> <span class="nam">Deb822NoDuplicateFieldsParagraphElement</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t174" href="#t174">174</a></span><span class="t"> <span class="nam">Deb822ParagraphElement</span> <span class="key">as</span> <span class="nam">Deb822ParagraphElement</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t175" href="#t175">175</a></span><span class="t"><span class="op">)</span> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t176" href="#t176">176</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">types</span> <span class="key">import</span> <span class="op">(</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t177" href="#t177">177</a></span><span class="t"> <span class="nam">AmbiguousDeb822FieldKeyError</span> <span class="key">as</span> <span class="nam">AmbiguousDeb822FieldKeyError</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t178" href="#t178">178</a></span><span class="t"> <span class="nam">SyntaxOrParseError</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t179" href="#t179">179</a></span><span class="t"><span class="op">)</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t180" href="#t180">180</a></span><span class="t"> </span><span class="r"></span></p> + <p class="run"><span class="n"><a id="t181" href="#t181">181</a></span><span class="t"><span class="nam">__all__</span> <span class="op">=</span> <span class="op">[</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t182" href="#t182">182</a></span><span class="t"> <span class="str">"parse_deb822_file"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t183" href="#t183">183</a></span><span class="t"> <span class="str">"AmbiguousDeb822FieldKeyError"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t184" href="#t184">184</a></span><span class="t"> <span class="str">"LIST_SPACE_SEPARATED_INTERPRETATION"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t185" href="#t185">185</a></span><span class="t"> <span class="str">"LIST_COMMA_SEPARATED_INTERPRETATION"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t186" href="#t186">186</a></span><span class="t"> <span class="str">"Interpretation"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t187" href="#t187">187</a></span><span class="t"> <span class="str">"Deb822FileElement"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t188" href="#t188">188</a></span><span class="t"> <span class="str">"Deb822NoDuplicateFieldsParagraphElement"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t189" href="#t189">189</a></span><span class="t"> <span class="str">"Deb822ParagraphElement"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t190" href="#t190">190</a></span><span class="t"> <span class="str">"SyntaxOrParseError"</span><span class="op">,</span> </span><span class="r"></span></p> + <p class="pln"><span class="n"><a id="t191" href="#t191">191</a></span><span class="t"><span class="op">]</span> </span><span class="r"></span></p> +</main> +<footer> + <div class="content"> + <p> + <a id="prevFileLink" class="nav" href="d_50e3cc0df0cc5f51___init___py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="d_e9c451f4ae334f76__util_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/7.2.7">coverage.py v7.2.7</a>, + created at 2024-04-07 12:14 +0200 + </p> + </div> +</footer> +</body> +</html> |