Skip to content

Commit da748f4

Browse files
authored
Merge pull request #99 from opensafely-core/thaw
Unfreeze core objects.
2 parents ed33dbd + 1cf1cf0 commit da748f4

File tree

3 files changed

+15
-23
lines changed

3 files changed

+15
-23
lines changed

airlock/api.py

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def get_url_for_path(self):
4444
raise NotImplementedError()
4545

4646

47-
@dataclass(frozen=True)
47+
@dataclass
4848
class Workspace(AirlockContainer):
4949
"""Simple wrapper around a workspace directory on disk.
5050
@@ -89,6 +89,9 @@ def abspath(self, relpath):
8989

9090
return path
9191

92+
def __hash__(self):
93+
return hash(self.name)
94+
9295

9396
@dataclass(frozen=True)
9497
class RequestFile:
@@ -109,7 +112,7 @@ class FileGroup:
109112
files: list[RequestFile]
110113

111114

112-
@dataclass(frozen=True)
115+
@dataclass
113116
class ReleaseRequest(AirlockContainer):
114117
"""Represents a release request made by a user.
115118
@@ -316,30 +319,22 @@ def set_status(
316319

317320
# validate first
318321
self.check_status(release_request, to_status, user)
319-
320-
# Ensure the state of this object is updated to reflect the change in status
321-
# This is deliberately bypassing the frozen aspect of the class to keep
322-
# things consistent. It does change the hash.
323-
release_request.__dict__["status"] = to_status
322+
release_request.status = to_status
324323

325324
def add_file_to_request(
326325
self,
327326
release_request: ReleaseRequest,
328327
relpath: Path,
329328
user: User,
330329
group_name: Optional[str] = "default",
331-
) -> ReleaseRequest:
330+
):
332331
"""Add a file to a request.
333332
334333
Subclasses should do what they need to create the filegroup and
335334
record the file metadata as needed and THEN
336335
call super().add_file_to_request(...) to do the
337336
copying. If the copying fails (e.g. due to permission errors raised
338337
below), the subclasses should roll back any changes.
339-
340-
After calling add_file_to_request, the current release_request's
341-
filegroups will be out of date. Subclasses should return a new
342-
ReleaseRequest to ensure filegroups are current.
343338
"""
344339
if user.username != release_request.author:
345340
raise self.RequestPermissionDenied(

local_db/api.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def add_file_to_request(
135135
relpath: Path,
136136
user: User,
137137
group_name: Optional[str] = "default",
138-
) -> ReleaseRequest:
138+
):
139139
with transaction.atomic():
140140
# Get/create the FileGroupMetadata if it doesn't already exist
141141
filegroupmetadata = self._get_or_create_filegroupmetadata(
@@ -163,5 +163,6 @@ def add_file_to_request(
163163
# state that allows adding files.
164164
super().add_file_to_request(release_request, relpath, user, group_name)
165165

166-
# return a new request object with the updated groups
167-
return self._request(self._find_metadata(release_request.id))
166+
# update instance
167+
metadata = self._find_metadata(release_request.id)
168+
release_request.filegroups = self._get_filegroups(metadata)

tests/unit/test_api.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ def test_release_request_filegroups_with_no_files(api):
294294
def test_release_request_filegroups_default_filegroup(api):
295295
release_request, path, author = setup_empty_release_request()
296296
assert release_request.filegroups == {}
297-
release_request = api.add_file_to_request(release_request, path, author)
297+
api.add_file_to_request(release_request, path, author)
298298
assert len(release_request.filegroups) == 1
299299
filegroup = release_request.filegroups["default"]
300300
assert filegroup.name == "default"
@@ -305,9 +305,7 @@ def test_release_request_filegroups_default_filegroup(api):
305305
def test_release_request_filegroups_named_filegroup(api):
306306
release_request, path, author = setup_empty_release_request()
307307
assert release_request.filegroups == {}
308-
release_request = api.add_file_to_request(
309-
release_request, path, author, "test_group"
310-
)
308+
api.add_file_to_request(release_request, path, author, "test_group")
311309
assert len(release_request.filegroups) == 1
312310
filegroup = release_request.filegroups["test_group"]
313311
assert filegroup.name == "test_group"
@@ -317,9 +315,7 @@ def test_release_request_filegroups_named_filegroup(api):
317315

318316
def test_release_request_filegroups_multiple_filegroups(api):
319317
release_request, path, author = setup_empty_release_request()
320-
release_request = api.add_file_to_request(
321-
release_request, path, author, "test_group"
322-
)
318+
api.add_file_to_request(release_request, path, author, "test_group")
323319
assert len(release_request.filegroups) == 1
324320

325321
workspace = api.get_workspace("workspace")
@@ -347,7 +343,7 @@ def test_release_request_filegroups_multiple_filegroups(api):
347343
def test_release_request_add_same_file(api):
348344
release_request, path, author = setup_empty_release_request()
349345
assert release_request.filegroups == {}
350-
release_request = api.add_file_to_request(release_request, path, author)
346+
api.add_file_to_request(release_request, path, author)
351347
assert len(release_request.filegroups) == 1
352348
assert len(release_request.filegroups["default"].files) == 1
353349

0 commit comments

Comments
 (0)