fresco 3.5.0__py3-none-any.whl → 3.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fresco/__init__.py +55 -56
- fresco/core.py +33 -23
- fresco/decorators.py +6 -3
- fresco/defaults.py +1 -0
- fresco/middleware.py +4 -4
- fresco/multidict.py +35 -51
- fresco/options.py +146 -75
- fresco/request.py +155 -34
- fresco/requestcontext.py +3 -0
- fresco/response.py +12 -9
- fresco/routeargs.py +23 -9
- fresco/routing.py +74 -56
- fresco/static.py +1 -1
- fresco/subrequests.py +1 -1
- fresco/tests/test_core.py +4 -4
- fresco/tests/test_multidict.py +2 -2
- fresco/tests/test_options.py +40 -16
- fresco/tests/test_request.py +21 -10
- fresco/tests/test_routing.py +36 -33
- fresco/tests/util/test_http.py +1 -3
- fresco/tests/util/test_urls.py +20 -0
- fresco/types.py +28 -2
- fresco/util/cache.py +2 -1
- fresco/util/http.py +66 -46
- fresco/util/urls.py +44 -12
- fresco/util/wsgi.py +15 -14
- {fresco-3.5.0.dist-info → fresco-3.7.0.dist-info}/METADATA +3 -2
- fresco-3.7.0.dist-info/RECORD +58 -0
- {fresco-3.5.0.dist-info → fresco-3.7.0.dist-info}/WHEEL +1 -1
- fresco/typing.py +0 -17
- fresco-3.5.0.dist-info/RECORD +0 -58
- {fresco-3.5.0.dist-info → fresco-3.7.0.dist-info/licenses}/LICENSE.txt +0 -0
- {fresco-3.5.0.dist-info → fresco-3.7.0.dist-info}/top_level.txt +0 -0
fresco/util/urls.py
CHANGED
|
@@ -23,15 +23,17 @@ from typing import List
|
|
|
23
23
|
from urllib.parse import quote_plus
|
|
24
24
|
from urllib.parse import urlparse
|
|
25
25
|
from urllib.parse import urlunparse
|
|
26
|
+
from urllib.parse import urlencode
|
|
27
|
+
from urllib.parse import parse_qsl
|
|
26
28
|
import posixpath
|
|
27
29
|
import re
|
|
28
30
|
import typing as t
|
|
29
31
|
|
|
30
|
-
import
|
|
32
|
+
from fresco.defaults import DEFAULT_CHARSET
|
|
31
33
|
from fresco.multidict import MultiDict
|
|
32
34
|
from fresco.types import QuerySpec
|
|
33
35
|
|
|
34
|
-
__all__ = "join_path", "url_join", "strip_trailing_slashes", "normpath"
|
|
36
|
+
__all__ = "join_path", "url_join", "strip_trailing_slashes", "normpath", "add_query"
|
|
35
37
|
|
|
36
38
|
|
|
37
39
|
def join_path(a, b):
|
|
@@ -174,13 +176,13 @@ def make_query(
|
|
|
174
176
|
data: QuerySpec = [],
|
|
175
177
|
separator: str = "&",
|
|
176
178
|
charset: t.Optional[str] = None,
|
|
177
|
-
**kwargs,
|
|
179
|
+
**kwargs: t.Any,
|
|
178
180
|
) -> str:
|
|
179
181
|
"""
|
|
180
182
|
Return a query string formed from the given dictionary data.
|
|
181
183
|
|
|
182
184
|
If no encoding is given, unicode values are encoded using the character set
|
|
183
|
-
specified by ``fresco.DEFAULT_CHARSET``.
|
|
185
|
+
specified by ``fresco.defaults.DEFAULT_CHARSET``.
|
|
184
186
|
|
|
185
187
|
Basic usage::
|
|
186
188
|
|
|
@@ -210,46 +212,48 @@ def make_query(
|
|
|
210
212
|
:param charset: encoding to be used for unicode values
|
|
211
213
|
:rtype: str
|
|
212
214
|
"""
|
|
213
|
-
items: t.Iterable[
|
|
215
|
+
items: t.Iterable[tuple[str, t.Any]]
|
|
214
216
|
if isinstance(data, MultiDict):
|
|
215
217
|
items = data.allitems()
|
|
216
218
|
elif isinstance(data, Mapping):
|
|
217
|
-
items = data.items()
|
|
219
|
+
items = data.items() # type: ignore
|
|
218
220
|
else:
|
|
219
221
|
items = data
|
|
220
222
|
if kwargs:
|
|
221
223
|
items = chain(items, kwargs.items())
|
|
222
224
|
|
|
223
225
|
if charset is None:
|
|
224
|
-
charset =
|
|
226
|
+
charset = DEFAULT_CHARSET
|
|
225
227
|
|
|
226
|
-
pairs:
|
|
228
|
+
pairs: list[str] = []
|
|
227
229
|
append = pairs.append
|
|
228
230
|
for k, v in items:
|
|
229
231
|
if isinstance(v, (str, bytes)):
|
|
230
232
|
append(f"{quote_plus(k, charset)}={quote_plus(v, charset)}")
|
|
233
|
+
elif v is None:
|
|
234
|
+
pass
|
|
231
235
|
elif hasattr(v, "__iter__"):
|
|
232
236
|
for v in v:
|
|
233
237
|
append(f"{quote_plus(k, charset)}={quote_plus(str(v), charset)}")
|
|
234
|
-
|
|
238
|
+
else:
|
|
235
239
|
append(f"{quote_plus(k, charset)}={quote_plus(str(v), charset)}")
|
|
236
240
|
return separator.join(pairs)
|
|
237
241
|
|
|
238
242
|
|
|
239
243
|
def _qs_frag(key, value, charset=None):
|
|
240
|
-
"""
|
|
244
|
+
"""
|
|
241
245
|
Return a fragment of a query string in the format 'key=value'::
|
|
242
246
|
|
|
243
247
|
>>> _qs_frag('search-by', 'author, editor')
|
|
244
248
|
'search-by=author%2C+editor'
|
|
245
249
|
|
|
246
250
|
If no encoding is specified, unicode values are encoded using the character
|
|
247
|
-
set specified by ``fresco.DEFAULT_CHARSET``.
|
|
251
|
+
set specified by ``fresco.defaults.DEFAULT_CHARSET``.
|
|
248
252
|
|
|
249
253
|
:rtype: str
|
|
250
254
|
"""
|
|
251
255
|
if charset is None:
|
|
252
|
-
charset =
|
|
256
|
+
charset = DEFAULT_CHARSET
|
|
253
257
|
|
|
254
258
|
key = str(key).encode(charset)
|
|
255
259
|
value = str(value).encode(charset)
|
|
@@ -327,3 +331,31 @@ def is_safe_url(
|
|
|
327
331
|
or (scheme == "" and netloc == "")
|
|
328
332
|
or (scheme == "" and netloc in allowed_hosts)
|
|
329
333
|
)
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
def add_query(
|
|
337
|
+
url: str,
|
|
338
|
+
data: t.Union[t.Sequence[tuple[str, t.Any]], t.Mapping[str, t.Any]] = [],
|
|
339
|
+
**kwargs: t.Any,
|
|
340
|
+
) -> str:
|
|
341
|
+
"""
|
|
342
|
+
Return the given URL with the given query data appended
|
|
343
|
+
|
|
344
|
+
:param url:
|
|
345
|
+
The base URL
|
|
346
|
+
:param data:
|
|
347
|
+
Optional data items, supplied either as a mapping or list of (key,
|
|
348
|
+
value) tuples
|
|
349
|
+
:param kwargs:
|
|
350
|
+
Query data supplied as keyword arguments
|
|
351
|
+
"""
|
|
352
|
+
parsed = urlparse(url)
|
|
353
|
+
return urlunparse(
|
|
354
|
+
parsed._replace(
|
|
355
|
+
query=urlencode(
|
|
356
|
+
parse_qsl(parsed.query)
|
|
357
|
+
+ list(dict(data).items())
|
|
358
|
+
+ list(kwargs.items())
|
|
359
|
+
)
|
|
360
|
+
)
|
|
361
|
+
)
|
fresco/util/wsgi.py
CHANGED
|
@@ -22,15 +22,16 @@ from io import BytesIO
|
|
|
22
22
|
from urllib.parse import unquote
|
|
23
23
|
from urllib.parse import urlparse
|
|
24
24
|
from typing import List
|
|
25
|
-
|
|
26
|
-
from typing import Tuple
|
|
25
|
+
import typing as t
|
|
27
26
|
import sys
|
|
28
27
|
|
|
29
|
-
from fresco.
|
|
30
|
-
from fresco.
|
|
31
|
-
from fresco.
|
|
28
|
+
from fresco.types import WSGIApplication
|
|
29
|
+
from fresco.types import WriteCallable
|
|
30
|
+
from fresco.types import OptionalExcInfo
|
|
31
|
+
from fresco.types import HeaderList
|
|
32
32
|
|
|
33
33
|
logger = logging.getLogger(__name__)
|
|
34
|
+
T = t.TypeVar("T")
|
|
34
35
|
|
|
35
36
|
|
|
36
37
|
__all__ = [
|
|
@@ -102,7 +103,6 @@ REQUEST_HEADER_NAMES = {
|
|
|
102
103
|
"dnt": "DNT",
|
|
103
104
|
"x_forwarded_for": "X-Forwarded-For",
|
|
104
105
|
"x_forwarded_host": "X-Forwarded-Host",
|
|
105
|
-
"x_forwarded_host": "X-Forwarded-Host",
|
|
106
106
|
"x_forwarded_proto": "X-Forwarded-Proto",
|
|
107
107
|
"front_end_https": "Front-End-Https",
|
|
108
108
|
"x_http_method_override": "X-Http-Method-Override",
|
|
@@ -245,8 +245,8 @@ class StartResponseWrapper(object):
|
|
|
245
245
|
self.exc_info = None
|
|
246
246
|
|
|
247
247
|
|
|
248
|
-
class ClosingIterator(
|
|
249
|
-
"""
|
|
248
|
+
class ClosingIterator(t.Generic[T]):
|
|
249
|
+
"""
|
|
250
250
|
Wrap a WSGI iterator to allow additional close functions to be called on
|
|
251
251
|
application exit.
|
|
252
252
|
|
|
@@ -275,7 +275,7 @@ class ClosingIterator(object):
|
|
|
275
275
|
|
|
276
276
|
__slots__ = ("_iterable", "_next", "_close_funcs", "_closed")
|
|
277
277
|
|
|
278
|
-
def __init__(self, iterable, *close_funcs):
|
|
278
|
+
def __init__(self, iterable: t.Iterable[T], *close_funcs: t.Callable[[], None]):
|
|
279
279
|
"""
|
|
280
280
|
Initialize a ``ClosingIterator`` to wrap iterable ``iterable``, and
|
|
281
281
|
call any functions listed in ``*close_funcs`` on the instance's
|
|
@@ -406,19 +406,20 @@ def make_environ(url="/", environ=None, wsgi_input=b"", **kwargs):
|
|
|
406
406
|
|
|
407
407
|
|
|
408
408
|
def apply_request(
|
|
409
|
-
request, wsgicallable:
|
|
410
|
-
) ->
|
|
409
|
+
request, wsgicallable: WSGIApplication
|
|
410
|
+
) -> tuple[str, HeaderList, OptionalExcInfo, list[bytes]]:
|
|
411
411
|
"""
|
|
412
412
|
Execute ``wsgicallable`` with the given request, exhaust and close the
|
|
413
413
|
content iterator and return the result.
|
|
414
414
|
"""
|
|
415
415
|
|
|
416
|
-
_start_response_result:
|
|
416
|
+
_start_response_result: list[tuple[str, HeaderList, OptionalExcInfo]] = []
|
|
417
417
|
|
|
418
418
|
def start_response(
|
|
419
|
-
status: str, headers: HeaderList, exc_info:
|
|
420
|
-
):
|
|
419
|
+
status: str, headers: HeaderList, exc_info: OptionalExcInfo = None
|
|
420
|
+
) -> WriteCallable:
|
|
421
421
|
_start_response_result.append((status, headers, exc_info))
|
|
422
|
+
return lambda s: None
|
|
422
423
|
|
|
423
424
|
contentiter = wsgicallable(request.environ, start_response)
|
|
424
425
|
assert len(_start_response_result) == 1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: fresco
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.7.0
|
|
4
4
|
Summary: A Web/WSGI micro-framework
|
|
5
5
|
Author-email: Oliver Cope <oliver@redgecko.org>
|
|
6
6
|
License: Apache
|
|
@@ -16,6 +16,7 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
|
16
16
|
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI
|
|
17
17
|
Description-Content-Type: text/x-rst
|
|
18
18
|
License-File: LICENSE.txt
|
|
19
|
+
Dynamic: license-file
|
|
19
20
|
|
|
20
21
|
Fresco, a web micro-framework for Python
|
|
21
22
|
========================================
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
fresco/__init__.py,sha256=Jo5gW2Xce2hmtXhfaXXJR4aBW1KFYb0Murx2JfIo_E8,3537
|
|
2
|
+
fresco/cookie.py,sha256=Qnx8yOjU4LUJ1fqi7YvqbhAA01rCsclJGl_fxI68slw,7055
|
|
3
|
+
fresco/core.py,sha256=bqGDgm4OH46j6HqnC5nJyn9n1dQw-I1ntUY8dIpeO_M,26988
|
|
4
|
+
fresco/decorators.py,sha256=JL4MlsJz4RWRAuOCCB3fx3rtd-E1CvwO2MD7bf94yHM,3324
|
|
5
|
+
fresco/defaults.py,sha256=YStD4MPcCtq-fREFoupSaAS0SY8lH1oEnKDONlR86zs,26
|
|
6
|
+
fresco/exceptions.py,sha256=KE-LoYUGnho6KltzkU6cnm9vUiUhAiDIjPqn5ba-YCA,4410
|
|
7
|
+
fresco/middleware.py,sha256=TH1I5NthLDwnOdluOSFpP_9SQQYhYqh-8lGuAXT74dc,4811
|
|
8
|
+
fresco/multidict.py,sha256=lKRpSP1XNghLp2-i5cXPfPQxuoJclHpNkWk91F4GI1o,13152
|
|
9
|
+
fresco/options.py,sha256=X66xZV45vWIyQR2GwFTLgV2QGoXOfLhHURWQ_edoxmY,17024
|
|
10
|
+
fresco/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
fresco/request.py,sha256=XJ9SJAe9zILfWt-YB4zxjIrjECrLYzyxjZ9xk8h4tAw,30024
|
|
12
|
+
fresco/requestcontext.py,sha256=_AJ7DMT5vlIO4Uc-WlRsYJdRge4WRO7ygibKImOS0iM,3601
|
|
13
|
+
fresco/response.py,sha256=ilJ_Wbp7LVP1E6bXp0iAy1o6D0hboXtpLvm2ZCmUGmk,37277
|
|
14
|
+
fresco/routeargs.py,sha256=E-LQutqg6AojtagZojF7NeMjFBk9joRNMGo842IMTBk,10598
|
|
15
|
+
fresco/routing.py,sha256=r_vPD1xc7brOrbw1iO0X2IP7WX5wlIWlcXwcNndU1ZY,61259
|
|
16
|
+
fresco/static.py,sha256=rNQz_8-PVhSGup_w-HycqatLEbFes7VSlnNQ0rz24pU,2529
|
|
17
|
+
fresco/subrequests.py,sha256=fOG9Bd3w9Ova0S3qv5ssxQ_otrSxaFcKG7TOy6CxNCg,11068
|
|
18
|
+
fresco/types.py,sha256=PbXppEcckX4ohU8npteU1mCkHOuXQxrnqxk1RNEFXkE,797
|
|
19
|
+
fresco/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
fresco/tests/fixtures.py,sha256=eyo2zPivB3fItDkrJqWnOCvIS_A1q1JEhT4AutAB--o,1871
|
|
21
|
+
fresco/tests/test_cookie.py,sha256=HTLmNCjcPoZDeFnZAzY3lJPeduzgU4mi9C-74eSQCec,2171
|
|
22
|
+
fresco/tests/test_core.py,sha256=-eibrVd8UqPqTvcar54kt24m6_lX3mxXR8L7v-WDrWw,34003
|
|
23
|
+
fresco/tests/test_decorators.py,sha256=VFXHo1gm2jldQXeaEF3NNo5fnpdJ-LXc8-vNymPJKTQ,1480
|
|
24
|
+
fresco/tests/test_exceptions.py,sha256=R0Tn86m33iTKecZ69TgH4CqY9XSFP0FsLMH10O5Jth8,973
|
|
25
|
+
fresco/tests/test_middleware.py,sha256=D_sWfX-w3bhItOm54nB_cuYPGoWopISvZCFIuMX68cU,3137
|
|
26
|
+
fresco/tests/test_multidict.py,sha256=uIa1cu5DMAukX2nLOjTiB12oh0icBeSPfsUnqsu85m0,7577
|
|
27
|
+
fresco/tests/test_options.py,sha256=394MLLTyf4vmfkUyqQ8EGIiTTJsQh7P9M6eta2wgUbw,12764
|
|
28
|
+
fresco/tests/test_request.py,sha256=wGDwxCZMbzyGgQJwM2Nlsf0ogcGenXN3srO8dQEhE24,16777
|
|
29
|
+
fresco/tests/test_requestcontext.py,sha256=t8hm-lzIk85ryb3sdlpVoPQyLDWpCjB86dg8nVG1yRw,3115
|
|
30
|
+
fresco/tests/test_response.py,sha256=MrhHIDg81pJlTeEcn2rGtU-i59s1KzEccF81u4Up6xs,8934
|
|
31
|
+
fresco/tests/test_routeargs.py,sha256=VMWUbrXegTLN9Tx2AcrpbjAAEaxAANzkcy02SmpFOmY,8162
|
|
32
|
+
fresco/tests/test_routing.py,sha256=NBBJ6UcsdSoUAFNgUtCC0lEEeKB6JxS8XyrUeef25M8,40018
|
|
33
|
+
fresco/tests/test_static.py,sha256=y73dqzE2flpACQ_dvNhDzk_WlvNQfkhYF_8YY4MMGDo,4686
|
|
34
|
+
fresco/tests/test_subrequests.py,sha256=7rluJnw-elXRXfrzvAQvGBHRBU93zwnL827mTxBGd3Y,7909
|
|
35
|
+
fresco/tests/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
+
fresco/tests/util/form_data.py,sha256=TalOuv4BGM3JNrf14tE47o9wAwZ7jA1CvRDnGJFifno,10570
|
|
37
|
+
fresco/tests/util/test_common.py,sha256=NvKX8KIAUki7b2kDLILWqARbOQmR3XyInLlbcwFEhiU,1117
|
|
38
|
+
fresco/tests/util/test_http.py,sha256=mdHDc-4m9sMNkEgHToIsgFuSSXQzNUcYSehPehYvJYo,10748
|
|
39
|
+
fresco/tests/util/test_security.py,sha256=MtpDDKyDhAeRT766Lt3peOv4Jj55TM1lvJk1_5TKaes,1492
|
|
40
|
+
fresco/tests/util/test_urls.py,sha256=U12T9MlP7zCpf-ufoyaZI5nAswi0xCSBOxHjHB2K_0I,8320
|
|
41
|
+
fresco/tests/util/test_wsgi.py,sha256=VsHUCo8yck_40nsYm-H-M0R8QYEE8JcboeGPbcrzsO0,3038
|
|
42
|
+
fresco/util/__init__.py,sha256=mJkaZzvYgBnxsBAGv8y_P1yzonHqWgw6VF2Zs4rmJEA,7
|
|
43
|
+
fresco/util/cache.py,sha256=0xINmBecCYo3h5-zU_yRyJeWmROygE3pO9w9Y3ZONcs,1661
|
|
44
|
+
fresco/util/common.py,sha256=8lvrjhELvYsUWxu7DZi1OJcUOFk2ILYndNsnaS0IqjM,1258
|
|
45
|
+
fresco/util/contentencodings.py,sha256=cCP-nSlXiBAZWoJdlnrQREi9jYRu8UY327bQdfBNlkg,5527
|
|
46
|
+
fresco/util/file.py,sha256=Vp7qJTo9RouUeHq25ExyBGkGTHuW-9Q7D_0GB54DFe8,1383
|
|
47
|
+
fresco/util/http.py,sha256=hxMKjF6FWvugDvToRqSscDhCD1KdVY1bmV4Unwd_Uhs,22672
|
|
48
|
+
fresco/util/io.py,sha256=xxwDNJOcewY8lAR4Ce3cmB_zlrys8JGsESgwGWE198Y,1289
|
|
49
|
+
fresco/util/object.py,sha256=FjYNfPHzvBqq1rn0Y6As-2AVZ_SZOjH-lrSy4EbYmHY,370
|
|
50
|
+
fresco/util/security.py,sha256=nXEdoCak_2c4OA1L1wGwhZygS22s2fzwR0Kp-DdwKZg,1058
|
|
51
|
+
fresco/util/textproc.py,sha256=e5jLTofKCqdm6_Fy8XOyR43AJr5APtL59Kd8cNA9PrQ,2309
|
|
52
|
+
fresco/util/urls.py,sha256=V6-s2WgeARkEcuzpwqtiM8ebOXe5-mNUKOJ8N9LNBHA,10051
|
|
53
|
+
fresco/util/wsgi.py,sha256=RYw4KeOUjzzPOL_HhEtgLyCngofjMdAT8BTLOSKU6KA,13021
|
|
54
|
+
fresco-3.7.0.dist-info/licenses/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
55
|
+
fresco-3.7.0.dist-info/METADATA,sha256=bqLRh85Q1K4S3Orlpyl-1vUXemvnWGrx1Y-qKtymOI0,1571
|
|
56
|
+
fresco-3.7.0.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
|
|
57
|
+
fresco-3.7.0.dist-info/top_level.txt,sha256=p_1aMce5Shjq9fIfdbB-aN8wCDhjF_iYnn98bUebbII,7
|
|
58
|
+
fresco-3.7.0.dist-info/RECORD,,
|
fresco/typing.py
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
from types import TracebackType
|
|
2
|
-
from typing import Any
|
|
3
|
-
from typing import Callable
|
|
4
|
-
from typing import Iterable
|
|
5
|
-
|
|
6
|
-
HeaderList = list[tuple[str, str]]
|
|
7
|
-
HeadersList = HeaderList
|
|
8
|
-
WSGIEnviron = dict[str, Any]
|
|
9
|
-
StartResponse = Callable[[str, HeaderList], None]
|
|
10
|
-
WSGICallable = Callable[
|
|
11
|
-
[
|
|
12
|
-
WSGIEnviron,
|
|
13
|
-
StartResponse,
|
|
14
|
-
],
|
|
15
|
-
Iterable[bytes]
|
|
16
|
-
]
|
|
17
|
-
ExcInfoTuple = tuple[type, BaseException, TracebackType]
|
fresco-3.5.0.dist-info/RECORD
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
fresco/__init__.py,sha256=qd3y9P7W77xtuDx9WtYQt7wIHeRNUobog6zq8W4J-zg,3520
|
|
2
|
-
fresco/cookie.py,sha256=Qnx8yOjU4LUJ1fqi7YvqbhAA01rCsclJGl_fxI68slw,7055
|
|
3
|
-
fresco/core.py,sha256=kBf_JY8wqvBSQzxP0pFUr0sOnvUoDltittL-5xDUlC8,26611
|
|
4
|
-
fresco/decorators.py,sha256=84NUpRJ-M7GK6wDl42bmCRSvgoWzCsy1huyvGnSAPPw,3232
|
|
5
|
-
fresco/exceptions.py,sha256=KE-LoYUGnho6KltzkU6cnm9vUiUhAiDIjPqn5ba-YCA,4410
|
|
6
|
-
fresco/middleware.py,sha256=XMpakA1YMZJqwHQyyxgw6TFhecDRTrUSSeNLDEkY8qA,4808
|
|
7
|
-
fresco/multidict.py,sha256=0CaNNIcFnZ1hLk3NExhNvjc_BtK4zVB26L9gP_7MeNM,13362
|
|
8
|
-
fresco/options.py,sha256=gzFzTv6vib16WazRxT1s2xD91f8IRfCGKijx3BbE1gU,15163
|
|
9
|
-
fresco/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
fresco/request.py,sha256=dC7pMg-4Kxa6PcqaaWFL4JviANQotuBjoKwlxZYywRY,27048
|
|
11
|
-
fresco/requestcontext.py,sha256=P-SkKJkKLYVqNiR2zwooRROnSnE2VMj2P2-eD5DW5Qg,3504
|
|
12
|
-
fresco/response.py,sha256=ADKHbtAGyhwtaUJxB7m_1nqVdZRKUryebmG4FDUjZVY,37072
|
|
13
|
-
fresco/routeargs.py,sha256=dxNlqbQ1FrgIY6OCFzcEMdZ0OVyjlMQdQGLmUJgdPYU,10176
|
|
14
|
-
fresco/routing.py,sha256=BfUaC9xD9BL_RqRPMIkMNOdLbhbSgzWSJWooktRoeqc,60515
|
|
15
|
-
fresco/static.py,sha256=9SKQ3P1YFTP45Qiic-ycvkpKRvqIURp1XSzPazTmYLI,2513
|
|
16
|
-
fresco/subrequests.py,sha256=zQlKJRZJVbfkxc0cQp3qoBFZH9pPFq77DgnYAJJvgAI,11052
|
|
17
|
-
fresco/types.py,sha256=UHITRMDoS90s2zV2wNpqLFhRWESfaBAMuQnL4c21mqY,106
|
|
18
|
-
fresco/typing.py,sha256=uQWLElgVCJSZ3X2OkGNu-1ihmPvytyqSLguPB6tm-Pc,412
|
|
19
|
-
fresco/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
-
fresco/tests/fixtures.py,sha256=eyo2zPivB3fItDkrJqWnOCvIS_A1q1JEhT4AutAB--o,1871
|
|
21
|
-
fresco/tests/test_cookie.py,sha256=HTLmNCjcPoZDeFnZAzY3lJPeduzgU4mi9C-74eSQCec,2171
|
|
22
|
-
fresco/tests/test_core.py,sha256=lniN-UslszeRAuWlbBU536LDGTo8Hp2nb8kLebXvim0,34019
|
|
23
|
-
fresco/tests/test_decorators.py,sha256=VFXHo1gm2jldQXeaEF3NNo5fnpdJ-LXc8-vNymPJKTQ,1480
|
|
24
|
-
fresco/tests/test_exceptions.py,sha256=R0Tn86m33iTKecZ69TgH4CqY9XSFP0FsLMH10O5Jth8,973
|
|
25
|
-
fresco/tests/test_middleware.py,sha256=D_sWfX-w3bhItOm54nB_cuYPGoWopISvZCFIuMX68cU,3137
|
|
26
|
-
fresco/tests/test_multidict.py,sha256=uDwDYII0dvVxaEyDO85zRTWlIWw3LO3StzYemJVm0E0,7565
|
|
27
|
-
fresco/tests/test_options.py,sha256=zKJveuxTz4HL9NeQYwe8qaki8WQw65ghhW3cLnXfaVI,11659
|
|
28
|
-
fresco/tests/test_request.py,sha256=hoANrergrohlAeTbQufDMfIbvYURsPyPjCxOVKz7bVo,16389
|
|
29
|
-
fresco/tests/test_requestcontext.py,sha256=t8hm-lzIk85ryb3sdlpVoPQyLDWpCjB86dg8nVG1yRw,3115
|
|
30
|
-
fresco/tests/test_response.py,sha256=MrhHIDg81pJlTeEcn2rGtU-i59s1KzEccF81u4Up6xs,8934
|
|
31
|
-
fresco/tests/test_routeargs.py,sha256=VMWUbrXegTLN9Tx2AcrpbjAAEaxAANzkcy02SmpFOmY,8162
|
|
32
|
-
fresco/tests/test_routing.py,sha256=DkHP518f6UVAuG2pNVAyoyEcc2ej8T-Kw-moqkMB9gI,39851
|
|
33
|
-
fresco/tests/test_static.py,sha256=y73dqzE2flpACQ_dvNhDzk_WlvNQfkhYF_8YY4MMGDo,4686
|
|
34
|
-
fresco/tests/test_subrequests.py,sha256=7rluJnw-elXRXfrzvAQvGBHRBU93zwnL827mTxBGd3Y,7909
|
|
35
|
-
fresco/tests/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
-
fresco/tests/util/form_data.py,sha256=TalOuv4BGM3JNrf14tE47o9wAwZ7jA1CvRDnGJFifno,10570
|
|
37
|
-
fresco/tests/util/test_common.py,sha256=NvKX8KIAUki7b2kDLILWqARbOQmR3XyInLlbcwFEhiU,1117
|
|
38
|
-
fresco/tests/util/test_http.py,sha256=VYcrxKisRhI19AvuZWLuJGdpZo-IN19y4gDUKwuFy0I,10803
|
|
39
|
-
fresco/tests/util/test_security.py,sha256=MtpDDKyDhAeRT766Lt3peOv4Jj55TM1lvJk1_5TKaes,1492
|
|
40
|
-
fresco/tests/util/test_urls.py,sha256=xKiE6oq0bB-9u8kNYlMQmeCwuAKr1KLQovB-i24wKVQ,7643
|
|
41
|
-
fresco/tests/util/test_wsgi.py,sha256=VsHUCo8yck_40nsYm-H-M0R8QYEE8JcboeGPbcrzsO0,3038
|
|
42
|
-
fresco/util/__init__.py,sha256=mJkaZzvYgBnxsBAGv8y_P1yzonHqWgw6VF2Zs4rmJEA,7
|
|
43
|
-
fresco/util/cache.py,sha256=EjzF9EzzDw4U4coOykkJEgh_8HMDpwhEbYKBo_TeOZQ,1609
|
|
44
|
-
fresco/util/common.py,sha256=8lvrjhELvYsUWxu7DZi1OJcUOFk2ILYndNsnaS0IqjM,1258
|
|
45
|
-
fresco/util/contentencodings.py,sha256=cCP-nSlXiBAZWoJdlnrQREi9jYRu8UY327bQdfBNlkg,5527
|
|
46
|
-
fresco/util/file.py,sha256=Vp7qJTo9RouUeHq25ExyBGkGTHuW-9Q7D_0GB54DFe8,1383
|
|
47
|
-
fresco/util/http.py,sha256=6LSzCxr8avha3rRwsU8kUrkHWnQTuOw49mfi1PSBEgo,22199
|
|
48
|
-
fresco/util/io.py,sha256=xxwDNJOcewY8lAR4Ce3cmB_zlrys8JGsESgwGWE198Y,1289
|
|
49
|
-
fresco/util/object.py,sha256=FjYNfPHzvBqq1rn0Y6As-2AVZ_SZOjH-lrSy4EbYmHY,370
|
|
50
|
-
fresco/util/security.py,sha256=nXEdoCak_2c4OA1L1wGwhZygS22s2fzwR0Kp-DdwKZg,1058
|
|
51
|
-
fresco/util/textproc.py,sha256=e5jLTofKCqdm6_Fy8XOyR43AJr5APtL59Kd8cNA9PrQ,2309
|
|
52
|
-
fresco/util/urls.py,sha256=aaVovLyXNlVoGviiLN94ImqXf-LTQs_xooEIyi3LBc4,9195
|
|
53
|
-
fresco/util/wsgi.py,sha256=gllmrw9um9ecs_sFxXy-Uwh7M9YAdcBNw33S63AhB8E,12967
|
|
54
|
-
fresco-3.5.0.dist-info/LICENSE.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
55
|
-
fresco-3.5.0.dist-info/METADATA,sha256=mL1SE-OBfPOlYjc7YBSbt6ftilgaol-pUNAYqt3k0A0,1549
|
|
56
|
-
fresco-3.5.0.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
|
|
57
|
-
fresco-3.5.0.dist-info/top_level.txt,sha256=p_1aMce5Shjq9fIfdbB-aN8wCDhjF_iYnn98bUebbII,7
|
|
58
|
-
fresco-3.5.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|