Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
slapos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tom Niget
slapos
Commits
cc4b577d
Commit
cc4b577d
authored
Jul 28, 2021
by
Thomas Gambier
🚴🏼
Browse files
Options
Browse Files
Download
Plain Diff
use new check_url_available promise from slapos.toolbox 0.123
See merge request
nexedi/slapos!1022
parents
405fc71c
c536eb7c
Changes
23
Show whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
47 additions
and
32 deletions
+47
-32
software/caddy-frontend/buildout.hash.cfg
software/caddy-frontend/buildout.hash.cfg
+1
-1
software/caddy-frontend/instance-kedifa.cfg.in
software/caddy-frontend/instance-kedifa.cfg.in
+1
-1
software/cloudooo/buildout.hash.cfg
software/cloudooo/buildout.hash.cfg
+1
-1
software/cloudooo/instance-cloudooo.cfg.in
software/cloudooo/instance-cloudooo.cfg.in
+1
-1
software/gitlab/buildout.hash.cfg
software/gitlab/buildout.hash.cfg
+1
-1
software/gitlab/instance-gitlab.cfg.in
software/gitlab/instance-gitlab.cfg.in
+1
-1
software/html5as/buildout.hash.cfg
software/html5as/buildout.hash.cfg
+1
-1
software/html5as/instance_html5as.cfg.in
software/html5as/instance_html5as.cfg.in
+1
-1
software/jscrawler/buildout.hash.cfg
software/jscrawler/buildout.hash.cfg
+1
-1
software/jscrawler/instance-jscrawler.cfg.jinja2.in
software/jscrawler/instance-jscrawler.cfg.jinja2.in
+1
-1
software/repman/buildout.hash.cfg
software/repman/buildout.hash.cfg
+1
-1
software/repman/instance-repman.cfg.jinja2.in
software/repman/instance-repman.cfg.jinja2.in
+2
-2
software/restic-rest-server/buildout.hash.cfg
software/restic-rest-server/buildout.hash.cfg
+1
-1
software/restic-rest-server/instance.cfg.in
software/restic-rest-server/instance.cfg.in
+1
-1
software/slaprunner/buildout.hash.cfg
software/slaprunner/buildout.hash.cfg
+1
-1
software/slaprunner/instance-runner.cfg
software/slaprunner/instance-runner.cfg
+4
-4
software/theia/buildout.hash.cfg
software/theia/buildout.hash.cfg
+1
-1
software/theia/instance-theia.cfg.jinja.in
software/theia/instance-theia.cfg.jinja.in
+2
-2
stack/lamp/buildout.hash.cfg
stack/lamp/buildout.hash.cfg
+1
-1
stack/lamp/instance-lamp.cfg.jinja2.in
stack/lamp/instance-lamp.cfg.jinja2.in
+1
-1
stack/monitor/buildout.hash.cfg
stack/monitor/buildout.hash.cfg
+1
-1
stack/monitor/instance-monitor.cfg.jinja2.in
stack/monitor/instance-monitor.cfg.jinja2.in
+20
-5
stack/slapos.cfg
stack/slapos.cfg
+1
-1
No files found.
software/caddy-frontend/buildout.hash.cfg
View file @
cc4b577d
...
@@ -106,7 +106,7 @@ md5sum = 38792c2dceae38ab411592ec36fff6a8
...
@@ -106,7 +106,7 @@ md5sum = 38792c2dceae38ab411592ec36fff6a8
[profile-kedifa]
[profile-kedifa]
filename = instance-kedifa.cfg.in
filename = instance-kedifa.cfg.in
md5sum =
16901e9eeb0d4f87e708ad91e7756f12
md5sum =
eab5ae579471ca86b40bd2da3b53fefa
[template-backend-haproxy-rsyslogd-conf]
[template-backend-haproxy-rsyslogd-conf]
_update_hash_filename_ = templates/backend-haproxy-rsyslogd.conf.in
_update_hash_filename_ = templates/backend-haproxy-rsyslogd.conf.in
...
...
software/caddy-frontend/instance-kedifa.cfg.in
View file @
cc4b577d
...
@@ -253,7 +253,7 @@ extra-context =
...
@@ -253,7 +253,7 @@ extra-context =
module = check_url_available
module = check_url_available
name = kedifa-http-reply.py
name = kedifa-http-reply.py
# Kedifa replies 400 on /, so use it to be sure that Kedifa replied
# Kedifa replies 400 on /, so use it to be sure that Kedifa replied
config-http
_
code = 400
config-http
-
code = 400
config-url = https://[${kedifa-config:ip}]:${kedifa-config:port}
config-url = https://[${kedifa-config:ip}]:${kedifa-config:port}
config-ca-cert-file = ${kedifa-config:ca-certificate}
config-ca-cert-file = ${kedifa-config:ca-certificate}
...
...
software/cloudooo/buildout.hash.cfg
View file @
cc4b577d
...
@@ -18,4 +18,4 @@ md5sum = e986de01a57161b32425f1cd3ccac924
...
@@ -18,4 +18,4 @@ md5sum = e986de01a57161b32425f1cd3ccac924
[template-cloudooo-instance]
[template-cloudooo-instance]
filename = instance-cloudooo.cfg.in
filename = instance-cloudooo.cfg.in
md5sum =
440f2b82b119cbfa6f8c7d27652c3170
md5sum =
6e4bdb1df02aed5c96ccf7b9c3c71b89
software/cloudooo/instance-cloudooo.cfg.in
View file @
cc4b577d
...
@@ -110,7 +110,7 @@ name = apache.py
...
@@ -110,7 +110,7 @@ name = apache.py
config-url = https://{{ ipv4 }}:{{ apache_dict.values()[0][0] }}
config-url = https://{{ ipv4 }}:{{ apache_dict.values()[0][0] }}
# XXX cloudooo replies "400 Bad Request" for GET on / but what we want to check
# XXX cloudooo replies "400 Bad Request" for GET on / but what we want to check
# is that we don't have a "503 Service Unavailable" from apache or haproxy.
# is that we don't have a "503 Service Unavailable" from apache or haproxy.
config-http
_
code = 400
config-http
-
code = 400
[apache-conf-ssl]
[apache-conf-ssl]
cert = ${directory:apache-conf}/apache.crt
cert = ${directory:apache-conf}/apache.crt
...
...
software/gitlab/buildout.hash.cfg
View file @
cc4b577d
...
@@ -54,7 +54,7 @@ md5sum = 0f1ec4077dab586cc003ae13f689eda2
...
@@ -54,7 +54,7 @@ md5sum = 0f1ec4077dab586cc003ae13f689eda2
[instance-gitlab.cfg.in]
[instance-gitlab.cfg.in]
_update_hash_filename_ = instance-gitlab.cfg.in
_update_hash_filename_ = instance-gitlab.cfg.in
md5sum =
dfeff229aa696bb6b6051a2aff4301fe
md5sum =
64ec65b2daa0648453022f3afcbc4da3
[instance-gitlab-export.cfg.in]
[instance-gitlab-export.cfg.in]
_update_hash_filename_ = instance-gitlab-export.cfg.in
_update_hash_filename_ = instance-gitlab-export.cfg.in
...
...
software/gitlab/instance-gitlab.cfg.in
View file @
cc4b577d
...
@@ -444,7 +444,7 @@ tune-command =
...
@@ -444,7 +444,7 @@ tune-command =
<= monitor-promise-base
<= monitor-promise-base
module = check_command_execute
module = check_command_execute
name = ${:_buildout_section_name_}.py
name = ${:_buildout_section_name_}.py
config-http
_
code = 200
config-http
-
code = 200
...
...
software/html5as/buildout.hash.cfg
View file @
cc4b577d
...
@@ -21,7 +21,7 @@ md5sum = 9e486efe4ab1aba8cb72b04f6c6da8ad
...
@@ -21,7 +21,7 @@ md5sum = 9e486efe4ab1aba8cb72b04f6c6da8ad
[instance_html5as]
[instance_html5as]
_update_hash_filename_ = instance_html5as.cfg.in
_update_hash_filename_ = instance_html5as.cfg.in
md5sum = 1
91ec2a8b967a3944971709365bdcd2d
md5sum = 1
15918e0f8854e957ea8388bb064f457
[template_nginx_conf]
[template_nginx_conf]
_update_hash_filename_ = templates/nginx_conf.in
_update_hash_filename_ = templates/nginx_conf.in
...
...
software/html5as/instance_html5as.cfg.in
View file @
cc4b577d
...
@@ -239,4 +239,4 @@ module = check_url_available
...
@@ -239,4 +239,4 @@ module = check_url_available
name = html5as-http-frontend.py
name = html5as-http-frontend.py
url = ${html5as-frontend:connection-secure_access}
url = ${html5as-frontend:connection-secure_access}
config-url = ${:url}
config-url = ${:url}
config-
check-secure =
1
config-
http-code = 40
1
software/jscrawler/buildout.hash.cfg
View file @
cc4b577d
...
@@ -19,7 +19,7 @@ md5sum = 6c17361a49cfc47564063b867aab6e8c
...
@@ -19,7 +19,7 @@ md5sum = 6c17361a49cfc47564063b867aab6e8c
[template-jscrawler]
[template-jscrawler]
filename = instance-jscrawler.cfg.jinja2.in
filename = instance-jscrawler.cfg.jinja2.in
md5sum =
fece076231740b414612da5ef3a1685
a
md5sum =
e76e35d9070bdeca014063e0a00879d
a
[template-jscrawler-builder]
[template-jscrawler-builder]
filename = template-jscrawler.builder.sh.in
filename = template-jscrawler.builder.sh.in
...
...
software/jscrawler/instance-jscrawler.cfg.jinja2.in
View file @
cc4b577d
...
@@ -50,7 +50,7 @@ return = secure_access domain
...
@@ -50,7 +50,7 @@ return = secure_access domain
module = check_url_available
module = check_url_available
name = jscrawler_frontend.py
name = jscrawler_frontend.py
config-url = ${request-jscrawler-frontend:connection-secure_access}
config-url = ${request-jscrawler-frontend:connection-secure_access}
config-
check-secure =
1
config-
http-code = 40
1
[logrotate-entry-httpd]
[logrotate-entry-httpd]
<= logrotate-entry-base
<= logrotate-entry-base
...
...
software/repman/buildout.hash.cfg
View file @
cc4b577d
...
@@ -18,7 +18,7 @@ md5sum = 8a08be95a04f1a47098c4fdef80bdfed
...
@@ -18,7 +18,7 @@ md5sum = 8a08be95a04f1a47098c4fdef80bdfed
[instance-repman.cfg]
[instance-repman.cfg]
_update_hash_filename_ = instance-repman.cfg.jinja2.in
_update_hash_filename_ = instance-repman.cfg.jinja2.in
md5sum =
0c173313b48d0005c46d968db1c8ab5f
md5sum =
b2273a47198d38f74c0bf84163b2ea1a
[config-toml.in]
[config-toml.in]
_update_hash_filename_ = templates/config.toml.in
_update_hash_filename_ = templates/config.toml.in
...
...
software/repman/instance-repman.cfg.jinja2.in
View file @
cc4b577d
...
@@ -511,14 +511,14 @@ return = domain secure_access
...
@@ -511,14 +511,14 @@ return = domain secure_access
module = check_url_available
module = check_url_available
name = check_repman_frontend.py
name = check_repman_frontend.py
config-url = https://${repman-frontend:connection-domain}
config-url = https://${repman-frontend:connection-domain}
config-
check-secure =
1
config-
http-code = 40
1
[repman-backend-promise]
[repman-backend-promise]
<= monitor-promise-base
<= monitor-promise-base
module = check_url_available
module = check_url_available
name = check_repman_backend.py
name = check_repman_backend.py
config-url = ${nginx-parameter:backend-ssl-url}
config-url = ${nginx-parameter:backend-ssl-url}
config-
check-secure =
1
config-
http-code = 40
1
[template-proxysql-need-stop-start]
[template-proxysql-need-stop-start]
recipe = slapos.recipe.template:jinja2
recipe = slapos.recipe.template:jinja2
...
...
software/restic-rest-server/buildout.hash.cfg
View file @
cc4b577d
...
@@ -15,4 +15,4 @@
...
@@ -15,4 +15,4 @@
[instance.cfg.in]
[instance.cfg.in]
filename = instance.cfg.in
filename = instance.cfg.in
md5sum =
fee2097f3d12fd4bcfbc2698ecf49afc
md5sum =
0e5521cbbf78be884241e8cf585646ae
software/restic-rest-server/instance.cfg.in
View file @
cc4b577d
...
@@ -185,7 +185,7 @@ return = domain secure_access
...
@@ -185,7 +185,7 @@ return = domain secure_access
[frontend-available-promise]
[frontend-available-promise]
<= check-url-available-promise
<= check-url-available-promise
url = ${frontend:connection-secure_access}
url = ${frontend:connection-secure_access}
c
heck-secure =
1
c
onfig-http-code = 40
1
[promises]
[promises]
...
...
software/slaprunner/buildout.hash.cfg
View file @
cc4b577d
...
@@ -18,7 +18,7 @@ md5sum = 8d6878ff1d2e75010c50a1a2b0c13b24
...
@@ -18,7 +18,7 @@ md5sum = 8d6878ff1d2e75010c50a1a2b0c13b24
[template-runner]
[template-runner]
filename = instance-runner.cfg
filename = instance-runner.cfg
md5sum =
ebdecea5c1653ed752e06fbc8be7e6b2
md5sum =
60b4d2025eace8da7de14b5bae3772d9
[template-runner-import-script]
[template-runner-import-script]
filename = template/runner-import.sh.jinja2
filename = template/runner-import.sh.jinja2
...
...
software/slaprunner/instance-runner.cfg
View file @
cc4b577d
...
@@ -91,7 +91,7 @@ module = check_url_available
...
@@ -91,7 +91,7 @@ module = check_url_available
name = custom_frontend_promise.py
name = custom_frontend_promise.py
config-url = https://$${request-custom-frontend:connection-domain}
config-url = https://$${request-custom-frontend:connection-domain}
{% if slapparameter_dict.get('custom-frontend-basic-auth') -%}
{% if slapparameter_dict.get('custom-frontend-basic-auth') -%}
config-
check-secure =
1
config-
http-code = 40
1
{% endif -%}
{% endif -%}
[custom-frontend-url-ready-promise-bin]
[custom-frontend-url-ready-promise-bin]
...
@@ -440,7 +440,7 @@ module = check_url_available
...
@@ -440,7 +440,7 @@ module = check_url_available
name = $${:filename}.py
name = $${:filename}.py
filename = apache-httpd-listening-on-tcp
filename = apache-httpd-listening-on-tcp
config-url = $${apache-httpd:access-url}
config-url = $${apache-httpd:access-url}
config-
check-secure =
1
config-
http-code = 40
1
[slaprunner-httpd-cors]
[slaprunner-httpd-cors]
recipe = plone.recipe.command
recipe = plone.recipe.command
...
@@ -541,7 +541,7 @@ return = site_url domain
...
@@ -541,7 +541,7 @@ return = site_url domain
module = check_url_available
module = check_url_available
name = slaprunner_frontend.py
name = slaprunner_frontend.py
config-url = https://$${request-frontend:connection-domain}/login
config-url = https://$${request-frontend:connection-domain}/login
config-
check-secure =
1
config-
http-code = 40
1
[request-httpd-frontend]
[request-httpd-frontend]
<= slap-connection
<= slap-connection
...
@@ -561,7 +561,7 @@ return = secure_access domain
...
@@ -561,7 +561,7 @@ return = secure_access domain
module = check_url_available
module = check_url_available
name = slaprunner-apache-http-frontend.py
name = slaprunner-apache-http-frontend.py
config-url = $${request-httpd-frontend:connection-secure_access}
config-url = $${request-httpd-frontend:connection-secure_access}
config-
check-secure =
1
config-
http-code = 40
1
{% endif %}
{% endif %}
...
...
software/theia/buildout.hash.cfg
View file @
cc4b577d
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
[instance-theia]
[instance-theia]
_update_hash_filename_ = instance-theia.cfg.jinja.in
_update_hash_filename_ = instance-theia.cfg.jinja.in
md5sum =
557dec61b7bf58601051575234e7fd05
md5sum =
11d347dd2bf762902341746a388673a0
[instance]
[instance]
_update_hash_filename_ = instance.cfg.in
_update_hash_filename_ = instance.cfg.in
...
...
software/theia/instance-theia.cfg.jinja.in
View file @
cc4b577d
...
@@ -94,7 +94,7 @@ config-port = $${frontend-instance:port}
...
@@ -94,7 +94,7 @@ config-port = $${frontend-instance:port}
module = check_url_available
module = check_url_available
name = $${:_buildout_section_name_}.py
name = $${:_buildout_section_name_}.py
config-url = $${remote-frontend:connection-secure_access}
config-url = $${remote-frontend:connection-secure_access}
config-
check-secure =
1
config-
http-code = 40
1
{% if additional_frontend %}
{% if additional_frontend %}
[remote-additional-frontend-url-available-promise]
[remote-additional-frontend-url-available-promise]
...
@@ -102,7 +102,7 @@ config-check-secure = 1
...
@@ -102,7 +102,7 @@ config-check-secure = 1
module = check_url_available
module = check_url_available
name = $${:_buildout_section_name_}.py
name = $${:_buildout_section_name_}.py
config-url = $${remote-additional-frontend:connection-secure_access}
config-url = $${remote-additional-frontend:connection-secure_access}
config-
check-secure =
1
config-
http-code = 40
1
{% endif %}
{% endif %}
[slapos-standalone-listen-promise]
[slapos-standalone-listen-promise]
...
...
stack/lamp/buildout.hash.cfg
View file @
cc4b577d
...
@@ -22,7 +22,7 @@ md5sum = 4afee4377fa9cbc1e4ff80647b2f279c
...
@@ -22,7 +22,7 @@ md5sum = 4afee4377fa9cbc1e4ff80647b2f279c
[instance-lamp]
[instance-lamp]
filename = instance-lamp.cfg.jinja2.in
filename = instance-lamp.cfg.jinja2.in
md5sum =
52b76d3c8aa23f467db33e32a2b50ed
6
md5sum =
437ec82ac37b28626091000ba7a991a
6
[template-apache.conf]
[template-apache.conf]
filename = apache.conf.in
filename = apache.conf.in
...
...
stack/lamp/instance-lamp.cfg.jinja2.in
View file @
cc4b577d
...
@@ -82,7 +82,7 @@ name = lamp-http-frontend.py
...
@@ -82,7 +82,7 @@ name = lamp-http-frontend.py
url = ${request-frontend:connection-secure_access}
url = ${request-frontend:connection-secure_access}
config-url = ${:url}
config-url = ${:url}
config-custom-domain = {{ slapparameter_dict.get('custom-domain', '') }}
config-custom-domain = {{ slapparameter_dict.get('custom-domain', '') }}
config-
check-secure =
1
config-
http-code = 40
1
{% do publish_dict.__setitem__('url', '${lamp-frontend-promise:url}') -%}
{% do publish_dict.__setitem__('url', '${lamp-frontend-promise:url}') -%}
...
...
stack/monitor/buildout.hash.cfg
View file @
cc4b577d
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
# not need these here).
# not need these here).
[monitor2-template]
[monitor2-template]
filename = instance-monitor.cfg.jinja2.in
filename = instance-monitor.cfg.jinja2.in
md5sum =
200bb126dbfc33e5c5c165ae17bab64b
md5sum =
be2953358a3af37c6e1e0846a18f44ec
[monitor-httpd-conf]
[monitor-httpd-conf]
_update_hash_filename_ = templates/monitor-httpd.conf.in
_update_hash_filename_ = templates/monitor-httpd.conf.in
...
...
stack/monitor/instance-monitor.cfg.jinja2.in
View file @
cc4b577d
...
@@ -312,7 +312,7 @@ output = ${directory:plugins}/${:name}
...
@@ -312,7 +312,7 @@ output = ${directory:plugins}/${:name}
module = check_url_available
module = check_url_available
name = monitor-httpd-listening-on-tcp.py
name = monitor-httpd-listening-on-tcp.py
config-url = ${monitor-httpd-conf-parameter:url}
config-url = ${monitor-httpd-conf-parameter:url}
config-
check-secure =
1
config-
http-code = 40
1
[monitor-publish-parameters]
[monitor-publish-parameters]
# XXX depends on monitor-base section
# XXX depends on monitor-base section
...
@@ -326,7 +326,7 @@ monitor-title = ${slap-configuration:instance-title}
...
@@ -326,7 +326,7 @@ monitor-title = ${slap-configuration:instance-title}
monitor-httpd-ipv6 = ${slap-configuration:ipv6-random}
monitor-httpd-ipv6 = ${slap-configuration:ipv6-random}
monitor-httpd-port = 8196
monitor-httpd-port = 8196
# XXX - Set monitor-base-url = ${monitor-httpd-conf-parameter:url} => https://[ipv6]:port
# XXX - Set monitor-base-url = ${monitor-httpd-conf-parameter:url} => https://[ipv6]:port
monitor-base-url = ${monitor-frontend
-promise:url
}
monitor-base-url = ${monitor-frontend
:connection-secure_access
}
#monitor-base-url = ${monitor-httpd-conf-parameter:url}
#monitor-base-url = ${monitor-httpd-conf-parameter:url}
root-instance-title = ${slap-configuration:root-instance-title}
root-instance-title = ${slap-configuration:root-instance-title}
monitor-url-list =
monitor-url-list =
...
@@ -356,13 +356,26 @@ config-https-only = true
...
@@ -356,13 +356,26 @@ config-https-only = true
#software-type = custom-personal
#software-type = custom-personal
return = domain secure_access
return = domain secure_access
# Requests to the frontend URL should succeed with the correct
# credentials.
[check-monitor-password-promise]
<= monitor-promise-base
module = check_url_available
name = check-monitor-frontend-password.py
url = ${monitor-frontend:connection-secure_access}
config-url = ${:url}
config-username = ${monitor-instance-parameter:username}
config-password = ${monitor-instance-parameter:username}
# Requests to the frontend URL should fail when no credentials are
# supplied.
[monitor-frontend-promise]
[monitor-frontend-promise]
<= monitor-promise-base
<= monitor-promise-base
module = check_url_available
module = check_url_available
name = monitor-http-frontend.py
name = monitor-http-frontend.py
url = ${monitor-frontend:connection-secure_access}
url = ${monitor-frontend:connection-secure_access}
config-url = ${:url}
config-url = ${:url}
config-
check-secure =
1
config-
http-code = 40
1
[monitor-bootstrap-promise]
[monitor-bootstrap-promise]
<= monitor-promise-base
<= monitor-promise-base
...
@@ -402,6 +415,8 @@ depends =
...
@@ -402,6 +415,8 @@ depends =
${start-monitor:wrapper-path}
${start-monitor:wrapper-path}
${ca-monitor-httpd-service:wrapper-path}
${ca-monitor-httpd-service:wrapper-path}
${monitor-httpd-promise:name}
${monitor-httpd-promise:name}
${monitor-frontend-promise:name}
${check-monitor-password-promise:name}
${monitor-bootstrap-promise:name}
${monitor-bootstrap-promise:name}
${monitor-symlink:recipe}
${monitor-symlink:recipe}
${promise-check-slapgrid:recipe}
${promise-check-slapgrid:recipe}
...
...
stack/slapos.cfg
View file @
cc4b577d
...
@@ -198,7 +198,7 @@ slapos.rebootstrap = 4.5
...
@@ -198,7 +198,7 @@ slapos.rebootstrap = 4.5
slapos.recipe.build = 0.47
slapos.recipe.build = 0.47
slapos.recipe.cmmi = 0.17
slapos.recipe.cmmi = 0.17
slapos.recipe.template = 4.6
slapos.recipe.template = 4.6
slapos.toolbox = 0.12
2
slapos.toolbox = 0.12
3
stevedore = 1.21.0:whl
stevedore = 1.21.0:whl
subprocess32 = 3.5.4
subprocess32 = 3.5.4
unicodecsv = 0.14.1
unicodecsv = 0.14.1
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment