You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by as...@apache.org on 2026/04/30 14:47:59 UTC

(opendal) branch main updated: test(bindings/python): add focused behavior tests for write conditional options (#7446)

This is an automated email from the ASF dual-hosted git repository.

asukaminato0721 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new 5b5a3e85e test(bindings/python): add focused behavior tests for write conditional options (#7446)
5b5a3e85e is described below

commit 5b5a3e85e5b36f067be7d69e9155cb633482f976
Author: TennyZhuang <zt...@gmail.com>
AuthorDate: Thu Apr 30 22:47:48 2026 +0800

    test(bindings/python): add focused behavior tests for write conditional options (#7446)
    
    * test(bindings/python): add focused behavior tests for write conditional options
    
    Adds tests verifying write() accepts if_match, if_none_match, and
    if_not_exists parameters for both sync and async operators.
    
    These options were already exposed in the Python API but lacked
    dedicated behavior tests.
    
    Co-Authored-By: Claude Sonnet 4.6 <no...@anthropic.com>
    
    * fix(bindings/python): gate write conditional tests on specific capabilities and fix line length
    
    ---------
    
    Co-authored-by: tianyizhuang <ti...@tianyizhuangs-Mac-mini.local>
    Co-authored-by: Claude Sonnet 4.6 <no...@anthropic.com>
---
 bindings/python/tests/test_write_conditional.py | 75 +++++++++++++++++++++++++
 1 file changed, 75 insertions(+)

diff --git a/bindings/python/tests/test_write_conditional.py b/bindings/python/tests/test_write_conditional.py
new file mode 100644
index 000000000..c2b36a180
--- /dev/null
+++ b/bindings/python/tests/test_write_conditional.py
@@ -0,0 +1,75 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from uuid import uuid4
+
+import pytest
+
+
+@pytest.mark.need_capability("write", "write_with_if_match")
+def test_write_accepts_if_match_param(service_name, operator, async_operator):
+    path = f"test_write_if_match_{uuid4()}.txt"
+    operator.write(path, b"test content", if_match="etag123")
+
+
+@pytest.mark.need_capability("write", "write_with_if_none_match")
+def test_write_accepts_if_none_match_param(
+    service_name, operator, async_operator
+):
+    path = f"test_write_if_none_match_{uuid4()}.txt"
+    operator.write(path, b"test content", if_none_match="etag456")
+
+
+@pytest.mark.need_capability("write", "write_with_if_not_exists")
+def test_write_accepts_if_not_exists_param(
+    service_name, operator, async_operator
+):
+    path = f"test_write_if_not_exists_{uuid4()}.txt"
+    operator.write(path, b"test content", if_not_exists=True)
+
+
+@pytest.mark.need_capability("write")
+def test_write_default_params_unchanged(service_name, operator, async_operator):
+    path = f"test_write_default_{uuid4()}.txt"
+    operator.write(path, b"test content")
+
+
+@pytest.mark.need_capability("write", "write_with_if_match")
+@pytest.mark.asyncio
+async def test_async_write_accepts_if_match_param(
+    service_name, operator, async_operator
+):
+    path = f"test_async_write_if_match_{uuid4()}.txt"
+    await async_operator.write(path, b"test content", if_match="etag123")
+
+
+@pytest.mark.need_capability("write", "write_with_if_none_match")
+@pytest.mark.asyncio
+async def test_async_write_accepts_if_none_match_param(
+    service_name, operator, async_operator
+):
+    path = f"test_async_write_if_none_match_{uuid4()}.txt"
+    await async_operator.write(path, b"test content", if_none_match="etag456")
+
+
+@pytest.mark.need_capability("write", "write_with_if_not_exists")
+@pytest.mark.asyncio
+async def test_async_write_accepts_if_not_exists_param(
+    service_name, operator, async_operator
+):
+    path = f"test_async_write_if_not_exists_{uuid4()}.txt"
+    await async_operator.write(path, b"test content", if_not_exists=True)