cherrypy-foundation 1.0.0a1__py3-none-any.whl → 1.0.0a2__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.
- cherrypy_foundation/components/Field.jinja +14 -6
- cherrypy_foundation/components/__init__.py +1 -1
- cherrypy_foundation/error_page.py +18 -15
- cherrypy_foundation/plugins/db.py +34 -8
- cherrypy_foundation/plugins/ldap.py +28 -22
- cherrypy_foundation/plugins/scheduler.py +197 -84
- cherrypy_foundation/plugins/smtp.py +71 -45
- cherrypy_foundation/plugins/tests/test_db.py +2 -2
- cherrypy_foundation/plugins/tests/test_scheduler.py +58 -50
- cherrypy_foundation/plugins/tests/test_smtp.py +9 -6
- cherrypy_foundation/tests/templates/test_form.html +10 -0
- cherrypy_foundation/tests/test_form.py +119 -0
- cherrypy_foundation/tools/auth.py +28 -11
- cherrypy_foundation/tools/auth_mfa.py +10 -13
- cherrypy_foundation/tools/errors.py +1 -1
- cherrypy_foundation/tools/i18n.py +15 -6
- cherrypy_foundation/tools/jinja2.py +15 -12
- cherrypy_foundation/tools/ratelimit.py +5 -9
- cherrypy_foundation/tools/secure_headers.py +0 -4
- cherrypy_foundation/tools/tests/components/Button.jinja +2 -0
- cherrypy_foundation/tools/tests/templates/test_jinja2.html +10 -0
- cherrypy_foundation/tools/tests/templates/test_jinja2_i18n.html +11 -0
- cherrypy_foundation/tools/tests/templates/test_jinjax.html +8 -0
- cherrypy_foundation/tools/tests/test_auth.py +1 -1
- cherrypy_foundation/tools/tests/test_auth_mfa.py +367 -0
- cherrypy_foundation/tools/tests/test_jinja2.py +123 -0
- {cherrypy_foundation-1.0.0a1.dist-info → cherrypy_foundation-1.0.0a2.dist-info}/METADATA +1 -1
- {cherrypy_foundation-1.0.0a1.dist-info → cherrypy_foundation-1.0.0a2.dist-info}/RECORD +31 -23
- {cherrypy_foundation-1.0.0a1.dist-info → cherrypy_foundation-1.0.0a2.dist-info}/WHEEL +0 -0
- {cherrypy_foundation-1.0.0a1.dist-info → cherrypy_foundation-1.0.0a2.dist-info}/licenses/LICENSE.md +0 -0
- {cherrypy_foundation-1.0.0a1.dist-info → cherrypy_foundation-1.0.0a2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# CherryPy Foundation
|
|
2
|
+
# Copyright (C) 2025 IKUS Software
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
import importlib
|
|
17
|
+
from datetime import datetime, timezone
|
|
18
|
+
from unittest import skipUnless
|
|
19
|
+
|
|
20
|
+
import cherrypy
|
|
21
|
+
from cherrypy.test import helper
|
|
22
|
+
from parameterized import parameterized
|
|
23
|
+
|
|
24
|
+
from .. import i18n # noqa
|
|
25
|
+
from .. import jinja2 # noqa
|
|
26
|
+
|
|
27
|
+
HAS_JINJAX = importlib.util.find_spec("jinjax") is not None
|
|
28
|
+
|
|
29
|
+
env = cherrypy.tools.jinja2.create_env(
|
|
30
|
+
package_name=__package__,
|
|
31
|
+
globals={
|
|
32
|
+
'const1': 'STATIC VALUE',
|
|
33
|
+
},
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def extra_processor():
|
|
38
|
+
return {'var2': 'bar'}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@cherrypy.tools.jinja2(env=env, extra_processor=extra_processor)
|
|
42
|
+
class Root:
|
|
43
|
+
|
|
44
|
+
@cherrypy.expose
|
|
45
|
+
@cherrypy.tools.jinja2(template='test_jinja2.html')
|
|
46
|
+
def index(self):
|
|
47
|
+
return {'var1': 'test-jinja2'}
|
|
48
|
+
|
|
49
|
+
@cherrypy.expose
|
|
50
|
+
@cherrypy.tools.jinja2(template='test_jinjax.html')
|
|
51
|
+
def jinjax(self):
|
|
52
|
+
return {'var1': 'test-jinjax'}
|
|
53
|
+
|
|
54
|
+
@cherrypy.expose
|
|
55
|
+
@cherrypy.tools.jinja2(template='test_jinja2_i18n.html')
|
|
56
|
+
@cherrypy.tools.i18n(
|
|
57
|
+
default='fr',
|
|
58
|
+
default_timezone='America/Toronto',
|
|
59
|
+
mo_dir=importlib.resources.files(__package__) / 'locales',
|
|
60
|
+
domain='messages',
|
|
61
|
+
)
|
|
62
|
+
def localized(self):
|
|
63
|
+
return {
|
|
64
|
+
'my_datetime': datetime(year=2025, month=11, day=26, hour=11, minute=16, tzinfo=timezone.utc),
|
|
65
|
+
'my_date': datetime(year=2025, month=12, day=22, hour=14, minute=8, tzinfo=timezone.utc),
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class Jinja2Test(helper.CPWebCase):
|
|
70
|
+
default_lang = None
|
|
71
|
+
interactive = False
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
def setup_server(cls):
|
|
75
|
+
cherrypy.tree.mount(Root(), '/')
|
|
76
|
+
|
|
77
|
+
def test_get_page(self):
|
|
78
|
+
# Given a page render using jinja2
|
|
79
|
+
# When querying the page
|
|
80
|
+
self.getPage("/")
|
|
81
|
+
# Then the page return without error
|
|
82
|
+
self.assertStatus(200)
|
|
83
|
+
# Then the page is render dynamically using page context
|
|
84
|
+
self.assertInBody('test-jinja2')
|
|
85
|
+
self.assertInBody('bar')
|
|
86
|
+
self.assertInBody('STATIC VALUE')
|
|
87
|
+
|
|
88
|
+
@skipUnless(HAS_JINJAX, reason='Required jinjax')
|
|
89
|
+
def test_get_page_jinjax(self):
|
|
90
|
+
# Given a page render using jinjax
|
|
91
|
+
# When querying the page
|
|
92
|
+
self.getPage("/jinjax")
|
|
93
|
+
# Then the page return without error
|
|
94
|
+
self.assertStatus(200)
|
|
95
|
+
# Then the page is render dynamically using page context
|
|
96
|
+
self.assertInBody('<a class="btn btn-primary" href="http://example.com">foo</a>')
|
|
97
|
+
|
|
98
|
+
@parameterized.expand(
|
|
99
|
+
[
|
|
100
|
+
('server_default', {}, 'fr'),
|
|
101
|
+
('accept_lang_fr', {'Accept-Language': 'fr'}, 'fr'),
|
|
102
|
+
('accept_lang_en', {'Accept-Language': 'en'}, 'en'),
|
|
103
|
+
]
|
|
104
|
+
)
|
|
105
|
+
def test_get_page_i18n(self, _name, headers, expected_lang):
|
|
106
|
+
# Given a localized page render with jinja2
|
|
107
|
+
# When querying the page
|
|
108
|
+
self.getPage("/localized", headers=list(headers.items()))
|
|
109
|
+
# Then the page return without error
|
|
110
|
+
self.assertStatus(200)
|
|
111
|
+
# Then the page is render dynamically using page context
|
|
112
|
+
if expected_lang == 'fr':
|
|
113
|
+
self.assertInBody('lang="fr"')
|
|
114
|
+
self.assertInBody('français')
|
|
115
|
+
self.assertInBody('Du texte à traduire')
|
|
116
|
+
self.assertInBody('mercredi 26 novembre 2025, 06:16:00 heure normale de l’Est nord-américain')
|
|
117
|
+
self.assertInBody('lundi, décembre 22, 2025')
|
|
118
|
+
else:
|
|
119
|
+
self.assertInBody('lang="en"')
|
|
120
|
+
self.assertInBody('English')
|
|
121
|
+
self.assertInBody('Some text to translate')
|
|
122
|
+
self.assertInBody('Wednesday, November 26, 2025, 6:16:00\u202fAM Eastern Standard Time')
|
|
123
|
+
self.assertInBody('Monday, December 22, 2025')
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
cherrypy_foundation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
cherrypy_foundation/error_page.py,sha256=
|
|
2
|
+
cherrypy_foundation/error_page.py,sha256=Mz47u6n4eqQ85LKT9lWglqPPtmizikY9xBsrhGl7_nI,3198
|
|
3
3
|
cherrypy_foundation/flash.py,sha256=fFRbutUX6c1lVHqjehmO9y98dJgmfNCjhd76t2mth2s,1542
|
|
4
4
|
cherrypy_foundation/form.py,sha256=8c9dO0o47sK3CBosTkGXoVRtzNQwY0aw0vNZfTqmhvo,3994
|
|
5
5
|
cherrypy_foundation/logging.py,sha256=YIOK5ZAZLCv52YDdP66yBYpEX1C336JnI3wnrTKl1Lw,3468
|
|
@@ -11,7 +11,7 @@ cherrypy_foundation/components/Datatable.css,sha256=7wSwgdA61vYCdEuQ0bp2o0oSvu5m
|
|
|
11
11
|
cherrypy_foundation/components/Datatable.jinja,sha256=K-24vpN5TO8Jk2COvuC5uBaCj3PFLd6ubr28JHFq3KM,3375
|
|
12
12
|
cherrypy_foundation/components/Datatable.js,sha256=jiV78bJPNMTLcjrX03vaYcsEdRbI6ctzSvCo880H8Hw,12072
|
|
13
13
|
cherrypy_foundation/components/Field.css,sha256=CtOkvIbix7ykrOKLJxQJLJsWfEwFqfducJ1BH2vlMvA,244
|
|
14
|
-
cherrypy_foundation/components/Field.jinja,sha256=
|
|
14
|
+
cherrypy_foundation/components/Field.jinja,sha256=R-ZUm88XXOb3zi_hysTuwFUCGGR67A59P4TT5d1Qo_o,3152
|
|
15
15
|
cherrypy_foundation/components/Field.js,sha256=SFixZ62WlLq7SSCEazMAGhSnc9EnQ1wg6PZX4ayO6ZE,2047
|
|
16
16
|
cherrypy_foundation/components/Fields.jinja,sha256=UDu1txwMguvr7dyga9PXepEhFvz9C6ZvchBnhQCWgHI,318
|
|
17
17
|
cherrypy_foundation/components/Icon.jinja,sha256=Z1RGYBg5xlDEoUy3glqb_k_LEjkJHeCxQXqDEvWzEF4,135
|
|
@@ -21,7 +21,7 @@ cherrypy_foundation/components/SideBySideMultiSelect.js,sha256=5YMz1pgkXeWC_SRRf
|
|
|
21
21
|
cherrypy_foundation/components/Typeahead.css,sha256=8VyPN6FP_l0_mRyES2tjrwr9rEkKT4y0obeBI6nfGLk,1645
|
|
22
22
|
cherrypy_foundation/components/Typeahead.jinja,sha256=g7oiiROxIjwkgwiZtxxFlSIIaWUr2ml2eS0RWm7yUvU,3215
|
|
23
23
|
cherrypy_foundation/components/Typeahead.js,sha256=mnsPRwM_1xtI7ImGn_pu46QdFw_LK_PDHNCRKp_CVxc,236
|
|
24
|
-
cherrypy_foundation/components/__init__.py,sha256=
|
|
24
|
+
cherrypy_foundation/components/__init__.py,sha256=Ck_AY_eTkq4Pyf-jjyOxwfpoKXgtCx90hJpRHPRiA_Q,2012
|
|
25
25
|
cherrypy_foundation/components/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
26
|
cherrypy_foundation/components/tests/test_static.py,sha256=bDtS0CFM5LZxwxbXbUyLkXv7sM5KM-eQtHOWywZu_nc,3814
|
|
27
27
|
cherrypy_foundation/components/vendor/bootstrap-icons/bootstrap-icons.css,sha256=AEMichyFVzMXWbxt2qy7aJsPBxXWiK7IK9BW0tW1zDs,99556
|
|
@@ -79,39 +79,47 @@ cherrypy_foundation/components/vendor/popper/popper.min.js,sha256=whL0tQWoY1Ku1i
|
|
|
79
79
|
cherrypy_foundation/components/vendor/typeahead/jquery.typeahead.min.css,sha256=gBsvk2nlQnvCXdG7JITz1SrnqWQrO6EsUo_r06-KRtU,12464
|
|
80
80
|
cherrypy_foundation/components/vendor/typeahead/jquery.typeahead.min.js,sha256=eFBtgouYdW587kYINWsjkN-UR8GVWAG_fQe1fpJfjOw,47828
|
|
81
81
|
cherrypy_foundation/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
|
-
cherrypy_foundation/plugins/db.py,sha256=
|
|
83
|
-
cherrypy_foundation/plugins/ldap.py,sha256=
|
|
82
|
+
cherrypy_foundation/plugins/db.py,sha256=46S-2kR9BHVYRN9cxWwYfzY2WkpEVBCpx1ubsJolYfA,10108
|
|
83
|
+
cherrypy_foundation/plugins/ldap.py,sha256=N-bJT7daJcLybEigA3P_5iuDr4PFwmLt8YzcMrWafAY,9870
|
|
84
84
|
cherrypy_foundation/plugins/restapi.py,sha256=S5GIxHL0M3Wcs33fyVOb0RfX1FXbp2fqUxJ_ufqBrD4,2843
|
|
85
|
-
cherrypy_foundation/plugins/scheduler.py,sha256=
|
|
86
|
-
cherrypy_foundation/plugins/smtp.py,sha256=
|
|
85
|
+
cherrypy_foundation/plugins/scheduler.py,sha256=H6ExfmAlTPt2ypK5lBMynNfcUzcWK_n1EP2_K5x2bx8,10400
|
|
86
|
+
cherrypy_foundation/plugins/smtp.py,sha256=yTCUj2XzrJEJ84CIbYcrCUAP6Mg59aZfu6OZDGQyJbQ,7479
|
|
87
87
|
cherrypy_foundation/plugins/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
|
-
cherrypy_foundation/plugins/tests/test_db.py,sha256=
|
|
88
|
+
cherrypy_foundation/plugins/tests/test_db.py,sha256=PELi5ojj8VqcXyPbpaig2Ac4ZqlR_gEPGUYrWJPANWg,3921
|
|
89
89
|
cherrypy_foundation/plugins/tests/test_ldap.py,sha256=7EhFvhxwDCCBoNlAD5XpZxLtKvkrjpQxrtCHMT9wkQ4,14393
|
|
90
|
-
cherrypy_foundation/plugins/tests/test_scheduler.py,sha256=
|
|
91
|
-
cherrypy_foundation/plugins/tests/test_smtp.py,sha256=
|
|
90
|
+
cherrypy_foundation/plugins/tests/test_scheduler.py,sha256=I-ZuQhMvCCvqFDwukwsyz_UkdJJ8JSLTkAanUo24GCE,3564
|
|
91
|
+
cherrypy_foundation/plugins/tests/test_smtp.py,sha256=qs5yezIpSXkBmLmFlqckfPW7NmntHZxQjDSkdQG_dNE,4183
|
|
92
92
|
cherrypy_foundation/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
93
|
cherrypy_foundation/tests/test_error_page.py,sha256=8u5p6lv_I4XvfGipjJXNFwW7G1N8AK8IOnc_Th-Ebto,2181
|
|
94
|
+
cherrypy_foundation/tests/test_form.py,sha256=urYi0qC8JqelopdeLBHvtndEv0QJ0hwlv3JkpAvdCYQ,4324
|
|
94
95
|
cherrypy_foundation/tests/test_passwd.py,sha256=gC5O4yhHyU1YRYuDc0pG0T_5zvrG2qrr6P822iyK3Rg,1956
|
|
96
|
+
cherrypy_foundation/tests/templates/test_form.html,sha256=sm-n2cYvih2vbDE4Y8kkERSoulnKAbwoefbzBggMMnA,189
|
|
95
97
|
cherrypy_foundation/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
96
|
-
cherrypy_foundation/tools/auth.py,sha256=
|
|
97
|
-
cherrypy_foundation/tools/auth_mfa.py,sha256=
|
|
98
|
-
cherrypy_foundation/tools/errors.py,sha256=
|
|
99
|
-
cherrypy_foundation/tools/i18n.py,sha256=
|
|
100
|
-
cherrypy_foundation/tools/jinja2.py,sha256=
|
|
101
|
-
cherrypy_foundation/tools/ratelimit.py,sha256=
|
|
102
|
-
cherrypy_foundation/tools/secure_headers.py,sha256=
|
|
98
|
+
cherrypy_foundation/tools/auth.py,sha256=lTSajxCiReMzm-Fl-xhTByi4yFnInEWOoNsmUMnHQhs,9761
|
|
99
|
+
cherrypy_foundation/tools/auth_mfa.py,sha256=VaLvBz9wo6jTx-2mCGqFXPxl-z14f8UMWvd6_xeXd40,9212
|
|
100
|
+
cherrypy_foundation/tools/errors.py,sha256=ELpAj0N9kIxC22QW5xDQJz60zMpCwgm-Twu2WpELM1A,1005
|
|
101
|
+
cherrypy_foundation/tools/i18n.py,sha256=5pcyr7AleaqSj9rCESthvMIbNIORp-8351uJgmi2xog,14172
|
|
102
|
+
cherrypy_foundation/tools/jinja2.py,sha256=nppYnk2ASDsyfNHF9m83W4foiN3MhcwDJvo5baEgnGU,5520
|
|
103
|
+
cherrypy_foundation/tools/ratelimit.py,sha256=pT7vZRmjltNeuiQpdyXOmnpG9BcXjLaj-AXJ0e2x_zw,8300
|
|
104
|
+
cherrypy_foundation/tools/secure_headers.py,sha256=Yh-iA_Js4MUsx5nq4ilbc-iWy90ZC0oMb3TJJD_UwYo,3921
|
|
103
105
|
cherrypy_foundation/tools/sessions_timeout.py,sha256=6iBWJntPMk_Qt94fBSfBISf1IXInSh-1XrxLbKXFV-g,7408
|
|
104
106
|
cherrypy_foundation/tools/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
|
-
cherrypy_foundation/tools/tests/test_auth.py,sha256=
|
|
107
|
+
cherrypy_foundation/tools/tests/test_auth.py,sha256=oeM5t38M8DUC9dYn59dcf00jdGY6Ry0jZWhQd_PYQUk,2847
|
|
108
|
+
cherrypy_foundation/tools/tests/test_auth_mfa.py,sha256=911hnBbdg5CKb613uIBrlggoTAyBU9SoL7Sxd-tIKS0,15008
|
|
106
109
|
cherrypy_foundation/tools/tests/test_i18n.py,sha256=-bJuKn8PHHidBWhoFSVr4PdX96m3A50YY4i5osyU7DY,6251
|
|
110
|
+
cherrypy_foundation/tools/tests/test_jinja2.py,sha256=_dkRJpjB0ybDV6YO0uEFFO8LAcWgVu3VBB8_vWthQ48,4296
|
|
107
111
|
cherrypy_foundation/tools/tests/test_ratelimit.py,sha256=rrqybwMbh1GFlF2-Ut57zHPAc1uqX88aqea6VS_6p5E,3449
|
|
112
|
+
cherrypy_foundation/tools/tests/components/Button.jinja,sha256=uSLp1GpEIgZNXK_GWglu0E_a1c3jHpDLI66MRfMqGhE,95
|
|
108
113
|
cherrypy_foundation/tools/tests/locales/messages.pot,sha256=5K9piTRL7H5MxDXFIWJsCccSJRA0HwfCQQU8b8VYo30,40
|
|
109
114
|
cherrypy_foundation/tools/tests/locales/en/LC_MESSAGES/messages.mo,sha256=cdyG2Js1TIU6eenDX1ICH8uP45yvl0OLN0-SMUXTBa4,259
|
|
110
115
|
cherrypy_foundation/tools/tests/locales/en/LC_MESSAGES/messages.po,sha256=JCpiRLLHUSYQhzta8ZYjfB50NmpwPGNCTNwo2Glww14,322
|
|
111
116
|
cherrypy_foundation/tools/tests/locales/fr/LC_MESSAGES/messages.mo,sha256=u3_kl_nqZ3FNaSyKVQKmu4KJzN3xOxxJNVmcdhw37jA,327
|
|
112
117
|
cherrypy_foundation/tools/tests/locales/fr/LC_MESSAGES/messages.po,sha256=6_Sk9Igqm7dtpyyS701p5qc4DvOJE7TRT0ajRZctFAQ,342
|
|
113
|
-
cherrypy_foundation
|
|
114
|
-
cherrypy_foundation
|
|
115
|
-
cherrypy_foundation
|
|
116
|
-
cherrypy_foundation-1.0.
|
|
117
|
-
cherrypy_foundation-1.0.
|
|
118
|
+
cherrypy_foundation/tools/tests/templates/test_jinja2.html,sha256=v9AHxksbBvzE7sesPqE61HMhsvU4juXt3E0ZQo-zXVQ,190
|
|
119
|
+
cherrypy_foundation/tools/tests/templates/test_jinja2_i18n.html,sha256=98S51dgG7Vb4rvMZNZvomw1D9pBiM4g6pdlxAgvrxXA,373
|
|
120
|
+
cherrypy_foundation/tools/tests/templates/test_jinjax.html,sha256=NT19UaUzm8FRKOIc6H6HNGPDJU6KATnakd8zf3BCeAs,153
|
|
121
|
+
cherrypy_foundation-1.0.0a2.dist-info/licenses/LICENSE.md,sha256=trSLYs5qlaow_bBwsLTRKpmTXsXzFksM_YUCMqrgAJQ,35149
|
|
122
|
+
cherrypy_foundation-1.0.0a2.dist-info/METADATA,sha256=5MZIxynHP0cH_SRXkrU4d0H4BiS-PsRtM01cUtx9fdY,2022
|
|
123
|
+
cherrypy_foundation-1.0.0a2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
124
|
+
cherrypy_foundation-1.0.0a2.dist-info/top_level.txt,sha256=B1vQPTLYhpKJ6W0JkRCWyAf8RPcnwJWdYxixv75-4ew,20
|
|
125
|
+
cherrypy_foundation-1.0.0a2.dist-info/RECORD,,
|
|
File without changes
|
{cherrypy_foundation-1.0.0a1.dist-info → cherrypy_foundation-1.0.0a2.dist-info}/licenses/LICENSE.md
RENAMED
|
File without changes
|
{cherrypy_foundation-1.0.0a1.dist-info → cherrypy_foundation-1.0.0a2.dist-info}/top_level.txt
RENAMED
|
File without changes
|