Changeset - 3378805b80ee
doc/build/html/README.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>The Accounting API &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    './',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="_static/jquery.js"></script>
 
    <script type="text/javascript" src="_static/underscore.js"></script>
 
    <script type="text/javascript" src="_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="index.html" />
 
    <link rel="next" title="accounting package" href="api/accounting.html" />
 
    <link rel="next" title="REST API" href="restapi.html" />
 
    <link rel="prev" title="Welcome to Accounting API’s documentation!" href="index.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li class="right" >
 
          <a href="api/accounting.html" title="accounting package"
 
          <a href="http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="restapi.html" title="REST API"
 
             accesskey="N">next</a> |</li>
 
        <li class="right" >
 
          <a href="index.html" title="Welcome to Accounting API’s documentation!"
 
             accesskey="P">previous</a> |</li>
 
        <li><a href="index.html">Accounting API 0.1-beta documentation</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <div class="section" id="the-accounting-api">
 
<h1>The Accounting API<a class="headerlink" href="#the-accounting-api" title="Permalink to this headline">¶</a></h1>
 
<div class="section" id="dependencies">
 
<h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this headline">¶</a></h2>
 
<ul class="simple">
 
<li>Python &gt;=3.3</li>
 
<li>ledger version 3 (I have not tried with version 2.x)</li>
 
<li>Python packages: Flask, etc. (install by running <tt class="docutils literal"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">-r</span>
 
<span class="pre">requirements.txt</span></tt>)</li>
 
</ul>
 
<div class="section" id="gtk-client-dependencies">
 
<h3>GTK Client Dependencies<a class="headerlink" href="#gtk-client-dependencies" title="Permalink to this headline">¶</a></h3>
 
<p>To run the GTK client you need to have <tt class="docutils literal"><span class="pre">gi.repository</span></tt> avaiable in the python
 
environment, this means that if you use virtualenv to install the dependencies
 
of accounting-api you need to set it up with the <tt class="docutils literal"><span class="pre">--system-site-packages</span></tt>
 
flag.</p>
 
</div>
 
</div>
 
<div class="section" id="installation-i-e-development-setup">
 
<h2>Installation (i.e. Development Setup)<a class="headerlink" href="#installation-i-e-development-setup" title="Permalink to this headline">¶</a></h2>
 
<p>accounting-api does not yet have a method for end-user installation. This
 
section describes how you would set up accounting-api for development purposes,
 
which can also be used as an environment to try out the functionality of
 
accounting-api.</p>
 
<p>See the sections below on how to install the dependencies. Then run the
 
following in your shell.</p>
 
<div class="highlight-bash"><div class="highlight"><pre><span class="c"># Get the source code</span>
 
git clone git://gitorious.org/conservancy/accounting-api.git
 
<span class="nb">cd </span>accounting-api
 

	
 
<span class="c"># Set up the python 3.3 virtualenv (this will make the GTK client not work)</span>
 
mkvirtualenv -p /usr/bin/python3.3 accounting-api
 
<span class="c"># OR If you want the GTK client to work</span>
 
mkvirtualenv -p /usr/bin/python3.3 --system-site-packages accounting-api
 

	
 
<span class="c"># If your terminal prompt does not say &quot;(accounting-api)&quot;, run</span>
 
workon accounting-api
 

	
 
<span class="c"># Install the python packages</span>
 
pip-3.3 install -r requirements.txt
 
</pre></div>
 
</div>
 
<p>If all went well, head to <a class="reference internal" href="#usage"><em>Usage</em></a>. If not, head to the channel <tt class="docutils literal"><span class="pre">#npoacct</span></tt>
 
on <tt class="docutils literal"><span class="pre">irc.freenode.net</span></tt>.</p>
 
<div class="section" id="ubuntu">
 
<h3>Ubuntu<a class="headerlink" href="#ubuntu" title="Permalink to this headline">¶</a></h3>
 
<div class="highlight-bash"><div class="highlight"><pre><span class="c"># git python 3.3 and virtualenvwrapper</span>
 
sudo apt-get install git-core python3.3 virtualenvwrapper
 

	
 
<span class="c"># ledger 3</span>
 
sudo apt-add-repository ppa:mbudde/ledger
 
sudo apt-get update
 
sudo apt-get install ledger
 
</pre></div>
 
</div>
 
</div>
 
</div>
 
<div class="section" id="usage">
 
<span id="id1"></span><h2>Usage<a class="headerlink" href="#usage" title="Permalink to this headline">¶</a></h2>
 
<div class="highlight-bash"><div class="highlight"><pre><span class="c"># Run the web service</span>
 
<span class="nv">LEDGER_FILE</span><span class="o">=</span>../path/to/your.ledger ./bin/serve
 

	
 
<span class="c"># Get a balance report via the web service</span>
 
./bin/client balance
 

	
 
<span class="c"># Get the transaction log</span>
 
./bin/client register
 

	
 
<span class="c"># Insert a simple transaction, currency will be autodetected from your</span>
 
<span class="c"># locale, for another currency, use ``--symbol USD``</span>
 
./bin/client insert <span class="s2">&quot;January rent&quot;</span> Assets:Checking Expenses:Rent 654.32
 
</pre></div>
 
</div>
 
</div>
 
</div>
 

	
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
  <h3><a href="index.html">Table Of Contents</a></h3>
 
  <ul>
 
<li><a class="reference internal" href="#">The Accounting API</a><ul>
 
<li><a class="reference internal" href="#dependencies">Dependencies</a><ul>
 
<li><a class="reference internal" href="#gtk-client-dependencies">GTK Client Dependencies</a></li>
 
</ul>
 
</li>
 
<li><a class="reference internal" href="#installation-i-e-development-setup">Installation (i.e. Development Setup)</a><ul>
 
<li><a class="reference internal" href="#ubuntu">Ubuntu</a></li>
 
</ul>
 
</li>
 
<li><a class="reference internal" href="#usage">Usage</a></li>
 
</ul>
 
</li>
 
</ul>
 

	
 
  <h4>Previous topic</h4>
 
  <p class="topless"><a href="index.html"
 
                        title="previous chapter">Welcome to Accounting API&#8217;s documentation!</a></p>
 
  <h4>Next topic</h4>
 
  <p class="topless"><a href="api/accounting.html"
 
                        title="next chapter">accounting package</a></p>
 
  <p class="topless"><a href="restapi.html"
 
                        title="next chapter">REST API</a></p>
 
  <h3>This Page</h3>
 
  <ul class="this-page-menu">
 
    <li><a href="_sources/README.txt"
 
           rel="nofollow">Show Source</a></li>
 
  </ul>
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li class="right" >
 
          <a href="api/accounting.html" title="accounting package"
 
          <a href="http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="restapi.html" title="REST API"
 
             >next</a> |</li>
 
        <li class="right" >
 
          <a href="index.html" title="Welcome to Accounting API’s documentation!"
 
             >previous</a> |</li>
 
        <li><a href="index.html">Accounting API 0.1-beta documentation</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../index.html" />
 
    <link rel="up" title="Module code" href="index.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="index.html" accesskey="U">Module code</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting</h1><div class="highlight"><pre>
 
<span class="kn">import</span> <span class="nn">sys</span>
 
<span class="kn">import</span> <span class="nn">subprocess</span>
 
<span class="kn">import</span> <span class="nn">logging</span>
 
<span class="kn">import</span> <span class="nn">time</span>
 

	
 
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
 
<span class="kn">from</span> <span class="nn">xml.etree</span> <span class="kn">import</span> <span class="n">ElementTree</span>
 
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span>
 

	
 
<span class="kn">from</span> <span class="nn">accounting.models</span> <span class="kn">import</span> <span class="n">Account</span><span class="p">,</span> <span class="n">Transaction</span><span class="p">,</span> <span class="n">Posting</span><span class="p">,</span> <span class="n">Amount</span>
 

	
 
<span class="n">_log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
 

	
 
<div class="viewcode-block" id="Ledger"><a class="viewcode-back" href="../api/accounting.html#accounting.Ledger">[docs]</a><span class="k">class</span> <span class="nc">Ledger</span><span class="p">:</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ledger_file</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ledger_bin</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
        <span class="k">if</span> <span class="n">ledger_file</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
 
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;ledger_file cannot be None&#39;</span><span class="p">)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">ledger_bin</span> <span class="o">=</span> <span class="n">ledger_bin</span> <span class="ow">or</span> <span class="s">&#39;ledger&#39;</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">ledger_file</span> <span class="o">=</span> <span class="n">ledger_file</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&#39;ledger file: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">ledger_file</span><span class="p">)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">locked</span> <span class="o">=</span> <span class="bp">False</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">ledger_process</span> <span class="o">=</span> <span class="bp">None</span>
 

	
 
    <span class="nd">@contextmanager</span>
 
<div class="viewcode-block" id="Ledger.locked_process"><a class="viewcode-back" href="../api/accounting.html#accounting.Ledger.locked_process">[docs]</a>    <span class="k">def</span> <span class="nf">locked_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="sd">r&#39;&#39;&#39;</span>
 
<span class="sd">        Context manager that checks that the ledger process is not already</span>
 
<span class="sd">        locked, then &quot;locks&quot; the process and yields the process handle and</span>
 
<span class="sd">        unlocks the process when execution is returned.</span>
 

	
 
<span class="sd">        Since this decorated as a :func:`contextlib.contextmanager` the</span>
 
<span class="sd">        recommended use is with the ``with``-statement.</span>
 

	
 
<span class="sd">        .. code-block:: python</span>
 

	
 
<span class="sd">            with self.locked_process() as p:</span>
 
<span class="sd">                p.stdin.write(b&#39;bal\n&#39;)</span>
 

	
 
<span class="sd">                output = self.read_until_prompt(p)</span>
 

	
 
<span class="sd">        &#39;&#39;&#39;</span>
 
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">locked</span><span class="p">:</span>
 
            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&#39;The process has already been locked,&#39;</span>
 
                               <span class="s">&#39; something</span><span class="se">\&#39;</span><span class="s">s out of order.&#39;</span><span class="p">)</span>
 

	
 
            <span class="c"># XXX: This code has no purpose in a single-threaded process</span>
 
            <span class="n">timeout</span> <span class="o">=</span> <span class="mi">5</span>  <span class="c"># Seconds</span>
 

	
 
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">timeout</span> <span class="o">+</span> <span class="mi">2</span><span class="p">):</span>
 
                <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="n">timeout</span><span class="p">:</span>
 
                    <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&#39;Ledger process is already locked&#39;</span><span class="p">)</span>
 

	
 
                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">locked</span><span class="p">:</span>
 
                    <span class="k">break</span>
 
                <span class="k">else</span><span class="p">:</span>
 
                    <span class="n">_log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&#39;Waiting for one second... </span><span class="si">%d</span><span class="s">/</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
 
                    <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
 

	
 
        <span class="n">process</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_process</span><span class="p">()</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">locked</span> <span class="o">=</span> <span class="bp">True</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;Lock enabled&#39;</span><span class="p">)</span>
 

	
 
        <span class="k">yield</span> <span class="n">process</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">locked</span> <span class="o">=</span> <span class="bp">False</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;Lock disabled&#39;</span><span class="p">)</span>
 
</div>
 
<div class="viewcode-block" id="Ledger.assemble_arguments"><a class="viewcode-back" href="../api/accounting.html#accounting.Ledger.assemble_arguments">[docs]</a>    <span class="k">def</span> <span class="nf">assemble_arguments</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">        Returns a list of arguments suitable for :class:`subprocess.Popen` based on</span>
 
<span class="sd">        :attr:`self.ledger_bin` and :attr:`self.ledger_file`.</span>
 
<span class="sd">        &#39;&#39;&#39;</span>
 
        <span class="k">return</span> <span class="p">[</span>
 
            <span class="bp">self</span><span class="o">.</span><span class="n">ledger_bin</span><span class="p">,</span>
 
            <span class="s">&#39;-f&#39;</span><span class="p">,</span>
 
            <span class="bp">self</span><span class="o">.</span><span class="n">ledger_file</span><span class="p">,</span>
 
        <span class="p">]</span>
 
</div>
 
<div class="viewcode-block" id="Ledger.init_process"><a class="viewcode-back" href="../api/accounting.html#accounting.Ledger.init_process">[docs]</a>    <span class="k">def</span> <span class="nf">init_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
...
 
@@ -304,109 +307,112 @@
 

	
 
            <span class="k">for</span> <span class="n">posting</span> <span class="ow">in</span> <span class="n">transaction</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s">&#39;./postings/posting&#39;</span><span class="p">):</span>
 
                <span class="n">account</span> <span class="o">=</span> <span class="n">posting</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;./account/name&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
 
                <span class="n">amount</span> <span class="o">=</span> <span class="n">posting</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;./post-amount/amount/quantity&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
 
                <span class="n">symbol</span> <span class="o">=</span> <span class="n">posting</span><span class="o">.</span><span class="n">find</span><span class="p">(</span>
 
                    <span class="s">&#39;./post-amount/amount/commodity/symbol&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
 

	
 
                <span class="c"># Get the posting metadata</span>
 
                <span class="n">metadata</span> <span class="o">=</span> <span class="p">{}</span>
 

	
 
                <span class="n">values</span> <span class="o">=</span> <span class="n">posting</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s">&#39;./metadata/value&#39;</span><span class="p">)</span>
 
                <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
 
                    <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
 
                        <span class="n">key</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;key&#39;</span><span class="p">)</span>
 
                        <span class="n">value</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;./string&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
 

	
 
                        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;metadata: </span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
 

	
 
                        <span class="n">metadata</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">key</span><span class="p">:</span> <span class="n">value</span><span class="p">})</span>
 

	
 
                <span class="n">postings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
 
                    <span class="n">Posting</span><span class="p">(</span><span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span>
 
                            <span class="n">metadata</span><span class="o">=</span><span class="n">metadata</span><span class="p">,</span>
 
                            <span class="n">amount</span><span class="o">=</span><span class="n">Amount</span><span class="p">(</span><span class="n">amount</span><span class="o">=</span><span class="n">amount</span><span class="p">,</span> <span class="n">symbol</span><span class="o">=</span><span class="n">symbol</span><span class="p">)))</span>
 

	
 
            <span class="c"># Get the transaction metadata</span>
 
            <span class="n">metadata</span> <span class="o">=</span> <span class="p">{}</span>
 

	
 
            <span class="n">values</span> <span class="o">=</span> <span class="n">transaction</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s">&#39;./metadata/value&#39;</span><span class="p">)</span>
 
            <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
 
                <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
 
                    <span class="n">key</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;key&#39;</span><span class="p">)</span>
 
                    <span class="n">value</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;./string&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
 

	
 
                    <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;metadata: </span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
 

	
 
                    <span class="n">metadata</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">key</span><span class="p">:</span> <span class="n">value</span><span class="p">})</span>
 

	
 
            <span class="c"># Add a Transaction instance to the list</span>
 
            <span class="n">entries</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
 
                <span class="n">Transaction</span><span class="p">(</span><span class="n">date</span><span class="o">=</span><span class="n">date</span><span class="p">,</span> <span class="n">payee</span><span class="o">=</span><span class="n">payee</span><span class="p">,</span> <span class="n">postings</span><span class="o">=</span><span class="n">postings</span><span class="p">,</span>
 
                            <span class="n">metadata</span><span class="o">=</span><span class="n">metadata</span><span class="p">))</span>
 

	
 
        <span class="k">return</span> <span class="n">entries</span>
 

	
 
</div></div>
 
