File: progress.html

package info (click to toggle)
paste 1.7.5.1-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 3,180 kB
  • ctags: 2,709
  • sloc: python: 20,660; makefile: 47
file content (231 lines) | stat: -rw-r--r-- 12,658 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231


<!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>paste.progress – Track progress of uploads &mdash; Paste v1.7.5 documentation</title>
    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../',
        VERSION:     '1.7.5',
        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="Paste v1.7.5 documentation" href="../index.html" />
 
<link rel="stylesheet" type="text/css"
 href="../_static/paste.css.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><a href="../index.html">Paste v1.7.5 documentation</a> &raquo;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="module-paste.progress">
<span id="paste-progress-track-progress-of-uploads"></span><h1><a class="reference internal" href="#module-paste.progress"><tt class="xref py py-mod docutils literal"><span class="pre">paste.progress</span></tt></a> &#8211; Track progress of uploads<a class="headerlink" href="#module-paste.progress" title="Permalink to this headline">¶</a></h1>
<p>Upload Progress Monitor</p>
<p>This is a WSGI middleware component which monitors the status of files
being uploaded.  It includes a small query application which will return
a list of all files being uploaded by particular session/user.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">paste.httpserver</span> <span class="kn">import</span> <span class="n">serve</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">paste.urlmap</span> <span class="kn">import</span> <span class="n">URLMap</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">paste.auth.basic</span> <span class="kn">import</span> <span class="n">AuthBasicHandler</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">paste.debug.debugapp</span> <span class="kn">import</span> <span class="n">SlowConsumer</span><span class="p">,</span> <span class="n">SimpleApplication</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c"># from paste.progress import *</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">realm</span> <span class="o">=</span> <span class="s">&#39;Test Realm&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">authfunc</span><span class="p">(</span><span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="p">):</span>
<span class="gp">... </span>    <span class="k">return</span> <span class="n">username</span> <span class="o">==</span> <span class="n">password</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">map</span> <span class="o">=</span> <span class="n">URLMap</span><span class="p">({})</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">ups</span> <span class="o">=</span> <span class="n">UploadProgressMonitor</span><span class="p">(</span><span class="nb">map</span><span class="p">,</span> <span class="n">threshold</span><span class="o">=</span><span class="mi">1024</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">map</span><span class="p">[</span><span class="s">&#39;/upload&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">SlowConsumer</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">map</span><span class="p">[</span><span class="s">&#39;/simple&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">SimpleApplication</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">map</span><span class="p">[</span><span class="s">&#39;/report&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">UploadProgressReporter</span><span class="p">(</span><span class="n">ups</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">serve</span><span class="p">(</span><span class="n">AuthBasicHandler</span><span class="p">(</span><span class="n">ups</span><span class="p">,</span> <span class="n">realm</span><span class="p">,</span> <span class="n">authfunc</span><span class="p">))</span>
<span class="go">serving on...</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">This is experimental, and will change in the future.</p>
</div>
<div class="section" id="module-contents">
<h2>Module Contents<a class="headerlink" href="#module-contents" title="Permalink to this headline">¶</a></h2>
<dl class="class">
<dt id="paste.progress.UploadProgressMonitor">
<em class="property">class </em><tt class="descclassname">paste.progress.</tt><tt class="descname">UploadProgressMonitor</tt><big>(</big><em>application</em>, <em>threshold=None</em>, <em>timeout=None</em><big>)</big><a class="headerlink" href="#paste.progress.UploadProgressMonitor" title="Permalink to this definition">¶</a></dt>
<dd><p>monitors and reports on the status of uploads in progress</p>
<p>Parameters:</p>
<blockquote>
<p><tt class="docutils literal"><span class="pre">application</span></tt></p>
<blockquote>
This is the next application in the WSGI stack.</blockquote>
<p><tt class="docutils literal"><span class="pre">threshold</span></tt></p>
<blockquote>
This is the size in bytes that is needed for the
upload to be included in the monitor.</blockquote>
<p><tt class="docutils literal"><span class="pre">timeout</span></tt></p>
<blockquote>
This is the amount of time (in seconds) that a upload
remains in the monitor after it has finished.</blockquote>
</blockquote>
<p>Methods:</p>
<blockquote>
<p><tt class="docutils literal"><span class="pre">uploads()</span></tt></p>
<blockquote>
This returns a list of <tt class="docutils literal"><span class="pre">environ</span></tt> dict objects for each
upload being currently monitored, or finished but whose time
has not yet expired.</blockquote>
</blockquote>
<p>For each request <tt class="docutils literal"><span class="pre">environ</span></tt> that is monitored, there are several
variables that are stored:</p>
<blockquote>
<p><tt class="docutils literal"><span class="pre">paste.bytes_received</span></tt></p>
<blockquote>
This is the total number of bytes received for the given
request; it can be compared with <tt class="docutils literal"><span class="pre">CONTENT_LENGTH</span></tt> to
build a percentage complete.  This is an integer value.</blockquote>
<p><tt class="docutils literal"><span class="pre">paste.request_started</span></tt></p>
<blockquote>
This is the time (in seconds) when the request was started
as obtained from <tt class="docutils literal"><span class="pre">time.time()</span></tt>.  One would want to format
this for presentation to the user, if necessary.</blockquote>
<p><tt class="docutils literal"><span class="pre">paste.request_finished</span></tt></p>
<blockquote>
This is the time (in seconds) when the request was finished,
canceled, or otherwise disconnected.  This is None while
the given upload is still in-progress.</blockquote>
</blockquote>
<dl class="docutils">
<dt>TODO: turn monitor into a queue and purge queue of finished</dt>
<dd>requests that have passed the timeout period.</dd>
</dl>
</dd></dl>

<dl class="class">
<dt id="paste.progress.UploadProgressReporter">
<em class="property">class </em><tt class="descclassname">paste.progress.</tt><tt class="descname">UploadProgressReporter</tt><big>(</big><em>monitor</em><big>)</big><a class="headerlink" href="#paste.progress.UploadProgressReporter" title="Permalink to this definition">¶</a></dt>
<dd><p>reports on the progress of uploads for a given user</p>
<p>This reporter returns a JSON file (for use in AJAX) listing the
uploads in progress for the given user.  By default, this reporter
uses the <tt class="docutils literal"><span class="pre">REMOTE_USER</span></tt> environment to compare between the current
request and uploads in-progress.  If they match, then a response
record is formed.</p>
<blockquote>
<p><tt class="docutils literal"><span class="pre">match()</span></tt></p>
<blockquote>
This member function can be overriden to provide alternative
matching criteria.  It takes two environments, the first
is the current request, the second is a current upload.</blockquote>
<p><tt class="docutils literal"><span class="pre">report()</span></tt></p>
<blockquote>
This member function takes an environment and builds a
<tt class="docutils literal"><span class="pre">dict</span></tt> that will be used to create a JSON mapping for
the given upload.  By default, this just includes the
percent complete and the request url.</blockquote>
</blockquote>
</dd></dl>

</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
<h3><a href="http://pythonpaste.org/" class="invisible-link">Python Paste</a></h3>

<ul>
<li><a href="http://trac.pythonpaste.org">Issue tracker</a></li>
<li><a href="http://pythonpaste.org/">Paste core</a></li>
<li><a href="http://pythonpaste.org/webob/">WebOb</a></li>
<li><a href="http://pythonpaste.org/deploy/">Paste Deploy</a></li>
<li><a href="http://pythonpaste.org/script/">Paste Script</a></li>
<li><a href="http://pythonpaste.org/webtest/">WebTest</a></li>
<li><a href="http://pythonpaste.org/scripttest/">ScriptType</a></li>
<li><a href="http://pythonpaste.org/initools/">INITools</a></li>
<li><a href="http://pythonpaste.org/tempita/">Tempita</a></li>
<li><a href="http://pythonpaste.org/waitforit/">WaitForIt</a></li>
<li><a href="http://pythonpaste.org/wphp/">WPHP</a></li>
<li><a href="http://pythonpaste.org/wsgifilter/">WSGIFilter</a></li>
<li><a href="http://pythonpaste.org/wsgiproxy/">WSGIProxy</a></li>
</ul>


  <h3><a href="../index.html">Table Of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#"><tt class="docutils literal"><span class="pre">paste.progress</span></tt> &#8211; Track progress of uploads</a><ul>
<li><a class="reference internal" href="#module-contents">Module Contents</a></li>
</ul>
</li>
</ul>


  <h3>This Page</h3>
  <ul class="this-page-menu">
    <li><a href="../_sources/modules/progress.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" size="18" />
      <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><a href="../index.html">Paste v1.7.5 documentation</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2008, Ian Bicking.
      Last updated on Sep 14, 2010.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.1.
    </div>
  </body>
</html>