@@ -23,8 +23,9 @@ def view_to_thing_action_forms(rules: list, view: View, external: bool = True):
23
23
"""
24
24
forms = []
25
25
26
- # HTTP invokeaction requires POST method
27
- if hasattr (view , "post" ):
26
+ # Get map from invokeaction to HTTP method
27
+ meth = getattr (view , "_opmap" , {}).get ("invokeaction" , "post" )
28
+ if hasattr (view , meth ):
28
29
prop_urls = [rule_to_path (rule ) for rule in rules ]
29
30
30
31
# Get input content_type
@@ -36,7 +37,7 @@ def view_to_thing_action_forms(rules: list, view: View, external: bool = True):
36
37
for url in prop_urls :
37
38
form = {
38
39
"op" : "invokeaction" ,
39
- "htv:methodName" : "POST" ,
40
+ "htv:methodName" : meth . upper () ,
40
41
"href" : ResourceURL (url , external = external ),
41
42
"contentType" : content_type ,
42
43
}
@@ -70,38 +71,17 @@ def view_to_thing_property_forms(rules: list, view: View, external: bool = True)
70
71
# Get input content_type
71
72
content_type = getattr (view , "content_type" , "application/json" )
72
73
73
- # HTTP readproperty requires GET method
74
- if hasattr (view , "get" ):
75
- for url in prop_urls :
76
- form = {
77
- "op" : "readproperty" ,
78
- "htv:methodName" : "GET" ,
79
- "href" : ResourceURL (url , external = external ),
80
- "contentType" : content_type ,
81
- }
82
- forms .append (form )
83
-
84
- # HTTP writeproperty requires PUT method
85
- if hasattr (view , "put" ):
86
- for url in prop_urls :
87
- form = {
88
- "op" : "writeproperty" ,
89
- "htv:methodName" : "PUT" ,
90
- "href" : ResourceURL (url , external = external ),
91
- "contentType" : content_type ,
92
- }
93
- forms .append (form )
94
-
95
- # HTTP writeproperty may use POST method
96
- elif hasattr (view , "post" ):
97
- for url in prop_urls :
98
- form = {
99
- "op" : "writeproperty" ,
100
- "htv:methodName" : "POST" ,
101
- "href" : ResourceURL (url , external = external ),
102
- "contentType" : content_type ,
103
- }
104
- forms .append (form )
74
+ # Get map from ops to HTTP methods
75
+ for op , meth in getattr (view , "_opmap" , {}).items ():
76
+ if hasattr (view , meth ):
77
+ for url in prop_urls :
78
+ form = {
79
+ "op" : op ,
80
+ "htv:methodName" : meth .upper (),
81
+ "href" : ResourceURL (url , external = external ),
82
+ "contentType" : content_type ,
83
+ }
84
+ forms .append (form )
105
85
106
86
return forms
107
87
0 commit comments