From 1f171ca41a4e439235166ad51e3cc856e9725e44 Mon Sep 17 00:00:00 2001 From: Gyeongjae Choi Date: Tue, 1 Sep 2026 22:03:45 +0900 Subject: [PATCH] fix(django-cf): remove redundant to_py() calls from r2 and do --- .../django_cf/db/backends/do/base.py | 2 +- packages/django-cf/django_cf/storage/r2.py | 6 +++--- .../worker/src/test_storage_errors.py | 21 +++++++++++++++++++ .../worker/src/worker_durable_object.py | 10 +++++++++ 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/packages/django-cf/django_cf/db/backends/do/base.py b/packages/django-cf/django_cf/db/backends/do/base.py index 7e1d6c51..abd38377 100644 --- a/packages/django-cf/django_cf/db/backends/do/base.py +++ b/packages/django-cf/django_cf/db/backends/do/base.py @@ -46,7 +46,7 @@ def run_query(self, query, params=None) -> CFResult: stmt = db.exec(proc_query) try: - response = stmt.raw().toArray().to_py() + response = stmt.raw().toArray() result = CFResult.from_object( query, params, response, stmt.rowsRead, stmt.rowsWritten ) diff --git a/packages/django-cf/django_cf/storage/r2.py b/packages/django-cf/django_cf/storage/r2.py index 17ec7d32..ed615778 100644 --- a/packages/django-cf/django_cf/storage/r2.py +++ b/packages/django-cf/django_cf/storage/r2.py @@ -157,7 +157,7 @@ def exists(self, name): full_path = self._full_path(name) try: bucket = self._get_bucket() - result = self._run_sync(bucket.head(full_path)).to_py() + result = self._run_sync(bucket.head(full_path)) return result is not None except Exception: return False @@ -199,7 +199,7 @@ def size(self, name): full_path = self._full_path(name) try: bucket = self._get_bucket() - metadata = self._run_sync(bucket.head(full_path)).to_py() + metadata = self._run_sync(bucket.head(full_path)) if metadata and hasattr(metadata, "size"): return metadata.size return 0 @@ -246,7 +246,7 @@ def get_modified_time(self, name): full_path = self._full_path(name) try: bucket = self._get_bucket() - metadata = self._run_sync(bucket.head(full_path)).to_py() + metadata = self._run_sync(bucket.head(full_path)) if metadata and hasattr(metadata, "uploaded"): uploaded = metadata.uploaded diff --git a/packages/django-cf/tests/in_worker/worker/src/test_storage_errors.py b/packages/django-cf/tests/in_worker/worker/src/test_storage_errors.py index 32652373..3ccfa666 100644 --- a/packages/django-cf/tests/in_worker/worker/src/test_storage_errors.py +++ b/packages/django-cf/tests/in_worker/worker/src/test_storage_errors.py @@ -109,6 +109,16 @@ def test_read_returns_none_on_not_found(self): class TestR2StorageExistsErrors: + def test_exists_returns_true_for_existing_file(self): + storage = make_live_r2_storage(location=unique_name("r2-existing-exists")) + name = "file.txt" + save_bytes(storage, name, b"content") + + try: + assert storage.exists(name) is True + finally: + storage.delete(name) + def test_exists_returns_false_on_not_found(self): storage = make_live_r2_storage(location=unique_name("r2-missing-exists")) @@ -116,6 +126,17 @@ def test_exists_returns_false_on_not_found(self): class TestR2StorageSizeErrors: + def test_size_returns_existing_file_size(self): + storage = make_live_r2_storage(location=unique_name("r2-existing-size")) + name = "file.txt" + content = b"test content" + save_bytes(storage, name, content) + + try: + assert storage.size(name) == len(content) + finally: + storage.delete(name) + def test_size_returns_zero_on_not_found(self): storage = make_live_r2_storage(location=unique_name("r2-missing-size")) diff --git a/packages/django-cf/tests/in_worker/worker/src/worker_durable_object.py b/packages/django-cf/tests/in_worker/worker/src/worker_durable_object.py index 8e4fe045..3d4ab6da 100644 --- a/packages/django-cf/tests/in_worker/worker/src/worker_durable_object.py +++ b/packages/django-cf/tests/in_worker/worker/src/worker_durable_object.py @@ -9,6 +9,9 @@ class TestDurableObject(DjangoCFDurableObject, DurableObject): + def __init__(self, ctx, env): + super().__init__(ctx, env) + def get_app(self): return django_wsgi_app() @@ -29,6 +32,9 @@ async def drop_orm_table(self): self.ctx.storage.sql.exec(DROP_DO_TABLE_SQL) async def test_storage_is_configured(self): + from workers.entrypoints import DurableObjectContext + + assert isinstance(self.ctx, DurableObjectContext) assert get_storage() is not None async def test_run_query_uses_configured_storage(self): @@ -38,6 +44,10 @@ async def test_run_query_uses_configured_storage(self): sql.exec(f"CREATE TABLE {table} (id INTEGER PRIMARY KEY, value TEXT)") sql.exec(f"INSERT INTO {table} VALUES (?, ?)", 1, "ok") + rows = sql.exec(f"SELECT id, value FROM {table}").raw().toArray() + assert isinstance(rows, list) + assert rows == [[1, "ok"]] + result = self.database.run_query( f"SELECT id, value FROM {table} WHERE id = %s", [1] )