1
+ <!DOCTYPE html>
2
+ < html class ="writer-html5 " lang ="en " >
3
+ < head >
4
+ < meta charset ="utf-8 " />
5
+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 " />
6
+ < title > flaskstream2py.flask_request_reader — flaskstream2py 0.1.0 documentation</ title > < link rel ="stylesheet " href ="../../_static/css/theme.css " type ="text/css " />
7
+ < link rel ="stylesheet " href ="../../_static/pygments.css " type ="text/css " />
8
+ < link rel ="stylesheet " href ="../../_static/copybutton.css " type ="text/css " />
9
+ < link rel ="stylesheet " href ="../../_static/graphviz.css " type ="text/css " />
10
+ <!--[if lt IE 9]>
11
+ <script src="../../_static/js/html5shiv.min.js"></script>
12
+ <![endif]-->
13
+ < script id ="documentation_options " data-url_root ="../../ " src ="../../_static/documentation_options.js "> </ script >
14
+ < script src ="../../_static/jquery.js "> </ script >
15
+ < script src ="../../_static/underscore.js "> </ script >
16
+ < script src ="../../_static/doctools.js "> </ script >
17
+ < script src ="../../_static/language_data.js "> </ script >
18
+ < script src ="../../_static/toggleprompt.js "> </ script >
19
+ < script src ="../../_static/clipboard.min.js "> </ script >
20
+ < script src ="../../_static/copybutton.js "> </ script >
21
+ < script src ="../../_static/js/theme.js "> </ script >
22
+ < link rel ="index " title ="Index " href ="../../genindex.html " />
23
+ < link rel ="search " title ="Search " href ="../../search.html " />
24
+ </ head >
25
+
26
+ < body class ="wy-body-for-nav ">
27
+ < div class ="wy-grid-for-nav ">
28
+ < nav data-toggle ="wy-nav-shift " class ="wy-nav-side ">
29
+ < div class ="wy-side-scroll ">
30
+ < div class ="wy-side-nav-search " >
31
+ < a href ="../../index.html " class ="icon icon-home "> flaskstream2py
32
+ </ a >
33
+ < div role ="search ">
34
+ < form id ="rtd-search-form " class ="wy-form " action ="../../search.html " method ="get ">
35
+ < input type ="text " name ="q " placeholder ="Search docs " />
36
+ < input type ="hidden " name ="check_keywords " value ="yes " />
37
+ < input type ="hidden " name ="area " value ="default " />
38
+ </ form >
39
+ </ div >
40
+ </ div > < div class ="wy-menu wy-menu-vertical " data-spy ="affix " role ="navigation " aria-label ="Navigation menu ">
41
+ < p > < span class ="caption-text "> Contents:</ span > </ p >
42
+ < ul >
43
+ < li class ="toctree-l1 "> < a class ="reference internal " href ="../../module_docs/flaskstream2py.html "> flaskstream2py</ a > </ li >
44
+ < li class ="toctree-l1 "> < a class ="reference internal " href ="../../module_docs/flaskstream2py/flask_request_reader.html "> flaskstream2py.flask_request_reader</ a > </ li >
45
+ </ ul >
46
+
47
+ </ div >
48
+ </ div >
49
+ </ nav >
50
+
51
+ < section data-toggle ="wy-nav-shift " class ="wy-nav-content-wrap "> < nav class ="wy-nav-top " aria-label ="Mobile navigation menu " >
52
+ < i data-toggle ="wy-nav-top " class ="fa fa-bars "> </ i >
53
+ < a href ="../../index.html "> flaskstream2py</ a >
54
+ </ nav >
55
+
56
+ < div class ="wy-nav-content ">
57
+ < div class ="rst-content ">
58
+ < div role ="navigation " aria-label ="Page navigation ">
59
+ < ul class ="wy-breadcrumbs ">
60
+ < li > < a href ="../../index.html " class ="icon icon-home "> </ a > »</ li >
61
+ < li > < a href ="../index.html "> Module code</ a > »</ li >
62
+ < li > flaskstream2py.flask_request_reader</ li >
63
+ < li class ="wy-breadcrumbs-aside ">
64
+ </ li >
65
+ </ ul >
66
+ < hr />
67
+ </ div >
68
+ < div role ="main " class ="document " itemscope ="itemscope " itemtype ="http://schema.org/Article ">
69
+ < div itemprop ="articleBody ">
70
+
71
+ < h1 > Source code for flaskstream2py.flask_request_reader</ h1 > < div class ="highlight "> < pre >
72
+ < span > </ span > < span class ="sd "> """</ span >
73
+ < span class ="sd "> FlaskRequest Source</ span >
74
+ < span class ="sd "> """</ span >
75
+
76
+ < span class ="kn "> from</ span > < span class ="nn "> stream2py</ span > < span class ="kn "> import</ span > < span class ="n "> SourceReader</ span >
77
+
78
+
79
+ < div class ="viewcode-block " id ="FlaskRequestReader "> < a class ="viewcode-back " href ="../../module_docs/flaskstream2py/flask_request_reader.html#flaskstream2py.flask_request_reader.FlaskRequestReader "> [docs]</ a > < span class ="k "> class</ span > < span class ="nc "> FlaskRequestReader</ span > < span class ="p "> (</ span > < span class ="n "> SourceReader</ span > < span class ="p "> ):</ span >
80
+ < span class ="sd "> """A source reader that reads from an incoming HTTP request using Flask.</ span >
81
+ < span class ="sd "> Must be instantiated from a Flask request handler function to ensure</ span >
82
+ < span class ="sd "> that the flask.request context is available.</ span >
83
+
84
+ < span class ="sd "> >>> from flask import Flask</ span >
85
+ < span class ="sd "> >>> from flaskstream2py.flask_request_reader import FlaskRequestReader</ span >
86
+ < span class ="sd "> >>> app = Flask(__name__)</ span >
87
+
88
+ < span class ="sd "> >>> def toy_callback(b: bytes, n_bytes_to_show=10):</ span >
89
+ < span class ="sd "> ... print(f"Read {len(b)} bytes. First five {b[:n_bytes_to_show]}")</ span >
90
+
91
+ < span class ="sd "> >>> @app.route('/', methods=['POST'])</ span >
92
+ < span class ="sd "> ... def handle_stream():</ span >
93
+ < span class ="sd "> ... reader = FlaskRequestReader()</ span >
94
+ < span class ="sd "> ... with reader.open():</ span >
95
+ < span class ="sd "> ... while True:</ span >
96
+ < span class ="sd "> ... chk = reader.read()</ span >
97
+ < span class ="sd "> ... toy_callback(chk)</ span >
98
+
99
+ < span class ="sd "> """</ span >
100
+
101
+ < span class ="n "> _request</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span >
102
+ < span class ="n "> _chk_size</ span > < span class ="o "> =</ span > < span class ="mi "> 2048</ span >
103
+
104
+ < span class ="k "> def</ span > < span class ="fm "> __init__</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> chk_size</ span > < span class ="o "> =</ span > < span class ="mi "> 2048</ span > < span class ="p "> ):</ span >
105
+ < span class ="sd "> """</ span >
106
+ < span class ="sd "> :param chk_size: Specifies the chunk size to read (default 2048 bytes)</ span >
107
+ < span class ="sd "> """</ span >
108
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _chk_size</ span > < span class ="o "> =</ span > < span class ="n "> chk_size</ span >
109
+ < span class ="k "> pass</ span >
110
+
111
+ < span class ="nd "> @property</ span >
112
+ < span class ="k "> def</ span > < span class ="nf "> info</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="nb "> dict</ span > < span class ="p "> :</ span >
113
+ < span class ="sd "> """</ span >
114
+ < span class ="sd "> Returns the __init__ arguments for the instance.</ span >
115
+
116
+ < span class ="sd "> :return: dict</ span >
117
+ < span class ="sd "> """</ span >
118
+ < span class ="n "> _info</ span > < span class ="o "> =</ span > < span class ="p "> {</ span > < span class ="s1 "> 'chk_size'</ span > < span class ="p "> :</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _chk_size</ span > < span class ="p "> }</ span >
119
+ < span class ="k "> return</ span > < span class ="n "> _info</ span >
120
+
121
+ < div class ="viewcode-block " id ="FlaskRequestReader.key "> < a class ="viewcode-back " href ="../../module_docs/flaskstream2py/flask_request_reader.html#flaskstream2py.flask_request_reader.FlaskRequestReader.key "> [docs]</ a > < span class ="k "> def</ span > < span class ="nf "> key</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> data</ span > < span class ="p "> ):</ span >
122
+ < span class ="k "> return</ span > < span class ="n "> data</ span > </ div >
123
+
124
+ < div class ="viewcode-block " id ="FlaskRequestReader.open "> < a class ="viewcode-back " href ="../../module_docs/flaskstream2py/flask_request_reader.html#flaskstream2py.flask_request_reader.FlaskRequestReader.open "> [docs]</ a > < span class ="k "> def</ span > < span class ="nf "> open</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ):</ span >
125
+ < span class ="k "> try</ span > < span class ="p "> :</ span >
126
+ < span class ="kn "> from</ span > < span class ="nn "> flask</ span > < span class ="kn "> import</ span > < span class ="n "> request</ span >
127
+
128
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _request</ span > < span class ="o "> =</ span > < span class ="n "> request</ span >
129
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _stream</ span > < span class ="o "> =</ span > < span class ="n "> request</ span > < span class ="o "> .</ span > < span class ="n "> stream</ span >
130
+ < span class ="k "> except</ span > < span class ="p "> :</ span >
131
+ < span class ="k "> raise</ span > < span class ="ne "> ModuleNotFoundError</ span > < span class ="p "> (</ span >
132
+ < span class ="s1 "> 'FlaskRequestReader requires flask to be installed'</ span >
133
+ < span class ="p "> )</ span > </ div >
134
+
135
+ < div class ="viewcode-block " id ="FlaskRequestReader.close "> < a class ="viewcode-back " href ="../../module_docs/flaskstream2py/flask_request_reader.html#flaskstream2py.flask_request_reader.FlaskRequestReader.close "> [docs]</ a > < span class ="k "> def</ span > < span class ="nf "> close</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ):</ span >
136
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _request</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span >
137
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _stream</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > </ div >
138
+
139
+ < div class ="viewcode-block " id ="FlaskRequestReader.read "> < a class ="viewcode-back " href ="../../module_docs/flaskstream2py/flask_request_reader.html#flaskstream2py.flask_request_reader.FlaskRequestReader.read "> [docs]</ a > < span class ="k "> def</ span > < span class ="nf "> read</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ):</ span >
140
+ < span class ="sd "> """Reads raw bytes if the request body is not finished yet.</ span >
141
+ < span class ="sd "> Raises a StopIteration exception if the request has finished.</ span >
142
+ < span class ="sd "> """</ span >
143
+ < span class ="n "> data</ span > < span class ="o "> =</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _stream</ span > < span class ="o "> .</ span > < span class ="n "> read</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _chk_size</ span > < span class ="p "> )</ span >
144
+ < span class ="k "> if</ span > < span class ="ow "> not</ span > < span class ="nb "> len</ span > < span class ="p "> (</ span > < span class ="n "> data</ span > < span class ="p "> ):</ span >
145
+ < span class ="k "> raise</ span > < span class ="ne "> StopIteration</ span > < span class ="p "> ()</ span >
146
+ < span class ="k "> return</ span > < span class ="n "> data</ span > </ div > </ div >
147
+ </ pre > </ div >
148
+
149
+ </ div >
150
+ </ div >
151
+ < footer >
152
+
153
+ < hr />
154
+
155
+ < div role ="contentinfo ">
156
+ < p > © Copyright NO COPYRIGHT.</ p >
157
+ </ div >
158
+
159
+ Built with < a href ="https://www.sphinx-doc.org/ "> Sphinx</ a > using a
160
+ < a href ="https://github.com/readthedocs/sphinx_rtd_theme "> theme</ a >
161
+ provided by < a href ="https://readthedocs.org "> Read the Docs</ a > .
162
+
163
+
164
+ </ footer >
165
+ </ div >
166
+ </ div >
167
+ </ section >
168
+ </ div >
169
+ < script >
170
+ jQuery ( function ( ) {
171
+ SphinxRtdTheme . Navigation . enable ( true ) ;
172
+ } ) ;
173
+ </ script >
174
+
175
+ </ body >
176
+ </ html >
0 commit comments