Commit df670b47 authored by Jérome Perrin's avatar Jérome Perrin

ERP5 py3: WIP changes

parent 5a2f5e46
...@@ -40,3 +40,15 @@ patches = ...@@ -40,3 +40,15 @@ patches =
${:_profile_base_location_}/pylint-redefining-builtins-modules.patch#043defc6e9002ac48b40e078797d4d17 ${:_profile_base_location_}/pylint-redefining-builtins-modules.patch#043defc6e9002ac48b40e078797d4d17
patch-options = -p1 patch-options = -p1
patch-binary = ${patch:location}/bin/patch patch-binary = ${patch:location}/bin/patch
[pylint:python3]
recipe = zc.recipe.egg
patches =
[mccabe:python3]
recipe = zc.recipe.egg
patches =
setup-eggs =
[astroid:python3]
recipe = zc.recipe.egg
...@@ -22,7 +22,7 @@ md5sum = ae00507d9e69209a0babd725cf6be536 ...@@ -22,7 +22,7 @@ md5sum = ae00507d9e69209a0babd725cf6be536
[instance-neo-admin] [instance-neo-admin]
filename = instance-neo-admin.cfg.in filename = instance-neo-admin.cfg.in
md5sum = b6e1ccb1d90160110202e5111eec2afa md5sum = a0ec1dce4c7a237fbeef3f8aee62e55a
[instance-neo-master] [instance-neo-master]
filename = instance-neo-master.cfg.in filename = instance-neo-master.cfg.in
...@@ -34,7 +34,7 @@ md5sum = fda911d5ef9efee365f1b0ff9843a50b ...@@ -34,7 +34,7 @@ md5sum = fda911d5ef9efee365f1b0ff9843a50b
[template-neo-my-cnf] [template-neo-my-cnf]
filename = my.cnf.in filename = my.cnf.in
md5sum = 56ea8f452d9e1526157ab9d03e631e1a md5sum = 3ae93702f3890a504cc8a93eb5ad52bc
[template-neo] [template-neo]
filename = instance.cfg.in filename = instance.cfg.in
......
...@@ -45,7 +45,7 @@ ssl = {{ dumps(bool(slapparameter_dict['ssl'])) }} ...@@ -45,7 +45,7 @@ ssl = {{ dumps(bool(slapparameter_dict['ssl'])) }}
cluster = {{ dumps(slapparameter_dict['cluster']) }} cluster = {{ dumps(slapparameter_dict['cluster']) }}
masters = {{ dumps(slapparameter_dict['masters']) }} masters = {{ dumps(slapparameter_dict['masters']) }}
extra-options = extra-options =
{%- for k, v in monitor_dict.iteritems() %} {%- for k, v in six.iteritems(monitor_dict) %}
{%- if k == 'backup' %} {%- if k == 'backup' %}
{%- set k = 'monitor-backup' %} {%- set k = 'monitor-backup' %}
{%- endif %} {%- endif %}
......
...@@ -45,7 +45,7 @@ innodb_locks_unsafe_for_binlog = 1 ...@@ -45,7 +45,7 @@ innodb_locks_unsafe_for_binlog = 1
{{x}}sync_frm = 0 {{x}}sync_frm = 0
# Extra parameters. # Extra parameters.
{%- for k, v in extra_dict.iteritems() %} {%- for k, v in six.iteritems(extra_dict) %}
{%- do assert('-' not in k) %} {%- do assert('-' not in k) %}
{{ k }} = {{ v }} {{ k }} = {{ v }}
{%- endfor %} {%- endfor %}
......
...@@ -129,8 +129,11 @@ inline = ...@@ -129,8 +129,11 @@ inline =
[versions] [versions]
coverage = 5.5 coverage = 5.5
ecdsa = 0.13 ecdsa = 0.13
mysqlclient = 1.3.12 mysqlclient = 2.0.1
PyMySQL = 0.10.1 PyMySQL = 0.10.1
pycrypto = 2.6.1 pycrypto = 2.6.1
cython-zstd = 0.2 cython-zstd = 0.2
funcsigs = 1.0.2 funcsigs = 1.0.2
[versions:python2]
mysqlclient = 1.3.12
...@@ -4,12 +4,6 @@ extends = ...@@ -4,12 +4,6 @@ extends =
../../component/cython/buildout.cfg ../../component/cython/buildout.cfg
buildout.cfg buildout.cfg
parts +=
# Development eggs
slapos-cookbook-develop
slapos-cookbook
PyStemmer
cython
parts -= parts -=
# XXX: The following parts have no support for Python 3. Ignore for now. # XXX: The following parts have no support for Python 3. Ignore for now.
...@@ -24,7 +18,6 @@ parts -= ...@@ -24,7 +18,6 @@ parts -=
jupyter jupyter
matplotlibrc matplotlibrc
h5py h5py
custom-js
find-links += find-links +=
http://www.nexedi.org/static/packages/source/ http://www.nexedi.org/static/packages/source/
...@@ -59,6 +52,7 @@ recipe = ...@@ -59,6 +52,7 @@ recipe =
recipe = recipe =
[ocropy] [ocropy]
recipe = recipe =
[hookbox] [hookbox]
recipe = recipe =
[scipy] [scipy]
...@@ -83,30 +77,10 @@ include-dirs += ...@@ -83,30 +77,10 @@ include-dirs +=
${cyrus-sasl:location}/include ${cyrus-sasl:location}/include
[eggs] [eggs]
eggs +=
## Python 3 variant
SOAPpy-py3
suds-py3
eggs -= eggs -=
## Python 2 only
ZServer
Products.DCWorkflowGraph
uuid
# Probably not worth the effort (used for backuping multi-ZODB instances and has
# been discouraged for many years over NEO)
Products.TIDStorage
## Python < 3.5
typing
## tracemalloc is now part of Python 3.4!
pytracemalloc
## XXX: The following eggs have no support for Python 3. Ignore for now.
ocropy
${ocropy:egg} ${ocropy:egg}
PyXML # fpconst
threadframe
suds
SOAPpy
fpconst
${scipy:egg} ${scipy:egg}
${scikit-learn:egg} ${scikit-learn:egg}
${scikit-image:egg} ${scikit-image:egg}
...@@ -116,7 +90,6 @@ eggs -= ...@@ -116,7 +90,6 @@ eggs -=
${statsmodels:egg} ${statsmodels:egg}
astor astor
jupyter jupyter
# explicit eggs to generate scripts from them
jupyter_client jupyter_client
jupyter_console jupyter_console
jupyter_core jupyter_core
...@@ -125,86 +98,58 @@ eggs -= ...@@ -125,86 +98,58 @@ eggs -=
notebook notebook
# additional eggs # additional eggs
astor astor
${matplotlib:egg}
${scipy:egg}
${scikit-learn:egg}
${seaborn:egg} ${seaborn:egg}
${statsmodels:egg} ${statsmodels:egg}
patsy
${h5py:egg}
openpyxl
sympy
xlrd
# additional eggs for jupyterlab # additional eggs for jupyterlab
jupyterlab jupyterlab
jupyterlab-launcher jupyterlab-launcher
pytesseract pytesseract
[astroid]
patches =
[pylint]
patches=
setup-eggs = ${mccabe:egg}
[versions] [versions]
# zc.recipe.egg 2.0.7 (in versions.cfg) requires zc.buildout>=2.12.0, so let's
# revert to the version contained in stack/slapos.cfg
zc.recipe.egg = 2.0.3+slapos003
pyasn1-modules = 0.2.8 pyasn1-modules = 0.2.8
pyasn1 = 0.4.8 pyasn1 = 0.4.8
## Version up to support Python 3.8 google-api-python-client = 2.81.0
numpy = 1.16.6
pandas = 0.24.2
google-api-python-client = 2.41.0
zope.app.appsetup = 4.2.0
zope.app.publication = 4.5
# google-api-python-client version bump
uritemplate = 3.0.1
google-api-core = 2.7.1 google-api-core = 2.7.1
google-auth-httplib2 = 0.1.0 google-auth-httplib2 = 0.1.0
google-auth = 2.6.0 google-auth = 2.6.0
httplib2 = 0.15.0 httplib2 = 0.15.0
protobuf = 3.19.4 protobuf = 3.19.4
googleapis-common-protos = 1.55.0 googleapis-common-protos = 1.55.0
cachetools = 5.0.0 scipy = 1.8.1
## XXX: No version of scipy is both compatible with Python 2.7 and 3.7
scipy = 1.5.2
#scikit-learn = 0.20.4 #scikit-learn = 0.20.4
statsmodels = 0.10.2 statsmodels = 0.10.2
pyzmq = 19.0.2 pyzmq = 19.0.2
PyStemmer = 2.0.1
python-ldap = 3.1.0 python-ldap = 3.1.0
ipython = 7.31.1 #mysqlclient = 2.0.1
mccabe = 0.6 #polib = 1.2.0
setuptools-scm = 7.0.5
packaging = 20.4
typing-extensions = 4.3.0:whl
tomli = 2.0.1:whl
lazy-object-proxy = 1.4.3
isort = 4.2.5
astroid = 2.4.0
wrapt = 1.11
typed-ast = 1.4.0
jedi = 0.16.0
parso = 0.5.2
mysqlclient = 2.0.1
polib = 1.1.0
# testrunner
pexpect = 4.8.0
matplotlib-inline = 0.1.3 matplotlib-inline = 0.1.3
backcall = 0.2.0 #prompt-toolkit = 3.0.27
prompt-toolkit = 3.0.27
# 2to3 fixers to port code to python3
zope.fixers = 1.1.2
SOAPpy-py3 = 0.52.26 SOAPpy-py3 = 0.52.26
defusedxml = 0.7.1 defusedxml = 0.7.1
suds-py3 = 1.4.5.0 suds-py3 = 1.4.5.0
wstools-py3 = 0.54.4 wstools-py3 = 0.54.4
toml = 0.10.2
soupsieve = 2.3.2.post1:whl soupsieve = 2.3.2.post1:whl
pylint = 2.6.0 # WIP pylint
[versions]
pylint = 2.17.0:whl
mccabe = 0.7.0:whl
tomli = 2.0.1:whl
lazy-object-proxy = 1.4.3
isort = 4.2.5
astroid = 2.15.0:whl
wrapt = 1.11
typed-ast = 1.4.0
tomlkit = 0.11.6
platformdirs = 3.1.1:whl
dill = 0.3.6:whl
[erp5]
repository = https://lab.nexedi.com/nexedi/erp5.git
branch = zope4py3
develop = true
...@@ -508,7 +508,6 @@ eggs += ...@@ -508,7 +508,6 @@ eggs +=
ipython_genutils ipython_genutils
ipykernel ipykernel
ipywidgets ipywidgets
requests
[egg-with-zope-proxy] [egg-with-zope-proxy]
...@@ -525,13 +524,15 @@ setup-eggs += ...@@ -525,13 +524,15 @@ setup-eggs +=
[eggs] [eggs]
<= neoppod <= neoppod
eggs = ${neoppod:eggs} eggs =
${erp5-eggs-python2:eggs}
${erp5-eggs-python3:eggs}
${neoppod:eggs}
${caucase-eggs:eggs} ${caucase-eggs:eggs}
${wendelin.core:egg} ${wendelin.core:egg}
${numpy:egg} ${numpy:egg}
${matplotlib:egg} ${matplotlib:egg}
${lxml-python:egg} ${lxml-python:egg}
${ocropy:egg}
${pandas:egg} ${pandas:egg}
${pillow-python:egg} ${pillow-python:egg}
${python-ldap-python:egg} ${python-ldap-python:egg}
...@@ -553,14 +554,12 @@ eggs = ${neoppod:eggs} ...@@ -553,14 +554,12 @@ eggs = ${neoppod:eggs}
astor astor
APacheDEX APacheDEX
Pympler Pympler
SOAPpy
chardet chardet
collective.recipe.template collective.recipe.template
erp5diff erp5diff
interval interval
ipdb ipdb
Jinja2 Jinja2
jsonschema
mechanize mechanize
mock mock
oauthlib oauthlib
...@@ -577,7 +576,6 @@ eggs = ${neoppod:eggs} ...@@ -577,7 +576,6 @@ eggs = ${neoppod:eggs}
requests requests
responses responses
urlnorm urlnorm
uuid
xml_marshaller xml_marshaller
xupdate_processor xupdate_processor
feedparser feedparser
...@@ -588,11 +586,9 @@ eggs = ${neoppod:eggs} ...@@ -588,11 +586,9 @@ eggs = ${neoppod:eggs}
qrcode qrcode
spyne spyne
httplib2 httplib2
suds
pprofile pprofile
pycountry pycountry
xfw xfw
jsonschema
${selenium:egg} ${selenium:egg}
pytesseract pytesseract
decorator decorator
...@@ -602,9 +598,6 @@ eggs = ${neoppod:eggs} ...@@ -602,9 +598,6 @@ eggs = ${neoppod:eggs}
${pylint:egg} ${pylint:egg}
jedi jedi
yapf yapf
typing
pytracemalloc
xlrd
pydot pydot
# Zope # Zope
...@@ -617,16 +610,10 @@ eggs = ${neoppod:eggs} ...@@ -617,16 +610,10 @@ eggs = ${neoppod:eggs}
# for runzeo # for runzeo
${ZEO:egg} ${ZEO:egg}
# Other Zope 2 packages
Products.PluggableAuthService
Products.DCWorkflow Products.DCWorkflow
Products.PluggableAuthService
# Other products
Products.MimetypesRegistry Products.MimetypesRegistry
Products.TIDStorage
# Currently forked in our repository
# Products.PortalTransforms
# Dependency for our fork of PortalTransforms # Dependency for our fork of PortalTransforms
StructuredText StructuredText
...@@ -661,11 +648,9 @@ eggs = ${neoppod:eggs} ...@@ -661,11 +648,9 @@ eggs = ${neoppod:eggs}
docutils docutils
zLOG zLOG
Products.ZSQLMethods Products.ZSQLMethods
ZServer
Products.ExternalMethod Products.ExternalMethod
Products.SiteErrorLog Products.SiteErrorLog
tempstorage tempstorage
Products.DCWorkflow
Products.Sessions Products.Sessions
Products.ZODBMountPoint Products.ZODBMountPoint
Record Record
...@@ -703,6 +688,8 @@ python-magic-patches = ${:_profile_base_location_}/../../component/egg-patch/pyt ...@@ -703,6 +688,8 @@ python-magic-patches = ${:_profile_base_location_}/../../component/egg-patch/pyt
python-magic-patch-options = -p1 python-magic-patch-options = -p1
urlnorm-patches = ${:_profile_base_location_}/../../component/egg-patch/urlnorm/urlnorm-1.1.4-py3.patch#5ef268fb44cbc005b62140099c33b641 urlnorm-patches = ${:_profile_base_location_}/../../component/egg-patch/urlnorm/urlnorm-1.1.4-py3.patch#5ef268fb44cbc005b62140099c33b641
urlnorm-patch-options = -p1 urlnorm-patch-options = -p1
[eggs:python2]
# backported security patches for waitress-1.4.4 from Debian 1.4.4-1.1+deb11u1 package. # backported security patches for waitress-1.4.4 from Debian 1.4.4-1.1+deb11u1 package.
waitress-patches = waitress-patches =
${:_profile_base_location_}/../../component/egg-patch/waitress/CVE-2022-24761-1.patch#a0508880f24662e48a20ce3bcbf440c2 ${:_profile_base_location_}/../../component/egg-patch/waitress/CVE-2022-24761-1.patch#a0508880f24662e48a20ce3bcbf440c2
...@@ -713,6 +700,30 @@ waitress-patches = ...@@ -713,6 +700,30 @@ waitress-patches =
${:_profile_base_location_}/../../component/egg-patch/waitress/CVE-2022-24761-6.patch#85fc9c4105eabee3ff71c800b2ddf63b ${:_profile_base_location_}/../../component/egg-patch/waitress/CVE-2022-24761-6.patch#85fc9c4105eabee3ff71c800b2ddf63b
waitress-patch-options = -p1 waitress-patch-options = -p1
# python version dependent eggs
[erp5-eggs-python2]
eggs =
[erp5-eggs-python2:python2]
eggs =
${ocropy:egg}
ZServer
Products.TIDStorage
pytracemalloc
SOAPpy
suds
typing
uuid
xlrd
[erp5-eggs-python3]
eggs =
SOAPpy-py3
suds-py3
[erp5-eggs-python3:python2]
eggs =
# neoppod installs bin/coverage so we inject erp5 plugin here so that coverage script can use it in report # neoppod installs bin/coverage so we inject erp5 plugin here so that coverage script can use it in report
[neoppod] [neoppod]
eggs += eggs +=
...@@ -745,24 +756,20 @@ depends = ...@@ -745,24 +756,20 @@ depends =
# patched eggs # patched eggs
Acquisition = 4.7+SlapOSPatched001 Acquisition = 4.7+SlapOSPatched001
Products.DCWorkflow = 2.4.1+SlapOSPatched001 Products.DCWorkflow = 2.4.1+SlapOSPatched001
ocropy = 1.0+SlapOSPatched001
pysvn = 1.9.15+SlapOSPatched001 pysvn = 1.9.15+SlapOSPatched001
python-ldap = 2.4.32+SlapOSPatched001 python-ldap = 2.4.32+SlapOSPatched001
python-magic = 0.4.12+SlapOSPatched001 python-magic = 0.4.12+SlapOSPatched001
PyPDF2 = 1.26.0+SlapOSPatched001 PyPDF2 = 1.26.0+SlapOSPatched001
waitress = 1.4.4+SlapOSPatched006
## https://lab.nexedi.com/nexedi/slapos/merge_requests/648 ## https://lab.nexedi.com/nexedi/slapos/merge_requests/648
pylint = 1.4.4+SlapOSPatched002 pylint = 1.4.4+SlapOSPatched002
# astroid 1.4.1 breaks testDynamicClassGeneration # astroid 1.4.1 breaks testDynamicClassGeneration
astroid = 1.3.8+SlapOSPatched001 astroid = 1.3.8+SlapOSPatched001
# modified version that works fine for buildout installation
SOAPpy = 0.12.0nxd001
# Pinned versions # Pinned versions
alabaster = 0.7.12 alabaster = 0.7.12
APacheDEX = 1.8 APacheDEX = 1.8
arrow = 1.2.3
Beaker = 1.11.0 Beaker = 1.11.0
beautifulsoup4 = 4.8.2 beautifulsoup4 = 4.8.2
cloudpickle = 0.5.3 cloudpickle = 0.5.3
...@@ -775,7 +782,7 @@ erp5diff = 0.8.1.8 ...@@ -775,7 +782,7 @@ erp5diff = 0.8.1.8
facebook-sdk = 2.0.0 facebook-sdk = 2.0.0
five.formlib = 1.0.4 five.formlib = 1.0.4
fpconst = 0.7.2 fpconst = 0.7.2
future = 0.18.2 fqdn = 1.5.1
google-api-python-client = 1.6.1 google-api-python-client = 1.6.1
graphviz = 0.5.2 graphviz = 0.5.2
haufe.requestmonitoring = 0.6.0 haufe.requestmonitoring = 0.6.0
...@@ -784,8 +791,8 @@ httplib2 = 0.10.3 ...@@ -784,8 +791,8 @@ httplib2 = 0.10.3
huBarcode = 1.0.0 huBarcode = 1.0.0
interval = 1.0.0 interval = 1.0.0
ipdb = 0.10.2 ipdb = 0.10.2
isoduration = 20.11.0
jdcal = 1.3 jdcal = 1.3
jedi = 0.15.1
jsonpickle = 0.9.6 jsonpickle = 0.9.6
jsonpointer = 2.2 jsonpointer = 2.2
logilab-common = 1.3.0 logilab-common = 1.3.0
...@@ -795,16 +802,13 @@ mpmath = 0.19 ...@@ -795,16 +802,13 @@ mpmath = 0.19
munnel = 0.3 munnel = 0.3
networkx = 2.1 networkx = 2.1
nt-svcutils = 2.13.0 nt-svcutils = 2.13.0
numpy = 1.13.1
oauth2client = 4.0.0 oauth2client = 4.0.0
oauthlib = 3.1.0 oauthlib = 3.1.0
objgraph = 3.1.0 objgraph = 3.1.0
oic = 0.15.1 oic = 0.15.1
olefile = 0.44 olefile = 0.44
openpyxl = 2.4.8
parso = 0.5.1
Pillow = 6.2.2 Pillow = 6.2.2
polib = 1.0.8 polib = 1.2.0
pprofile = 2.0.4 pprofile = 2.0.4
Products.BTreeFolder2 = 4.4+SlapOSPatched001 Products.BTreeFolder2 = 4.4+SlapOSPatched001
Products.CMFCore = 2.7.0+SlapOSPatched001 Products.CMFCore = 2.7.0+SlapOSPatched001
...@@ -839,10 +843,12 @@ pytracemalloc = 1.2 ...@@ -839,10 +843,12 @@ pytracemalloc = 1.2
PyWavelets = 0.5.2 PyWavelets = 0.5.2
qrcode = 5.3 qrcode = 5.3
responses = 0.10.6 responses = 0.10.6
rfc3339-validator = 0.1.4
rfc3987 = 1.3.8 rfc3987 = 1.3.8
rsa = 3.4.2 rsa = 3.4.2
scikit-image = 0.14.0 scikit-image = 0.14.0
scipy = 0.19.0 scipy = 0.19.0
SOAPpy-py3 = 0.52.26
soupsieve = 1.9.5 soupsieve = 1.9.5
spyne = 2.12.14 spyne = 2.12.14
strict-rfc3339 = 0.7 strict-rfc3339 = 0.7
...@@ -851,10 +857,11 @@ suds = 0.4 ...@@ -851,10 +857,11 @@ suds = 0.4
toolz = 0.9.0 toolz = 0.9.0
typing = 3.10.0.0 typing = 3.10.0.0
unidiff = 0.5.5 unidiff = 0.5.5
uri-template = 1.2.0
urlnorm = 1.1.4+SlapOSPatched001 urlnorm = 1.1.4+SlapOSPatched001
uuid = 1.30 uuid = 1.30
validictory = 1.1.0 validictory = 1.1.0
webcolors = 1.10 webcolors = 1.12
webencodings = 0.5.1 webencodings = 0.5.1
WebOb = 1.8.5 WebOb = 1.8.5
WebTest = 2.0.33 WebTest = 2.0.33
...@@ -879,5 +886,18 @@ zope.password = 4.4 ...@@ -879,5 +886,18 @@ zope.password = 4.4
zope.session = 4.5 zope.session = 4.5
zope.testbrowser = 5.5.1 zope.testbrowser = 5.5.1
[versions]
ipython = 7.31.1
pexpect = 4.8.0
prompt-toolkit = 3.0.27
[versions:python2] [versions:python2]
jedi = 0.15.1
numpy = 1.13.1
ocropy = 1.0+SlapOSPatched001
openpyxl = 2.4.8
parso = 0.5.1
PyStemmer = 1.3.0 PyStemmer = 1.3.0
SOAPpy = 0.12.0nxd001
waitress = 1.4.4+SlapOSPatched006
webcolors = 1.10
...@@ -74,7 +74,7 @@ md5sum = 3f7b28085ceff321a3cb785db60f7c3e ...@@ -74,7 +74,7 @@ md5sum = 3f7b28085ceff321a3cb785db60f7c3e
[template-erp5] [template-erp5]
filename = instance-erp5.cfg.in filename = instance-erp5.cfg.in
md5sum = 7fd36876df18e5cf62e050c2b30abcc9 md5sum = f4241faa76d8105990620a15d4dcd462
[template-zeo] [template-zeo]
filename = instance-zeo.cfg.in filename = instance-zeo.cfg.in
......
...@@ -203,7 +203,7 @@ config-zodb-dict = {{ dumps(zodb_dict) }} ...@@ -203,7 +203,7 @@ config-zodb-dict = {{ dumps(zodb_dict) }}
{% for server_type, server_dict in six.iteritems(storage_dict) -%} {% for server_type, server_dict in six.iteritems(storage_dict) -%}
{% if server_type == 'neo' -%} {% if server_type == 'neo' -%}
config-neo-cluster = ${publish-early:neo-cluster} config-neo-cluster = ${publish-early:neo-cluster}
config-neo-name = {{ server_dict.keys()[0] }} config-neo-name = {{ list(server_dict.keys())[0] }}
config-neo-masters = ${publish-early:neo-masters} config-neo-masters = ${publish-early:neo-masters}
{% else -%} {% else -%}
config-zodb-zeo = ${request-zodb:connection-storage-dict} config-zodb-zeo = ${request-zodb:connection-storage-dict}
......
...@@ -323,7 +323,7 @@ typeguard = 2.13.3:whl ...@@ -323,7 +323,7 @@ typeguard = 2.13.3:whl
typing-extensions = 4.3.0:whl typing-extensions = 4.3.0:whl
tzlocal = 1.5.1 tzlocal = 1.5.1
unicodecsv = 0.14.1 unicodecsv = 0.14.1
uritemplate = 3.0.0 uritemplate = 3.0.1
urllib3 = 1.26.12 urllib3 = 1.26.12
wcwidth = 0.2.5 wcwidth = 0.2.5
webencodings = 0.5.1 webencodings = 0.5.1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment