Skip to content

Commit d1fa9f4

Browse files
Erik WilsherErik Wilsher
Erik Wilsher
authored and
Erik Wilsher
committed
Fixes based on feedback
1 parent 3ffdb0c commit d1fa9f4

File tree

3 files changed

+69
-16
lines changed

3 files changed

+69
-16
lines changed

demo/simple_demo.py

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# %%
2+
import datetime
3+
from pyprediktoredgeclient import hive
4+
test_hive = hive.Hive('Prediktor.ApisLoader.test')
5+
test_hive
6+
7+
# %%
8+
mod_names = [mod.name for mod in test_hive.modules]
9+
for mod_name in mod_names:
10+
print(mod_name)
11+
# %%
12+
if "testworker" in mod_names:
13+
del test_hive['testworker']
14+
# %%
15+
16+
test_module= test_hive.add_module('ApisWorker', 'testworker')
17+
# %%
18+
[item_type.Name for item_type in test_module.item_types]
19+
# %%
20+
for i in range(100):
21+
new_item = test_module.add_item("Signal", f"TestItem{i}")
22+
new_item.Amplitude=1
23+
new_item.Bias = 1
24+
# %%
25+
print(test_module.items)
26+
# %%%
27+
example_item = test_module["TestItem10"]
28+
example_item.Value
29+
# %%
30+
try:
31+
example_item.Value = 2.3
32+
print("Fail, should not be allowed")
33+
except AttributeError:
34+
print("OK, should not be allowed to set the value on a signalø")
35+
36+
example_item.Waveform
37+
# %%
38+
some_items = [f"testworker.testitem{i}" for i in range(10, 40, 2)]
39+
for vqt in test_hive.get_values(some_items):
40+
print(f"{vqt.item_id}: {vqt.value} ({vqt.quality}) @ {vqt.time.ToString()}")
41+
42+
# %%

pyprediktoredgeclient/hive.py

+26-16
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,15 @@ def __init__(self, instance_name=None, server_name=None):
6868
instance_name: optional name of the instance (default is None, i.e. the "ApisHive" instance)
6969
server_name: optional name of the server hostting the instance (default is None, i.e. "localhost")
7070
"""
71-
self.api = Prediktor.APIS.Hive.Hive.CreateServer(instance_name, server_name or 'localhost')
71+
self.api = Prediktor.APIS.Hive.Hive.CreateServer(instance_name, server_name)
7272
self._modtypes = { str(obj):obj for obj in self.api.ModuleTypes }
7373

7474

7575
def __str__(self):
7676
return self.api.ConfigurationName
7777

7878
def __repr__(self):
79-
return "<Apis.Hive instance: {}>".format(self)
79+
return f"<Apis.Hive instance: {self}>"
8080

8181
def __len__(self):
8282
return len(self.api.GetModules())
@@ -110,8 +110,8 @@ def get_module(self, key):
110110
if str(obj) == key:
111111
return Module(self, obj)
112112

113-
raise Error("Invalid module name: ''".format(key))
114-
raise Error("Invalid index type: {}".format(type(key).__name__))
113+
raise Error(f"Invalid module name: '{key}'")
114+
raise Error(f"Invalid index type: {type(key).__name__}")
115115

116116
@property
117117
def module_types(self):
@@ -142,11 +142,20 @@ def add_module(self, module_type, name=None):
142142
return Module(self, obj)
143143

144144
def get_values(self, items, since=None):
145+
"""
146+
Get a list of value-quality-itmestamps from the connected hive
147+
148+
Arguments:
149+
items: A list of Item objects of itemId's as stings
150+
since (Optional): the oldest time of the values to retrieve
151+
"""
145152
if not since:
146153
since = System.DateTime.MinValue
154+
147155
itemIds = [i.item_id if isinstance(i, Item) else str(i) for i in items]
148156
handles = self.api.LookupItemHandles(itemIds)
149157

158+
#argument placeholders
150159
h_out = System.Array[System.Int32]([])
151160
v_out = System.Array[System.Object]([])
152161
q_out = System.Array[System.UInt16]([])
@@ -206,9 +215,9 @@ def get_item(self, key):
206215
for obj in self.api.GetItems():
207216
if obj.Name == key:
208217
return Item(self, obj)
209-
raise Error("Invalid item name: '{}'".format(key))
218+
raise Error(f"Invalid item name: '{key}'")
210219

211-
raise Error("Invalid index type: {}".format(type(key).__name__))
220+
raise Error(f"Invalid index type: {type(key).__name__}")
212221

213222
@property
214223
def item_types(self):
@@ -254,17 +263,19 @@ def __init__(self, module, api):
254263
self.api = api
255264

256265
def __str__(self):
257-
return "{}={}".format(self.name(), self.value())
266+
return f"{self.name}={self.value}"
258267

259268
def __repr__(self):
260-
return "<Apis.Hive.Module.Property: {}>".format(self)
269+
return f"<Apis.Hive.Module.Property: {self}>"
261270

271+
@property
262272
def name(self):
263273
return self.api.Name
264274

265275
def desc(self):
266276
return self.api.Description
267277

278+
@property
268279
def value(self):
269280
return self.api.Value
270281

@@ -310,10 +321,12 @@ def __iter__(self):
310321

311322
@property
312323
def name(self):
324+
"The item name. Unique within a module"
313325
return self.api.Name
314326

315327
@property
316328
def item_id(self):
329+
"The item-id. . Unique within a hive"
317330
return self.api.ItemID
318331

319332

@@ -337,10 +350,10 @@ def __init__(self, item, api):
337350
self.api = api
338351

339352
def __str__(self):
340-
return "{}={}".format(self.name, self.value)
353+
return "{self.name}={self.value}"
341354

342355
def __repr__(self):
343-
return "<Apis.Hive.Module.Attr: {}>".format(self)
356+
return f"<Apis.Hive.Module.Attr: {self}>"
344357

345358
@property
346359
def name(self):
@@ -350,21 +363,18 @@ def name(self):
350363
def flag(self):
351364
return self.api.Flag
352365

353-
354-
355366
def get_value(self):
356367
v = self.api.Value
357368
if self.flag & AttrFlags.Enumerated:
358369
attr_enum = self.api.GetEnumeration()
359370
for i,val in enumerate(attr_enum.Values):
360371
if val==v:
361372
return attr_enum.Names[i]
362-
raise Error(f"Enumerated property not found")
373+
raise Error(f"Enumerated property with value '{v}' not found on {self.name}")
363374
return v
364375

365376
def set_value(self, value):
366377
if self.flag & AttrFlags.ReadOnly:
367-
print(f'should fail, {self.flag}')
368378
raise AttributeError(f"Attribute {self.name} on {self.item} is read only")
369379

370380
if self.flag & AttrFlags.Enumerated:
@@ -374,14 +384,14 @@ def set_value(self, value):
374384
self.api.Value = attr_enum.Values[i]
375385
break
376386
else:
377-
raise Error(f"Enumerated property not found")
387+
raise Error(f"Enumerated property for {value} not found on attribute {self.name}.")
378388
else:
379389
try:
380390
self.api.Value = value
381391
except Exception as e:
392+
#Wrap the exception from below in an Error.
382393
raise Error(f"Exception from Apis {e}")
383394

384-
385395
value = property(get_value, set_value, doc="Access the property value")
386396

387397

requirements.py

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
# do not add anything here. See setup.py
2+
-e

0 commit comments

Comments
 (0)