<div class="viewcode-block" id="main"><a class="viewcode-back" href="../api/accounting.html#accounting.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
    <span class="kn">import</span> <span class="nn">argparse</span>
 
    <span class="k">if</span> <span class="n">argv</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
 
        <span class="n">argv</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span>
 

	
 
    <span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">()</span>
 
    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;-v&#39;</span><span class="p">,</span> <span class="s">&#39;--verbosity&#39;</span><span class="p">,</span>
 
                        <span class="n">default</span><span class="o">=</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span>
 
                        <span class="n">help</span><span class="o">=</span><span class="p">(</span><span class="s">&#39;Filter logging output. Possible values:&#39;</span> <span class="o">+</span>
 
                        <span class="s">&#39; CRITICAL, ERROR, WARNING, INFO, DEBUG&#39;</span><span class="p">))</span>
 

	
 
    <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
 
    <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="nb">getattr</span><span class="p">(</span><span class="n">logging</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">verbosity</span><span class="p">,</span> <span class="s">&#39;INFO&#39;</span><span class="p">))</span>
 
    <span class="n">ledger</span> <span class="o">=</span> <span class="n">Ledger</span><span class="p">(</span><span class="n">ledger_file</span><span class="o">=</span><span class="s">&#39;non-profit-test-data.ledger&#39;</span><span class="p">)</span>
 
    <span class="k">print</span><span class="p">(</span><span class="n">ledger</span><span class="o">.</span><span class="n">bal</span><span class="p">())</span>
 
    <span class="k">print</span><span class="p">(</span><span class="n">ledger</span><span class="o">.</span><span class="n">reg</span><span class="p">())</span>
 

	
 
</div>
 
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;__main__&#39;</span><span class="p">:</span>
 
    <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="index.html" >Module code</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/client.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.client &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../index.html" />
 
    <link rel="up" title="accounting" href="../accounting.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" accesskey="U">accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.client</h1><div class="highlight"><pre>
 
<span class="kn">import</span> <span class="nn">sys</span>
 
<span class="kn">import</span> <span class="nn">argparse</span>
 
<span class="kn">import</span> <span class="nn">json</span>
 
<span class="kn">import</span> <span class="nn">logging</span>
 

	
 
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
 
<span class="kn">from</span> <span class="nn">decimal</span> <span class="kn">import</span> <span class="n">Decimal</span>
 

	
 
<span class="kn">import</span> <span class="nn">requests</span>
 

	
 
<span class="kn">from</span> <span class="nn">accounting.models</span> <span class="kn">import</span> <span class="n">Transaction</span><span class="p">,</span> <span class="n">Posting</span><span class="p">,</span> <span class="n">Amount</span>
 
<span class="kn">from</span> <span class="nn">accounting.transport</span> <span class="kn">import</span> <span class="n">AccountingDecoder</span><span class="p">,</span> <span class="n">AccountingEncoder</span>
 

	
 
<span class="n">_log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
 

	
 

	
 
<div class="viewcode-block" id="Client"><a class="viewcode-back" href="../../api/accounting.html#accounting.client.Client">[docs]</a><span class="k">class</span> <span class="nc">Client</span><span class="p">:</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">json_encoder</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
 
                 <span class="n">json_decoder</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">host</span> <span class="o">=</span> <span class="n">host</span> <span class="ow">or</span> <span class="s">&#39;http://localhost:5000&#39;</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">json_encoder</span> <span class="o">=</span> <span class="n">json_encoder</span> <span class="ow">or</span> <span class="n">AccountingEncoder</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">json_decoder</span> <span class="o">=</span> <span class="n">json_decoder</span> <span class="ow">or</span> <span class="n">AccountingDecoder</span>
 

	
 
<div class="viewcode-block" id="Client.get_balance"><a class="viewcode-back" href="../../api/accounting.html#accounting.client.Client.get_balance">[docs]</a>    <span class="k">def</span> <span class="nf">get_balance</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="n">balance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;/balance&#39;</span><span class="p">)</span>
 
        <span class="k">return</span> <span class="n">balance</span><span class="p">[</span><span class="s">&#39;balance_report&#39;</span><span class="p">]</span>
 
</div>
 
<div class="viewcode-block" id="Client.get"><a class="viewcode-back" href="../../api/accounting.html#accounting.client.Client.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
 
        <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">host</span> <span class="o">+</span> <span class="n">path</span><span class="p">)</span>
 

	
 
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_decode_response</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
 
</div>
 
    <span class="k">def</span> <span class="nf">_decode_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">):</span>
 
        <span class="n">response_data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">(</span><span class="n">cls</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">json_decoder</span><span class="p">)</span>
 

	
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;response_data: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">response_data</span><span class="p">)</span>
 

	
 
        <span class="k">return</span> <span class="n">response_data</span>
 

	
 
<div class="viewcode-block" id="Client.post"><a class="viewcode-back" href="../../api/accounting.html#accounting.client.Client.post">[docs]</a>    <span class="k">def</span> <span class="nf">post</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">payload</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
 
        <span class="n">kw</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s">&#39;headers&#39;</span><span class="p">:</span> <span class="p">{</span><span class="s">&#39;Content-Type&#39;</span><span class="p">:</span> <span class="s">&#39;application/json&#39;</span><span class="p">}})</span>
 
        <span class="n">kw</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s">&#39;data&#39;</span><span class="p">:</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="n">cls</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">json_encoder</span><span class="p">)})</span>
 

	
 
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_decode_response</span><span class="p">(</span><span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">host</span> <span class="o">+</span> <span class="n">path</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">))</span>
 
</div>
 
<div class="viewcode-block" id="Client.simple_transaction"><a class="viewcode-back" href="../../api/accounting.html#accounting.client.Client.simple_transaction">[docs]</a>    <span class="k">def</span> <span class="nf">simple_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">from_acc</span><span class="p">,</span> <span class="n">to_acc</span><span class="p">,</span> <span class="n">amount</span><span class="p">):</span>
 
        <span class="n">t</span> <span class="o">=</span> <span class="n">Transaction</span><span class="p">(</span>
 
            <span class="n">date</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">today</span><span class="p">(),</span>
 
            <span class="n">payee</span><span class="o">=</span><span class="s">&#39;PayPal donation&#39;</span><span class="p">,</span>
 
            <span class="n">postings</span><span class="o">=</span><span class="p">[</span>
 
                <span class="n">Posting</span><span class="p">(</span><span class="n">account</span><span class="o">=</span><span class="n">from_acc</span><span class="p">,</span>
 
                        <span class="n">amount</span><span class="o">=</span><span class="n">Amount</span><span class="p">(</span><span class="n">symbol</span><span class="o">=</span><span class="s">&#39;$&#39;</span><span class="p">,</span> <span class="n">amount</span><span class="o">=-</span><span class="n">amount</span><span class="p">)),</span>
 
                <span class="n">Posting</span><span class="p">(</span><span class="n">account</span><span class="o">=</span><span class="n">to_acc</span><span class="p">,</span>
 
                        <span class="n">amount</span><span class="o">=</span><span class="n">Amount</span><span class="p">(</span><span class="n">symbol</span><span class="o">=</span><span class="s">&#39;$&#39;</span><span class="p">,</span> <span class="n">amount</span><span class="o">=</span><span class="n">amount</span><span class="p">))</span>
 
            <span class="p">]</span>
 
        <span class="p">)</span>
 

	
 
        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s">&#39;/transaction&#39;</span><span class="p">,</span> <span class="p">{</span><span class="s">&#39;transactions&#39;</span><span class="p">:</span> <span class="p">[</span><span class="n">t</span><span class="p">]})</span>
 
</div>
 
<div class="viewcode-block" id="Client.get_register"><a class="viewcode-back" href="../../api/accounting.html#accounting.client.Client.get_register">[docs]</a>    <span class="k">def</span> <span class="nf">get_register</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="n">register</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;/register&#39;</span><span class="p">)</span>
 

	
 
        <span class="k">return</span> <span class="n">register</span><span class="p">[</span><span class="s">&#39;register_report&#39;</span><span class="p">]</span>
 

	
 
</div></div>
 
<div class="viewcode-block" id="print_transactions"><a class="viewcode-back" href="../../api/accounting.html#accounting.client.print_transactions">[docs]</a><span class="k">def</span> <span class="nf">print_transactions</span><span class="p">(</span><span class="n">transactions</span><span class="p">):</span>
 
    <span class="k">for</span> <span class="n">transaction</span> <span class="ow">in</span> <span class="n">transactions</span><span class="p">:</span>
 
        <span class="k">print</span><span class="p">(</span><span class="s">&#39;{date} {t.payee:.&lt;69}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
 
            <span class="n">date</span><span class="o">=</span><span class="n">transaction</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y-%m-</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">),</span>
 
            <span class="n">t</span><span class="o">=</span><span class="n">transaction</span><span class="p">))</span>
 

	
 
        <span class="k">for</span> <span class="n">posting</span> <span class="ow">in</span> <span class="n">transaction</span><span class="o">.</span><span class="n">postings</span><span class="p">:</span>
 
            <span class="k">print</span><span class="p">(</span><span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="n">posting</span><span class="o">.</span><span class="n">account</span> <span class="o">+</span>
 
                <span class="s">&#39; &#39;</span> <span class="o">*</span> <span class="p">(</span><span class="mi">80</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">posting</span><span class="o">.</span><span class="n">account</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">posting</span><span class="o">.</span><span class="n">amount</span><span class="o">.</span><span class="n">symbol</span><span class="p">)</span> <span class="o">-</span>
 
                        <span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">posting</span><span class="o">.</span><span class="n">amount</span><span class="o">.</span><span class="n">amount</span><span class="p">))</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span>
 
                <span class="n">posting</span><span class="o">.</span><span class="n">amount</span><span class="o">.</span><span class="n">symbol</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">posting</span><span class="o">.</span><span class="n">amount</span><span class="o">.</span><span class="n">amount</span><span class="p">))</span>
 

	
 
</div>
 
<div class="viewcode-block" id="print_balance_accounts"><a class="viewcode-back" href="../../api/accounting.html#accounting.client.print_balance_accounts">[docs]</a><span class="k">def</span> <span class="nf">print_balance_accounts</span><span class="p">(</span><span class="n">accounts</span><span class="p">,</span> <span class="n">level</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
 
    <span class="k">for</span> <span class="n">account</span> <span class="ow">in</span> <span class="n">accounts</span><span class="p">:</span>
 
        <span class="k">print</span><span class="p">(</span><span class="s">&#39; &#39;</span> <span class="o">*</span> <span class="n">level</span> <span class="o">+</span> <span class="s">&#39; + {account.name}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">)</span> <span class="o">+</span>
 
              <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="s">&#39;-&#39;</span> <span class="o">*</span> <span class="p">(</span><span class="mi">80</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">account</span><span class="o">.</span><span class="n">name</span><span class="p">))</span> <span class="o">-</span> <span class="n">level</span><span class="p">))</span>
 
        <span class="k">for</span> <span class="n">amount</span> <span class="ow">in</span> <span class="n">account</span><span class="o">.</span><span class="n">amounts</span><span class="p">:</span>
 
            <span class="k">print</span><span class="p">(</span><span class="s">&#39; &#39;</span> <span class="o">*</span> <span class="n">level</span> <span class="o">+</span> <span class="s">&#39;   {amount.symbol} {amount.amount}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
 
                <span class="n">amount</span><span class="o">=</span><span class="n">amount</span><span class="p">))</span>
 
        <span class="n">print_balance_accounts</span><span class="p">(</span><span class="n">account</span><span class="o">.</span><span class="n">accounts</span><span class="p">,</span> <span class="n">level</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
 

	
 
</div>
 
<div class="viewcode-block" id="main"><a class="viewcode-back" href="../../api/accounting.html#accounting.client.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">prog</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
    <span class="k">global</span> <span class="n">HOST</span>
 
    <span class="k">if</span> <span class="n">argv</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
 
        <span class="n">prog</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
 
        <span class="n">argv</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
 

	
 
    <span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">prog</span><span class="o">=</span><span class="n">prog</span><span class="p">)</span>
 
    <span class="n">actions</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span><span class="n">title</span><span class="o">=</span><span class="s">&#39;Actions&#39;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">&#39;action&#39;</span><span class="p">)</span>
 

	
 
    <span class="n">insert</span> <span class="o">=</span> <span class="n">actions</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s">&#39;insert&#39;</span><span class="p">,</span>
 
                                <span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s">&#39;in&#39;</span><span class="p">])</span>
 
    <span class="n">insert</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;from_account&#39;</span><span class="p">)</span>
 
    <span class="n">insert</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;to_account&#39;</span><span class="p">)</span>
 
    <span class="n">insert</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;amount&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="n">Decimal</span><span class="p">)</span>
 

	
 
    <span class="n">balance</span> <span class="o">=</span> <span class="n">actions</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s">&#39;balance&#39;</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s">&#39;bal&#39;</span><span class="p">])</span>
 

	
 
    <span class="n">register</span> <span class="o">=</span> <span class="n">actions</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s">&#39;register&#39;</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s">&#39;reg&#39;</span><span class="p">])</span>
 

	
 
    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;-v&#39;</span><span class="p">,</span> <span class="s">&#39;--verbosity&#39;</span><span class="p">,</span>
 
                        <span class="n">default</span><span class="o">=</span><span class="s">&#39;WARNING&#39;</span><span class="p">,</span>
 
                        <span class="n">help</span><span class="o">=</span><span class="p">(</span><span class="s">&#39;Filter logging output. Possible values:&#39;</span> <span class="o">+</span>
 
                        <span class="s">&#39; CRITICAL, ERROR, WARNING, INFO, DEBUG&#39;</span><span class="p">))</span>
 
    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;--host&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">&#39;http://localhost:5000&#39;</span><span class="p">)</span>
 

	
 
    <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">(</span><span class="n">argv</span><span class="p">)</span>
 

	
 
    <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="nb">getattr</span><span class="p">(</span><span class="n">logging</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">verbosity</span><span class="p">))</span>
 

	
 
    <span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">host</span><span class="p">)</span>
 

	
 
    <span class="k">if</span> <span class="n">args</span><span class="o">.</span><span class="n">action</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;insert&#39;</span><span class="p">,</span> <span class="s">&#39;in&#39;</span><span class="p">]:</span>
 
        <span class="k">print</span><span class="p">(</span><span class="n">client</span><span class="o">.</span><span class="n">simple_transaction</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">from_account</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">to_account</span><span class="p">,</span>
 
                                        <span class="n">args</span><span class="o">.</span><span class="n">amount</span><span class="p">))</span>
 
    <span class="k">elif</span> <span class="n">args</span><span class="o">.</span><span class="n">action</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;balance&#39;</span><span class="p">,</span> <span class="s">&#39;bal&#39;</span><span class="p">]:</span>
 
        <span class="n">print_balance_accounts</span><span class="p">(</span><span class="n">client</span><span class="o">.</span><span class="n">get_balance</span><span class="p">())</span>
 
    <span class="k">elif</span> <span class="n">args</span><span class="o">.</span><span class="n">action</span> <span class="ow">in</span> <span class="p">[</span><span class="s">&#39;register&#39;</span><span class="p">,</span> <span class="s">&#39;reg&#39;</span><span class="p">]:</span>
 
        <span class="n">print_transactions</span><span class="p">(</span><span class="n">client</span><span class="o">.</span><span class="n">get_register</span><span class="p">())</span>
 
    <span class="k">else</span><span class="p">:</span>
 
        <span class="n">parser</span><span class="o">.</span><span class="n">print_help</span><span class="p">()</span>
 
</div>
 
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;__main__&#39;</span><span class="p">:</span>
 
    <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" >accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/decorators.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.decorators &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../index.html" />
 
    <link rel="up" title="accounting" href="../accounting.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" accesskey="U">accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.decorators</h1><div class="highlight"><pre>
 
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span>
 

	
 
<span class="kn">from</span> <span class="nn">flask</span> <span class="kn">import</span> <span class="n">jsonify</span>
 

	
 
<span class="kn">from</span> <span class="nn">accounting.exceptions</span> <span class="kn">import</span> <span class="n">AccountingException</span>
 

	
 

	
 
<div class="viewcode-block" id="jsonify_exceptions"><a class="viewcode-back" href="../../api/accounting.html#accounting.decorators.jsonify_exceptions">[docs]</a><span class="k">def</span> <span class="nf">jsonify_exceptions</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
 
    <span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">    Wraps a Flask endpoint and catches any AccountingException-based</span>
 
<span class="sd">    exceptions which are returned to the client as JSON.</span>
 
<span class="sd">    &#39;&#39;&#39;</span>
 
    <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
 
    <span class="k">def</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">kw</span><span class="p">):</span>
 
        <span class="k">try</span><span class="p">:</span>
 
            <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">kw</span><span class="p">)</span>
 
        <span class="k">except</span> <span class="n">AccountingException</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
 
            <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">error</span><span class="o">=</span><span class="n">exc</span><span class="p">)</span>
 

	
 
    <span class="k">return</span> <span class="n">wrapper</span></div>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" >accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/exceptions.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.exceptions &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../index.html" />
 
    <link rel="up" title="accounting" href="../accounting.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" accesskey="U">accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.exceptions</h1><div class="highlight"><pre>
 
<div class="viewcode-block" id="AccountingException"><a class="viewcode-back" href="../../api/accounting.html#accounting.exceptions.AccountingException">[docs]</a><span class="k">class</span> <span class="nc">AccountingException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
 
    <span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">    Used as a base for exceptions that are returned to the caller via the</span>
 
<span class="sd">    jsonify_exceptions decorator</span>
 
<span class="sd">    &#39;&#39;&#39;</span>
 
    <span class="k">pass</span></div>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" >accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/gtkclient.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.gtkclient &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../index.html" />
 
    <link rel="up" title="accounting" href="../accounting.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" accesskey="U">accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.gtkclient</h1><div class="highlight"><pre>
 
<span class="kn">import</span> <span class="nn">sys</span>
 
<span class="kn">import</span> <span class="nn">logging</span>
 
<span class="kn">import</span> <span class="nn">threading</span>
 
<span class="kn">import</span> <span class="nn">pkg_resources</span>
 

	
 
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span>
 
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
 

	
 
<span class="kn">from</span> <span class="nn">gi.repository</span> <span class="kn">import</span> <span class="n">Gtk</span>
 
<span class="kn">from</span> <span class="nn">gi.repository</span> <span class="kn">import</span> <span class="n">GLib</span>
 
<span class="kn">from</span> <span class="nn">gi.repository</span> <span class="kn">import</span> <span class="n">GObject</span>
 

	
 
<span class="kn">from</span> <span class="nn">accounting.client</span> <span class="kn">import</span> <span class="n">Client</span>
 

	
 
<span class="n">_log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
 

	
 

	
 
<div class="viewcode-block" id="indicate_activity"><a class="viewcode-back" href="../../api/accounting.html#accounting.gtkclient.indicate_activity">[docs]</a><span class="k">def</span> <span class="nf">indicate_activity</span><span class="p">(</span><span class="n">func_or_str</span><span class="p">):</span>
 
    <span class="n">description</span> <span class="o">=</span> <span class="bp">None</span>
 

	
 
    <span class="k">def</span> <span class="nf">decorator</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
 
        <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
 
        <span class="k">def</span> <span class="nf">wrapper</span><span class="p">(</span><span class="bp">self</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">kw</span><span class="p">):</span>
 
            <span class="bp">self</span><span class="o">.</span><span class="n">status_description</span><span class="o">.</span><span class="n">set_text</span><span class="p">(</span><span class="n">description</span><span class="p">)</span>
 
            <span class="bp">self</span><span class="o">.</span><span class="n">activity_indicator</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
 
            <span class="bp">self</span><span class="o">.</span><span class="n">activity_indicator</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
 

	
 
            <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="bp">self</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">kw</span><span class="p">)</span>
 

	
 
        <span class="k">return</span> <span class="n">wrapper</span>
 

	
 
    <span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">func_or_str</span><span class="p">):</span>
 
        <span class="n">description</span> <span class="o">=</span> <span class="s">&#39;Working&#39;</span>
 
        <span class="k">return</span> <span class="n">decorator</span><span class="p">(</span><span class="n">func_or_str</span><span class="p">)</span>
 
    <span class="k">else</span><span class="p">:</span>
 
        <span class="n">description</span> <span class="o">=</span> <span class="n">func_or_str</span>
 
        <span class="k">return</span> <span class="n">decorator</span>
 

	
 
</div>
 
<div class="viewcode-block" id="indicate_activity_done"><a class="viewcode-back" href="../../api/accounting.html#accounting.gtkclient.indicate_activity_done">[docs]</a><span class="k">def</span> <span class="nf">indicate_activity_done</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
 
    <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
 
    <span class="k">def</span> <span class="nf">wrapper</span><span class="p">(</span><span class="bp">self</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">kw</span><span class="p">):</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">status_description</span><span class="o">.</span><span class="n">set_text</span><span class="p">(</span><span class="s">&#39;&#39;</span><span class="p">)</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">activity_indicator</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">activity_indicator</span><span class="o">.</span><span class="n">hide</span><span class="p">()</span>
 

	
 
        <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="bp">self</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">kw</span><span class="p">)</span>
 

	
 
    <span class="k">return</span> <span class="n">wrapper</span>
 

	
 
</div>
 
<div class="viewcode-block" id="AccountingApplication"><a class="viewcode-back" href="../../api/accounting.html#accounting.gtkclient.AccountingApplication">[docs]</a><span class="k">class</span> <span class="nc">AccountingApplication</span><span class="p">:</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="c">#Gtk.Window.__init__(self, title=&#39;Accounting Client&#39;)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">()</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">load_ui</span><span class="p">(</span><span class="n">pkg_resources</span><span class="o">.</span><span class="n">resource_filename</span><span class="p">(</span>
 
            <span class="s">&#39;accounting&#39;</span><span class="p">,</span> <span class="s">&#39;res/client-ui.glade&#39;</span><span class="p">))</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">aboutdialog</span><span class="o">.</span><span class="n">set_transient_for</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">accounting_window</span><span class="p">)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">accounting_window</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s">&#39;delete-event&#39;</span><span class="p">,</span> <span class="n">Gtk</span><span class="o">.</span><span class="n">main_quit</span><span class="p">)</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">accounting_window</span><span class="o">.</span><span class="n">set_border_width</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">accounting_window</span><span class="o">.</span><span class="n">set_default_geometry</span><span class="p">(</span><span class="mi">640</span><span class="p">,</span> <span class="mi">360</span><span class="p">)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">accounting_window</span><span class="o">.</span><span class="n">show_all</span><span class="p">()</span>
 

	
 
<div class="viewcode-block" id="AccountingApplication.load_ui"><a class="viewcode-back" href="../../api/accounting.html#accounting.gtkclient.AccountingApplication.load_ui">[docs]</a>    <span class="k">def</span> <span class="nf">load_ui</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;Loading UI...&#39;</span><span class="p">)</span>
 
        <span class="n">builder</span> <span class="o">=</span> <span class="n">Gtk</span><span class="o">.</span><span class="n">Builder</span><span class="p">()</span>
 
        <span class="n">builder</span><span class="o">.</span><span class="n">add_from_file</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
 
        <span class="n">builder</span><span class="o">.</span><span class="n">connect_signals</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
 

	
 
        <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">builder</span><span class="o">.</span><span class="n">get_objects</span><span class="p">():</span>
 
            <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;Loaded </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">Gtk</span><span class="o">.</span><span class="n">Buildable</span><span class="o">.</span><span class="n">get_name</span><span class="p">(</span><span class="n">element</span><span class="p">))</span>
 
            <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Gtk</span><span class="o">.</span><span class="n">Buildable</span><span class="o">.</span><span class="n">get_name</span><span class="p">(</span><span class="n">element</span><span class="p">),</span> <span class="n">element</span><span class="p">)</span>
 

	
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;UI loaded&#39;</span><span class="p">)</span>
 
</div>
 
<div class="viewcode-block" id="AccountingApplication.on_transaction_selected"><a class="viewcode-back" href="../../api/accounting.html#accounting.gtkclient.AccountingApplication.on_transaction_selected">[docs]</a>    <span class="k">def</span> <span class="nf">on_transaction_selected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">):</span>
 
        <span class="n">selection</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transaction_view</span><span class="o">.</span><span class="n">get_selection</span><span class="p">()</span>
 
        <span class="n">selection</span><span class="o">.</span><span class="n">set_mode</span><span class="p">(</span><span class="n">Gtk</span><span class="o">.</span><span class="n">SelectionMode</span><span class="o">.</span><span class="n">SINGLE</span><span class="p">)</span>
 
        <span class="n">xact_store</span><span class="p">,</span> <span class="n">xact_iter</span> <span class="o">=</span> <span class="n">selection</span><span class="o">.</span><span class="n">get_selected</span><span class="p">()</span>
 

	
 
        <span class="n">xact_id</span> <span class="o">=</span> <span class="n">xact_store</span><span class="o">.</span><span class="n">get_value</span><span class="p">(</span><span class="n">xact_iter</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;selection: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">xact_id</span><span class="p">)</span>
 

	
 
        <span class="k">for</span> <span class="n">transaction</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">transaction_data</span><span class="p">:</span>
 
            <span class="k">if</span> <span class="n">transaction</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="n">xact_id</span><span class="p">:</span>
 
                <span class="bp">self</span><span class="o">.</span><span class="n">lbl_payee</span><span class="o">.</span><span class="n">set_text</span><span class="p">(</span><span class="n">transaction</span><span class="o">.</span><span class="n">payee</span><span class="p">)</span>
 

	
 
                <span class="bp">self</span><span class="o">.</span><span class="n">posting_store</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
 

	
 
                <span class="k">for</span> <span class="n">posting</span> <span class="ow">in</span> <span class="n">transaction</span><span class="o">.</span><span class="n">postings</span><span class="p">:</span>
 
                    <span class="bp">self</span><span class="o">.</span><span class="n">posting_store</span><span class="o">.</span><span class="n">append</span><span class="p">([</span>
 
                        <span class="n">posting</span><span class="o">.</span><span class="n">account</span><span class="p">,</span>
 
                        <span class="nb">str</span><span class="p">(</span><span class="n">posting</span><span class="o">.</span><span class="n">amount</span><span class="o">.</span><span class="n">amount</span><span class="p">),</span>
 
                        <span class="n">posting</span><span class="o">.</span><span class="n">amount</span><span class="o">.</span><span class="n">symbol</span>
 
                    <span class="p">])</span>
 

	
 
                <span class="bp">self</span><span class="o">.</span><span class="n">detail_view</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
 
                <span class="k">break</span>
 
</div>
 
<div class="viewcode-block" id="AccountingApplication.on_show_about_activate"><a class="viewcode-back" href="../../api/accounting.html#accounting.gtkclient.AccountingApplication.on_show_about_activate">[docs]</a>    <span class="k">def</span> <span class="nf">on_show_about_activate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">):</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;Showing About&#39;</span><span class="p">)</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">aboutdialog</span><span class="o">.</span><span class="n">show_all</span><span class="p">()</span>
 
</div>
 
<div class="viewcode-block" id="AccountingApplication.on_aboutdialog_close"><a class="viewcode-back" href="../../api/accounting.html#accounting.gtkclient.AccountingApplication.on_aboutdialog_close">[docs]</a>    <span class="k">def</span> <span class="nf">on_aboutdialog_close</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">):</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;Closing About&#39;</span><span class="p">)</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">aboutdialog</span><span class="o">.</span><span class="n">hide_all</span><span class="p">()</span>
 
</div>
 
    <span class="nd">@indicate_activity</span><span class="p">(</span><span class="s">&#39;Refreshing Transactions&#39;</span><span class="p">)</span>
 
<div class="viewcode-block" id="AccountingApplication.on_refresh_transactions_activate"><a class="viewcode-back" href="../../api/accounting.html#accounting.gtkclient.AccountingApplication.on_refresh_transactions_activate">[docs]</a>    <span class="k">def</span> <span class="nf">on_refresh_transactions_activate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">widget</span><span class="p">):</span>
 
        <span class="k">def</span> <span class="nf">load_transactions</span><span class="p">():</span>
 
            <span class="n">transactions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">get_register</span><span class="p">()</span>
 
            <span class="n">GLib</span><span class="o">.</span><span class="n">idle_add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">on_transactions_loaded</span><span class="p">,</span> <span class="n">transactions</span><span class="p">)</span>
 

	
 
        <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">load_transactions</span><span class="p">)</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
 
</div>
 
    <span class="nd">@indicate_activity_done</span>
 
<div class="viewcode-block" id="AccountingApplication.on_transactions_loaded"><a class="viewcode-back" href="../../api/accounting.html#accounting.gtkclient.AccountingApplication.on_transactions_loaded">[docs]</a>    <span class="k">def</span> <span class="nf">on_transactions_loaded</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">transactions</span><span class="p">):</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;transactions: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">transactions</span><span class="p">)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">transaction_data</span> <span class="o">=</span> <span class="n">transactions</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">transaction_store</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
 

	
 
        <span class="k">for</span> <span class="n">transaction</span> <span class="ow">in</span> <span class="n">transactions</span><span class="p">:</span>
 
            <span class="bp">self</span><span class="o">.</span><span class="n">transaction_store</span><span class="o">.</span><span class="n">append</span><span class="p">([</span>
 
                <span class="n">transaction</span><span class="o">.</span><span class="n">id</span><span class="p">,</span>
 
                <span class="n">transaction</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y-%m-</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">),</span>
 
                <span class="n">transaction</span><span class="o">.</span><span class="n">payee</span>
 
            <span class="p">])</span>
 

	
 
</div></div>
 
<div class="viewcode-block" id="main"><a class="viewcode-back" href="../../api/accounting.html#accounting.gtkclient.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
    <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
 

	
 
    <span class="n">GObject</span><span class="o">.</span><span class="n">threads_init</span><span class="p">()</span>
 

	
 
    <span class="n">accounting</span> <span class="o">=</span> <span class="n">AccountingApplication</span><span class="p">()</span>
 
    <span class="c">#accounting_win.connect(&#39;delete-event&#39;, Gtk.main_quit)</span>
 

	
 
    <span class="n">Gtk</span><span class="o">.</span><span class="n">main</span><span class="p">()</span>
 
</div>
 
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;__main__&#39;</span><span class="p">:</span>
 
    <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" >accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/models.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.models &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../index.html" />
 
    <link rel="up" title="accounting" href="../accounting.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" accesskey="U">accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.models</h1><div class="highlight"><pre>
 
<span class="kn">import</span> <span class="nn">uuid</span>
 
<span class="kn">from</span> <span class="nn">decimal</span> <span class="kn">import</span> <span class="n">Decimal</span>
 

	
 

	
 
<div class="viewcode-block" id="Transaction"><a class="viewcode-back" href="../../api/accounting.html#accounting.models.Transaction">[docs]</a><span class="k">class</span> <span class="nc">Transaction</span><span class="p">:</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">date</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">payee</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">postings</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">metadata</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
 
                 <span class="n">_generate_id</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">date</span> <span class="o">=</span> <span class="n">date</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">payee</span> <span class="o">=</span> <span class="n">payee</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">postings</span> <span class="o">=</span> <span class="n">postings</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span> <span class="o">=</span> <span class="n">metadata</span> <span class="k">if</span> <span class="n">metadata</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="k">else</span> <span class="p">{}</span>
 

	
 
        <span class="k">if</span> <span class="n">_generate_id</span><span class="p">:</span>
 
            <span class="bp">self</span><span class="o">.</span><span class="n">generate_id</span><span class="p">()</span>
 

	
 
<div class="viewcode-block" id="Transaction.generate_id"><a class="viewcode-back" href="../../api/accounting.html#accounting.models.Transaction.generate_id">[docs]</a>    <span class="k">def</span> <span class="nf">generate_id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s">&#39;Id&#39;</span><span class="p">:</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()})</span>
 
</div>
 
    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="k">return</span> <span class="p">(</span><span class="s">&#39;&lt;{self.__class__.__name__} {date}&#39;</span> <span class="o">+</span>
 
                <span class="s">&#39; {self.payee} {self.postings}&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
 
                    <span class="bp">self</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
 
                    <span class="n">date</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y-%m-</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">))</span>
 

	
 
</div>
 
<div class="viewcode-block" id="Posting"><a class="viewcode-back" href="../../api/accounting.html#accounting.models.Posting">[docs]</a><span class="k">class</span> <span class="nc">Posting</span><span class="p">:</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">account</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">amount</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">metadata</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">account</span> <span class="o">=</span> <span class="n">account</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">amount</span> <span class="o">=</span> <span class="n">amount</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">metadata</span> <span class="o">=</span> <span class="n">metadata</span> <span class="k">if</span> <span class="n">metadata</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="k">else</span> <span class="p">{}</span>
 

	
 
    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="k">return</span> <span class="p">(</span><span class="s">&#39;&lt;{self.__class__.__name__} &quot;{self.account}&quot;&#39;</span> <span class="o">+</span>
 
                <span class="s">&#39; {self.amount}&gt;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
 

	
 
</div>
 
<div class="viewcode-block" id="Amount"><a class="viewcode-back" href="../../api/accounting.html#accounting.models.Amount">[docs]</a><span class="k">class</span> <span class="nc">Amount</span><span class="p">:</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">amount</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">symbol</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">amount</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">symbol</span> <span class="o">=</span> <span class="n">symbol</span>
 

	
 
    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="k">return</span> <span class="p">(</span><span class="s">&#39;&lt;{self.__class__.__name__} {self.symbol}&#39;</span> <span class="o">+</span>
 
                <span class="s">&#39; {self.amount}&gt;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
 

	
 
</div>
 
<div class="viewcode-block" id="Account"><a class="viewcode-back" href="../../api/accounting.html#accounting.models.Account">[docs]</a><span class="k">class</span> <span class="nc">Account</span><span class="p">:</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">amounts</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">accounts</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">amounts</span> <span class="o">=</span> <span class="n">amounts</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">accounts</span> <span class="o">=</span> <span class="n">accounts</span>
 

	
 
    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="k">return</span> <span class="p">(</span><span class="s">&#39;&lt;{self.__class__.__name__} &quot;{self.name}&quot; {self.amounts}&#39;</span> <span class="o">+</span>
 
                <span class="s">&#39; {self.accounts}&gt;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span></div>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" >accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/storage.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.storage &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../index.html" />
 
    <link rel="up" title="accounting" href="../accounting.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" accesskey="U">accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.storage</h1><div class="highlight"><pre>
 
<span class="k">class</span> <span class="nc">Storage</span><span class="p">:</span>
 
<div class="viewcode-block" id="Storage"><a class="viewcode-back" href="../../api/accounting.storage.html#accounting.storage.Storage">[docs]</a>    <span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">    ABC for accounting storage</span>
 
<span class="sd">    &#39;&#39;&#39;</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</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">kw</span><span class="p">):</span>
 
        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 

	
 
    <span class="k">def</span> <span class="nf">get_transactions</span><span class="p">(</span><span class="bp">self</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">kw</span><span class="p">):</span>
 
<div class="viewcode-block" id="Storage.get_transactions"><a class="viewcode-back" href="../../api/accounting.storage.html#accounting.storage.Storage.get_transactions">[docs]</a>        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 

	
 
    <span class="k">def</span> <span class="nf">get_transaction</span><span class="p">(</span><span class="bp">self</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">kw</span><span class="p">):</span></div>
 
<div class="viewcode-block" id="Storage.get_transaction"><a class="viewcode-back" href="../../api/accounting.storage.html#accounting.storage.Storage.get_transaction">[docs]</a>        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 

	
 
    <span class="k">def</span> <span class="nf">get_account</span><span class="p">(</span><span class="bp">self</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">kw</span><span class="p">):</span></div>
 
<div class="viewcode-block" id="Storage.get_account"><a class="viewcode-back" href="../../api/accounting.storage.html#accounting.storage.Storage.get_account">[docs]</a>        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 

	
 
    <span class="k">def</span> <span class="nf">get_accounts</span><span class="p">(</span><span class="bp">self</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">kw</span><span class="p">):</span></div>
 
<div class="viewcode-block" id="Storage.get_accounts"><a class="viewcode-back" href="../../api/accounting.storage.html#accounting.storage.Storage.get_accounts">[docs]</a>        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
 
</pre></div></div></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" >accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/storage/ledgercli.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.storage.ledgercli &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../../index.html" />
 
    <link rel="up" title="accounting.storage" href="../storage.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../../accounting.html" >accounting</a> &raquo;</li>
 
          <li><a href="../storage.html" accesskey="U">accounting.storage</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.storage.ledgercli</h1><div class="highlight"><pre>
 
<span class="kn">import</span> <span class="nn">sys</span>
 
<span class="kn">import</span> <span class="nn">subprocess</span>
 
<span class="kn">import</span> <span class="nn">logging</span>
 
<span class="kn">import</span> <span class="nn">time</span>
 

	
 
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
 
<span class="kn">from</span> <span class="nn">xml.etree</span> <span class="kn">import</span> <span class="n">ElementTree</span>
 
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">contextmanager</span>
 

	
 
<span class="kn">from</span> <span class="nn">accounting.models</span> <span class="kn">import</span> <span class="n">Account</span><span class="p">,</span> <span class="n">Transaction</span><span class="p">,</span> <span class="n">Posting</span><span class="p">,</span> <span class="n">Amount</span>
 
<span class="kn">from</span> <span class="nn">accounting.storage</span> <span class="kn">import</span> <span class="n">Storage</span>
 

	
 
<span class="n">_log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
 

	
 

	
 
<div class="viewcode-block" id="Ledger"><a class="viewcode-back" href="../../../api/accounting.storage.html#accounting.storage.ledgercli.Ledger">[docs]</a><span class="k">class</span> <span class="nc">Ledger</span><span class="p">(</span><span class="n">Storage</span><span class="p">):</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">app</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ledger_file</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">ledger_bin</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
        <span class="k">if</span> <span class="n">app</span><span class="p">:</span>
 
            <span class="n">ledger_file</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;LEDGER_FILE&#39;</span><span class="p">]</span>
 

	
 
        <span class="k">if</span> <span class="n">ledger_file</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
 
            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;ledger_file cannot be None&#39;</span><span class="p">)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">ledger_bin</span> <span class="o">=</span> <span class="n">ledger_bin</span> <span class="ow">or</span> <span class="s">&#39;ledger&#39;</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">ledger_file</span> <span class="o">=</span> <span class="n">ledger_file</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&#39;ledger file: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">ledger_file</span><span class="p">)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">locked</span> <span class="o">=</span> <span class="bp">False</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">ledger_process</span> <span class="o">=</span> <span class="bp">None</span>
 

	
 
    <span class="nd">@contextmanager</span>
 
<div class="viewcode-block" id="Ledger.locked_process"><a class="viewcode-back" href="../../../api/accounting.storage.html#accounting.storage.ledgercli.Ledger.locked_process">[docs]</a>    <span class="k">def</span> <span class="nf">locked_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="sd">r&#39;&#39;&#39;</span>
 
<span class="sd">        Context manager that checks that the ledger process is not already</span>
 
<span class="sd">        locked, then &quot;locks&quot; the process and yields the process handle and</span>
 
<span class="sd">        unlocks the process when execution is returned.</span>
 

	
 
<span class="sd">        Since this decorated as a :func:`contextlib.contextmanager` the</span>
 
<span class="sd">        recommended use is with the ``with``-statement.</span>
 

	
 
<span class="sd">        .. code-block:: python</span>
 

	
 
<span class="sd">            with self.locked_process() as p:</span>
 
<span class="sd">                p.stdin.write(b&#39;bal\n&#39;)</span>
 

	
 
<span class="sd">                output = self.read_until_prompt(p)</span>
 

	
 
<span class="sd">        &#39;&#39;&#39;</span>
 
        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">locked</span><span class="p">:</span>
 
            <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&#39;The process has already been locked,&#39;</span>
 
                               <span class="s">&#39; something</span><span class="se">\&#39;</span><span class="s">s out of order.&#39;</span><span class="p">)</span>
 

	
 
            <span class="c"># XXX: This code has no purpose in a single-threaded process</span>
 
            <span class="n">timeout</span> <span class="o">=</span> <span class="mi">5</span>  <span class="c"># Seconds</span>
 

	
 
            <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">timeout</span> <span class="o">+</span> <span class="mi">2</span><span class="p">):</span>
 
                <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="n">timeout</span><span class="p">:</span>
 
                    <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&#39;Ledger process is already locked&#39;</span><span class="p">)</span>
 

	
 
                <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">locked</span><span class="p">:</span>
 
                    <span class="k">break</span>
 
                <span class="k">else</span><span class="p">:</span>
 
                    <span class="n">_log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&#39;Waiting for one second... </span><span class="si">%d</span><span class="s">/</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
 
                    <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
 

	
 
        <span class="n">process</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_process</span><span class="p">()</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">locked</span> <span class="o">=</span> <span class="bp">True</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;Lock enabled&#39;</span><span class="p">)</span>
 

	
 
        <span class="k">yield</span> <span class="n">process</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">locked</span> <span class="o">=</span> <span class="bp">False</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;Lock disabled&#39;</span><span class="p">)</span>
 
</div>
 
<div class="viewcode-block" id="Ledger.assemble_arguments"><a class="viewcode-back" href="../../../api/accounting.storage.html#accounting.storage.ledgercli.Ledger.assemble_arguments">[docs]</a>    <span class="k">def</span> <span class="nf">assemble_arguments</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">        Returns a list of arguments suitable for :class:`subprocess.Popen`</span>
 
<span class="sd">        based on :attr:`self.ledger_bin` and :attr:`self.ledger_file`.</span>
 
<span class="sd">        &#39;&#39;&#39;</span>
...
 
@@ -319,111 +322,114 @@
 
                <span class="n">symbol</span> <span class="o">=</span> <span class="n">posting</span><span class="o">.</span><span class="n">find</span><span class="p">(</span>
 
                    <span class="s">&#39;./post-amount/amount/commodity/symbol&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
 

	
 
                <span class="c"># Get the posting metadata</span>
 
                <span class="n">metadata</span> <span class="o">=</span> <span class="p">{}</span>
 

	
 
                <span class="n">values</span> <span class="o">=</span> <span class="n">posting</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s">&#39;./metadata/value&#39;</span><span class="p">)</span>
 
                <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
 
                    <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
 
                        <span class="n">key</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;key&#39;</span><span class="p">)</span>
 
                        <span class="n">value</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;./string&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
 

	
 
                        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;metadata: </span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
 

	
 
                        <span class="n">metadata</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">key</span><span class="p">:</span> <span class="n">value</span><span class="p">})</span>
 

	
 
                <span class="n">postings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
 
                    <span class="n">Posting</span><span class="p">(</span><span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span>
 
                            <span class="n">metadata</span><span class="o">=</span><span class="n">metadata</span><span class="p">,</span>
 
                            <span class="n">amount</span><span class="o">=</span><span class="n">Amount</span><span class="p">(</span><span class="n">amount</span><span class="o">=</span><span class="n">amount</span><span class="p">,</span> <span class="n">symbol</span><span class="o">=</span><span class="n">symbol</span><span class="p">)))</span>
 

	
 
            <span class="c"># Get the transaction metadata</span>
 
            <span class="n">metadata</span> <span class="o">=</span> <span class="p">{}</span>
 

	
 
            <span class="n">values</span> <span class="o">=</span> <span class="n">transaction</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="s">&#39;./metadata/value&#39;</span><span class="p">)</span>
 
            <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
 
                <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
 
                    <span class="n">key</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;key&#39;</span><span class="p">)</span>
 
                    <span class="n">value</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s">&#39;./string&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
 

	
 
                    <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;metadata: </span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
 

	
 
                    <span class="n">metadata</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">key</span><span class="p">:</span> <span class="n">value</span><span class="p">})</span>
 

	
 
            <span class="c"># Add a Transaction instance to the list</span>
 
            <span class="nb">id</span> <span class="o">=</span> <span class="n">metadata</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;Id&#39;</span><span class="p">)</span>
 
            <span class="n">entries</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
 
                <span class="n">Transaction</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="nb">id</span><span class="p">,</span> <span class="n">date</span><span class="o">=</span><span class="n">date</span><span class="p">,</span> <span class="n">payee</span><span class="o">=</span><span class="n">payee</span><span class="p">,</span> <span class="n">postings</span><span class="o">=</span><span class="n">postings</span><span class="p">,</span>
 
                            <span class="n">metadata</span><span class="o">=</span><span class="n">metadata</span><span class="p">))</span>
 

	
 
        <span class="k">return</span> <span class="n">entries</span>
 
</div>
 
<div class="viewcode-block" id="Ledger.update_transaction"><a class="viewcode-back" href="../../../api/accounting.storage.html#accounting.storage.ledgercli.Ledger.update_transaction">[docs]</a>    <span class="k">def</span> <span class="nf">update_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">transaction</span><span class="p">):</span>
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;DUMMY: Updated transaction: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">transaction</span><span class="p">)</span>
 

	
 
</div></div>
 
<div class="viewcode-block" id="main"><a class="viewcode-back" href="../../../api/accounting.storage.html#accounting.storage.ledgercli.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
    <span class="kn">import</span> <span class="nn">argparse</span>
 
    <span class="k">if</span> <span class="n">argv</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
 
        <span class="n">argv</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span>
 

	
 
    <span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">()</span>
 
    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;-v&#39;</span><span class="p">,</span> <span class="s">&#39;--verbosity&#39;</span><span class="p">,</span>
 
                        <span class="n">default</span><span class="o">=</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span>
 
                        <span class="n">help</span><span class="o">=</span><span class="p">(</span><span class="s">&#39;Filter logging output. Possible values:&#39;</span> <span class="o">+</span>
 
                              <span class="s">&#39; CRITICAL, ERROR, WARNING, INFO, DEBUG&#39;</span><span class="p">))</span>
 

	
 
    <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
 
    <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="nb">getattr</span><span class="p">(</span><span class="n">logging</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">verbosity</span><span class="p">,</span> <span class="s">&#39;INFO&#39;</span><span class="p">))</span>
 
    <span class="n">ledger</span> <span class="o">=</span> <span class="n">Ledger</span><span class="p">(</span><span class="n">ledger_file</span><span class="o">=</span><span class="s">&#39;non-profit-test-data.ledger&#39;</span><span class="p">)</span>
 
    <span class="k">print</span><span class="p">(</span><span class="n">ledger</span><span class="o">.</span><span class="n">bal</span><span class="p">())</span>
 
    <span class="k">print</span><span class="p">(</span><span class="n">ledger</span><span class="o">.</span><span class="n">reg</span><span class="p">())</span>
 

	
 
</div>
 
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;__main__&#39;</span><span class="p">:</span>
 
    <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="n">main</span><span class="p">())</span>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../../accounting.html" >accounting</a> &raquo;</li>
 
          <li><a href="../storage.html" >accounting.storage</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/storage/sql.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.storage.sql &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../../index.html" />
 
    <link rel="up" title="accounting.storage" href="../storage.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../../accounting.html" >accounting</a> &raquo;</li>
 
          <li><a href="../storage.html" accesskey="U">accounting.storage</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.storage.sql</h1><div class="highlight"><pre>
 
<span class="kn">import</span> <span class="nn">logging</span>
 
<span class="kn">import</span> <span class="nn">json</span>
 

	
 
<span class="kn">from</span> <span class="nn">flask.ext.sqlalchemy</span> <span class="kn">import</span> <span class="n">SQLAlchemy</span>
 

	
 
<span class="kn">from</span> <span class="nn">accounting.exceptions</span> <span class="kn">import</span> <span class="n">AccountingException</span>
 
<span class="kn">from</span> <span class="nn">accounting.storage</span> <span class="kn">import</span> <span class="n">Storage</span>
 
<span class="kn">from</span> <span class="nn">accounting.models</span> <span class="kn">import</span> <span class="n">Transaction</span><span class="p">,</span> <span class="n">Posting</span><span class="p">,</span> <span class="n">Amount</span>
 

	
 
<span class="n">_log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
 
<span class="n">db</span> <span class="o">=</span> <span class="bp">None</span>
 

	
 

	
 
<div class="viewcode-block" id="SQLStorage"><a class="viewcode-back" href="../../../api/accounting.storage.sql.html#accounting.storage.sql.SQLStorage">[docs]</a><span class="k">class</span> <span class="nc">SQLStorage</span><span class="p">(</span><span class="n">Storage</span><span class="p">):</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">app</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
        <span class="k">global</span> <span class="n">db</span>
 

	
 
        <span class="k">if</span> <span class="ow">not</span> <span class="n">app</span><span class="p">:</span>
 
            <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">&#39;Missing app keyword argument&#39;</span><span class="p">)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">app</span> <span class="o">=</span> <span class="n">app</span>
 
        <span class="n">db</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">SQLAlchemy</span><span class="p">(</span><span class="n">app</span><span class="p">)</span>
 

	
 
        <span class="kn">from</span> <span class="nn">.models</span> <span class="kn">import</span> <span class="n">Transaction</span> <span class="k">as</span> <span class="n">SQLTransaction</span><span class="p">,</span> \
 
            <span class="n">Posting</span> <span class="k">as</span> <span class="n">SQLPosting</span><span class="p">,</span> <span class="n">Amount</span> <span class="k">as</span> <span class="n">SQLAmount</span>
 

	
 
        <span class="n">db</span><span class="o">.</span><span class="n">create_all</span><span class="p">()</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">=</span> <span class="n">SQLTransaction</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">Posting</span> <span class="o">=</span> <span class="n">SQLPosting</span>
 
        <span class="bp">self</span><span class="o">.</span><span class="n">Amount</span> <span class="o">=</span> <span class="n">SQLAmount</span>
 

	
 
<div class="viewcode-block" id="SQLStorage.get_transactions"><a class="viewcode-back" href="../../../api/accounting.storage.sql.html#accounting.storage.sql.SQLStorage.get_transactions">[docs]</a>    <span class="k">def</span> <span class="nf">get_transactions</span><span class="p">(</span><span class="bp">self</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">kw</span><span class="p">):</span>
 
        <span class="n">transactions</span> <span class="o">=</span> <span class="p">[]</span>
 

	
 
        <span class="k">for</span> <span class="n">transaction</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">Transaction</span><span class="o">.</span><span class="n">query</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
 
            <span class="n">dict_transaction</span> <span class="o">=</span> <span class="n">transaction</span><span class="o">.</span><span class="n">as_dict</span><span class="p">()</span>
 
            <span class="n">dict_postings</span> <span class="o">=</span> <span class="n">dict_transaction</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;postings&#39;</span><span class="p">)</span>
 

	
 
            <span class="n">postings</span> <span class="o">=</span> <span class="p">[]</span>
 

	
 
            <span class="k">for</span> <span class="n">dict_posting</span> <span class="ow">in</span> <span class="n">dict_postings</span><span class="p">:</span>
 
                <span class="n">dict_amount</span> <span class="o">=</span> <span class="n">dict_posting</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;amount&#39;</span><span class="p">)</span>
 
                <span class="n">posting</span> <span class="o">=</span> <span class="n">Posting</span><span class="p">(</span><span class="o">**</span><span class="n">dict_posting</span><span class="p">)</span>
 
                <span class="n">posting</span><span class="o">.</span><span class="n">amount</span> <span class="o">=</span> <span class="n">Amount</span><span class="p">(</span><span class="o">**</span><span class="n">dict_amount</span><span class="p">)</span>
 

	
 
                <span class="n">postings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">posting</span><span class="p">)</span>
 

	
 
            <span class="n">dict_transaction</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s">&#39;postings&#39;</span><span class="p">:</span> <span class="n">postings</span><span class="p">})</span>
 

	
 
            <span class="n">transactions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Transaction</span><span class="p">(</span><span class="o">**</span><span class="n">dict_transaction</span><span class="p">))</span>
 

	
 
        <span class="k">return</span> <span class="n">transactions</span>
 
</div>
 
<div class="viewcode-block" id="SQLStorage.update_transaction"><a class="viewcode-back" href="../../../api/accounting.storage.sql.html#accounting.storage.sql.SQLStorage.update_transaction">[docs]</a>    <span class="k">def</span> <span class="nf">update_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">transaction</span><span class="p">):</span>
 
        <span class="k">if</span> <span class="n">transaction</span><span class="o">.</span><span class="n">id</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
 
            <span class="k">raise</span> <span class="n">AccountingException</span><span class="p">(</span><span class="s">&#39;The transaction id must be set for&#39;</span>
 
                                      <span class="s">&#39; update_transaction calls&#39;</span><span class="p">)</span>
 

	
 
        <span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;DUMMY: Update transaction: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">transaction</span><span class="p">)</span>
 
</div>
 
<div class="viewcode-block" id="SQLStorage.add_transaction"><a class="viewcode-back" href="../../../api/accounting.storage.sql.html#accounting.storage.sql.SQLStorage.add_transaction">[docs]</a>    <span class="k">def</span> <span class="nf">add_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">transaction</span><span class="p">):</span>
 
        <span class="k">if</span> <span class="n">transaction</span><span class="o">.</span><span class="n">id</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
 
            <span class="n">transaction</span><span class="o">.</span><span class="n">generate_id</span><span class="p">()</span>
 

	
 
        <span class="n">_t</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Transaction</span><span class="p">()</span>
 
        <span class="n">_t</span><span class="o">.</span><span class="n">uuid</span> <span class="o">=</span> <span class="n">transaction</span><span class="o">.</span><span class="n">id</span>
 
        <span class="n">_t</span><span class="o">.</span><span class="n">date</span> <span class="o">=</span> <span class="n">transaction</span><span class="o">.</span><span class="n">date</span>
 
        <span class="n">_t</span><span class="o">.</span><span class="n">payee</span> <span class="o">=</span> <span class="n">transaction</span><span class="o">.</span><span class="n">payee</span>
 
        <span class="n">_t</span><span class="o">.</span><span class="n">meta</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">transaction</span><span class="o">.</span><span class="n">metadata</span><span class="p">)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_t</span><span class="p">)</span>
 

	
 
        <span class="k">for</span> <span class="n">posting</span> <span class="ow">in</span> <span class="n">transaction</span><span class="o">.</span><span class="n">postings</span><span class="p">:</span>
 
            <span class="n">_p</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Posting</span><span class="p">()</span>
 
            <span class="n">_p</span><span class="o">.</span><span class="n">transaction_uuid</span> <span class="o">=</span> <span class="n">transaction</span><span class="o">.</span><span class="n">id</span>
 
            <span class="n">_p</span><span class="o">.</span><span class="n">account</span> <span class="o">=</span> <span class="n">posting</span><span class="o">.</span><span class="n">account</span>
 
            <span class="n">_p</span><span class="o">.</span><span class="n">meta</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">posting</span><span class="o">.</span><span class="n">metadata</span><span class="p">)</span>
 
            <span class="n">_p</span><span class="o">.</span><span class="n">amount</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Amount</span><span class="p">(</span><span class="n">symbol</span><span class="o">=</span><span class="n">posting</span><span class="o">.</span><span class="n">amount</span><span class="o">.</span><span class="n">symbol</span><span class="p">,</span>
 
                                    <span class="n">amount</span><span class="o">=</span><span class="n">posting</span><span class="o">.</span><span class="n">amount</span><span class="o">.</span><span class="n">amount</span><span class="p">)</span>
 

	
 
            <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_p</span><span class="p">)</span>
 

	
 
        <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span></div></div>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../../accounting.html" >accounting</a> &raquo;</li>
 
          <li><a href="../storage.html" >accounting.storage</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/storage/sql/models.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.storage.sql.models &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../../../index.html" />
 
    <link rel="up" title="accounting.storage.sql" href="../sql.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../../../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../../../accounting.html" >accounting</a> &raquo;</li>
 
          <li><a href="../../storage.html" >accounting.storage</a> &raquo;</li>
 
          <li><a href="../sql.html" accesskey="U">accounting.storage.sql</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.storage.sql.models</h1><div class="highlight"><pre>
 
<span class="kn">import</span> <span class="nn">json</span>
 

	
 
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">db</span>
 

	
 

	
 
<div class="viewcode-block" id="Transaction"><a class="viewcode-back" href="../../../../api/accounting.storage.sql.html#accounting.storage.sql.models.Transaction">[docs]</a><span class="k">class</span> <span class="nc">Transaction</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
 
    <span class="nb">id</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">(),</span> <span class="n">primary_key</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
 
    <span class="n">uuid</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">,</span> <span class="n">unique</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">nullable</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
 
    <span class="n">date</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">DateTime</span><span class="p">)</span>
 
    <span class="n">payee</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">())</span>
 
    <span class="n">meta</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">())</span>
 

	
 
<div class="viewcode-block" id="Transaction.as_dict"><a class="viewcode-back" href="../../../../api/accounting.storage.sql.html#accounting.storage.sql.models.Transaction.as_dict">[docs]</a>    <span class="k">def</span> <span class="nf">as_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span>
 
            <span class="nb">id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span>
 
            <span class="n">date</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">date</span><span class="p">,</span>
 
            <span class="n">payee</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">payee</span><span class="p">,</span>
 
            <span class="n">postings</span><span class="o">=</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">as_dict</span><span class="p">()</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">postings</span><span class="p">],</span>
 
            <span class="n">metadata</span><span class="o">=</span><span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">meta</span><span class="p">)</span>
 
        <span class="p">)</span>
 

	
 
</div></div>
 
<div class="viewcode-block" id="Posting"><a class="viewcode-back" href="../../../../api/accounting.storage.sql.html#accounting.storage.sql.models.Posting">[docs]</a><span class="k">class</span> <span class="nc">Posting</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
 
    <span class="nb">id</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">(),</span> <span class="n">primary_key</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
 

	
 
    <span class="n">transaction_uuid</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">,</span> <span class="n">db</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s">&#39;transaction.uuid&#39;</span><span class="p">))</span>
 
    <span class="n">transaction</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">relationship</span><span class="p">(</span><span class="s">&#39;Transaction&#39;</span><span class="p">,</span> <span class="n">backref</span><span class="o">=</span><span class="s">&#39;postings&#39;</span><span class="p">)</span>
 

	
 
    <span class="n">account</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">,</span> <span class="n">nullable</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
 

	
 
    <span class="n">amount_id</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">db</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s">&#39;amount.id&#39;</span><span class="p">))</span>
 
    <span class="n">amount</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">relationship</span><span class="p">(</span><span class="s">&#39;Amount&#39;</span><span class="p">)</span>
 

	
 
    <span class="n">meta</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">)</span>
 

	
 
<div class="viewcode-block" id="Posting.as_dict"><a class="viewcode-back" href="../../../../api/accounting.storage.sql.html#accounting.storage.sql.models.Posting.as_dict">[docs]</a>    <span class="k">def</span> <span class="nf">as_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span>
 
            <span class="n">account</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="p">,</span>
 
            <span class="n">amount</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">amount</span><span class="o">.</span><span class="n">as_dict</span><span class="p">(),</span>
 
            <span class="n">metadata</span><span class="o">=</span><span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">meta</span><span class="p">)</span>
 
        <span class="p">)</span>
 

	
 
</div></div>
 
<div class="viewcode-block" id="Amount"><a class="viewcode-back" href="../../../../api/accounting.storage.sql.html#accounting.storage.sql.models.Amount">[docs]</a><span class="k">class</span> <span class="nc">Amount</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
 
    <span class="nb">id</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
 
    <span class="n">symbol</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">String</span><span class="p">)</span>
 
    <span class="n">amount</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">Column</span><span class="p">(</span><span class="n">db</span><span class="o">.</span><span class="n">Numeric</span><span class="p">)</span>
 

	
 
<div class="viewcode-block" id="Amount.as_dict"><a class="viewcode-back" href="../../../../api/accounting.storage.sql.html#accounting.storage.sql.models.Amount.as_dict">[docs]</a>    <span class="k">def</span> <span class="nf">as_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span>
 
            <span class="n">symbol</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">symbol</span><span class="p">,</span>
 
            <span class="n">amount</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">amount</span>
 
        <span class="p">)</span></div></div>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../../../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../../../accounting.html" >accounting</a> &raquo;</li>
 
          <li><a href="../../storage.html" >accounting.storage</a> &raquo;</li>
 
          <li><a href="../sql.html" >accounting.storage.sql</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/transport.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.transport &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../index.html" />
 
    <link rel="up" title="accounting" href="../accounting.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" accesskey="U">accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.transport</h1><div class="highlight"><pre>
 
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span>
 

	
 
<span class="kn">from</span> <span class="nn">flask</span> <span class="kn">import</span> <span class="n">json</span>
 

	
 
<span class="kn">from</span> <span class="nn">accounting.models</span> <span class="kn">import</span> <span class="n">Amount</span><span class="p">,</span> <span class="n">Transaction</span><span class="p">,</span> <span class="n">Posting</span><span class="p">,</span> <span class="n">Account</span>
 

	
 
<div class="viewcode-block" id="AccountingEncoder"><a class="viewcode-back" href="../../api/accounting.html#accounting.transport.AccountingEncoder">[docs]</a><span class="k">class</span> <span class="nc">AccountingEncoder</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">JSONEncoder</span><span class="p">):</span>
 
<div class="viewcode-block" id="AccountingEncoder.default"><a class="viewcode-back" href="../../api/accounting.html#accounting.transport.AccountingEncoder.default">[docs]</a>    <span class="k">def</span> <span class="nf">default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">o</span><span class="p">):</span>
 
        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">Account</span><span class="p">):</span>
 
            <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span>
 
                <span class="n">__type__</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span>
 
                <span class="n">name</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
 
                <span class="n">amounts</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">amounts</span><span class="p">,</span>
 
                <span class="n">accounts</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">accounts</span>
 
            <span class="p">)</span>
 
        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">Transaction</span><span class="p">):</span>
 
            <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span>
 
                <span class="n">__type__</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span>
 
                <span class="n">date</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">&#39;%Y-%m-</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">),</span>
 
                <span class="n">payee</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">payee</span><span class="p">,</span>
 
                <span class="n">postings</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">postings</span><span class="p">,</span>
 
                <span class="n">metadata</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">metadata</span>
 
            <span class="p">)</span>
 
        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">Posting</span><span class="p">):</span>
 
            <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span>
 
                <span class="n">__type__</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span>
 
                <span class="n">account</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">account</span><span class="p">,</span>
 
                <span class="n">amount</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">amount</span><span class="p">,</span>
 
                <span class="n">metadata</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">metadata</span>
 
            <span class="p">)</span>
 
        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">Amount</span><span class="p">):</span>
 
            <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span>
 
                <span class="n">__type__</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span>
 
                <span class="n">amount</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">o</span><span class="o">.</span><span class="n">amount</span><span class="p">),</span>
 
                <span class="n">symbol</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">symbol</span>
 
            <span class="p">)</span>
 
        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="ne">Exception</span><span class="p">):</span>
 
            <span class="k">return</span> <span class="nb">dict</span><span class="p">(</span>
 
                <span class="n">__type__</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span>
 
                <span class="n">args</span><span class="o">=</span><span class="n">o</span><span class="o">.</span><span class="n">args</span>
 
            <span class="p">)</span>
 

	
 
        <span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">JSONEncoder</span><span class="o">.</span><span class="n">default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">o</span><span class="p">)</span>
 
</div></div>
 
<div class="viewcode-block" id="AccountingDecoder"><a class="viewcode-back" href="../../api/accounting.html#accounting.transport.AccountingDecoder">[docs]</a><span class="k">class</span> <span class="nc">AccountingDecoder</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">JSONDecoder</span><span class="p">):</span>
 
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
 
        <span class="n">json</span><span class="o">.</span><span class="n">JSONDecoder</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">object_hook</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dict_to_object</span><span class="p">)</span>
 

	
 
<div class="viewcode-block" id="AccountingDecoder.dict_to_object"><a class="viewcode-back" href="../../api/accounting.html#accounting.transport.AccountingDecoder.dict_to_object">[docs]</a>    <span class="k">def</span> <span class="nf">dict_to_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
 
        <span class="k">if</span> <span class="s">&#39;__type__&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">d</span><span class="p">:</span>
 
            <span class="k">return</span> <span class="n">d</span>
 

	
 
        <span class="n">types</span> <span class="o">=</span> <span class="p">{</span><span class="n">c</span><span class="o">.</span><span class="n">__name__</span> <span class="p">:</span> <span class="n">c</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="p">[</span><span class="n">Amount</span><span class="p">,</span> <span class="n">Transaction</span><span class="p">,</span> <span class="n">Posting</span><span class="p">,</span>
 
                                          <span class="n">Account</span><span class="p">]}</span>
 

	
 
        <span class="n">_type</span> <span class="o">=</span> <span class="n">d</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;__type__&#39;</span><span class="p">)</span>
 

	
 
        <span class="k">if</span> <span class="n">_type</span> <span class="o">==</span> <span class="s">&#39;Transaction&#39;</span><span class="p">:</span>
 
            <span class="n">d</span><span class="p">[</span><span class="s">&#39;date&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s">&#39;date&#39;</span><span class="p">],</span> <span class="s">&#39;%Y-%m-</span><span class="si">%d</span><span class="s">&#39;</span><span class="p">)</span>
 

	
 
        <span class="k">return</span> <span class="n">types</span><span class="p">[</span><span class="n">_type</span><span class="p">](</span><span class="o">**</span><span class="n">d</span><span class="p">)</span></div></div>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" >accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/accounting/web.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.web &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../../index.html" />
 
    <link rel="up" title="accounting" href="../accounting.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" accesskey="U">accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>Source code for accounting.web</h1><div class="highlight"><pre>
 
<span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">This module contains the high-level webservice logic such as the Flask setup</span>
 
<span class="sd">and the Flask endpoints.</span>
 
<span class="sd">&#39;&#39;&#39;</span>
 
<span class="kn">import</span> <span class="nn">sys</span>
 
<span class="kn">import</span> <span class="nn">logging</span>
 
<span class="kn">import</span> <span class="nn">argparse</span>
 

	
 
<span class="kn">from</span> <span class="nn">flask</span> <span class="kn">import</span> <span class="n">Flask</span><span class="p">,</span> <span class="n">jsonify</span><span class="p">,</span> <span class="n">request</span>
 

	
 
<span class="kn">from</span> <span class="nn">accounting</span> <span class="kn">import</span> <span class="n">Ledger</span>
 
<span class="kn">from</span> <span class="nn">accounting.transport</span> <span class="kn">import</span> <span class="n">AccountingEncoder</span><span class="p">,</span> <span class="n">AccountingDecoder</span>
 
<span class="kn">from</span> <span class="nn">accounting.exceptions</span> <span class="kn">import</span> <span class="n">AccountingException</span>
 
<span class="kn">from</span> <span class="nn">accounting.decorators</span> <span class="kn">import</span> <span class="n">jsonify_exceptions</span>
 

	
 

	
 
<span class="n">app</span> <span class="o">=</span> <span class="n">Flask</span><span class="p">(</span><span class="s">&#39;accounting&#39;</span><span class="p">)</span>
 
<span class="n">app</span><span class="o">.</span><span class="n">config</span><span class="o">.</span><span class="n">from_pyfile</span><span class="p">(</span><span class="s">&#39;config.py&#39;</span><span class="p">)</span>
 

	
 
<span class="n">ledger</span> <span class="o">=</span> <span class="bp">None</span>
 

	
 
<span class="nd">@app.before_request</span>
 
<div class="viewcode-block" id="init_ledger"><a class="viewcode-back" href="../../api/accounting.html#accounting.web.init_ledger">[docs]</a><span class="k">def</span> <span class="nf">init_ledger</span><span class="p">():</span>
 
    <span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">    :py:meth:`flask.Flask.before_request`-decorated method that initializes an</span>
 
<span class="sd">    :py:class:`accounting.Ledger` object.</span>
 
<span class="sd">    &#39;&#39;&#39;</span>
 
    <span class="k">global</span> <span class="n">ledger</span>
 
    <span class="n">ledger</span> <span class="o">=</span> <span class="n">Ledger</span><span class="p">(</span><span class="n">ledger_file</span><span class="o">=</span><span class="n">app</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;LEDGER_FILE&#39;</span><span class="p">])</span>
 

	
 

	
 
<span class="c"># These will convert output from our internal classes to JSON and back</span></div>
 
<span class="n">app</span><span class="o">.</span><span class="n">json_encoder</span> <span class="o">=</span> <span class="n">AccountingEncoder</span>
 
<span class="n">app</span><span class="o">.</span><span class="n">json_decoder</span> <span class="o">=</span> <span class="n">AccountingDecoder</span>
 

	
 

	
 
<span class="nd">@app.route</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">)</span>
 
<div class="viewcode-block" id="index"><a class="viewcode-back" href="../../api/accounting.html#accounting.web.index">[docs]</a><span class="k">def</span> <span class="nf">index</span><span class="p">():</span>
 
    <span class="sd">&#39;&#39;&#39; Hello World! &#39;&#39;&#39;</span>
 
    <span class="k">return</span> <span class="s">&#39;Hello World!&#39;</span>
 

	
 
</div>
 
<span class="nd">@app.route</span><span class="p">(</span><span class="s">&#39;/balance&#39;</span><span class="p">)</span>
 
<div class="viewcode-block" id="balance_report"><a class="viewcode-back" href="../../api/accounting.html#accounting.web.balance_report">[docs]</a><span class="k">def</span> <span class="nf">balance_report</span><span class="p">():</span>
 
    <span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">    Returns the JSON-serialized result of :meth:`accounting.Ledger.bal`</span>
 
<span class="sd">    &#39;&#39;&#39;</span>
 
    <span class="n">report_data</span> <span class="o">=</span> <span class="n">ledger</span><span class="o">.</span><span class="n">bal</span><span class="p">()</span>
 

	
 
    <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">balance_report</span><span class="o">=</span><span class="n">report_data</span><span class="p">)</span>
 
</div>
 
<span class="nd">@app.route</span><span class="p">(</span><span class="s">&#39;/transaction&#39;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s">&#39;GET&#39;</span><span class="p">])</span>
 
<div class="viewcode-block" id="transaction_get"><a class="viewcode-back" href="../../api/accounting.html#accounting.web.transaction_get">[docs]</a><span class="k">def</span> <span class="nf">transaction_get</span><span class="p">():</span>
 
    <span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">    Returns the JSON-serialized output of :meth:`accounting.Ledger.reg`</span>
 
<span class="sd">    &#39;&#39;&#39;</span>
 
    <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">transactions</span><span class="o">=</span><span class="n">ledger</span><span class="o">.</span><span class="n">reg</span><span class="p">())</span>
 
</div>
 
<span class="nd">@app.route</span><span class="p">(</span><span class="s">&#39;/transaction&#39;</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s">&#39;POST&#39;</span><span class="p">])</span>
 
<span class="nd">@jsonify_exceptions</span>
 
<div class="viewcode-block" id="transaction_post"><a class="viewcode-back" href="../../api/accounting.html#accounting.web.transaction_post">[docs]</a><span class="k">def</span> <span class="nf">transaction_post</span><span class="p">():</span>
 
    <span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">    REST/JSON endpoint for transactions.</span>
 

	
 
<span class="sd">    Current state:</span>
 

	
 
<span class="sd">    Takes a POST request with a ``transactions`` JSON payload and writes it to</span>
 
<span class="sd">    the ledger file.</span>
 

	
 
<span class="sd">    Requires the ``transactions`` payload to be __type__-annotated:</span>
 

	
 
<span class="sd">    .. code-block:: json</span>
 

	
 
<span class="sd">        {</span>
 
<span class="sd">          &quot;transactions&quot;: [</span>
 
<span class="sd">            {</span>
 
<span class="sd">              &quot;__type__&quot;: &quot;Transaction&quot;,</span>
 
<span class="sd">              &quot;date&quot;: &quot;2013-01-01&quot;,</span>
 
<span class="sd">              &quot;payee&quot;: &quot;Kindly T. Donor&quot;,</span>
 
<span class="sd">              &quot;postings&quot;: [</span>
 
<span class="sd">                {</span>
...
 
@@ -183,110 +186,113 @@
 
<span class="sd">        # Logging output (linebreaks added for clarity)</span>
 
<span class="sd">        # DEBUG:accounting:json data: {&#39;balance_report&#39;:</span>
 
<span class="sd">        #    [&lt;Account &quot;None&quot; [</span>
 
<span class="sd">        #        &lt;Amount $ 0&gt;, &lt;Amount KARMA 0&gt;]</span>
 
<span class="sd">        #        [&lt;Account &quot;Assets&quot; [</span>
 
<span class="sd">        #            &lt;Amount $ 50&gt;, &lt;Amount KARMA 10&gt;]</span>
 
<span class="sd">        #            [&lt;Account &quot;Assets:Checking&quot; [</span>
 
<span class="sd">        #                &lt;Amount $ 50&gt;] []&gt;,</span>
 
<span class="sd">        #             &lt;Account &quot;Assets:Karma Account&quot; [</span>
 
<span class="sd">        #                &lt;Amount KARMA 10&gt;] []&gt;]&gt;,</span>
 
<span class="sd">        #         &lt;Account &quot;Expenses&quot; [</span>
 
<span class="sd">        #            &lt;Amount $ 500&gt;]</span>
 
<span class="sd">        #            [&lt;Account &quot;Expenses:Blah&quot; [</span>
 
<span class="sd">        #                &lt;Amount $ 250&gt;]</span>
 
<span class="sd">        #                [&lt;Account &quot;Expenses:Blah:Hosting&quot; [</span>
 
<span class="sd">        #                    &lt;Amount $ 250&gt;] []&gt;]&gt;,</span>
 
<span class="sd">        #             &lt;Account &quot;Expenses:Foo&quot; [</span>
 
<span class="sd">        #                &lt;Amount $ 250&gt;] [</span>
 
<span class="sd">        #                &lt;Account &quot;Expenses:Foo:Hosting&quot; [</span>
 
<span class="sd">        #                    &lt;Amount $ 250&gt;] []&gt;]&gt;]&gt;,</span>
 
<span class="sd">        #         &lt;Account &quot;Income&quot; [</span>
 
<span class="sd">        #            &lt;Amount $ -550&gt;,</span>
 
<span class="sd">        #            &lt;Amount KARMA -10&gt;]</span>
 
<span class="sd">        #            [&lt;Account &quot;Income:Donation&quot; [</span>
 
<span class="sd">        #                &lt;Amount $ -50&gt;] []&gt;,</span>
 
<span class="sd">        #             &lt;Account &quot;Income:Foo&quot; [</span>
 
<span class="sd">        #                &lt;Amount $ -500&gt;]</span>
 
<span class="sd">        #                [&lt;Account &quot;Income:Foo:Donation&quot; [</span>
 
<span class="sd">        #                    &lt;Amount $ -500&gt;] []&gt;]&gt;,</span>
 
<span class="sd">        #             &lt;Account &quot;Income:Karma&quot; [</span>
 
<span class="sd">        #             &lt;Amount KARMA -10&gt;] []&gt;]&gt;]&gt;]}</span>
 
<span class="sd">    &#39;&#39;&#39;</span>
 
    <span class="n">app</span><span class="o">.</span><span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&#39;json data: </span><span class="si">%s</span><span class="s">&#39;</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">json</span><span class="p">)</span>
 
    <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">foo</span><span class="o">=</span><span class="s">&#39;bar&#39;</span><span class="p">)</span>
 

	
 
</div>
 
<span class="nd">@app.route</span><span class="p">(</span><span class="s">&#39;/register&#39;</span><span class="p">)</span>
 
<div class="viewcode-block" id="register_report"><a class="viewcode-back" href="../../api/accounting.html#accounting.web.register_report">[docs]</a><span class="k">def</span> <span class="nf">register_report</span><span class="p">():</span>
 
    <span class="sd">&#39;&#39;&#39;</span>
 
<span class="sd">    Returns the JSON-serialized output of :py:meth:`accounting.Ledger.reg`</span>
 
<span class="sd">    &#39;&#39;&#39;</span>
 
    <span class="n">report_data</span> <span class="o">=</span> <span class="n">ledger</span><span class="o">.</span><span class="n">reg</span><span class="p">()</span>
 

	
 
    <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">register_report</span><span class="o">=</span><span class="n">report_data</span><span class="p">)</span>
 

	
 
</div>
 
<div class="viewcode-block" id="main"><a class="viewcode-back" href="../../api/accounting.html#accounting.web.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
 
    <span class="n">prog</span> <span class="o">=</span> <span class="n">__name__</span>
 
    <span class="k">if</span> <span class="n">argv</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
 
        <span class="n">prog</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
 
        <span class="n">argv</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
 

	
 
    <span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">prog</span><span class="o">=</span><span class="n">prog</span><span class="p">)</span>
 
    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">&#39;-v&#39;</span><span class="p">,</span> <span class="s">&#39;--verbosity&#39;</span><span class="p">,</span>
 
                        <span class="n">default</span><span class="o">=</span><span class="s">&#39;INFO&#39;</span><span class="p">,</span>
 
                        <span class="n">help</span><span class="o">=</span><span class="p">(</span><span class="s">&#39;Filter logging output. Possible values:&#39;</span> <span class="o">+</span>
 
                        <span class="s">&#39; CRITICAL, ERROR, WARNING, INFO, DEBUG&#39;</span><span class="p">))</span>
 

	
 
    <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">(</span><span class="n">argv</span><span class="p">)</span>
 

	
 
    <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">(</span><span class="n">level</span><span class="o">=</span><span class="nb">getattr</span><span class="p">(</span><span class="n">logging</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">verbosity</span><span class="p">,</span> <span class="s">&#39;INFO&#39;</span><span class="p">))</span>
 

	
 
    <span class="n">app</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="n">app</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;HOST&#39;</span><span class="p">],</span> <span class="n">port</span><span class="o">=</span><span class="n">app</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;PORT&#39;</span><span class="p">])</span>
 
</div>
 
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&#39;__main__&#39;</span><span class="p">:</span>
 
    <span class="n">main</span><span class="p">()</span>
 
</pre></div>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="../index.html" >Module code</a> &raquo;</li>
 
          <li><a href="../accounting.html" >accounting</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_modules/index.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>Overview: module code &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../index.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <h1>All modules for which code is available</h1>
 
<ul><li><a href="accounting.html">accounting</a></li>
 
<ul><li><a href="accounting/client.html">accounting.client</a></li>
 
<li><a href="accounting/decorators.html">accounting.decorators</a></li>
 
<li><a href="accounting/exceptions.html">accounting.exceptions</a></li>
 
<li><a href="accounting/gtkclient.html">accounting.gtkclient</a></li>
 
<li><a href="accounting/models.html">accounting.models</a></li>
 
<li><a href="accounting/storage.html">accounting.storage</a></li>
 
<ul><li><a href="accounting/storage/ledgercli.html">accounting.storage.ledgercli</a></li>
 
<li><a href="accounting/storage/sql.html">accounting.storage.sql</a></li>
 
<ul><li><a href="accounting/storage/sql/models.html">accounting.storage.sql.models</a></li>
 
</ul></ul><li><a href="accounting/transport.html">accounting.transport</a></li>
 
<li><a href="accounting/web.html">accounting.web</a></li>
 
</ul></ul>
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li><a href="../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/_sources/index.txt
Show inline comments
 
.. Accounting API documentation master file, created by
 
   sphinx-quickstart on Thu Dec 12 14:02:01 2013.
 
   You can adapt this file completely to your liking, but it should at least
 
   contain the root `toctree` directive.
 

	
 
Welcome to Accounting API's documentation!
 
==========================================
 

	
 
Contents:
 

	
 
.. toctree::
 
   :maxdepth: 2
 

	
 
   README
 
   restapi
 
   api/accounting.rst
 

	
 

	
 

	
 
Indices and tables
 
==================
 

	
 
* :ref:`genindex`
 
* :ref:`modindex`
 
* :ref:`search`
doc/build/html/_sources/restapi.txt
Show inline comments
 
new file 100644
 
==========
 
 REST API
 
==========
 

	
 
Get transactions
 
----------------
 

	
 
.. http:get:: /transaction
 

	
 
    Get all transactions
 

	
 
    **Example request**
 

	
 
    .. code-block:: http
 

	
 
        GET /transaction HTTP/1.1
 
        Host: accounting.example
 
        Accept: application/json
 

	
 

	
 
    **Example response**
 

	
 
    .. code-block:: http
 

	
 
        HTTP/1.1 200 OK
 
        Content-Type: application/json
 

	
 
        {
 
          "transactions": [
 
            {
 
              "__type__": "Transaction", 
 
              "date": "2010-01-01", 
 
              "id": "Ids can be anything", 
 
              "metadata": {}, 
 
              "payee": "Kindly T. Donor", 
 
              "postings": [
 
                {
 
                  "__type__": "Posting", 
 
                  "account": "Income:Foo:Donation", 
 
                  "amount": {
 
                    "__type__": "Amount", 
 
                    "amount": "-100", 
 
                    "symbol": "$"
 
                  }, 
 
                  "metadata": {
 
                    "Invoice": "Projects/Foo/Invoices/Invoice20100101.pdf"
 
                  }
 
                }, 
 
                {
 
                  "__type__": "Posting", 
 
                  "account": "Assets:Checking", 
 
                  "amount": {
 
                    "__type__": "Amount", 
 
                    "amount": "100", 
 
                    "symbol": "$"
 
                  }, 
 
                  "metadata": {}
 
                }
 
              ]
 
            }, 
 
            {
 
              "__type__": "Transaction", 
 
              "date": "2011-03-15", 
 
              "id": "but mind you if they collide.", 
 
              "metadata": {}, 
 
              "payee": "Another J. Donor", 
 
              "postings": [
 
                {
 
                  "__type__": "Posting", 
 
                  "account": "Income:Foo:Donation", 
 
                  "amount": {
 
                    "__type__": "Amount", 
 
                    "amount": "-400", 
 
                    "symbol": "$"
 
                  }, 
 
                  "metadata": {
 
                    "Approval": "Projects/Foo/earmark-record.txt"
 
                  }
 
                }, 
 
                {
 
                  "__type__": "Posting", 
 
                  "account": "Assets:Checking", 
 
                  "amount": {
 
                    "__type__": "Amount", 
 
                    "amount": "400", 
 
                    "symbol": "$"
 
                  }, 
 
                  "metadata": {}
 
                }
 
              ]
 
            },
 
          ]
 
        }
 

	
 
Add transactions
 
----------------
 

	
 
.. http:post:: /transaction
 

	
 
    :jsonparam array transactions: A list of Transaction objects to add.
 

	
 
    **Example request**
 

	
 
    .. code-block:: http
 

	
 
        POST /transaction HTTP/1.1
 
        Host: accounting.example
 
        Content-Type: application/json
 
        Accept: application/json
 

	
 
        {
 
          "transactions": [
 
            {
 
              "__type__": "Transaction", 
 
              "date": "2010-01-01", 
 
              "id": "Ids can be anything", 
 
              "metadata": {}, 
 
              "payee": "Kindly T. Donor", 
 
              "postings": [
 
                {
 
                  "__type__": "Posting", 
 
                  "account": "Income:Foo:Donation", 
 
                  "amount": {
 
                    "__type__": "Amount", 
 
                    "amount": "-100", 
 
                    "symbol": "$"
 
                  }, 
 
                  "metadata": {
 
                    "Invoice": "Projects/Foo/Invoices/Invoice20100101.pdf"
 
                  }
 
                }, 
 
                {
 
                  "__type__": "Posting", 
 
                  "account": "Assets:Checking", 
 
                  "amount": {
 
                    "__type__": "Amount", 
 
                    "amount": "100", 
 
                    "symbol": "$"
 
                  }, 
 
                  "metadata": {}
 
                }
 
              ]
 
            }, 
 
          ]
 
        }
 

	
 
    **Example response**
 

	
 
    .. code-block:: http
 

	
 
        HTTP/1.1 200 OK
 
        Content-Type: application/json
 

	
 
        {
 
          "status": "OK",
 
          "transaction_ids": [
 
            "Ids can be anything"
 
          ]
 
        }
 

	
 

	
 
Delete a transaction
 
--------------------
 

	
 
.. http:delete:: /transaction/<string:transaction_id>
 

	
 
    Delete the transaction with ID :data:`transaction_id`.
 

	
 
    **Example request**
 

	
 
    .. code-block:: http
 

	
 
        DELETE /transaction/123456 HTTP/1.1
 
        Host: accounting.example
 
        Accept: application/json
 

	
 
    **Example response**
 

	
 
    .. code-block:: http
 

	
 
        HTTP/1.1 200 OK
 
        Content-Type: application/json
 

	
 
        {
 
          "status": "OK"
 
        }
doc/build/html/api/accounting.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting package &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../index.html" />
 
    <link rel="next" title="accounting.storage package" href="accounting.storage.html" />
 
    <link rel="prev" title="The Accounting API" href="../README.html" /> 
 
    <link rel="prev" title="REST API" href="../restapi.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li class="right" >
 
          <a href="../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="accounting.storage.html" title="accounting.storage package"
 
             accesskey="N">next</a> |</li>
 
        <li class="right" >
 
          <a href="../README.html" title="The Accounting API"
 
          <a href="../restapi.html" title="REST API"
 
             accesskey="P">previous</a> |</li>
 
        <li><a href="../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <div class="section" id="accounting-package">
 
<h1>accounting package<a class="headerlink" href="#accounting-package" title="Permalink to this headline">¶</a></h1>
 
<div class="section" id="subpackages">
 
<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
 
<div class="toctree-wrapper compound">
 
<ul>
 
<li class="toctree-l1"><a class="reference internal" href="accounting.storage.html">accounting.storage package</a><ul>
 
<li class="toctree-l2"><a class="reference internal" href="accounting.storage.html#subpackages">Subpackages</a><ul>
 
<li class="toctree-l3"><a class="reference internal" href="accounting.storage.sql.html">accounting.storage.sql package</a><ul>
 
<li class="toctree-l4"><a class="reference internal" href="accounting.storage.sql.html#submodules">Submodules</a></li>
 
<li class="toctree-l4"><a class="reference internal" href="accounting.storage.sql.html#module-accounting.storage.sql.models">accounting.storage.sql.models module</a></li>
 
<li class="toctree-l4"><a class="reference internal" href="accounting.storage.sql.html#module-accounting.storage.sql">Module contents</a></li>
 
</ul>
 
</li>
 
</ul>
 
</li>
 
<li class="toctree-l2"><a class="reference internal" href="accounting.storage.html#submodules">Submodules</a></li>
 
<li class="toctree-l2"><a class="reference internal" href="accounting.storage.html#module-accounting.storage.ledgercli">accounting.storage.ledgercli module</a></li>
 
<li class="toctree-l2"><a class="reference internal" href="accounting.storage.html#module-accounting.storage">Module contents</a></li>
 
</ul>
 
</li>
 
</ul>
 
</div>
 
</div>
 
<div class="section" id="submodules">
 
<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
 
</div>
 
<div class="section" id="module-accounting.client">
 
<span id="accounting-client-module"></span><h2>accounting.client module<a class="headerlink" href="#module-accounting.client" title="Permalink to this headline">¶</a></h2>
 
<dl class="class">
 
<dt id="accounting.client.Client">
 
<em class="property">class </em><tt class="descclassname">accounting.client.</tt><tt class="descname">Client</tt><big>(</big><em>host=None</em>, <em>json_encoder=None</em>, <em>json_decoder=None</em><big>)</big><a class="reference internal" href="../_modules/accounting/client.html#Client"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.client.Client" title="Permalink to this definition">¶</a></dt>
 
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">builtins.object</span></tt></p>
 
<dl class="method">
 
<dt id="accounting.client.Client.get">
 
<tt class="descname">get</tt><big>(</big><em>path</em><big>)</big><a class="reference internal" href="../_modules/accounting/client.html#Client.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.client.Client.get" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.client.Client.get_balance">
 
<tt class="descname">get_balance</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/accounting/client.html#Client.get_balance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.client.Client.get_balance" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.client.Client.get_register">
 
<tt class="descname">get_register</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/accounting/client.html#Client.get_register"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.client.Client.get_register" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.client.Client.post">
 
<tt class="descname">post</tt><big>(</big><em>path</em>, <em>payload</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/accounting/client.html#Client.post"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.client.Client.post" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.client.Client.simple_transaction">
 
<tt class="descname">simple_transaction</tt><big>(</big><em>from_acc</em>, <em>to_acc</em>, <em>amount</em>, <em>symbol=None</em>, <em>payee=None</em><big>)</big><a class="reference internal" href="../_modules/accounting/client.html#Client.simple_transaction"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.client.Client.simple_transaction" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
</dd></dl>
 

	
 
<dl class="function">
 
<dt id="accounting.client.main">
 
<tt class="descclassname">accounting.client.</tt><tt class="descname">main</tt><big>(</big><em>argv=None</em>, <em>prog=None</em><big>)</big><a class="reference internal" href="../_modules/accounting/client.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.client.main" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="function">
 
<dt id="accounting.client.print_balance_accounts">
 
<tt class="descclassname">accounting.client.</tt><tt class="descname">print_balance_accounts</tt><big>(</big><em>accounts</em>, <em>level=0</em><big>)</big><a class="reference internal" href="../_modules/accounting/client.html#print_balance_accounts"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.client.print_balance_accounts" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="function">
 
<dt id="accounting.client.print_transactions">
 
<tt class="descclassname">accounting.client.</tt><tt class="descname">print_transactions</tt><big>(</big><em>transactions</em><big>)</big><a class="reference internal" href="../_modules/accounting/client.html#print_transactions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.client.print_transactions" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
</div>
 
<div class="section" id="module-accounting.config">
 
<span id="accounting-config-module"></span><h2>accounting.config module<a class="headerlink" href="#module-accounting.config" title="Permalink to this headline">¶</a></h2>
 
</div>
 
<div class="section" id="module-accounting.decorators">
 
<span id="accounting-decorators-module"></span><h2>accounting.decorators module<a class="headerlink" href="#module-accounting.decorators" title="Permalink to this headline">¶</a></h2>
 
<dl class="function">
 
<dt id="accounting.decorators.jsonify_exceptions">
 
<tt class="descclassname">accounting.decorators.</tt><tt class="descname">jsonify_exceptions</tt><big>(</big><em>func</em><big>)</big><a class="reference internal" href="../_modules/accounting/decorators.html#jsonify_exceptions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.decorators.jsonify_exceptions" title="Permalink to this definition">¶</a></dt>
 
<dd><p>Wraps a Flask endpoint and catches any AccountingException-based
 
exceptions which are returned to the client as JSON.</p>
...
 
@@ -285,147 +288,150 @@ and the Flask endpoints.</p>
 
<tt class="descclassname">accounting.web.</tt><tt class="descname">main</tt><big>(</big><em>argv=None</em><big>)</big><a class="reference internal" href="../_modules/accounting/web.html#main"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.web.main" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="function">
 
<dt id="accounting.web.transaction_delete">
 
<tt class="descclassname">accounting.web.</tt><tt class="descname">transaction_delete</tt><big>(</big><em>transaction_id=None</em><big>)</big><a class="headerlink" href="#accounting.web.transaction_delete" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="function">
 
<dt id="accounting.web.transaction_get">
 
<tt class="descclassname">accounting.web.</tt><tt class="descname">transaction_get</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/accounting/web.html#transaction_get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.web.transaction_get" title="Permalink to this definition">¶</a></dt>
 
<dd><p>Returns the JSON-serialized output of <tt class="xref py py-meth docutils literal"><span class="pre">accounting.Ledger.reg()</span></tt></p>
 
</dd></dl>
 

	
 
<dl class="function">
 
<dt id="accounting.web.transaction_post">
 
<tt class="descclassname">accounting.web.</tt><tt class="descname">transaction_post</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/accounting/web.html#transaction_post"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.web.transaction_post" title="Permalink to this definition">¶</a></dt>
 
<dd><p>REST/JSON endpoint for transactions.</p>
 
<p>Current state:</p>
 
<p>Takes a POST request with a <tt class="docutils literal"><span class="pre">transactions</span></tt> JSON payload and writes it to
 
the ledger file.</p>
 
<p>Requires the <tt class="docutils literal"><span class="pre">transactions</span></tt> payload to be __type__-annotated:</p>
 
<div class="highlight-json"><pre>{
 
  &quot;transactions&quot;: [
 
    {
 
      &quot;__type__&quot;: &quot;Transaction&quot;,
 
      &quot;date&quot;: &quot;2013-01-01&quot;,
 
      &quot;payee&quot;: &quot;Kindly T. Donor&quot;,
 
      &quot;postings&quot;: [
 
        {
 
          &quot;__type__&quot;: &quot;Posting&quot;,
 
          &quot;account&quot;: &quot;Income:Foo:Donation&quot;,
 
          &quot;amount&quot;: {
 
            &quot;__type__&quot;: &quot;Amount&quot;,
 
            &quot;amount&quot;: &quot;-100&quot;,
 
            &quot;symbol&quot;: &quot;$&quot;
 
          }
 
        },
 
        {
 
          &quot;__type__&quot;: &quot;Posting&quot;,
 
          &quot;account&quot;: &quot;Assets:Checking&quot;,
 
          &quot;amount&quot;: {
 
            &quot;__type__&quot;: &quot;Amount&quot;,
 
            &quot;amount&quot;: &quot;100&quot;,
 
            &quot;symbol&quot;: &quot;$&quot;
 
          }
 
        }
 
      ]
 
    }
 
}</pre>
 
</div>
 
<p>becomes:</p>
 
<div class="highlight-python"><pre>2013-01-01 Kindly T. Donor
 
  Income:Foo:Donation                                         $ -100
 
  Assets:Checking                                              $ 100</pre>
 
</div>
 
</dd></dl>
 

	
 
<dl class="function">
 
<dt id="accounting.web.transaction_update">
 
<tt class="descclassname">accounting.web.</tt><tt class="descname">transaction_update</tt><big>(</big><em>transaction_id=None</em><big>)</big><a class="headerlink" href="#accounting.web.transaction_update" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
</div>
 
<div class="section" id="module-accounting">
 
<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-accounting" title="Permalink to this headline">¶</a></h2>
 
</div>
 
</div>
 

	
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
  <h3><a href="../index.html">Table Of Contents</a></h3>
 
  <ul>
 
<li><a class="reference internal" href="#">accounting package</a><ul>
 
<li><a class="reference internal" href="#subpackages">Subpackages</a><ul>
 
</ul>
 
</li>
 
<li><a class="reference internal" href="#submodules">Submodules</a></li>
 
<li><a class="reference internal" href="#module-accounting.client">accounting.client module</a></li>
 
<li><a class="reference internal" href="#module-accounting.config">accounting.config module</a></li>
 
<li><a class="reference internal" href="#module-accounting.decorators">accounting.decorators module</a></li>
 
<li><a class="reference internal" href="#module-accounting.exceptions">accounting.exceptions module</a></li>
 
<li><a class="reference internal" href="#module-accounting.gtkclient">accounting.gtkclient module</a></li>
 
<li><a class="reference internal" href="#module-accounting.models">accounting.models module</a></li>
 
<li><a class="reference internal" href="#module-accounting.transport">accounting.transport module</a></li>
 
<li><a class="reference internal" href="#module-accounting.web">accounting.web module</a></li>
 
<li><a class="reference internal" href="#module-accounting">Module contents</a></li>
 
</ul>
 
</li>
 
</ul>
 

	
 
  <h4>Previous topic</h4>
 
  <p class="topless"><a href="../README.html"
 
                        title="previous chapter">The Accounting API</a></p>
 
  <p class="topless"><a href="../restapi.html"
 
                        title="previous chapter">REST API</a></p>
 
  <h4>Next topic</h4>
 
  <p class="topless"><a href="accounting.storage.html"
 
                        title="next chapter">accounting.storage package</a></p>
 
  <h3>This Page</h3>
 
  <ul class="this-page-menu">
 
    <li><a href="../_sources/api/accounting.txt"
 
           rel="nofollow">Show Source</a></li>
 
  </ul>
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li class="right" >
 
          <a href="../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="accounting.storage.html" title="accounting.storage package"
 
             >next</a> |</li>
 
        <li class="right" >
 
          <a href="../README.html" title="The Accounting API"
 
          <a href="../restapi.html" title="REST API"
 
             >previous</a> |</li>
 
        <li><a href="../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file
doc/build/html/api/accounting.storage.html
Show inline comments
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 

	
 

	
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    
 
    <title>accounting.storage package &mdash; Accounting API 0.1-beta documentation</title>
 
    
 
    <link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
 
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 
    
 
    <script type="text/javascript">
 
      var DOCUMENTATION_OPTIONS = {
 
        URL_ROOT:    '../',
 
        VERSION:     '0.1-beta',
 
        COLLAPSE_INDEX: false,
 
        FILE_SUFFIX: '.html',
 
        HAS_SOURCE:  true
 
      };
 
    </script>
 
    <script type="text/javascript" src="../_static/jquery.js"></script>
 
    <script type="text/javascript" src="../_static/underscore.js"></script>
 
    <script type="text/javascript" src="../_static/doctools.js"></script>
 
    <link rel="top" title="Accounting API 0.1-beta documentation" href="../index.html" />
 
    <link rel="up" title="accounting package" href="accounting.html" />
 
    <link rel="next" title="accounting.storage.sql package" href="accounting.storage.sql.html" />
 
    <link rel="prev" title="accounting package" href="accounting.html" /> 
 
  </head>
 
  <body>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../genindex.html" title="General Index"
 
             accesskey="I">index</a></li>
 
        <li class="right" >
 
          <a href="../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li class="right" >
 
          <a href="../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="accounting.storage.sql.html" title="accounting.storage.sql package"
 
             accesskey="N">next</a> |</li>
 
        <li class="right" >
 
          <a href="accounting.html" title="accounting package"
 
             accesskey="P">previous</a> |</li>
 
        <li><a href="../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="accounting.html" accesskey="U">accounting package</a> &raquo;</li> 
 
      </ul>
 
    </div>  
 

	
 
    <div class="document">
 
      <div class="documentwrapper">
 
        <div class="bodywrapper">
 
          <div class="body">
 
            
 
  <div class="section" id="accounting-storage-package">
 
<h1>accounting.storage package<a class="headerlink" href="#accounting-storage-package" title="Permalink to this headline">¶</a></h1>
 
<div class="section" id="subpackages">
 
<h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2>
 
<div class="toctree-wrapper compound">
 
<ul>
 
<li class="toctree-l1"><a class="reference internal" href="accounting.storage.sql.html">accounting.storage.sql package</a><ul>
 
<li class="toctree-l2"><a class="reference internal" href="accounting.storage.sql.html#submodules">Submodules</a></li>
 
<li class="toctree-l2"><a class="reference internal" href="accounting.storage.sql.html#module-accounting.storage.sql.models">accounting.storage.sql.models module</a></li>
 
<li class="toctree-l2"><a class="reference internal" href="accounting.storage.sql.html#module-accounting.storage.sql">Module contents</a></li>
 
</ul>
 
</li>
 
</ul>
 
</div>
 
</div>
 
<div class="section" id="submodules">
 
<h2>Submodules<a class="headerlink" href="#submodules" title="Permalink to this headline">¶</a></h2>
 
</div>
 
<div class="section" id="module-accounting.storage.ledgercli">
 
<span id="accounting-storage-ledgercli-module"></span><h2>accounting.storage.ledgercli module<a class="headerlink" href="#module-accounting.storage.ledgercli" title="Permalink to this headline">¶</a></h2>
 
<dl class="class">
 
<dt id="accounting.storage.ledgercli.Ledger">
 
<em class="property">class </em><tt class="descclassname">accounting.storage.ledgercli.</tt><tt class="descname">Ledger</tt><big>(</big><em>app=None</em>, <em>ledger_file=None</em>, <em>ledger_bin=None</em><big>)</big><a class="reference internal" href="../_modules/accounting/storage/ledgercli.html#Ledger"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.storage.ledgercli.Ledger" title="Permalink to this definition">¶</a></dt>
 
<dd><p>Bases: <a class="reference internal" href="#accounting.storage.Storage" title="accounting.storage.Storage"><tt class="xref py py-class docutils literal"><span class="pre">accounting.storage.Storage</span></tt></a></p>
 
<dl class="method">
 
<dt id="accounting.storage.ledgercli.Ledger.add_transaction">
 
<tt class="descname">add_transaction</tt><big>(</big><em>transaction</em><big>)</big><a class="reference internal" href="../_modules/accounting/storage/ledgercli.html#Ledger.add_transaction"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.storage.ledgercli.Ledger.add_transaction" title="Permalink to this definition">¶</a></dt>
 
<dd><p>Writes a transaction to the ledger file by opening it in &#8216;ab&#8217; mode and
 
writing a ledger transaction based on the
 
<a class="reference internal" href="accounting.html#accounting.models.Transaction" title="accounting.models.Transaction"><tt class="xref py py-class docutils literal"><span class="pre">Transaction</span></tt></a> instance in
 
<tt class="xref py py-data docutils literal"><span class="pre">transaction</span></tt>.</p>
 
</dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.ledgercli.Ledger.assemble_arguments">
 
<tt class="descname">assemble_arguments</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/accounting/storage/ledgercli.html#Ledger.assemble_arguments"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.storage.ledgercli.Ledger.assemble_arguments" title="Permalink to this definition">¶</a></dt>
 
<dd><p>Returns a list of arguments suitable for <a class="reference external" href="http://docs.python.org/3.3/library/subprocess.html#subprocess.Popen" title="(in Python v3.3)"><tt class="xref py py-class docutils literal"><span class="pre">subprocess.Popen</span></tt></a>
 
based on <tt class="xref py py-attr docutils literal"><span class="pre">self.ledger_bin</span></tt> and <tt class="xref py py-attr docutils literal"><span class="pre">self.ledger_file</span></tt>.</p>
 
</dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.ledgercli.Ledger.bal">
 
<tt class="descname">bal</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/accounting/storage/ledgercli.html#Ledger.bal"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.storage.ledgercli.Ledger.bal" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.ledgercli.Ledger.delete_transaction">
 
<tt class="descname">delete_transaction</tt><big>(</big><em>transaction_id</em><big>)</big><a class="headerlink" href="#accounting.storage.ledgercli.Ledger.delete_transaction" title="Permalink to this definition">¶</a></dt>
 
<dd><p>Delete a transaction from the ledger file.</p>
 
<p>This method opens the ledger file, loads all lines into memory and
 
looks for the transaction_id, then looks for the bounds of that
 
transaction in the ledger file, removes all lines within the bounds of
 
the transaction and removes them, then writes the lines back to the
 
ledger file.</p>
 
<p>Exceptions:</p>
 
<ul class="simple">
 
<li>RuntimeError: If all boundaries to the transaction are not found</li>
 
<li>TransactionNotFound: If no such transaction_id can be found in
 
<tt class="xref py py-data docutils literal"><span class="pre">self.ledger_file</span></tt></li>
 
</ul>
 
</dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.ledgercli.Ledger.get_process">
 
<tt class="descname">get_process</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/accounting/storage/ledgercli.html#Ledger.get_process"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.storage.ledgercli.Ledger.get_process" title="Permalink to this definition">¶</a></dt>
 
<dd><p>Returns <tt class="xref py py-attr docutils literal"><span class="pre">self.ledger_process</span></tt> if it evaluates to <tt class="docutils literal"><span class="pre">True</span></tt>. If
 
<tt class="xref py py-attr docutils literal"><span class="pre">self.ledger_process</span></tt> is not set the result of
 
<a class="reference internal" href="#accounting.storage.ledgercli.Ledger.init_process" title="accounting.storage.ledgercli.Ledger.init_process"><tt class="xref py py-meth docutils literal"><span class="pre">self.init_process()</span></tt></a> is returned.</p>
 
</dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.ledgercli.Ledger.get_transaction">
 
<tt class="descname">get_transaction</tt><big>(</big><em>transaction_id</em><big>)</big><a class="headerlink" href="#accounting.storage.ledgercli.Ledger.get_transaction" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.ledgercli.Ledger.get_transactions">
 
<tt class="descname">get_transactions</tt><big>(</big><big>)</big><a class="reference internal" href="../_modules/accounting/storage/ledgercli.html#Ledger.get_transactions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.storage.ledgercli.Ledger.get_transactions" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
...
 
@@ -216,112 +219,115 @@ the old transaction using <tt class="xref py py-data docutils literal"><span cla
 
<dt id="accounting.storage.Storage.get_account">
 
<tt class="descname">get_account</tt><big>(</big><em>*args</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/accounting/storage.html#Storage.get_account"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.storage.Storage.get_account" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.Storage.get_accounts">
 
<tt class="descname">get_accounts</tt><big>(</big><em>*args</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/accounting/storage.html#Storage.get_accounts"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.storage.Storage.get_accounts" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.Storage.get_transaction">
 
<tt class="descname">get_transaction</tt><big>(</big><em>*args</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/accounting/storage.html#Storage.get_transaction"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.storage.Storage.get_transaction" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.Storage.get_transactions">
 
<tt class="descname">get_transactions</tt><big>(</big><em>*args</em>, <em>**kw</em><big>)</big><a class="reference internal" href="../_modules/accounting/storage.html#Storage.get_transactions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#accounting.storage.Storage.get_transactions" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.Storage.reverse_transaction">
 
<tt class="descname">reverse_transaction</tt><big>(</big><em>transaction_id</em><big>)</big><a class="headerlink" href="#accounting.storage.Storage.reverse_transaction" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
<dl class="method">
 
<dt id="accounting.storage.Storage.update_transaction">
 
<tt class="descname">update_transaction</tt><big>(</big><em>transaction</em><big>)</big><a class="headerlink" href="#accounting.storage.Storage.update_transaction" title="Permalink to this definition">¶</a></dt>
 
<dd></dd></dl>
 

	
 
</dd></dl>
 

	
 
<dl class="exception">
 
<dt id="accounting.storage.TransactionNotFound">
 
<em class="property">exception </em><tt class="descclassname">accounting.storage.</tt><tt class="descname">TransactionNotFound</tt><a class="headerlink" href="#accounting.storage.TransactionNotFound" title="Permalink to this definition">¶</a></dt>
 
<dd><p>Bases: <a class="reference internal" href="accounting.html#accounting.exceptions.AccountingException" title="accounting.exceptions.AccountingException"><tt class="xref py py-class docutils literal"><span class="pre">accounting.exceptions.AccountingException</span></tt></a></p>
 
</dd></dl>
 

	
 
</div>
 
</div>
 

	
 

	
 
          </div>
 
        </div>
 
      </div>
 
      <div class="sphinxsidebar">
 
        <div class="sphinxsidebarwrapper">
 
  <h3><a href="../index.html">Table Of Contents</a></h3>
 
  <ul>
 
<li><a class="reference internal" href="#">accounting.storage package</a><ul>
 
<li><a class="reference internal" href="#subpackages">Subpackages</a><ul>
 
</ul>
 
</li>
 
<li><a class="reference internal" href="#submodules">Submodules</a></li>
 
<li><a class="reference internal" href="#module-accounting.storage.ledgercli">accounting.storage.ledgercli module</a></li>
 
<li><a class="reference internal" href="#module-accounting.storage">Module contents</a></li>
 
</ul>
 
</li>
 
</ul>
 

	
 
  <h4>Previous topic</h4>
 
  <p class="topless"><a href="accounting.html"
 
                        title="previous chapter">accounting package</a></p>
 
  <h4>Next topic</h4>
 
  <p class="topless"><a href="accounting.storage.sql.html"
 
                        title="next chapter">accounting.storage.sql package</a></p>
 
  <h3>This Page</h3>
 
  <ul class="this-page-menu">
 
    <li><a href="../_sources/api/accounting.storage.txt"
 
           rel="nofollow">Show Source</a></li>
 
  </ul>
 
<div id="searchbox" style="display: none">
 
  <h3>Quick search</h3>
 
    <form class="search" action="../search.html" method="get">
 
      <input type="text" name="q" />
 
      <input type="submit" value="Go" />
 
      <input type="hidden" name="check_keywords" value="yes" />
 
      <input type="hidden" name="area" value="default" />
 
    </form>
 
    <p class="searchtip" style="font-size: 90%">
 
    Enter search terms or a module, class or function name.
 
    </p>
 
</div>
 
<script type="text/javascript">$('#searchbox').show(0);</script>
 
        </div>
 
      </div>
 
      <div class="clearer"></div>
 
    </div>
 
    <div class="related">
 
      <h3>Navigation</h3>
 
      <ul>
 
        <li class="right" style="margin-right: 10px">
 
          <a href="../genindex.html" title="General Index"
 
             >index</a></li>
 
        <li class="right" >
 
          <a href="../py-modindex.html" title="Python Module Index"
 
             >modules</a> |</li>
 
        <li class="right" >
 
          <a href="../http-routingtable.html" title="HTTP Routing Table"
 
             >routing table</a> |</li>
 
        <li class="right" >
 
          <a href="accounting.storage.sql.html" title="accounting.storage.sql package"
 
             >next</a> |</li>
 
        <li class="right" >
 
          <a href="accounting.html" title="accounting package"
 
             >previous</a> |</li>
 
        <li><a href="../index.html">Accounting API 0.1-beta documentation</a> &raquo;</li>
 
          <li><a href="accounting.html" >accounting package</a> &raquo;</li> 
 
      </ul>
 
    </div>
 
    <div class="footer">
 
        &copy; Copyright 2013, Joar Wandborg.
 
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
 
    </div>
 
  </body>
 
</html>
...
 
\ No newline at end of file

Changeset was too big and was cut off... Show full diff anyway

0 comments (0 inline, 0 general)