c2cwsgiutils 6.2.0.dev62__tar.gz → 6.2.0.dev66__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.
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/PKG-INFO +1 -1
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/acceptance/package-lock.json +4 -4
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/acceptance/package.json +1 -1
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/auth.py +8 -8
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/broadcast/redis.py +1 -1
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/coverage_setup.py +1 -1
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/debug/_views.py +1 -1
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/health_check.py +3 -3
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/pyproject.toml +4 -4
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/LICENSE +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/README.md +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/__init__.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/acceptance/__init__.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/acceptance/connection.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/acceptance/image.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/acceptance/print.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/acceptance/screenshot.js +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/acceptance/utils.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/broadcast/__init__.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/broadcast/interface.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/broadcast/local.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/broadcast/utils.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/client_info.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/config_utils.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/db.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/db_maintenance_view.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/debug/__init__.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/debug/_listeners.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/debug/utils.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/errors.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/index.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/loader.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/logging_view.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/models_graph.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/pretty_json.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/profiler.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/prometheus.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/py.typed +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/pyramid.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/pyramid_logging.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/redis_stats.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/redis_utils.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/request_tracking/__init__.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/request_tracking/_sql.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/scripts/__init__.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/scripts/genversion.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/scripts/stats_db.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/scripts/test_print.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sentry.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/services.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/setup_process.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sql_profiler/__init__.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sql_profiler/_impl.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/README.md +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/__init__.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/_filters.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/_models.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/examples/example.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/handlers.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/static/favicon-16x16.png +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/static/favicon-32x32.png +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/stats_pyramid/__init__.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/stats_pyramid/_db_spy.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/stats_pyramid/_pyramid_spy.py +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/templates/index.html.mako +0 -0
- {c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/version.py +0 -0
{c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/acceptance/package-lock.json
RENAMED
@@ -5,7 +5,7 @@
|
|
5
5
|
"packages": {
|
6
6
|
"": {
|
7
7
|
"dependencies": {
|
8
|
-
"commander": "13.
|
8
|
+
"commander": "13.1.0",
|
9
9
|
"puppeteer": "24.1.1"
|
10
10
|
}
|
11
11
|
},
|
@@ -318,9 +318,9 @@
|
|
318
318
|
"license": "MIT"
|
319
319
|
},
|
320
320
|
"node_modules/commander": {
|
321
|
-
"version": "13.
|
322
|
-
"resolved": "https://registry.npmjs.org/commander/-/commander-13.
|
323
|
-
"integrity": "sha512
|
321
|
+
"version": "13.1.0",
|
322
|
+
"resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
|
323
|
+
"integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",
|
324
324
|
"license": "MIT",
|
325
325
|
"engines": {
|
326
326
|
"node": ">=18"
|
@@ -12,32 +12,32 @@ from requests_oauthlib import OAuth2Session
|
|
12
12
|
from c2cwsgiutils.config_utils import config_bool, env_or_config, env_or_settings
|
13
13
|
|
14
14
|
_COOKIE_AGE = 7 * 24 * 3600
|
15
|
-
SECRET_PROP = "c2c.secret" # noqa: S105
|
16
|
-
SECRET_ENV = "C2C_SECRET" # noqa: S105
|
15
|
+
SECRET_PROP = "c2c.secret" # noqa: S105, secret # nosec
|
16
|
+
SECRET_ENV = "C2C_SECRET" # noqa: S105, secret # nosec
|
17
17
|
_GITHUB_REPOSITORY_PROP = "c2c.auth.github.repository"
|
18
18
|
_GITHUB_REPOSITORY_ENV = "C2C_AUTH_GITHUB_REPOSITORY"
|
19
19
|
_GITHUB_ACCESS_TYPE_PROP = "c2c.auth.github.access_type"
|
20
20
|
_GITHUB_ACCESS_TYPE_ENV = "C2C_AUTH_GITHUB_ACCESS_TYPE"
|
21
21
|
GITHUB_AUTH_URL_PROP = "c2c.auth.github.auth_url"
|
22
22
|
GITHUB_AUTH_URL_ENV = "C2C_AUTH_GITHUB_AUTH_URL"
|
23
|
-
GITHUB_TOKEN_URL_PROP = "c2c.auth.github.token_url" # noqa: S105
|
24
|
-
GITHUB_TOKEN_URL_ENV = "C2C_AUTH_GITHUB_TOKEN_URL" # noqa: S105
|
23
|
+
GITHUB_TOKEN_URL_PROP = "c2c.auth.github.token_url" # noqa: S105, secret # nosec
|
24
|
+
GITHUB_TOKEN_URL_ENV = "C2C_AUTH_GITHUB_TOKEN_URL" # noqa: S105, secret # nosec
|
25
25
|
GITHUB_USER_URL_PROP = "c2c.auth.github.user_url"
|
26
26
|
GITHUB_USER_URL_ENV = "C2C_AUTH_GITHUB_USER_URL"
|
27
27
|
_GITHUB_REPO_URL_PROP = "c2c.auth.github.repo_url"
|
28
28
|
_GITHUB_REPO_URL_ENV = "C2C_AUTH_GITHUB_REPO_URL"
|
29
29
|
GITHUB_CLIENT_ID_PROP = "c2c.auth.github.client_id"
|
30
30
|
GITHUB_CLIENT_ID_ENV = "C2C_AUTH_GITHUB_CLIENT_ID"
|
31
|
-
GITHUB_CLIENT_SECRET_PROP = "c2c.auth.github.client_secret" # noqa: S105
|
32
|
-
GITHUB_CLIENT_SECRET_ENV = "C2C_AUTH_GITHUB_CLIENT_SECRET" # noqa: S105
|
31
|
+
GITHUB_CLIENT_SECRET_PROP = "c2c.auth.github.client_secret" # noqa: S105, secret # nosec
|
32
|
+
GITHUB_CLIENT_SECRET_ENV = "C2C_AUTH_GITHUB_CLIENT_SECRET" # noqa: S105, secret # nosec
|
33
33
|
GITHUB_SCOPE_PROP = "c2c.auth.github.scope"
|
34
34
|
GITHUB_SCOPE_ENV = "C2C_AUTH_GITHUB_SCOPE"
|
35
35
|
# To be able to use private repository
|
36
36
|
GITHUB_SCOPE_DEFAULT = "repo"
|
37
37
|
GITHUB_AUTH_COOKIE_PROP = "c2c.auth.github.auth.cookie"
|
38
38
|
GITHUB_AUTH_COOKIE_ENV = "C2C_AUTH_GITHUB_COOKIE"
|
39
|
-
GITHUB_AUTH_SECRET_PROP = "c2c.auth.github.auth.secret" # noqa: S105
|
40
|
-
GITHUB_AUTH_SECRET_ENV = "C2C_AUTH_GITHUB_SECRET" # noqa: S105
|
39
|
+
GITHUB_AUTH_SECRET_PROP = "c2c.auth.github.auth.secret" # noqa: S105, secret # nosec
|
40
|
+
GITHUB_AUTH_SECRET_ENV = "C2C_AUTH_GITHUB_SECRET" # noqa: S105, secret # nosec
|
41
41
|
GITHUB_AUTH_PROXY_URL_PROP = "c2c.auth.github.auth.proxy_url"
|
42
42
|
GITHUB_AUTH_PROXY_URL_ENV = "C2C_AUTH_GITHUB_PROXY_URL"
|
43
43
|
USE_SESSION_PROP = "c2c.use_session"
|
@@ -90,7 +90,7 @@ class RedisBroadcaster(interface.BaseBroadcaster):
|
|
90
90
|
cond.notify()
|
91
91
|
|
92
92
|
answer_channel = self._get_channel(channel) + "".join(
|
93
|
-
random.choice(string.ascii_uppercase + string.digits) # noqa: S311
|
93
|
+
random.choice(string.ascii_uppercase + string.digits) # noqa: S311 # nosec
|
94
94
|
for _ in range(10)
|
95
95
|
)
|
96
96
|
_LOG.debug("Subscribing for broadcast answers on %s", answer_channel)
|
@@ -22,7 +22,7 @@ def includeme(config: Optional[pyramid.config.Configurator] = None) -> None:
|
|
22
22
|
import coverage # pylint: disable=import-outside-toplevel
|
23
23
|
|
24
24
|
_LOG.warning("Setting up code coverage")
|
25
|
-
report_dir = "/tmp/coverage/api" # noqa: S108
|
25
|
+
report_dir = "/tmp/coverage/api" # noqa: S108 # nosec
|
26
26
|
os.makedirs(report_dir, exist_ok=True)
|
27
27
|
cov = coverage.Coverage(
|
28
28
|
data_file=os.path.join(report_dir, "coverage"),
|
@@ -192,7 +192,7 @@ def _show_refs(request: pyramid.request.Request) -> pyramid.response.Response:
|
|
192
192
|
if "analyze_type" in request.params:
|
193
193
|
objs = objgraph.by_type(request.params["analyze_type"])
|
194
194
|
elif "analyze_id" in request.params:
|
195
|
-
objs = [objgraph.by(int(request.params["analyze_id"]))]
|
195
|
+
objs = [objgraph.by(int(request.params["analyze_id"]))] # pylint: disable=no-member
|
196
196
|
|
197
197
|
args: dict[str, Any] = {
|
198
198
|
"refcounts": True,
|
@@ -299,7 +299,7 @@ class HealthCheck:
|
|
299
299
|
):
|
300
300
|
result = binded_session.execute(
|
301
301
|
sqlalchemy.text(
|
302
|
-
"SELECT version_num FROM " # noqa: S608
|
302
|
+
"SELECT version_num FROM " # noqa: S608 # nosec
|
303
303
|
f"{sqlalchemy.sql.quoted_name(version_schema, True)}."
|
304
304
|
f"{sqlalchemy.sql.quoted_name(version_table, True)}"
|
305
305
|
)
|
@@ -493,8 +493,8 @@ class HealthCheck:
|
|
493
493
|
_PROMETHEUS_HEALTH_CHECKS_FAILURE.labels(name=name).set(1)
|
494
494
|
_LOG.warning("Health check %s failed", name, exc_info=True)
|
495
495
|
failure = {"message": str(e), "timing": time.perf_counter() - start, "level": level}
|
496
|
-
if isinstance(e, JsonCheckException) and e.json_data() is not None:
|
497
|
-
failure["result"] = e.json_data()
|
496
|
+
if isinstance(e, JsonCheckException) and e.json_data() is not None: # pylint: disable=no-member
|
497
|
+
failure["result"] = e.json_data() # pylint: disable=no-member
|
498
498
|
if is_auth or os.environ.get("DEVELOPMENT", "0") != "0":
|
499
499
|
failure["stacktrace"] = traceback.format_exc()
|
500
500
|
results["failures"][name] = failure
|
@@ -16,7 +16,7 @@ strict = true
|
|
16
16
|
|
17
17
|
[tool.poetry]
|
18
18
|
name = "c2cwsgiutils"
|
19
|
-
version = "6.2.0.
|
19
|
+
version = "6.2.0.dev66"
|
20
20
|
description = "Common utilities for Camptocamp WSGI applications"
|
21
21
|
readme = "README.md"
|
22
22
|
authors = ["Camptocamp <info@camptocamp.com>"]
|
@@ -79,7 +79,7 @@ objgraph = { version = "3.6.2", optional = true }
|
|
79
79
|
psycopg2 = { version = "2.9.10", optional = true }
|
80
80
|
pyramid = { version = "2.0.2", optional = true }
|
81
81
|
pyramid-tm = { version = "2.6", optional = true }
|
82
|
-
sentry-sdk = { version = "2.
|
82
|
+
sentry-sdk = { version = "2.20.0", optional = true }
|
83
83
|
ujson = { version = "5.10.0" }
|
84
84
|
cee_syslog_handler = { version = "0.6.0" }
|
85
85
|
SQLAlchemy = { version = "2.0.37", optional = true }
|
@@ -192,9 +192,9 @@ test_images = ["scikit-image"]
|
|
192
192
|
|
193
193
|
[tool.poetry.group.dev.dependencies]
|
194
194
|
# pylint = { version = "2.15.6" }
|
195
|
-
prospector = { version = "1.
|
195
|
+
prospector = { version = "1.14.0", extras = ["with_bandit", "with_mypy", "with_pyroma", "with_ruff"] }
|
196
196
|
prospector-profile-duplicated = "1.10.4"
|
197
|
-
prospector-profile-utils = "1.
|
197
|
+
prospector-profile-utils = "1.17.0"
|
198
198
|
junit2html = "31.0.2"
|
199
199
|
pytest = "8.3.4"
|
200
200
|
pytest-cov = "6.0.0"
|
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
|
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
|
{c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/request_tracking/__init__.py
RENAMED
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
|
{c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/README.md
RENAMED
File without changes
|
{c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/__init__.py
RENAMED
File without changes
|
{c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/_filters.py
RENAMED
File without changes
|
{c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/_models.py
RENAMED
File without changes
|
File without changes
|
{c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/sqlalchemylogger/handlers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/stats_pyramid/__init__.py
RENAMED
File without changes
|
File without changes
|
{c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/stats_pyramid/_pyramid_spy.py
RENAMED
File without changes
|
{c2cwsgiutils-6.2.0.dev62 → c2cwsgiutils-6.2.0.dev66}/c2cwsgiutils/templates/index.html.mako
RENAMED
File without changes
|
File without changes
|