horsemeat 2.25.0__tar.gz → 2.26.1__tar.gz
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.
- {horsemeat-2.25.0 → horsemeat-2.26.1}/PKG-INFO +6 -1
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/__init__.py +35 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/version.py +1 -1
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/webapp/handler.py +6 -29
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/webapp/request.py +16 -3
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat.egg-info/PKG-INFO +6 -1
- {horsemeat-2.25.0 → horsemeat-2.26.1}/MANIFEST.in +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/README +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/configwrapper.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/model/__init__.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/model/newsmessage.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/model/session.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/model/user.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/pg.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/scripts/make-frippery-project +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/tests/__init__.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/tests/test_configwrapper.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/webapp/__init__.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/webapp/bogusrequest.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/webapp/dispatcher.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/webapp/framework_templates/__init__.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/webapp/frameworkhandlers.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/webapp/response.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat/webapp/scrubber.py +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat.egg-info/SOURCES.txt +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat.egg-info/dependency_links.txt +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat.egg-info/requires.txt +1 -1
- {horsemeat-2.25.0 → horsemeat-2.26.1}/horsemeat.egg-info/top_level.txt +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/requirements.txt +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/setup.cfg +0 -0
- {horsemeat-2.25.0 → horsemeat-2.26.1}/setup.py +0 -0
@@ -1,8 +1,13 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: horsemeat
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.26.1
|
4
4
|
Summary: Web framework for the damned. The mad.
|
5
5
|
Home-page: https://github.com/216software/horsemeat
|
6
6
|
Author: 216 Software, LLC
|
7
7
|
Author-email: info@216software.com
|
8
|
+
License: UNKNOWN
|
9
|
+
Platform: UNKNOWN
|
8
10
|
Classifier: Programming Language :: Python :: 3
|
11
|
+
|
12
|
+
UNKNOWN
|
13
|
+
|
@@ -55,3 +55,38 @@ fancyjsondumps = functools.partial(
|
|
55
55
|
sort_keys=True,
|
56
56
|
indent=4,
|
57
57
|
separators=(',', ': '))
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
class CookieWrapper:
|
62
|
+
|
63
|
+
"""
|
64
|
+
This CookieWrapper allows us to be backwards compatible with https
|
65
|
+
SimpleCookie.
|
66
|
+
|
67
|
+
We need to switch to werkzeug cookie because google and facebook
|
68
|
+
have recently been using malformed cookies, which breaks the reading
|
69
|
+
of our cookies
|
70
|
+
|
71
|
+
"""
|
72
|
+
|
73
|
+
|
74
|
+
def __repr__(self):
|
75
|
+
return str(self._cookies)
|
76
|
+
|
77
|
+
def __init__(self, cookie_dict):
|
78
|
+
self._cookies = cookie_dict
|
79
|
+
|
80
|
+
def __getitem__(self, key):
|
81
|
+
return MockMorsel(self._cookies[key])
|
82
|
+
|
83
|
+
def __contains__(self, key):
|
84
|
+
return key in self._cookies
|
85
|
+
|
86
|
+
def get(self, key, default=None):
|
87
|
+
value = self._cookies.get(key, default)
|
88
|
+
return MockMorsel(value) if value is not None else None
|
89
|
+
|
90
|
+
class MockMorsel:
|
91
|
+
def __init__(self, value):
|
92
|
+
self.value = value
|
@@ -285,34 +285,6 @@ class Handler(object):
|
|
285
285
|
|
286
286
|
pass
|
287
287
|
|
288
|
-
@staticmethod
|
289
|
-
@decorator.decorator
|
290
|
-
def only_allow_superusers(handle_method, self, req):
|
291
|
-
|
292
|
-
"""
|
293
|
-
Add this to a handle method like this::
|
294
|
-
|
295
|
-
@Handler.only_allow_superusers
|
296
|
-
def handle(self, req):
|
297
|
-
...
|
298
|
-
|
299
|
-
And then, if the request isn't from a signed-in superuser,
|
300
|
-
they'll get a JSON reply below.
|
301
|
-
|
302
|
-
If the request is from a signed-in superuser, then your handle
|
303
|
-
method is normal.
|
304
|
-
"""
|
305
|
-
|
306
|
-
if not req.user or not req.user.is_superuser:
|
307
|
-
|
308
|
-
return Response.json(dict(
|
309
|
-
message="Sorry, superusers only!",
|
310
|
-
success=False,
|
311
|
-
reply_timestamp=datetime.datetime.now()))
|
312
|
-
|
313
|
-
else:
|
314
|
-
return handle_method(self, req)
|
315
|
-
|
316
288
|
@property
|
317
289
|
def four_zero_four_template(self):
|
318
290
|
return 'framework_templates/404.html'
|
@@ -335,7 +307,7 @@ class Handler(object):
|
|
335
307
|
they'll get a JSON reply that says nope.
|
336
308
|
|
337
309
|
If the request is from a signed-in user, then your handle
|
338
|
-
method
|
310
|
+
method runs like normal.
|
339
311
|
"""
|
340
312
|
|
341
313
|
if not req.user:
|
@@ -348,6 +320,8 @@ class Handler(object):
|
|
348
320
|
|
349
321
|
resp.status = '401 UNAUTHORIZED'
|
350
322
|
|
323
|
+
return resp
|
324
|
+
|
351
325
|
elif not req.user.is_superuser:
|
352
326
|
|
353
327
|
resp = self.Response.json(dict(
|
@@ -361,6 +335,9 @@ class Handler(object):
|
|
361
335
|
return resp
|
362
336
|
|
363
337
|
else:
|
338
|
+
|
339
|
+
log.debug("Returning...")
|
340
|
+
|
364
341
|
return handler_method(self, req)
|
365
342
|
|
366
343
|
@staticmethod
|
@@ -15,7 +15,10 @@ import urllib.parse
|
|
15
15
|
import warnings
|
16
16
|
import wsgiref.util
|
17
17
|
|
18
|
+
from horsemeat import CookieWrapper
|
19
|
+
|
18
20
|
from werkzeug.wrappers import Request as WerkzeugRequest
|
21
|
+
from werkzeug.http import parse_cookie
|
19
22
|
|
20
23
|
log = logging.getLogger(__name__)
|
21
24
|
|
@@ -94,13 +97,23 @@ class Request(collections.abc.MutableMapping):
|
|
94
97
|
self['parsed_QS'] = parsed_qs
|
95
98
|
return parsed_qs
|
96
99
|
|
100
|
+
|
97
101
|
@property
|
98
102
|
def parsed_cookie(self):
|
99
103
|
|
104
|
+
"""
|
105
|
+
Switched from Simple Cookie to werkzeug cookie, with a cookie
|
106
|
+
wrapper to maintain functionality
|
107
|
+
"""
|
108
|
+
|
100
109
|
if self.HTTP_COOKIE:
|
101
|
-
c = http.cookies.SimpleCookie()
|
102
|
-
c.load(self.HTTP_COOKIE)
|
103
|
-
|
110
|
+
#c = http.cookies.SimpleCookie()
|
111
|
+
#c.load(self.HTTP_COOKIE)
|
112
|
+
|
113
|
+
c = parse_cookie(self.HTTP_COOKIE)
|
114
|
+
if c:
|
115
|
+
return CookieWrapper(c)
|
116
|
+
|
104
117
|
|
105
118
|
@property
|
106
119
|
def body(self):
|
@@ -1,8 +1,13 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: horsemeat
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.26.1
|
4
4
|
Summary: Web framework for the damned. The mad.
|
5
5
|
Home-page: https://github.com/216software/horsemeat
|
6
6
|
Author: 216 Software, LLC
|
7
7
|
Author-email: info@216software.com
|
8
|
+
License: UNKNOWN
|
9
|
+
Platform: UNKNOWN
|
8
10
|
Classifier: Programming Language :: Python :: 3
|
11
|
+
|
12
|
+
UNKNOWN
|
13
|
+
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|