Skip to content

Commit e241c96

Browse files
committed
Use PUT for writing properties in built views
1 parent 9860fef commit e241c96

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

src/labthings/server/view/builder.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,22 @@ def property_of(
1919
name: str = None,
2020
readonly=False,
2121
description=None,
22+
_legacy=False, # Old structure where POST is used to write property
2223
):
2324

2425
# Create a class name
2526
if not name:
2627
name = type(property_object).__name__ + f"_{property_name}"
2728

2829
# Create inner functions
29-
def _get(self):
30+
def _read(self):
3031
return getattr(property_object, property_name)
3132

32-
def _post(self, args):
33+
def _write(self, args):
3334
setattr(property_object, property_name, args)
3435
return getattr(property_object, property_name)
3536

36-
def _put(self, args):
37+
def _update(self, args):
3738
getattr(property_object, property_name).update(args)
3839
return getattr(property_object, property_name)
3940

@@ -44,17 +45,23 @@ def _put(self, args):
4445
{
4546
"property_object": property_object,
4647
"property_name": property_name,
47-
"get": _get,
48+
"get": _read,
4849
},
4950
)
5051

5152
# Override read-write capabilities
5253
if not readonly:
53-
generated_class.post = _post
54-
generated_class.methods.add("POST")
55-
# Enable PUT requests for dictionaries
54+
# Enable update PUT requests for dictionaries
5655
if type(getattr(property_object, property_name)) is dict:
57-
generated_class.put = _put
56+
generated_class.put = _update
57+
generated_class.methods.add("PUT")
58+
# If legacy mode, use POST to write property
59+
elif _legacy:
60+
generated_class.post = _write
61+
generated_class.methods.add("POST")
62+
# Normally, use PUT to write property
63+
else:
64+
generated_class.put = _write
5865
generated_class.methods.add("PUT")
5966

6067
# Add decorators for arguments etc

tests/test_server_view_builder.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def test_property_of(app, client):
99

1010
with client as c:
1111
assert c.get("/").data == b'"propertyValue"\n'
12-
assert c.post("/", data=b"newPropertyValue").data == b'"newPropertyValue"\n'
12+
assert c.put("/", data=b"newPropertyValue").data == b'"newPropertyValue"\n'
1313
assert c.get("/").data == b'"newPropertyValue"\n'
1414

1515

@@ -37,9 +37,6 @@ def test_property_of_dict(app, client):
3737
"property_name": "newPropertyValue",
3838
"property_name_2": "propertyValue2",
3939
}
40-
assert c.post("/", json={"property_name": "newPropertyValue"}).json == {
41-
"property_name": "newPropertyValue"
42-
}
4340

4441

4542
def test_property_of_readonly():

0 commit comments

Comments
 (0)