iris-devtester 1.9.1__py3-none-any.whl → 1.9.3__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.
- iris_devtester/__init__.py +1 -1
- iris_devtester/cli/container.py +45 -4
- iris_devtester/config/container_config.py +6 -7
- iris_devtester/config/container_state.py +6 -7
- iris_devtester/config/yaml_loader.py +1 -1
- iris_devtester/connections/__init__.py +1 -1
- iris_devtester/containers/iris_container.py +4 -7
- iris_devtester/ports/registry.py +2 -2
- iris_devtester/utils/health_checks.py +1 -1
- iris_devtester/utils/password.py +2 -2
- {iris_devtester-1.9.1.dist-info → iris_devtester-1.9.3.dist-info}/METADATA +45 -1
- {iris_devtester-1.9.1.dist-info → iris_devtester-1.9.3.dist-info}/RECORD +16 -16
- {iris_devtester-1.9.1.dist-info → iris_devtester-1.9.3.dist-info}/WHEEL +0 -0
- {iris_devtester-1.9.1.dist-info → iris_devtester-1.9.3.dist-info}/entry_points.txt +0 -0
- {iris_devtester-1.9.1.dist-info → iris_devtester-1.9.3.dist-info}/licenses/LICENSE +0 -0
- {iris_devtester-1.9.1.dist-info → iris_devtester-1.9.3.dist-info}/top_level.txt +0 -0
iris_devtester/__init__.py
CHANGED
iris_devtester/cli/container.py
CHANGED
|
@@ -31,6 +31,12 @@ def container_group(ctx):
|
|
|
31
31
|
@click.option(
|
|
32
32
|
"--config", type=click.Path(exists=True), help="Path to iris-config.yml configuration file"
|
|
33
33
|
)
|
|
34
|
+
@click.option(
|
|
35
|
+
"--name",
|
|
36
|
+
type=str,
|
|
37
|
+
default=None,
|
|
38
|
+
help="Container name (default: iris_db)",
|
|
39
|
+
)
|
|
34
40
|
@click.option(
|
|
35
41
|
"--detach/--no-detach",
|
|
36
42
|
default=True,
|
|
@@ -41,7 +47,7 @@ def container_group(ctx):
|
|
|
41
47
|
)
|
|
42
48
|
@click.option("--cpf", help="Path to CPF merge file or raw CPF content")
|
|
43
49
|
@click.pass_context
|
|
44
|
-
def up(ctx, config, detach, timeout, cpf):
|
|
50
|
+
def up(ctx, config, name, detach, timeout, cpf):
|
|
45
51
|
"""
|
|
46
52
|
Create and start IRIS container from configuration.
|
|
47
53
|
|
|
@@ -58,6 +64,9 @@ def up(ctx, config, detach, timeout, cpf):
|
|
|
58
64
|
# Zero-config (uses Community edition defaults)
|
|
59
65
|
iris-devtester container up
|
|
60
66
|
|
|
67
|
+
# With custom container name
|
|
68
|
+
iris-devtester container up --name my-test-db
|
|
69
|
+
|
|
61
70
|
# With custom configuration including volumes
|
|
62
71
|
iris-devtester container up --config iris-config.yml
|
|
63
72
|
|
|
@@ -85,6 +94,11 @@ def up(ctx, config, detach, timeout, cpf):
|
|
|
85
94
|
container_config = ContainerConfig.default()
|
|
86
95
|
click.echo("⚡ Creating container from zero-config defaults")
|
|
87
96
|
|
|
97
|
+
# Override container name if provided via --name
|
|
98
|
+
if name:
|
|
99
|
+
container_config.container_name = name
|
|
100
|
+
click.echo(f" → Container name: {name}")
|
|
101
|
+
|
|
88
102
|
if cpf:
|
|
89
103
|
container_config.cpf_merge = cpf
|
|
90
104
|
click.echo(f" → CPF Merge: {cpf[:50]}...")
|
|
@@ -95,6 +109,36 @@ def up(ctx, config, detach, timeout, cpf):
|
|
|
95
109
|
if existing_container:
|
|
96
110
|
# Container exists - check if running
|
|
97
111
|
existing_container.reload()
|
|
112
|
+
|
|
113
|
+
# Warn if using default name and container already exists
|
|
114
|
+
# (user might be connecting to wrong container from different project)
|
|
115
|
+
if container_config.container_name == "iris_db" and not name:
|
|
116
|
+
existing_image = (
|
|
117
|
+
existing_container.image.tags[0] if existing_container.image.tags else "unknown"
|
|
118
|
+
)
|
|
119
|
+
click.echo("")
|
|
120
|
+
click.echo(
|
|
121
|
+
click.style(
|
|
122
|
+
"⚠️ WARNING: Using default container name 'iris_db'", fg="yellow", bold=True
|
|
123
|
+
)
|
|
124
|
+
)
|
|
125
|
+
click.echo(
|
|
126
|
+
click.style(
|
|
127
|
+
f" A container with this name already exists (image: {existing_image})",
|
|
128
|
+
fg="yellow",
|
|
129
|
+
)
|
|
130
|
+
)
|
|
131
|
+
click.echo(
|
|
132
|
+
click.style(
|
|
133
|
+
" If this is from a different project, use --name to avoid conflicts:",
|
|
134
|
+
fg="yellow",
|
|
135
|
+
)
|
|
136
|
+
)
|
|
137
|
+
click.echo(
|
|
138
|
+
click.style(" iris-devtester container up --name my-project-db", fg="cyan")
|
|
139
|
+
)
|
|
140
|
+
click.echo("")
|
|
141
|
+
|
|
98
142
|
if existing_container.status == "running":
|
|
99
143
|
click.echo(f"✓ Container '{container_config.container_name}' is already running")
|
|
100
144
|
|
|
@@ -808,9 +852,6 @@ def enable_callin(ctx, container_name, timeout):
|
|
|
808
852
|
except (ImportError, ModuleNotFoundError) as e:
|
|
809
853
|
progress.print_error(f"enable_callin utility not available: {e}")
|
|
810
854
|
ctx.exit(1)
|
|
811
|
-
except (click.exceptions.Exit, SystemExit, KeyboardInterrupt):
|
|
812
|
-
# Let Click handle these - don't catch them
|
|
813
|
-
raise
|
|
814
855
|
except Exception as e:
|
|
815
856
|
progress.print_error(f"Failed to enable CallIn: {e}")
|
|
816
857
|
ctx.exit(1)
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import os
|
|
4
4
|
import re
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import List, Literal, Optional
|
|
6
|
+
from typing import List, Literal, Optional, Union
|
|
7
7
|
|
|
8
|
-
from pydantic import BaseModel, Field, field_validator, model_validator
|
|
8
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
9
9
|
|
|
10
10
|
from iris_devtester.config.yaml_loader import load_yaml
|
|
11
11
|
|
|
@@ -122,7 +122,7 @@ class ContainerConfig(BaseModel):
|
|
|
122
122
|
return self
|
|
123
123
|
|
|
124
124
|
@classmethod
|
|
125
|
-
def from_yaml(cls, file_path: str
|
|
125
|
+
def from_yaml(cls, file_path: Union[str, Path]) -> "ContainerConfig":
|
|
126
126
|
"""
|
|
127
127
|
Load configuration from YAML file.
|
|
128
128
|
|
|
@@ -290,10 +290,8 @@ class ContainerConfig(BaseModel):
|
|
|
290
290
|
|
|
291
291
|
return errors
|
|
292
292
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
json_schema_extra = {
|
|
293
|
+
model_config = ConfigDict(
|
|
294
|
+
json_schema_extra={
|
|
297
295
|
"example": {
|
|
298
296
|
"edition": "community",
|
|
299
297
|
"container_name": "iris_db",
|
|
@@ -306,3 +304,4 @@ class ContainerConfig(BaseModel):
|
|
|
306
304
|
"image_tag": "latest",
|
|
307
305
|
}
|
|
308
306
|
}
|
|
307
|
+
)
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
from enum import Enum
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Dict,
|
|
6
|
+
from typing import Dict, Optional
|
|
7
7
|
|
|
8
|
-
from pydantic import BaseModel, Field, field_validator
|
|
8
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class ContainerStatus(str, Enum):
|
|
@@ -304,10 +304,8 @@ class ContainerState(BaseModel):
|
|
|
304
304
|
"config_source": str(self.config_source) if self.config_source else None,
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
json_schema_extra = {
|
|
307
|
+
model_config = ConfigDict(
|
|
308
|
+
json_schema_extra={
|
|
311
309
|
"example": {
|
|
312
310
|
"container_id": "a1b2c3d4e5f6" + "0" * 52, # 64 chars
|
|
313
311
|
"container_name": "iris_db",
|
|
@@ -316,8 +314,9 @@ class ContainerState(BaseModel):
|
|
|
316
314
|
"created_at": "2025-01-10T14:30:00Z",
|
|
317
315
|
"started_at": "2025-01-10T14:30:15Z",
|
|
318
316
|
"finished_at": None,
|
|
319
|
-
"ports": {1972: 1972, 52773: 52773},
|
|
317
|
+
"ports": {"1972": 1972, "52773": 52773},
|
|
320
318
|
"image": "intersystems/iris-community:latest",
|
|
321
319
|
"config_source": None,
|
|
322
320
|
}
|
|
323
321
|
}
|
|
322
|
+
)
|
|
@@ -52,8 +52,8 @@ def reset_password_if_needed(config_or_error, **kwargs):
|
|
|
52
52
|
If first arg is a config, attempts remediation and returns result object.
|
|
53
53
|
"""
|
|
54
54
|
from iris_devtester.testing.models import PasswordResetResult as ContractResult
|
|
55
|
-
from iris_devtester.utils.password import reset_password_if_needed as modern_reset
|
|
56
55
|
from iris_devtester.utils.password import PasswordResetResult as ModernResult
|
|
56
|
+
from iris_devtester.utils.password import reset_password_if_needed as modern_reset
|
|
57
57
|
|
|
58
58
|
if isinstance(config_or_error, Exception):
|
|
59
59
|
return modern_reset(config_or_error, **kwargs)
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
import os
|
|
3
2
|
import subprocess
|
|
4
3
|
import time
|
|
5
|
-
from typing import Any,
|
|
4
|
+
from typing import Any, Optional
|
|
6
5
|
|
|
7
|
-
from iris_devtester.config import IRISConfig
|
|
6
|
+
from iris_devtester.config import IRISConfig
|
|
8
7
|
from iris_devtester.connections import get_connection
|
|
9
8
|
|
|
10
9
|
logger = logging.getLogger(__name__)
|
|
@@ -185,7 +184,7 @@ class IRISContainer(IRISBase):
|
|
|
185
184
|
if is_enabled:
|
|
186
185
|
self._callin_enabled = True
|
|
187
186
|
return is_enabled
|
|
188
|
-
except:
|
|
187
|
+
except Exception:
|
|
189
188
|
return False
|
|
190
189
|
|
|
191
190
|
def get_test_namespace(self, prefix: str = "TEST") -> str:
|
|
@@ -238,9 +237,7 @@ class IRISContainer(IRISBase):
|
|
|
238
237
|
self.host = self.get_container_host_ip()
|
|
239
238
|
self._mapped_port = int(self.get_exposed_port(1972)) # Use internal port to get mapping
|
|
240
239
|
config.host = self.host
|
|
241
|
-
config.port =
|
|
242
|
-
self._mapped_port
|
|
243
|
-
) # Config uses the host-mapped port for connections
|
|
240
|
+
config.port = self._mapped_port # Config uses the host-mapped port for connections
|
|
244
241
|
except Exception:
|
|
245
242
|
pass
|
|
246
243
|
return config
|
iris_devtester/ports/registry.py
CHANGED
|
@@ -7,7 +7,7 @@ Provides atomic file-based persistence with file locking for concurrent safety.
|
|
|
7
7
|
import json
|
|
8
8
|
from datetime import datetime
|
|
9
9
|
from pathlib import Path
|
|
10
|
-
from typing import List, Optional
|
|
10
|
+
from typing import List, Literal, Optional
|
|
11
11
|
|
|
12
12
|
from filelock import FileLock, Timeout
|
|
13
13
|
|
|
@@ -89,7 +89,7 @@ class PortRegistry:
|
|
|
89
89
|
# Manual port assignment
|
|
90
90
|
self._validate_port_available(assignments, preferred_port, project_path)
|
|
91
91
|
port = preferred_port
|
|
92
|
-
assignment_type = "manual"
|
|
92
|
+
assignment_type: Literal["auto", "manual"] = "manual"
|
|
93
93
|
else:
|
|
94
94
|
# Auto-assignment
|
|
95
95
|
port = self._find_available_port(assignments)
|
|
@@ -379,7 +379,7 @@ def enable_callin_service(container: Container) -> None:
|
|
|
379
379
|
"""
|
|
380
380
|
# Execute ObjectScript to enable CallIn
|
|
381
381
|
objectscript_cmd = (
|
|
382
|
-
"iris session
|
|
382
|
+
"iris session IRIS -U%SYS "
|
|
383
383
|
'"Do ##class(Security.Services).Get("%Service_CallIn", .service) '
|
|
384
384
|
"Set service.Enabled = 1 "
|
|
385
385
|
'Do ##class(Security.Services).Modify("%Service_CallIn", .service)"'
|
iris_devtester/utils/password.py
CHANGED
|
@@ -572,7 +572,7 @@ Halt
|
|
|
572
572
|
container_name,
|
|
573
573
|
"sh",
|
|
574
574
|
"-c",
|
|
575
|
-
f'iris session
|
|
575
|
+
f'iris session IRIS -U %SYS << "EOF"\n{objectscript_commands}\nEOF',
|
|
576
576
|
]
|
|
577
577
|
|
|
578
578
|
logger.info(f"Unexpiring passwords in container: {container_name}")
|
|
@@ -626,7 +626,7 @@ Halt
|
|
|
626
626
|
"\n"
|
|
627
627
|
"Manual fix:\n"
|
|
628
628
|
f" docker exec {container_name} bash -c 'echo \"do ##class(Security.Users)"
|
|
629
|
-
f'.UnExpireUserPasswords(\\"*\\")" | iris session
|
|
629
|
+
f'.UnExpireUserPasswords(\\"*\\")" | iris session IRIS -U %SYS\'\n',
|
|
630
630
|
)
|
|
631
631
|
|
|
632
632
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iris-devtester
|
|
3
|
-
Version: 1.9.
|
|
3
|
+
Version: 1.9.3
|
|
4
4
|
Summary: Battle-tested InterSystems IRIS infrastructure utilities for Python development
|
|
5
5
|
Author-email: InterSystems Community <community@intersystems.com>
|
|
6
6
|
Maintainer-email: Thomas Dyar <thomas.dyar@intersystems.com>
|
|
@@ -107,6 +107,50 @@ def test_connection():
|
|
|
107
107
|
assert cursor.fetchone()[0] == 1
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
+
## Container API
|
|
111
|
+
|
|
112
|
+
### Basic Usage
|
|
113
|
+
```python
|
|
114
|
+
from iris_devtester.containers import IRISContainer
|
|
115
|
+
|
|
116
|
+
# Community Edition (auto-detects ARM64 vs x86)
|
|
117
|
+
with IRISContainer.community() as iris:
|
|
118
|
+
conn = iris.get_connection()
|
|
119
|
+
|
|
120
|
+
# Enterprise Edition (requires license)
|
|
121
|
+
with IRISContainer.enterprise(license_key="/path/to/iris.key") as iris:
|
|
122
|
+
conn = iris.get_connection()
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Builder Methods
|
|
126
|
+
```python
|
|
127
|
+
# Set a custom container name (for debugging, logs, multiple containers)
|
|
128
|
+
iris = IRISContainer.community().with_name("my-test-db")
|
|
129
|
+
|
|
130
|
+
# Set credentials
|
|
131
|
+
iris = IRISContainer.community().with_credentials("_SYSTEM", "MyPassword")
|
|
132
|
+
|
|
133
|
+
# Pre-configure password (set via IRIS_PASSWORD env var at startup)
|
|
134
|
+
iris = IRISContainer.community().with_preconfigured_password("MyPassword")
|
|
135
|
+
|
|
136
|
+
# Chain multiple options
|
|
137
|
+
with IRISContainer.community() \
|
|
138
|
+
.with_name("integration-test-db") \
|
|
139
|
+
.with_credentials("_SYSTEM", "TestPass123") as iris:
|
|
140
|
+
conn = iris.get_connection()
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Constructor Parameters
|
|
144
|
+
```python
|
|
145
|
+
IRISContainer(
|
|
146
|
+
image="intersystemsdc/iris-community:latest", # Docker image
|
|
147
|
+
username="SuperUser", # Default username
|
|
148
|
+
password="SYS", # Default password
|
|
149
|
+
namespace="USER", # Default namespace
|
|
150
|
+
name="my-container", # Container name (alternative to with_name)
|
|
151
|
+
)
|
|
152
|
+
```
|
|
153
|
+
|
|
110
154
|
## Key Features
|
|
111
155
|
|
|
112
156
|
- **🔐 Automatic Password Management**: Remediates security flags using official system APIs.
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
iris_devtester/__init__.py,sha256=
|
|
1
|
+
iris_devtester/__init__.py,sha256=HzbADwcjJamdWENJTE4FaervonOKGTfKdxU8VkG_kcM,1848
|
|
2
2
|
iris_devtester/cli/__init__.py,sha256=yakDJH-EsnTBmKl_K7r2n47EDiWvfpwLVcY11KriQQQ,691
|
|
3
3
|
iris_devtester/cli/__main__.py,sha256=YgFAn0Q02AXgXRwAg70MR3U0IIjFHUSz38h5tPFJnGg,125
|
|
4
4
|
iris_devtester/cli/connection_commands.py,sha256=cabAufSsrrhwpxlPZFlsE-5Zi54176eGdJOApPLdZXA,11467
|
|
5
|
-
iris_devtester/cli/container.py,sha256=
|
|
5
|
+
iris_devtester/cli/container.py,sha256=FcDb6EiSa8SYvzsntxu5j5q6PCh1jba7wosd_KUqe0U,30736
|
|
6
6
|
iris_devtester/cli/container_commands.py,sha256=lOxa2TXnBK1ATCIzbbXexk-p0lItStUwU_gKVnv_p1w,4451
|
|
7
7
|
iris_devtester/cli/fixture_commands.py,sha256=w1n6MIujQsY46ZKG_L0aRF4lhohWh5dOrF0lgH_K3r0,17493
|
|
8
8
|
iris_devtester/config/__init__.py,sha256=acRVXpdKAp7lkZzrpKGnOYLgSfkxN3kpL1RU0b0hhlM,486
|
|
9
9
|
iris_devtester/config/auto_discovery.py,sha256=y1BD26rfEut1vjw77IXh0yel95BaUvMfMxzskIPPQec,10638
|
|
10
|
-
iris_devtester/config/container_config.py,sha256=
|
|
11
|
-
iris_devtester/config/container_state.py,sha256=
|
|
10
|
+
iris_devtester/config/container_config.py,sha256=UNtgjfWlO517KzH0upwpx1xBWpyvhXIZQmxRQ-OKLNI,10925
|
|
11
|
+
iris_devtester/config/container_state.py,sha256=O2i69oVj_B1NQRZqmPKPdjmYwonhPD0QLe1UZmGupI4,11218
|
|
12
12
|
iris_devtester/config/defaults.py,sha256=RgQal0IeDr215KIy6ZToDrsOdV4DwVJvMJE2SgAzVA4,1846
|
|
13
13
|
iris_devtester/config/discovery.py,sha256=7R64ykibns6N2W9hNZlg_8CQqpNwiWSITl6G72VnNws,5879
|
|
14
14
|
iris_devtester/config/models.py,sha256=aa2kd8t_UNawiA2BbU8GHlhVhVjqvEwLEmE75tewOo4,2706
|
|
15
15
|
iris_devtester/config/presets.py,sha256=yXRiSfOUtUUUDQTW1wx-BHrUDzXhjYTCF8iiJ4kwyrU,453
|
|
16
|
-
iris_devtester/config/yaml_loader.py,sha256=
|
|
17
|
-
iris_devtester/connections/__init__.py,sha256=
|
|
16
|
+
iris_devtester/config/yaml_loader.py,sha256=3OahoOeLtRtBAxo3pH0-a1RUdXwFB5wc2_jtF2WielQ,1320
|
|
17
|
+
iris_devtester/connections/__init__.py,sha256=0ci2QuyQPJxdtoJzeyd8CSw_0I4C9MB6UnsVzztdh5U,6018
|
|
18
18
|
iris_devtester/connections/auto_discovery.py,sha256=LCLdP90w7hfJrNj2oe6ueiSdmMDR5IdjztJ1wn9pvQc,5197
|
|
19
19
|
iris_devtester/connections/connection.py,sha256=4QPV_D4kNCw61qg7XT9rgJOYxu5ZmOcw2km8LiuQ2Nc,5536
|
|
20
20
|
iris_devtester/connections/dbapi.py,sha256=NmXwrgvfnN6K3051XenNFaqcbAipBNBvh7y3O2C4XUM,4767
|
|
@@ -24,7 +24,7 @@ iris_devtester/connections/models.py,sha256=rfKCFtm86wQZAv_cLOVS6N7P5vGlfkInSHbs
|
|
|
24
24
|
iris_devtester/connections/retry.py,sha256=FxNhlTA2RHI2ayvEF5w7P_EjO7k6xKgeA3mplJd3-co,2893
|
|
25
25
|
iris_devtester/containers/__init__.py,sha256=quWN4CtxRUMje8QkpZWMY79XlVOSM79HF5ewHLNz5YA,729
|
|
26
26
|
iris_devtester/containers/cpf_manager.py,sha256=GBkuM5mPw85lo7djINlTNkrQ8bGgRe2QEWv7YQQL6KU,1969
|
|
27
|
-
iris_devtester/containers/iris_container.py,sha256=
|
|
27
|
+
iris_devtester/containers/iris_container.py,sha256=GA9fgcjU0nLJnSP-PnZDWVMZcwOR7s45ZHK5pNxgYok,11083
|
|
28
28
|
iris_devtester/containers/models.py,sha256=f66fwQjlmw1Sl4M33QlglCv4ewNtk4TJLXXcmhNsbDA,13693
|
|
29
29
|
iris_devtester/containers/monitor_utils.py,sha256=cCsLp1cZYAbMmj7o6tUYhVurMEE7GOOe9Y5FLAxl6hM,4917
|
|
30
30
|
iris_devtester/containers/monitoring.py,sha256=E4v-5VW-_W7CVSRm_ryzpOfLQgP9NZ6WN7GYglsAFro,41172
|
|
@@ -42,7 +42,7 @@ iris_devtester/integrations/langchain.py,sha256=cIV8bq_wDKMOXLFQ1P-wdSFsJdxIV7o0
|
|
|
42
42
|
iris_devtester/ports/__init__.py,sha256=uLdbV7J7UJxJsoDqoyySTabIle72WltYDFKlN2-f7bI,506
|
|
43
43
|
iris_devtester/ports/assignment.py,sha256=7ayWfeqLfHDICLAmr3LaJAGs8Uz-Ehm3dHX-V44Frj0,1954
|
|
44
44
|
iris_devtester/ports/exceptions.py,sha256=mJLJAeZUmiBAfv0ubr6nh0K1iK-uk4bAX1gupyw5lzg,4967
|
|
45
|
-
iris_devtester/ports/registry.py,sha256=
|
|
45
|
+
iris_devtester/ports/registry.py,sha256=vf-vlPKNJCPGCCijz_ioioO5qjjMII2WndUlfDkgyxc,12916
|
|
46
46
|
iris_devtester/testing/__init__.py,sha256=VD02sIjDQ1HUFIRFrd1vQUwoExE2yRkeFJ1Goz4cCDs,1559
|
|
47
47
|
iris_devtester/testing/fixtures.py,sha256=Rh7NFlhKrGWy0YOHP1Bwyj1-E_99OJz5-TcG-3BhI6w,1139
|
|
48
48
|
iris_devtester/testing/helpers.py,sha256=fLJbs7A5Ay_TQ7sMimdtOpKONN4AdnFEzEhOsR28iBs,5021
|
|
@@ -53,14 +53,14 @@ iris_devtester/utils/container_port.py,sha256=BWz1f9DXJRavcH_FC1jY2mo3isb8lg_zB4
|
|
|
53
53
|
iris_devtester/utils/container_status.py,sha256=WTpKp1aq4R72lGcn8qvoB_h6GxB-zRdBWwqwO57C5Gg,6309
|
|
54
54
|
iris_devtester/utils/dbapi_compat.py,sha256=pYy8w8XA4syAI-dNeENCKv496BETyn_IsvpJpedMPDE,11782
|
|
55
55
|
iris_devtester/utils/enable_callin.py,sha256=DtDd3fJUz41Z73IUWycchrd6DdO6O0gvxthuuGIUfRo,7874
|
|
56
|
-
iris_devtester/utils/health_checks.py,sha256=
|
|
56
|
+
iris_devtester/utils/health_checks.py,sha256=FF5NK1DiwI7Ymkb6bWJTaXEam2EZzFHg4FwWZnBqQb8,17844
|
|
57
57
|
iris_devtester/utils/iris_container_adapter.py,sha256=0Vc55gDsVAxHZzk4wvZySGUJKRhFoDh5wM7RUMSLiCI,23239
|
|
58
|
-
iris_devtester/utils/password.py,sha256=
|
|
58
|
+
iris_devtester/utils/password.py,sha256=OqS6LNXMDopSoYGiodM2V9clghD4qcbIzftH4TdrMSU,21968
|
|
59
59
|
iris_devtester/utils/progress.py,sha256=5OmuntItqCgUFXSmaQjHwILrTnVLYECZ5glpSbvOTOU,7795
|
|
60
60
|
iris_devtester/utils/test_connection.py,sha256=cyEzxSbvxBxz44xLb7Jbz8OhHT8UgCZLO0lT-qShPEo,6950
|
|
61
|
-
iris_devtester-1.9.
|
|
62
|
-
iris_devtester-1.9.
|
|
63
|
-
iris_devtester-1.9.
|
|
64
|
-
iris_devtester-1.9.
|
|
65
|
-
iris_devtester-1.9.
|
|
66
|
-
iris_devtester-1.9.
|
|
61
|
+
iris_devtester-1.9.3.dist-info/licenses/LICENSE,sha256=dISbikDYS2uP710ZFzSzaSmKzIBRyi_6YwuwO97bT94,1083
|
|
62
|
+
iris_devtester-1.9.3.dist-info/METADATA,sha256=It5jOKAoyNkbBiyaYQw3kO5TFRog3I9lKeQl2f0eTIo,7682
|
|
63
|
+
iris_devtester-1.9.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
64
|
+
iris_devtester-1.9.3.dist-info/entry_points.txt,sha256=svOltni3vX3ul_qxbWl8fOA6ZrJeFASuN29pON6ftqw,59
|
|
65
|
+
iris_devtester-1.9.3.dist-info/top_level.txt,sha256=DnrLJ3laB5x_gTkmATDEg1v1lTOQxgmHgNd66bdXaoU,15
|
|
66
|
+
iris_devtester-1.9.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|