Skip to content

Commit db3519b

Browse files
committed
Move utility functions from api.py to old_api
They didn't really belong in the main API, as they're only used for talking to job server.
1 parent aef59c5 commit db3519b

File tree

4 files changed

+17
-21
lines changed

4 files changed

+17
-21
lines changed

airlock/api.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import shutil
22
from dataclasses import dataclass, field
33
from datetime import datetime
4-
from datetime import timezone as stdlib_timezone
54
from enum import Enum
65
from pathlib import Path
76
from typing import Optional
@@ -13,11 +12,6 @@
1312
from airlock.users import User
1413

1514

16-
def modified_time(path):
17-
mtime = path.stat().st_mtime
18-
return datetime.fromtimestamp(mtime, tz=stdlib_timezone.utc).isoformat()
19-
20-
2115
class Status(Enum):
2216
"""Status for release Requests"""
2317

@@ -49,13 +43,6 @@ def get_absolute_url(self):
4943
def get_url_for_path(self):
5044
raise NotImplementedError()
5145

52-
def filelist(self):
53-
"""List all files recursively."""
54-
path = self.root()
55-
return list(
56-
sorted(p.relative_to(path) for p in path.glob("**/*") if p.is_file())
57-
)
58-
5946

6047
@dataclass(frozen=True)
6148
class Workspace(AirlockContainer):

old_api/__init__.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,14 @@ def create_filelist(release_request):
1414
files = []
1515
root = release_request.root()
1616

17-
for relpath in release_request.filelist():
17+
for relpath in list_files(release_request.root()):
1818
abspath = root / relpath
19-
stat = abspath.stat()
20-
mtime = datetime.fromtimestamp(stat.st_mtime, tz=timezone.utc).isoformat()
2119
files.append(
2220
FileMetadata(
2321
name=str(relpath),
24-
size=stat.st_size,
22+
size=abspath.stat().st_size,
2523
sha256=hashlib.sha256(abspath.read_bytes()).hexdigest(),
26-
date=mtime,
24+
date=modified_time(abspath),
2725
url=str(relpath), # not needed, but has to be set
2826
metadata={"tool": "airlock"},
2927
)
@@ -65,3 +63,13 @@ def upload_file(release_id, relpath, abspath, username):
6563

6664
response.raise_for_status()
6765
return response
66+
67+
68+
def modified_time(path):
69+
mtime = path.stat().st_mtime
70+
return datetime.fromtimestamp(mtime, tz=timezone.utc).isoformat()
71+
72+
73+
def list_files(path):
74+
"""List all files recursively."""
75+
return list(sorted(p.relative_to(path) for p in path.glob("**/*") if p.is_file()))

tests/conftest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import responses as _responses
33
from django.conf import settings
44

5+
import old_api
56
import tests.factories
67
from local_db.api import LocalDBProvider
78

@@ -49,7 +50,7 @@ def release_files(request, jobserver_id="jobserver-id", body=None):
4950
)
5051

5152
if not isinstance(body, Exception):
52-
for path in request.filelist():
53+
for path in old_api.list_files(request.root()):
5354
responses.post(
5455
f"{settings.AIRLOCK_API_ENDPOINT}/releases/release/{jobserver_id}",
5556
status=201,

tests/unit/test_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pytest
66

77
import old_api
8-
from airlock.api import ProviderAPI, Status, Workspace, modified_time
8+
from airlock.api import ProviderAPI, Status, Workspace
99
from airlock.users import User
1010
from tests import factories
1111

@@ -79,7 +79,7 @@ def test_provider_request_release_files(mock_old_api):
7979
"url": "test/file.txt",
8080
"size": 4,
8181
"sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
82-
"date": modified_time(abspath),
82+
"date": old_api.modified_time(abspath),
8383
"metadata": {"tool": "airlock"},
8484
"review": None,
8585
}

0 commit comments

Comments
 (0)