dagster-cloud 1.12.10__py3-none-any.whl → 1.12.11__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.
- dagster_cloud/agent/dagster_cloud_agent.py +10 -6
- dagster_cloud/version.py +1 -1
- dagster_cloud/workspace/docker/__init__.py +2 -1
- dagster_cloud/workspace/ecs/client.py +1 -1
- dagster_cloud/workspace/ecs/launcher.py +8 -4
- dagster_cloud/workspace/kubernetes/launcher.py +5 -3
- dagster_cloud/workspace/kubernetes/utils.py +6 -3
- dagster_cloud/workspace/user_code_launcher/user_code_launcher.py +1 -1
- dagster_cloud/workspace/user_code_launcher/utils.py +14 -0
- {dagster_cloud-1.12.10.dist-info → dagster_cloud-1.12.11.dist-info}/METADATA +10 -8
- {dagster_cloud-1.12.10.dist-info → dagster_cloud-1.12.11.dist-info}/RECORD +13 -13
- {dagster_cloud-1.12.10.dist-info → dagster_cloud-1.12.11.dist-info}/WHEEL +0 -0
- {dagster_cloud-1.12.10.dist-info → dagster_cloud-1.12.11.dist-info}/top_level.txt +0 -0
|
@@ -30,6 +30,7 @@ from dagster._utils.merger import merge_dicts
|
|
|
30
30
|
from dagster._utils.typed_dict import init_optional_typeddict
|
|
31
31
|
from dagster_cloud_cli.core.errors import DagsterCloudHTTPError, raise_http_error
|
|
32
32
|
from dagster_cloud_cli.core.workspace import CodeLocationDeployData
|
|
33
|
+
from dagster_shared.record import replace
|
|
33
34
|
|
|
34
35
|
from dagster_cloud.agent.instrumentation.constants import DAGSTER_CLOUD_AGENT_METRIC_PREFIX
|
|
35
36
|
from dagster_cloud.agent.instrumentation.run_launch import extract_run_attributes
|
|
@@ -907,8 +908,9 @@ class DagsterCloudAgent:
|
|
|
907
908
|
user_code_launcher, deployment_name, cast("str", location_name)
|
|
908
909
|
)
|
|
909
910
|
serialized_snapshot_or_error = client.execution_plan_snapshot(
|
|
910
|
-
execution_plan_snapshot_args=
|
|
911
|
-
|
|
911
|
+
execution_plan_snapshot_args=replace(
|
|
912
|
+
request.request_args,
|
|
913
|
+
instance_ref=self._get_user_code_instance_ref(deployment_name),
|
|
912
914
|
)
|
|
913
915
|
)
|
|
914
916
|
return DagsterCloudApiGrpcResponse(
|
|
@@ -974,8 +976,9 @@ class DagsterCloudAgent:
|
|
|
974
976
|
user_code_launcher, deployment_name, cast("str", location_name)
|
|
975
977
|
)
|
|
976
978
|
|
|
977
|
-
args =
|
|
978
|
-
|
|
979
|
+
args = replace(
|
|
980
|
+
request.request_args,
|
|
981
|
+
instance_ref=self._get_user_code_instance_ref(deployment_name),
|
|
979
982
|
)
|
|
980
983
|
|
|
981
984
|
schedule_attributes = {
|
|
@@ -1007,8 +1010,9 @@ class DagsterCloudAgent:
|
|
|
1007
1010
|
user_code_launcher, deployment_name, cast("str", location_name)
|
|
1008
1011
|
)
|
|
1009
1012
|
|
|
1010
|
-
args =
|
|
1011
|
-
|
|
1013
|
+
args = replace(
|
|
1014
|
+
request.request_args,
|
|
1015
|
+
instance_ref=self._get_user_code_instance_ref(deployment_name),
|
|
1012
1016
|
)
|
|
1013
1017
|
|
|
1014
1018
|
sensor_attributes = {
|
dagster_cloud/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.12.
|
|
1
|
+
__version__ = "1.12.11"
|
|
@@ -40,6 +40,7 @@ from dagster_cloud.workspace.user_code_launcher import (
|
|
|
40
40
|
from dagster_cloud.workspace.user_code_launcher.user_code_launcher import UserCodeLauncherEntry
|
|
41
41
|
from dagster_cloud.workspace.user_code_launcher.utils import (
|
|
42
42
|
deterministic_label_for_location,
|
|
43
|
+
get_code_server_port,
|
|
43
44
|
get_grpc_server_env,
|
|
44
45
|
)
|
|
45
46
|
|
|
@@ -293,7 +294,7 @@ class DockerUserCodeLauncher(
|
|
|
293
294
|
|
|
294
295
|
has_network = len(self._networks) > 0
|
|
295
296
|
if has_network:
|
|
296
|
-
grpc_port =
|
|
297
|
+
grpc_port = get_code_server_port()
|
|
297
298
|
hostname = container_name
|
|
298
299
|
else:
|
|
299
300
|
grpc_port = find_free_port()
|
|
@@ -17,7 +17,7 @@ from dagster_aws.ecs.utils import is_transient_task_stopped_reason, task_definit
|
|
|
17
17
|
|
|
18
18
|
from dagster_cloud.workspace.ecs.service import Service
|
|
19
19
|
|
|
20
|
-
DEFAULT_ECS_TIMEOUT =
|
|
20
|
+
DEFAULT_ECS_TIMEOUT = 600
|
|
21
21
|
DEFAULT_ECS_GRACE_PERIOD = 30
|
|
22
22
|
|
|
23
23
|
STOPPED_TASK_GRACE_PERIOD = 30
|
|
@@ -53,13 +53,13 @@ from dagster_cloud.workspace.user_code_launcher.user_code_launcher import (
|
|
|
53
53
|
)
|
|
54
54
|
from dagster_cloud.workspace.user_code_launcher.utils import (
|
|
55
55
|
deterministic_label_for_location,
|
|
56
|
+
get_code_server_port,
|
|
56
57
|
get_grpc_server_env,
|
|
57
58
|
)
|
|
58
59
|
|
|
59
60
|
EcsServerHandleType = Service
|
|
60
61
|
|
|
61
62
|
CONTAINER_NAME = "dagster"
|
|
62
|
-
PORT = 4000
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
class EcsUserCodeLauncher(DagsterCloudUserCodeLauncher[EcsServerHandleType], ConfigurableClass):
|
|
@@ -405,7 +405,8 @@ class EcsUserCodeLauncher(DagsterCloudUserCodeLauncher[EcsServerHandleType], Con
|
|
|
405
405
|
|
|
406
406
|
if metadata.pex_metadata:
|
|
407
407
|
command = metadata.get_multipex_server_command(
|
|
408
|
-
|
|
408
|
+
get_code_server_port(),
|
|
409
|
+
metrics_enabled=self._instance.user_code_launcher.code_server_metrics_enabled,
|
|
409
410
|
)
|
|
410
411
|
additional_env = metadata.get_multipex_server_env()
|
|
411
412
|
tags = {
|
|
@@ -418,7 +419,10 @@ class EcsUserCodeLauncher(DagsterCloudUserCodeLauncher[EcsServerHandleType], Con
|
|
|
418
419
|
metrics_enabled=self._instance.user_code_launcher.code_server_metrics_enabled
|
|
419
420
|
)
|
|
420
421
|
additional_env = get_grpc_server_env(
|
|
421
|
-
metadata,
|
|
422
|
+
metadata,
|
|
423
|
+
get_code_server_port(),
|
|
424
|
+
location_name,
|
|
425
|
+
self._instance.ref_for_deployment(deployment_name),
|
|
422
426
|
)
|
|
423
427
|
tags = {
|
|
424
428
|
"dagster/grpc_server": "1",
|
|
@@ -524,7 +528,7 @@ class EcsUserCodeLauncher(DagsterCloudUserCodeLauncher[EcsServerHandleType], Con
|
|
|
524
528
|
|
|
525
529
|
endpoint = ServerEndpoint(
|
|
526
530
|
host=service.hostname,
|
|
527
|
-
port=
|
|
531
|
+
port=get_code_server_port(),
|
|
528
532
|
socket=None,
|
|
529
533
|
)
|
|
530
534
|
|
|
@@ -34,7 +34,6 @@ from dagster_cloud.constants import RESERVED_ENV_VAR_NAMES
|
|
|
34
34
|
from dagster_cloud.execution.cloud_run_launcher.k8s import CloudK8sRunLauncher
|
|
35
35
|
from dagster_cloud.execution.monitoring import CloudContainerResourceLimits
|
|
36
36
|
from dagster_cloud.workspace.kubernetes.utils import (
|
|
37
|
-
SERVICE_PORT,
|
|
38
37
|
construct_code_location_deployment,
|
|
39
38
|
construct_code_location_service,
|
|
40
39
|
get_deployment_failure_debug_info,
|
|
@@ -49,7 +48,10 @@ from dagster_cloud.workspace.user_code_launcher import (
|
|
|
49
48
|
ServerEndpoint,
|
|
50
49
|
UserCodeLauncherEntry,
|
|
51
50
|
)
|
|
52
|
-
from dagster_cloud.workspace.user_code_launcher.utils import
|
|
51
|
+
from dagster_cloud.workspace.user_code_launcher.utils import (
|
|
52
|
+
deterministic_label_for_location,
|
|
53
|
+
get_code_server_port,
|
|
54
|
+
)
|
|
53
55
|
|
|
54
56
|
DEFAULT_DEPLOYMENT_STARTUP_TIMEOUT = 300
|
|
55
57
|
DEFAULT_IMAGE_PULL_GRACE_PERIOD = 30
|
|
@@ -506,7 +508,7 @@ class K8sUserCodeLauncher(DagsterCloudUserCodeLauncher[K8sHandle], ConfigurableC
|
|
|
506
508
|
|
|
507
509
|
endpoint = ServerEndpoint(
|
|
508
510
|
host=host,
|
|
509
|
-
port=
|
|
511
|
+
port=get_code_server_port(),
|
|
510
512
|
socket=None,
|
|
511
513
|
)
|
|
512
514
|
|
|
@@ -13,13 +13,13 @@ from kubernetes import client
|
|
|
13
13
|
from dagster_cloud.instance import DagsterCloudAgentInstance
|
|
14
14
|
from dagster_cloud.workspace.user_code_launcher.utils import (
|
|
15
15
|
deterministic_label_for_location,
|
|
16
|
+
get_code_server_port,
|
|
16
17
|
get_grpc_server_env,
|
|
17
18
|
get_human_readable_label,
|
|
18
19
|
unique_resource_name,
|
|
19
20
|
)
|
|
20
21
|
|
|
21
22
|
MANAGED_RESOURCES_LABEL = {"managed_by": "K8sUserCodeLauncher"}
|
|
22
|
-
SERVICE_PORT = 4000
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
def _get_dagster_k8s_labels(
|
|
@@ -106,7 +106,7 @@ def construct_code_location_service(
|
|
|
106
106
|
},
|
|
107
107
|
"spec": {
|
|
108
108
|
"selector": {"user-deployment": service_name},
|
|
109
|
-
"ports": [{"name": "grpc", "protocol": "TCP", "port":
|
|
109
|
+
"ports": [{"name": "grpc", "protocol": "TCP", "port": get_code_server_port()}],
|
|
110
110
|
},
|
|
111
111
|
},
|
|
112
112
|
)
|
|
@@ -123,7 +123,10 @@ def construct_code_location_deployment(
|
|
|
123
123
|
server_timestamp: float,
|
|
124
124
|
):
|
|
125
125
|
env = get_grpc_server_env(
|
|
126
|
-
metadata,
|
|
126
|
+
metadata,
|
|
127
|
+
get_code_server_port(),
|
|
128
|
+
location_name,
|
|
129
|
+
instance.ref_for_deployment(deployment_name),
|
|
127
130
|
)
|
|
128
131
|
|
|
129
132
|
user_defined_config = container_context.server_k8s_config
|
|
@@ -1558,7 +1558,7 @@ class DagsterCloudUserCodeLauncher(
|
|
|
1558
1558
|
del self._multipex_servers[deployment_location]
|
|
1559
1559
|
|
|
1560
1560
|
def _refresh_actual_entries(self) -> None:
|
|
1561
|
-
for deployment_location, multipex_server in self._multipex_servers.items():
|
|
1561
|
+
for deployment_location, multipex_server in self._multipex_servers.copy().items():
|
|
1562
1562
|
if deployment_location in self._actual_entries:
|
|
1563
1563
|
# If a multipex server exists, we query it over gRPC
|
|
1564
1564
|
# to make sure the pex server is still available.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import hashlib
|
|
2
2
|
import json
|
|
3
|
+
import os
|
|
3
4
|
import uuid
|
|
4
5
|
from typing import Optional
|
|
5
6
|
|
|
@@ -8,6 +9,19 @@ from dagster._core.instance.ref import InstanceRef
|
|
|
8
9
|
from dagster._serdes import serialize_value
|
|
9
10
|
from dagster_cloud_cli.core.workspace import CodeLocationDeployData
|
|
10
11
|
|
|
12
|
+
DEFAULT_CODE_SERVER_PORT = 4000
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def get_code_server_port() -> int:
|
|
16
|
+
"""Returns the code server port from DAGSTER_CLOUD_CODE_SERVER_PORT env var.
|
|
17
|
+
|
|
18
|
+
Defaults to 4000 if the environment variable is not set.
|
|
19
|
+
"""
|
|
20
|
+
port_str = os.environ.get("DAGSTER_CLOUD_CODE_SERVER_PORT")
|
|
21
|
+
if port_str is None:
|
|
22
|
+
return DEFAULT_CODE_SERVER_PORT
|
|
23
|
+
return int(port_str)
|
|
24
|
+
|
|
11
25
|
|
|
12
26
|
def unique_resource_name(deployment_name, location_name, length_limit, sanitize_fn):
|
|
13
27
|
hash_value = str(uuid.uuid4().hex)[0:6]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dagster-cloud
|
|
3
|
-
Version: 1.12.
|
|
3
|
+
Version: 1.12.11
|
|
4
4
|
Author-email: Elementl <support@elementl.com>
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://dagster.io/cloud
|
|
@@ -22,15 +22,17 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.10
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.11
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
27
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
26
28
|
Classifier: Topic :: System :: Monitoring
|
|
27
29
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
28
30
|
Classifier: Operating System :: OS Independent
|
|
29
|
-
Requires-Python: <3.
|
|
31
|
+
Requires-Python: <3.15,>=3.9
|
|
30
32
|
Description-Content-Type: text/markdown
|
|
31
|
-
Requires-Dist: dagster==1.12.
|
|
32
|
-
Requires-Dist: dagster-shared==1.12.
|
|
33
|
-
Requires-Dist: dagster-cloud-cli==1.12.
|
|
33
|
+
Requires-Dist: dagster==1.12.11
|
|
34
|
+
Requires-Dist: dagster-shared==1.12.11
|
|
35
|
+
Requires-Dist: dagster-cloud-cli==1.12.11
|
|
34
36
|
Requires-Dist: opentelemetry-api<2,>=1.27.0
|
|
35
37
|
Requires-Dist: opentelemetry-sdk<2,>=1.27.0
|
|
36
38
|
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc<2,>=1.27.0
|
|
@@ -65,12 +67,12 @@ Provides-Extra: insights
|
|
|
65
67
|
Requires-Dist: pyarrow; extra == "insights"
|
|
66
68
|
Provides-Extra: docker
|
|
67
69
|
Requires-Dist: docker; extra == "docker"
|
|
68
|
-
Requires-Dist: dagster-docker==0.28.
|
|
70
|
+
Requires-Dist: dagster-docker==0.28.11; extra == "docker"
|
|
69
71
|
Provides-Extra: kubernetes
|
|
70
72
|
Requires-Dist: kubernetes; extra == "kubernetes"
|
|
71
|
-
Requires-Dist: dagster-k8s==0.28.
|
|
73
|
+
Requires-Dist: dagster-k8s==0.28.11; extra == "kubernetes"
|
|
72
74
|
Provides-Extra: ecs
|
|
73
|
-
Requires-Dist: dagster-aws==0.28.
|
|
75
|
+
Requires-Dist: dagster-aws==0.28.11; extra == "ecs"
|
|
74
76
|
Requires-Dist: boto3; extra == "ecs"
|
|
75
77
|
Provides-Extra: sandbox
|
|
76
78
|
Requires-Dist: supervisor; extra == "sandbox"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
dagster_cloud/__init__.py,sha256=zyM9bqyJFxtEClv_5X4VRldrj0UniKgZzEl0pPJJ_Ts,355
|
|
2
2
|
dagster_cloud/constants.py,sha256=CPAqXJ99SWGMviksdIA2A9894FEvHChNk8UcP4TluYM,455
|
|
3
3
|
dagster_cloud/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
dagster_cloud/version.py,sha256=
|
|
4
|
+
dagster_cloud/version.py,sha256=V9Hrmon3VMx6Fm-BKFFV3DZcAfdU2IO-xs1MB4F4LlI,24
|
|
5
5
|
dagster_cloud/agent/__init__.py,sha256=_erVyIrxuHUiyNerwX8vNZcKZN8NAloTEkPq8vPZ3MI,811
|
|
6
|
-
dagster_cloud/agent/dagster_cloud_agent.py,sha256=
|
|
6
|
+
dagster_cloud/agent/dagster_cloud_agent.py,sha256=a2RMAOE8t0NPBD5Exw4-AJuvILx-rraQw4sIqhUfO-E,61661
|
|
7
7
|
dagster_cloud/agent/queries.py,sha256=iI84GQ1Zxt5ryo6M1ELIaIae-gwUY14QPPMUeiFK97o,1837
|
|
8
8
|
dagster_cloud/agent/cli/__init__.py,sha256=rGbeQJ2Ap95wPYQuk5XbyHAfP9cs-XPUSmuVM_k278k,9084
|
|
9
9
|
dagster_cloud/agent/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -113,22 +113,22 @@ dagster_cloud/workspace/config_schema/__init__.py,sha256=tkGPjf7fw_k0bB_FDZJsIdN
|
|
|
113
113
|
dagster_cloud/workspace/config_schema/docker.py,sha256=Xs7FDBVpIOMlWcKXrVWX_lSDgf9qpc9UpYcps1IdQDQ,967
|
|
114
114
|
dagster_cloud/workspace/config_schema/ecs.py,sha256=NKB08hsYlowORvBHCrTqmKVbF67q1XDb-40s1phI5DE,6575
|
|
115
115
|
dagster_cloud/workspace/config_schema/kubernetes.py,sha256=JIdZ5hX06hAw1lGT-5AcwZjfoKMnMj3PKjaQ9GDUL-U,5286
|
|
116
|
-
dagster_cloud/workspace/docker/__init__.py,sha256=
|
|
116
|
+
dagster_cloud/workspace/docker/__init__.py,sha256=LLjxPAUHtxuI-kIDH6jpl9HhSYnDfMRCHgKS355ODHM,15204
|
|
117
117
|
dagster_cloud/workspace/docker/utils.py,sha256=VjT2kiCTByZj9HIQIO34Ukqvb-3cqlMQe54wqmyNh9I,374
|
|
118
118
|
dagster_cloud/workspace/ecs/__init__.py,sha256=Gys8s6kBDnfi198uRflXXRshwOKW-MBEACWqR_SCY-E,92
|
|
119
|
-
dagster_cloud/workspace/ecs/client.py,sha256=
|
|
120
|
-
dagster_cloud/workspace/ecs/launcher.py,sha256=
|
|
119
|
+
dagster_cloud/workspace/ecs/client.py,sha256=sZ4qWgY8d_0kHSnUY9dUmSNY0I5SSOBfFjhbmf0hQ_o,31157
|
|
120
|
+
dagster_cloud/workspace/ecs/launcher.py,sha256=rkXccZlkIXCloxnnH0Grf__4juf0zbDG1-NG2bz55aw,31323
|
|
121
121
|
dagster_cloud/workspace/ecs/run_launcher.py,sha256=e8Rgd3dcrHL1O_Q7UcR11JO75sxCcA8YaaOUmpk3WrU,600
|
|
122
122
|
dagster_cloud/workspace/ecs/service.py,sha256=v-puyDEg2BzHA3RJqEhH8V04bUAcrYIlPCH1SThvwWw,4126
|
|
123
123
|
dagster_cloud/workspace/ecs/utils.py,sha256=lWFk48l4a_pCIwP6bClQlb-KmqDS-Wl_8uHlbpGttUw,2990
|
|
124
124
|
dagster_cloud/workspace/kubernetes/__init__.py,sha256=Ds-wUB4LYTOHyYH3xN_QFl7J96qU-_e7gwHPllfIl2o,99
|
|
125
|
-
dagster_cloud/workspace/kubernetes/launcher.py,sha256
|
|
126
|
-
dagster_cloud/workspace/kubernetes/utils.py,sha256=
|
|
125
|
+
dagster_cloud/workspace/kubernetes/launcher.py,sha256=-gaFgxBV8xiAU1r78AYOQGM7vbI9qn2zZj03KjZrfWI,28405
|
|
126
|
+
dagster_cloud/workspace/kubernetes/utils.py,sha256=agkvwi24NPpGexgxV8aJplnLYmxmmXGD5mHCe6rekGU,12285
|
|
127
127
|
dagster_cloud/workspace/user_code_launcher/__init__.py,sha256=E-Izs69AHPAXD9pqd3UH46l4uKxM4Lbz7y2G4KeWzEQ,880
|
|
128
128
|
dagster_cloud/workspace/user_code_launcher/process.py,sha256=6TwjlXZzBlzyQEvmGzuVAUgxe_vCye0Q3aYkPPDAshs,14315
|
|
129
|
-
dagster_cloud/workspace/user_code_launcher/user_code_launcher.py,sha256=
|
|
130
|
-
dagster_cloud/workspace/user_code_launcher/utils.py,sha256=
|
|
131
|
-
dagster_cloud-1.12.
|
|
132
|
-
dagster_cloud-1.12.
|
|
133
|
-
dagster_cloud-1.12.
|
|
134
|
-
dagster_cloud-1.12.
|
|
129
|
+
dagster_cloud/workspace/user_code_launcher/user_code_launcher.py,sha256=JIeKdkVFENYvm1HF-JuFTQOtIa7dNxDhalIfJD3w1eA,103707
|
|
130
|
+
dagster_cloud/workspace/user_code_launcher/utils.py,sha256=gdZEi8Z4EWLNlAljzCWBz3oJ_h8HaiVnN9_BUoCghWw,5845
|
|
131
|
+
dagster_cloud-1.12.11.dist-info/METADATA,sha256=xLryGtKS2RTaJHV8-ofLQ2XhfqlnI_sKyk33_zPb9e0,6691
|
|
132
|
+
dagster_cloud-1.12.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
133
|
+
dagster_cloud-1.12.11.dist-info/top_level.txt,sha256=2hMt-U33jyCgnywNrDB9Ih0EpaVmiO6dFkYcJ7Iwx4I,14
|
|
134
|
+
dagster_cloud-1.12.11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|