@@ -30,30 +30,28 @@ An example Lab Thing built from our ``PretendSpectrometer`` class, complete with
30
30
31
31
32
32
# Make some properties and actions out of our component
33
+ my_spectrometer = PretendSpectrometer()
33
34
34
35
# Single-shot data property
35
36
labthing.build_property(
36
- my_component , # Python object
37
+ my_spectrometer , # Python object
37
38
" data" , # Objects attribute name
38
- " /data" , # URL to bind the property to
39
39
description = " A single-shot measurement" ,
40
40
readonly = True ,
41
41
schema = fields.List(fields.Number())
42
42
)
43
43
44
44
# Magic denoise property
45
45
labthing.build_property(
46
- my_component , # Python object
46
+ my_spectrometer , # Python object
47
47
" magic_denoise" , # Objects attribute name
48
- " /denoise" , # URL to bind the property to
49
48
description = " A magic denoise property" ,
50
49
schema = fields.Int(min = 100 , max = 500 , example = 200 )
51
50
)
52
51
53
52
# Averaged measurement action
54
53
labthing.build_action(
55
- my_component.average_data, # Python function
56
- " /average" , # URL to bind the action to
54
+ my_spectrometer.average_data, # Python function
57
55
description = " Take an averaged measurement" ,
58
56
args = { # How do we convert from the request input to function arguments?
59
57
" n" : fields.Int(description = " Number of averages to take" , example = 5 , default = 5 )
@@ -67,6 +65,97 @@ An example Lab Thing built from our ``PretendSpectrometer`` class, complete with
67
65
Server(app).run()
68
66
69
67
68
+ Once started, the app will build and serve a full web API, and generate the following Thing Description:
69
+
70
+ .. code-block :: JSON
71
+
72
+ {
73
+ "@context" : [
74
+ " https://www.w3.org/2019/wot/td/v1" ,
75
+ " https://iot.mozilla.org/schemas/"
76
+ ],
77
+ "id" : " http://127.0.0.1:7486/" ,
78
+ "base" : " http://127.0.0.1:7486/" ,
79
+ "title" : " My PretendSpectrometer API" ,
80
+ "description" : " LabThing API for PretendSpectrometer" ,
81
+ "properties" : {
82
+ "pretendSpectrometerData" : {
83
+ "title" : " PretendSpectrometer_data" ,
84
+ "description" : " A single-shot measurement" ,
85
+ "readOnly" : true ,
86
+ "links" : [{
87
+ "href" : " /properties/PretendSpectrometer/data"
88
+ }],
89
+ "forms" : [{
90
+ "op" : " readproperty" ,
91
+ "htv:methodName" : " GET" ,
92
+ "href" : " /properties/PretendSpectrometer/data" ,
93
+ "contentType" : " application/json"
94
+ }],
95
+ "type" : " array" ,
96
+ "items" : {
97
+ "type" : " number" ,
98
+ "format" : " decimal"
99
+ }
100
+ },
101
+ "pretendSpectrometerMagicDenoise" : {
102
+ "title" : " PretendSpectrometer_magic_denoise" ,
103
+ "description" : " A magic denoise property" ,
104
+ "links" : [{
105
+ "href" : " /properties/PretendSpectrometer/magic_denoise"
106
+ }],
107
+ "forms" : [{
108
+ "op" : " readproperty" ,
109
+ "htv:methodName" : " GET" ,
110
+ "href" : " /properties/PretendSpectrometer/magic_denoise" ,
111
+ "contentType" : " application/json"
112
+ },
113
+ {
114
+ "op" : " writeproperty" ,
115
+ "htv:methodName" : " PUT" ,
116
+ "href" : " /properties/PretendSpectrometer/magic_denoise" ,
117
+ "contentType" : " application/json"
118
+ }
119
+ ],
120
+ "type" : " number" ,
121
+ "format" : " integer" ,
122
+ "min" : 100 ,
123
+ "max" : 500 ,
124
+ "example" : 200
125
+ }
126
+ },
127
+ "actions" : {
128
+ "averageDataAction" : {
129
+ "title" : " average_data_action" ,
130
+ "description" : " Take an averaged measurement" ,
131
+ "links" : [{
132
+ "href" : " /actions/PretendSpectrometer/average_data"
133
+ }],
134
+ "forms" : [{
135
+ "op" : " invokeaction" ,
136
+ "htv:methodName" : " POST" ,
137
+ "href" : " /actions/PretendSpectrometer/average_data" ,
138
+ "contentType" : " application/json"
139
+ }],
140
+ "input" : {
141
+ "type" : " object" ,
142
+ "properties" : {
143
+ "n" : {
144
+ "type" : " number" ,
145
+ "format" : " integer" ,
146
+ "default" : 5 ,
147
+ "description" : " Number of averages to take" ,
148
+ "example" : 5
149
+ }
150
+ }
151
+ }
152
+ }
153
+ },
154
+ "links" : [... ],
155
+ "securityDefinitions" : {... },
156
+ "security" : " nosec_sc"
157
+ }
158
+
70
159
71
160
For completeness of the examples, our ``PretendSpectrometer `` class code is:
72
161
0 commit comments