|
7 | 7 | <head> |
8 | 8 | <meta charset="utf-8" /> |
9 | 9 | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
10 | | - <title>pyiem.database — pyIEM 1.27.0.post23+g70bd4da42</title> |
| 10 | + <title>pyiem.database — pyIEM 1.27.0.post25+g25a0baf19</title> |
11 | 11 |
|
12 | 12 |
|
13 | 13 |
|
|
38 | 38 | <link rel="preload" as="script" href="../../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf" /> |
39 | 39 | <link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" /> |
40 | 40 |
|
41 | | - <script src="../../_static/documentation_options.js?v=b0b08095"></script> |
| 41 | + <script src="../../_static/documentation_options.js?v=12cc7585"></script> |
42 | 42 | <script src="../../_static/doctools.js?v=fd6eb6e6"></script> |
43 | 43 | <script src="../../_static/sphinx_highlight.js?v=6ffebe34"></script> |
44 | 44 | <script>DOCUMENTATION_OPTIONS.pagename = '_modules/pyiem/database';</script> |
45 | 45 | <link rel="index" title="Index" href="../../genindex.html" /> |
46 | 46 | <link rel="search" title="Search" href="../../search.html" /> |
47 | 47 | <meta name="viewport" content="width=device-width, initial-scale=1"/> |
48 | 48 | <meta name="docsearch:language" content="en"/> |
49 | | - <meta name="docsearch:version" content="1.27.0.post23+g70bd4da42" /> |
50 | | - <meta name="docbuild:last-update" content="Apr 24, 2026"/> |
| 49 | + <meta name="docsearch:version" content="1.27.0.post25+g25a0baf19" /> |
| 50 | + <meta name="docbuild:last-update" content="Apr 25, 2026"/> |
51 | 51 | </head> |
52 | 52 |
|
53 | 53 |
|
|
109 | 109 |
|
110 | 110 |
|
111 | 111 |
|
112 | | - <p class="title logo__title">pyIEM 1.27.0.post23+g70bd4da42</p> |
| 112 | + <p class="title logo__title">pyIEM 1.27.0.post25+g25a0baf19</p> |
113 | 113 |
|
114 | 114 | </a></div> |
115 | 115 |
|
|
436 | 436 | <h1>Source code for pyiem.database</h1><div class="highlight"><pre> |
437 | 437 | <span></span><span class="sd">"""Database helpers."""</span> |
438 | 438 |
|
439 | | -<span class="c1"># stdlib</span> |
440 | 439 | <span class="kn">import</span><span class="w"> </span><span class="nn">getpass</span> |
| 440 | +<span class="kn">import</span><span class="w"> </span><span class="nn">inspect</span> |
441 | 441 | <span class="kn">from</span><span class="w"> </span><span class="nn">contextlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">contextmanager</span> |
| 442 | +<span class="kn">from</span><span class="w"> </span><span class="nn">functools</span><span class="w"> </span><span class="kn">import</span> <span class="n">wraps</span> |
442 | 443 | <span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Generator</span> |
443 | 444 |
|
444 | | -<span class="c1"># third party</span> |
445 | 445 | <span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span> |
446 | 446 | <span class="kn">import</span><span class="w"> </span><span class="nn">psycopg</span> |
447 | 447 | <span class="kn">from</span><span class="w"> </span><span class="nn">psycopg.adapt</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dumper</span> |
@@ -663,6 +663,16 @@ <h1>Source code for pyiem.database</h1><div class="highlight"><pre> |
663 | 663 | <span class="sd"> """</span> |
664 | 664 |
|
665 | 665 | <span class="k">def</span><span class="w"> </span><span class="nf">decorator</span><span class="p">(</span><span class="n">func</span><span class="p">):</span> |
| 666 | + <span class="k">if</span> <span class="n">inspect</span><span class="o">.</span><span class="n">isgeneratorfunction</span><span class="p">(</span><span class="n">func</span><span class="p">):</span> |
| 667 | + |
| 668 | + <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span> |
| 669 | + <span class="k">def</span><span class="w"> </span><span class="nf">generator_wrapper</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span> |
| 670 | + <span class="k">with</span> <span class="n">get_sqlalchemy_conn</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> |
| 671 | + <span class="k">yield from</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">,</span> <span class="n">conn</span><span class="o">=</span><span class="n">conn</span><span class="p">)</span> |
| 672 | + |
| 673 | + <span class="k">return</span> <span class="n">generator_wrapper</span> |
| 674 | + |
| 675 | + <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span> |
666 | 676 | <span class="k">def</span><span class="w"> </span><span class="nf">wrapper</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span> |
667 | 677 | <span class="k">with</span> <span class="n">get_sqlalchemy_conn</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span> |
668 | 678 | <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">,</span> <span class="n">conn</span><span class="o">=</span><span class="n">conn</span><span class="p">)</span> |
|
0 commit comments