diracx-db 0.0.1a25__tar.gz → 0.0.1a27__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.
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/PKG-INFO +1 -1
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/sandbox_metadata/db.py +10 -2
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/utils/base.py +2 -2
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/utils/functions.py +2 -1
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx_db.egg-info/PKG-INFO +1 -1
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/README.md +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/pyproject.toml +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/setup.cfg +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/__main__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/exceptions.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/os/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/os/job_parameters.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/os/utils.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/py.typed +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/auth/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/auth/db.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/auth/schema.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/dummy/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/dummy/db.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/dummy/schema.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/job/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/job/db.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/job/schema.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/job_logging/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/job_logging/db.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/job_logging/schema.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/pilot_agents/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/pilot_agents/db.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/pilot_agents/schema.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/sandbox_metadata/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/sandbox_metadata/schema.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/task_queue/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/task_queue/db.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/task_queue/schema.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/utils/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/utils/job.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx/db/sql/utils/types.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx_db.egg-info/SOURCES.txt +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx_db.egg-info/dependency_links.txt +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx_db.egg-info/entry_points.txt +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx_db.egg-info/requires.txt +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/src/diracx_db.egg-info/top_level.txt +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/auth/test_authorization_flow.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/auth/test_device_flow.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/auth/test_refresh_token.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/jobs/test_job_db.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/jobs/test_job_logging_db.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/jobs/test_sandbox_metadata.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/opensearch/test_connection.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/opensearch/test_index_template.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/opensearch/test_search.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/pilot_agents/__init__.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/pilot_agents/test_pilot_agents_db.py +0 -0
- {diracx_db-0.0.1a25 → diracx_db-0.0.1a27}/tests/test_dummy_db.py +0 -0
@@ -5,7 +5,7 @@ from typing import Any
|
|
5
5
|
from sqlalchemy import Executable, delete, insert, literal, select, update
|
6
6
|
from sqlalchemy.exc import IntegrityError, NoResultFound
|
7
7
|
|
8
|
-
from diracx.core.exceptions import SandboxNotFoundError
|
8
|
+
from diracx.core.exceptions import SandboxAlreadyAssignedError, SandboxNotFoundError
|
9
9
|
from diracx.core.models import SandboxInfo, SandboxType, UserInfo
|
10
10
|
from diracx.db.sql.utils import BaseSQLDB, utcnow
|
11
11
|
|
@@ -135,10 +135,18 @@ class SandboxMetadataDB(BaseSQLDB):
|
|
135
135
|
stmt = insert(SBEntityMapping).from_select(
|
136
136
|
["SBId", "EntityId", "Type"], select_sb_id
|
137
137
|
)
|
138
|
-
|
138
|
+
try:
|
139
|
+
await self.conn.execute(stmt)
|
140
|
+
except IntegrityError as e:
|
141
|
+
raise SandboxAlreadyAssignedError(pfn, se_name) from e
|
139
142
|
|
140
143
|
stmt = update(SandBoxes).where(SandBoxes.SEPFN == pfn).values(Assigned=True)
|
141
144
|
result = await self.conn.execute(stmt)
|
145
|
+
if result.rowcount == 0:
|
146
|
+
# If the update didn't affect any row, the sandbox doesn't exist
|
147
|
+
# It means the previous insert didn't have any effect
|
148
|
+
raise SandboxNotFoundError(pfn, se_name)
|
149
|
+
|
142
150
|
assert result.rowcount == 1
|
143
151
|
|
144
152
|
async def unassign_sandboxes_to_jobs(self, jobs_ids: list[int]) -> None:
|
@@ -232,7 +232,7 @@ def find_time_resolution(value):
|
|
232
232
|
if isinstance(value, datetime):
|
233
233
|
return None, value
|
234
234
|
if match := re.fullmatch(
|
235
|
-
r"\d{4}(-\d{2}(-\d{2}(([ T])\d{2}(:\d{2}(:\d{2}(\.\d{6}Z?)?)?)?)?)?)?", value
|
235
|
+
r"\d{4}(-\d{2}(-\d{2}(([ T])\d{2}(:\d{2}(:\d{2}(\.\d{1,6}Z?)?)?)?)?)?)?", value
|
236
236
|
):
|
237
237
|
if match.group(6):
|
238
238
|
precision, pattern = "SECOND", r"\1-\2-\3 \4:\5:\6"
|
@@ -249,7 +249,7 @@ def find_time_resolution(value):
|
|
249
249
|
return (
|
250
250
|
precision,
|
251
251
|
re.sub(
|
252
|
-
r"^(\d{4})-?(\d{2})?-?(\d{2})?[ T]?(\d{2})?:?(\d{2})?:?(\d{2})?\.?(\d{6})?Z?$",
|
252
|
+
r"^(\d{4})-?(\d{2})?-?(\d{2})?[ T]?(\d{2})?:?(\d{2})?:?(\d{2})?\.?(\d{1,6})?Z?$",
|
253
253
|
pattern,
|
254
254
|
value,
|
255
255
|
),
|
@@ -47,7 +47,8 @@ class date_trunc(expression.FunctionElement): # noqa: N801
|
|
47
47
|
"""
|
48
48
|
|
49
49
|
type = DateTime()
|
50
|
-
|
50
|
+
# Cache does not work as intended with time resolution values, so we disable it
|
51
|
+
inherit_cache = False
|
51
52
|
|
52
53
|
def __init__(self, *args, time_resolution, **kwargs) -> None:
|
53
54
|
super().__init__(*args, **kwargs)
|
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
|
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
|