Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
opcua-asyncio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nikola Balog
opcua-asyncio
Commits
2b462740
Commit
2b462740
authored
Feb 15, 2019
by
oroulet
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix event async stuff
parent
53e59237
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
51 additions
and
41 deletions
+51
-41
opcua/server/event_generator.py
opcua/server/event_generator.py
+9
-4
opcua/server/server.py
opcua/server/server.py
+1
-0
tests/test_server.py
tests/test_server.py
+15
-11
tests/test_subscriptions.py
tests/test_subscriptions.py
+3
-3
tests/tests_server.py
tests/tests_server.py
+20
-20
tests/tests_subscriptions.py
tests/tests_subscriptions.py
+3
-3
No files found.
opcua/server/event_generator.py
View file @
2b462740
...
...
@@ -4,7 +4,7 @@ import uuid
from
opcua
import
ua
from
opcua
import
Node
from
opcua.common
import
events
,
event_object
from
opcua.common
import
events
,
event_object
s
__all__
=
[
"EventGenerator"
]
...
...
@@ -26,8 +26,10 @@ class EventGenerator:
self
.
logger
=
logging
.
getLogger
(
__name__
)
self
.
isession
=
isession
self
.
event
=
None
self
.
emitting_node
=
None
async
def
init
(
self
,
etype
=
None
,
emitting_node
=
ua
.
ObjectIds
.
Server
):
node
=
None
if
isinstance
(
etype
,
event_objects
.
BaseEvent
):
self
.
event
=
etype
...
...
@@ -37,19 +39,22 @@ class EventGenerator:
node
=
Node
(
self
.
isession
,
etype
)
else
:
node
=
Node
(
self
.
isession
,
ua
.
NodeId
(
etype
))
if
node
:
self
.
event
=
await
events
.
get_event_obj_from_type_node
(
node
)
if
isinstance
(
emitting_node
,
Node
):
pass
elif
isinstance
(
emitting_node
,
ua
.
NodeId
):
emitting_node
=
Node
(
isession
,
emitting_node
)
emitting_node
=
Node
(
self
.
isession
,
emitting_node
)
else
:
emitting_node
=
Node
(
isession
,
ua
.
NodeId
(
emitting_node
))
emitting_node
=
Node
(
self
.
isession
,
ua
.
NodeId
(
emitting_node
))
self
.
event
.
emitting_node
=
emitting_node
.
nodeid
if
not
self
.
event
.
SourceNode
:
self
.
event
.
SourceNode
=
emitting_node
.
nodeid
self
.
event
.
SourceName
=
(
await
emitting_node
.
get_browse_name
()).
Name
if
not
self
.
event
.
SourceName
:
self
.
event
.
SourceName
=
(
await
Node
(
self
.
isession
,
self
.
event
.
SourceNode
).
get_browse_name
()).
Name
await
emitting_node
.
set_event_notifier
([
ua
.
EventNotifier
.
SubscribeToEvents
])
refs
=
[]
...
...
opcua/server/server.py
View file @
2b462740
...
...
@@ -410,6 +410,7 @@ class Server:
"""
if
not
etype
:
etype
=
BaseEvent
()
ev_gen
=
EventGenerator
(
self
.
iserver
.
isession
)
await
ev_gen
.
init
(
etype
,
emitting_node
=
emitting_node
)
return
ev_gen
...
...
tests/test_server.py
View file @
2b462740
...
...
@@ -229,19 +229,19 @@ async def test_eventgenerator_BaseEvent_Identifier(server):
async
def
test_eventgenerator_sourceServer_Node
(
server
):
evgen
=
await
server
.
get_event_generator
(
sourc
e
=
opcua
.
Node
(
server
.
iserver
.
isession
,
ua
.
NodeId
(
ua
.
ObjectIds
.
Server
)))
evgen
=
await
server
.
get_event_generator
(
emitting_nod
e
=
opcua
.
Node
(
server
.
iserver
.
isession
,
ua
.
NodeId
(
ua
.
ObjectIds
.
Server
)))
await
check_eventgenerator_base_event
(
evgen
,
server
)
await
check_eventgenerator_source_server
(
evgen
,
server
)
async
def
test_eventgenerator_sourceServer_NodeId
(
server
):
evgen
=
await
server
.
get_event_generator
(
sourc
e
=
ua
.
NodeId
(
ua
.
ObjectIds
.
Server
))
evgen
=
await
server
.
get_event_generator
(
emitting_nod
e
=
ua
.
NodeId
(
ua
.
ObjectIds
.
Server
))
await
check_eventgenerator_base_event
(
evgen
,
server
)
await
check_eventgenerator_source_server
(
evgen
,
server
)
async
def
test_eventgenerator_sourceServer_ObjectIds
(
server
):
evgen
=
await
server
.
get_event_generator
(
sourc
e
=
ua
.
ObjectIds
.
Server
)
evgen
=
await
server
.
get_event_generator
(
emitting_nod
e
=
ua
.
ObjectIds
.
Server
)
await
check_eventgenerator_base_event
(
evgen
,
server
)
await
check_eventgenerator_source_server
(
evgen
,
server
)
...
...
@@ -249,7 +249,7 @@ async def test_eventgenerator_sourceServer_ObjectIds(server):
async
def
test_eventgenerator_sourceMyObject
(
server
):
objects
=
server
.
get_objects_node
()
o
=
await
objects
.
add_object
(
3
,
'MyObject'
)
evgen
=
await
server
.
get_event_generator
(
sourc
e
=
o
)
evgen
=
await
server
.
get_event_generator
(
emitting_nod
e
=
o
)
await
check_eventgenerator_base_event
(
evgen
,
server
)
await
check_event_generator_object
(
evgen
,
o
)
...
...
@@ -260,7 +260,7 @@ async def test_eventgenerator_source_collision(server):
event
=
BaseEvent
(
sourcenode
=
o
.
nodeid
)
evgen
=
await
server
.
get_event_generator
(
event
,
ua
.
ObjectIds
.
Server
)
await
check_eventgenerator_base_event
(
evgen
,
server
)
await
check_event_generator_object
(
evgen
,
o
)
await
check_event_generator_object
(
evgen
,
o
,
emitting_node
=
opcua
.
Node
(
server
.
iserver
.
isession
,
ua
.
ObjectIds
.
Server
)
)
async
def
test_eventgenerator_inherited_event
(
server
):
...
...
@@ -526,14 +526,18 @@ async def check_eventgenerator_source_server(evgen, server: Server):
assert
len
(
refs
)
>=
1
async
def
check_event_generator_object
(
evgen
,
obj
):
async
def
check_event_generator_object
(
evgen
,
obj
,
emitting_node
=
None
):
assert
evgen
.
event
.
SourceName
==
(
await
obj
.
get_browse_name
()).
Name
assert
evgen
.
event
.
SourceNode
==
obj
.
nodeid
assert
await
obj
.
get_event_notifier
()
==
{
ua
.
EventNotifier
.
SubscribeToEvents
}
refs
=
await
obj
.
get_referenced_nodes
(
ua
.
ObjectIds
.
GeneratesEvent
,
ua
.
BrowseDirection
.
Forward
,
ua
.
NodeClass
.
ObjectType
,
False
)
assert
len
(
refs
)
==
1
assert
refs
[
0
].
nodeid
==
evgen
.
event
.
EventType
if
not
emitting_node
:
assert
await
obj
.
get_event_notifier
()
==
{
ua
.
EventNotifier
.
SubscribeToEvents
}
refs
=
await
obj
.
get_referenced_nodes
(
ua
.
ObjectIds
.
GeneratesEvent
,
ua
.
BrowseDirection
.
Forward
,
ua
.
NodeClass
.
ObjectType
,
False
)
else
:
assert
await
emitting_node
.
get_event_notifier
()
==
{
ua
.
EventNotifier
.
SubscribeToEvents
}
refs
=
await
emitting_node
.
get_referenced_nodes
(
ua
.
ObjectIds
.
GeneratesEvent
,
ua
.
BrowseDirection
.
Forward
,
ua
.
NodeClass
.
ObjectType
,
False
)
assert
evgen
.
event
.
EventType
in
[
x
.
nodeid
for
x
in
refs
]
async
def
check_eventgenerator_base_event
(
evgen
,
server
:
Server
):
...
...
tests/test_subscriptions.py
View file @
2b462740
...
...
@@ -367,7 +367,7 @@ async def test_events_default(opc):
async
def
test_events_MyObject
(
opc
):
objects
=
opc
.
server
.
get_objects_node
()
o
=
await
objects
.
add_object
(
3
,
'MyObject'
)
evgen
=
await
opc
.
server
.
get_event_generator
(
sourc
e
=
o
)
evgen
=
await
opc
.
server
.
get_event_generator
(
emitting_nod
e
=
o
)
myhandler
=
MySubHandler
()
sub
=
await
opc
.
opc
.
create_subscription
(
100
,
myhandler
)
handle
=
await
sub
.
subscribe_events
(
o
)
...
...
@@ -389,7 +389,7 @@ async def test_events_MyObject(opc):
async
def
test_events_wrong_source
(
opc
):
objects
=
opc
.
server
.
get_objects_node
()
o
=
await
objects
.
add_object
(
3
,
'MyObject'
)
evgen
=
await
opc
.
server
.
get_event_generator
(
sourc
e
=
o
)
evgen
=
await
opc
.
server
.
get_event_generator
(
emitting_nod
e
=
o
)
myhandler
=
MySubHandler
()
sub
=
await
opc
.
opc
.
create_subscription
(
100
,
myhandler
)
handle
=
await
sub
.
subscribe_events
()
...
...
@@ -439,7 +439,7 @@ async def test_events_CustomEvent_MyObject(opc):
etype
=
await
opc
.
server
.
create_custom_event_type
(
2
,
'MyEvent'
,
ua
.
ObjectIds
.
BaseEventType
,
[(
'PropertyNum'
,
ua
.
VariantType
.
Float
),
(
'PropertyString'
,
ua
.
VariantType
.
String
)])
evgen
=
await
opc
.
server
.
get_event_generator
(
etype
,
o
)
evgen
=
await
opc
.
server
.
get_event_generator
(
etype
,
emitting_node
=
o
)
myhandler
=
MySubHandler
()
sub
=
await
opc
.
opc
.
create_subscription
(
100
,
myhandler
)
handle
=
await
sub
.
subscribe_events
(
o
,
etype
)
...
...
tests/tests_server.py
View file @
2b462740
...
...
@@ -526,47 +526,47 @@ def check_eventgenerator_SourceServer(test, evgen):
def
check_event_generator_object
(
test
,
evgen
,
obj
,
emitting_node
=
None
):
test
.
assertEqual
(
evgen
.
event
.
SourceName
,
obj
.
get_browse_name
().
Name
)
test
.
assertEqual
(
evgen
.
event
.
SourceNode
,
obj
.
nodeid
)
assert
evgen
.
event
.
SourceName
==
(
await
obj
.
get_browse_name
()).
Name
assert
evgen
.
event
.
SourceNode
==
obj
.
nodeid
)
if
not
emitting_node
:
test
.
assertEqual
(
obj
.
get_event_notifier
(),
{
ua
.
EventNotifier
.
SubscribeToEvents
})
refs
=
obj
.
get_referenced_nodes
(
ua
.
ObjectIds
.
GeneratesEvent
,
ua
.
BrowseDirection
.
Forward
,
ua
.
NodeClass
.
ObjectType
,
False
)
assert
await
obj
.
get_event_notifier
()
==
{
ua
.
EventNotifier
.
SubscribeToEvents
}
refs
=
await
obj
.
get_referenced_nodes
(
ua
.
ObjectIds
.
GeneratesEvent
,
ua
.
BrowseDirection
.
Forward
,
ua
.
NodeClass
.
ObjectType
,
False
)
else
:
test
.
assertEqual
(
emitting_node
.
get_event_notifier
(),
{
ua
.
EventNotifier
.
SubscribeToEvents
})
refs
=
emitting_node
.
get_referenced_nodes
(
ua
.
ObjectIds
.
GeneratesEvent
,
ua
.
BrowseDirection
.
Forward
,
ua
.
NodeClass
.
ObjectType
,
False
)
assert
await
emitting_node
.
get_event_notifier
()
==
{
ua
.
EventNotifier
.
SubscribeToEvents
}
refs
=
await
emitting_node
.
get_referenced_nodes
(
ua
.
ObjectIds
.
GeneratesEvent
,
ua
.
BrowseDirection
.
Forward
,
ua
.
NodeClass
.
ObjectType
,
False
)
test
.
assertIn
(
evgen
.
event
.
EventType
,
[
x
.
nodeid
for
x
in
refs
])
assert
evgen
.
event
.
EventType
in
[
x
.
nodeid
for
x
in
refs
]
def
check_eventgenerator_BaseEvent
(
test
,
evgen
):
test
.
assertIsNot
(
evgen
,
None
)
# we did not receive event generator
test
.
assertIs
(
evgen
.
isession
,
test
.
opc
.
iserver
.
isession
)
assert
evgen
is
not
None
)
# we did not receive event generator
assert
evgen
.
isession
is
test
.
opc
.
iserver
.
isession
check_base_event
(
test
,
evgen
.
event
)
def
check_base_event
(
test
,
ev
):
test
.
assertIsNot
(
ev
,
None
)
# we did not receive event
test
.
assertIsI
nstance
(
ev
,
BaseEvent
)
test
.
assertEqual
(
ev
.
EventType
,
ua
.
NodeId
(
ua
.
ObjectIds
.
BaseEventType
)
)
test
.
assertEqual
(
ev
.
Severity
,
1
)
assert
ev
is
not
None
assert
isi
nstance
(
ev
,
BaseEvent
)
assert
ev
.
EventType
==
ua
.
NodeId
(
ua
.
ObjectIds
.
BaseEventType
)
assert
ev
.
Severity
==
1
def
check_eventgenerator_CustomEvent
(
test
,
evgen
,
etype
):
test
.
assertIsNot
(
evgen
,
None
)
# we did not receive event generator
test
.
assertIs
(
evgen
.
isession
,
test
.
opc
.
iserver
.
isession
)
assert
evgen
is
not
None
# we did not receive event generator
assert
evgen
.
isession
is
test
.
opc
.
iserver
.
isession
check_custom_event
(
test
,
evgen
.
event
,
etype
)
def
check_custom_event
(
test
,
ev
,
etype
):
test
.
assertIsNot
(
ev
,
None
)
# we did not receive event
test
.
assertIsI
nstance
(
ev
,
BaseEvent
)
test
.
assertEqual
(
ev
.
EventType
,
etype
.
nodeid
)
test
.
assertEqual
(
ev
.
Severity
,
1
)
assert
ev
is
not
None
assert
isi
nstance
(
ev
,
BaseEvent
)
assert
ev
.
EventType
==
etype
.
nodeid
assert
ev
.
Severity
==
1
def
check_custom_type
(
test
,
type
,
base_type
):
base
=
opcua
.
Node
(
test
.
opc
.
iserver
.
isession
,
ua
.
NodeId
(
base_type
))
test
.
assertTrue
(
type
in
base
.
get_children
())
test
.
assertTrue
(
type
in
await
base
.
get_children
())
nodes
=
type
.
get_referenced_nodes
(
refs
=
ua
.
ObjectIds
.
HasSubtype
,
direction
=
ua
.
BrowseDirection
.
Inverse
,
includesubtypes
=
True
)
test
.
assertEqual
(
base
,
nodes
[
0
])
properties
=
type
.
get_properties
()
...
...
tests/tests_subscriptions.py
View file @
2b462740
...
...
@@ -374,12 +374,12 @@ class SubscriptionTests(object):
objects
=
self
.
srv
.
get_objects_node
()
o
=
objects
.
add_object
(
3
,
'MyObject'
)
evgen
=
self
.
srv
.
get_event_generator
()
evgen
.
event
.
SourceNode
=
o
.
nodeid
evgen
.
event
.
SourceName
=
o
.
get_browse_name
(
).
Name
evgen
.
event
.
SourceNode
=
o
.
nodeid
evgen
.
event
.
SourceName
=
(
await
o
.
get_browse_name
()
).
Name
myhandler
=
MySubHandler
()
sub
=
self
.
opc
.
create_subscription
(
100
,
myhandler
)
handle
=
sub
.
subscribe_events
()
handle
=
await
sub
.
subscribe_events
()
tid
=
datetime
.
utcnow
()
msg
=
"this is my msg "
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment