Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/server-events-history.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import sys
sys.path.insert(0, "..")
import time
from datetime import datetime
from datetime import datetime, timezone

from opcua import ua, Server
from opcua.server.history_sql import HistorySQLite
Expand Down Expand Up @@ -72,7 +72,7 @@
serverevgen.trigger(message="Server Event Message")

# read event history from sql
end_time = datetime.utcnow()
end_time = datetime.now(timezone.utc)
server_event_history = server_node.read_event_history(None, end_time, 0)

finally:
Expand Down
4 changes: 2 additions & 2 deletions examples/server-example.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from threading import Thread
import copy
import logging
from datetime import datetime
from datetime import datetime, timezone
import time
from math import sin
import sys
Expand Down Expand Up @@ -123,7 +123,7 @@ def run(self):
mystringvar.set_writable() # Set MyVariable to be writable by clients
myguidvar = myobj.add_variable(NodeId(uuid.UUID('1be5ba38-d004-46bd-aa3a-b5b87940c698'), idx, NodeIdType.Guid),
'MyStringVariableWithGUID', 'NodeId type is guid')
mydtvar = myobj.add_variable(idx, "MyDateTimeVar", datetime.utcnow())
mydtvar = myobj.add_variable(idx, "MyDateTimeVar", datetime.now(timezone.utc))
mydtvar.set_writable() # Set MyVariable to be writable by clients
myarrayvar = myobj.add_variable(idx, "myarrayvar", [6.7, 7.9])
myarrayvar = myobj.add_variable(idx, "myStronglytTypedVariable", ua.Variant([], ua.VariantType.UInt32))
Expand Down
10 changes: 5 additions & 5 deletions opcua/common/connection.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import hashlib
from datetime import datetime, timedelta
from datetime import datetime, timedelta, timezone
import logging
import copy

Expand Down Expand Up @@ -176,7 +176,7 @@ def open(self, params, server):
self.security_token.TokenId = 13 # random value
self.security_token.ChannelId = server.get_new_channel_id()
self.security_token.RevisedLifetime = params.RequestedLifetime
self.security_token.CreatedAt = datetime.utcnow()
self.security_token.CreatedAt = datetime.now(timezone.utc)

response.SecurityToken = self.security_token

Expand All @@ -186,7 +186,7 @@ def open(self, params, server):
self.next_security_token = copy.deepcopy(self.security_token)
self.next_security_token.TokenId += 1
self.next_security_token.RevisedLifetime = params.RequestedLifetime
self.next_security_token.CreatedAt = datetime.utcnow()
self.next_security_token.CreatedAt = datetime.now(timezone.utc)

response.SecurityToken = self.next_security_token

Expand Down Expand Up @@ -254,8 +254,8 @@ def _check_sym_header(self, securityHeader):
if self._allow_prev_token and \
securityHeader.TokenId == self.prev_security_token.TokenId:
timeout = self.prev_security_token.CreatedAt + timedelta(milliseconds=self.prev_security_token.RevisedLifetime * 1.25)
if timeout < datetime.utcnow():
raise ua.UaError("Security token id {} has timed out ({} < {})".format(securityHeader.TokenId, timeout, datetime.utcnow()))
if timeout < datetime.now(timezone.utc):
raise ua.UaError("Security token id {} has timed out ({} < {})".format(securityHeader.TokenId, timeout, datetime.now(timezone.utc)))
else:
return
raise ua.UaError("Invalid security token id {}, expected {} or {}".format(securityHeader.TokenId, self.security_token.TokenId, self.next_security_token.TokenId))
Expand Down
6 changes: 3 additions & 3 deletions opcua/common/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
High level node object, to access node attribute
and browse address space
"""
from datetime import datetime
from datetime import datetime, timezone

from opcua import ua
from opcua.common import events
Expand Down Expand Up @@ -210,10 +210,10 @@ def set_value(self, value, varianttype=None):
datavalue = value
elif isinstance(value, ua.Variant):
datavalue = ua.DataValue(value)
datavalue.SourceTimestamp = datetime.utcnow()
datavalue.SourceTimestamp = datetime.now(timezone.utc)
else:
datavalue = ua.DataValue(ua.Variant(value, varianttype))
datavalue.SourceTimestamp = datetime.utcnow()
datavalue.SourceTimestamp = datetime.now(timezone.utc)
self.set_attribute(ua.AttributeIds.Value, datavalue)

set_data_value = set_value
Expand Down
6 changes: 3 additions & 3 deletions opcua/common/structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import logging
# The next two imports are for generated code
from collections import namedtuple
from datetime import datetime
from datetime import datetime, timezone
import uuid
from enum import Enum, IntEnum, EnumMeta
from typing import Any, Union
Expand All @@ -34,7 +34,7 @@ def get_default_value(uatype, enums):
elif uatype == "Boolean":
return "True"
elif uatype == "DateTime":
return "datetime.utcnow()"
return "datetime.now(timezone.utc)"
elif uatype in ("Int16", "Int32", "Int64", "UInt16", "UInt32", "UInt64", "Double", "Float", "Byte", "SByte"):
return 0
elif uatype in enums:
Expand Down Expand Up @@ -286,7 +286,7 @@ def _make_header(self, _file):
THIS FILE IS AUTOGENERATED, DO NOT EDIT!!!
'''

from datetime import datetime
from datetime import datetime, timezone
from enum import IntEnum
import uuid

Expand Down
6 changes: 3 additions & 3 deletions opcua/common/ua_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"""

from dateutil import parser
from datetime import datetime
from datetime import datetime, timezone
from enum import Enum, IntEnum
import uuid

Expand All @@ -20,10 +20,10 @@ def value_to_datavalue(val, varianttype=None):
datavalue = val
elif isinstance(val, ua.Variant):
datavalue = ua.DataValue(val)
datavalue.SourceTimestamp = datetime.utcnow()
datavalue.SourceTimestamp = datetime.now(timezone.utc)
else:
datavalue = ua.DataValue(ua.Variant(val, varianttype))
datavalue.SourceTimestamp = datetime.utcnow()
datavalue.SourceTimestamp = datetime.now(timezone.utc)
return datavalue


Expand Down
6 changes: 3 additions & 3 deletions opcua/server/address_space.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from threading import RLock
import logging
from datetime import datetime
from datetime import datetime, timezone
import collections
import shelve
try:
Expand Down Expand Up @@ -423,8 +423,8 @@ def _add_node_attr(self, item, nodedata, name, vtype=None, add_timestamps=False)
if item.SpecifiedAttributes & getattr(ua.NodeAttributesMask, name):
dv = ua.DataValue(ua.Variant(getattr(item, name), vtype))
if add_timestamps:
# dv.ServerTimestamp = datetime.utcnow() # Disabled until someone explains us it should be there
dv.SourceTimestamp = datetime.utcnow()
# dv.ServerTimestamp = datetime.now(timezone.utc) # Disabled until someone explains us it should be there
dv.SourceTimestamp = datetime.now(timezone.utc)
nodedata.attributes[getattr(ua.AttributeIds, name)] = AttributeValue(dv)

def _add_nodeattributes(self, item, nodedata, add_timestamps):
Expand Down
6 changes: 3 additions & 3 deletions opcua/server/event_generator.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import logging
from datetime import datetime
from datetime import datetime, timezone
import time
import uuid
import sys
Expand Down Expand Up @@ -89,8 +89,8 @@ def trigger(self, time_attr=None, message=None):
if time_attr:
self.event.Time = time_attr
else:
self.event.Time = datetime.utcnow()
self.event.ReceiveTime = datetime.utcnow()
self.event.Time = datetime.now(timezone.utc)
self.event.ReceiveTime = datetime.now(timezone.utc)

self.event.LocalTime = ua.uaprotocol_auto.TimeZoneDataType()
if sys.version_info.major > 2:
Expand Down
6 changes: 3 additions & 3 deletions opcua/server/history.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import logging
from datetime import timedelta
from datetime import datetime
from datetime import datetime, timezone

from opcua import Subscription
from opcua import ua
Expand Down Expand Up @@ -96,7 +96,7 @@ def save_node_value(self, node_id, datavalue):
data = self._datachanges[node_id]
period, count = self._datachanges_period[node_id]
data.append(datavalue)
now = datetime.utcnow()
now = datetime.now(timezone.utc)
if period:
while len(data) and now - data[0].SourceTimestamp > period:
data.pop(0)
Expand Down Expand Up @@ -137,7 +137,7 @@ def save_event(self, event):
evts = self._events[event.emitting_node]
evts.append(event)
period, count = self._events_periods[event.emitting_node]
now = datetime.utcnow()
now = datetime.now(timezone.utc)
if period:
while len(evts) and now - evts[0].SourceTimestamp > period:
evts.pop(0)
Expand Down
6 changes: 3 additions & 3 deletions opcua/server/history_sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def execute_sql_delete(condition, args):

if period:
# after the insert, if a period was specified delete all records older than period
date_limit = datetime.utcnow() - period
date_limit = datetime.now(timezone.utc) - period
execute_sql_delete('SourceTimestamp < ?', (date_limit,))

if count:
Expand Down Expand Up @@ -183,7 +183,7 @@ def save_event(self, event):

if period:
# after the insert, if a period was specified delete all records older than period
date_limit = datetime.utcnow() - period
date_limit = datetime.now(timezone.utc) - period

try:
_c_sub.execute('DELETE FROM "{tn}" WHERE Time < ?'.format(tn=table),
Expand Down Expand Up @@ -264,7 +264,7 @@ def _get_bounds(start, end, nb_values):
start = ua.get_win_epoch()

if end is None or end == ua.get_win_epoch():
end = datetime.utcnow() + timedelta(days=1)
end = datetime.now(timezone.utc) + timedelta(days=1)

if start < end:
start_time = start.isoformat(' ')
Expand Down
10 changes: 5 additions & 5 deletions opcua/server/internal_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Internal server implementing opcu-ua interface.
Can be used on server side or to implement binary/https opc-ua servers
"""
from datetime import datetime, timedelta
from datetime import datetime, timedelta, timezone
from copy import copy
import os
import logging
Expand Down Expand Up @@ -151,7 +151,7 @@ def _address_space_fixes(self):
attr.NodeId = ua.NodeId(nodeid)
attr.AttributeId = ua.AttributeIds.Value
attr.Value = ua.DataValue(ua.Variant(10000, ua.VariantType.UInt32), ua.StatusCode(ua.StatusCodes.Good))
attr.Value.ServerTimestamp = datetime.utcnow()
attr.Value.ServerTimestamp = datetime.now(timezone.utc)
params.NodesToWrite.append(attr)
result = self.isession.write(params)
result[0].check()
Expand All @@ -176,7 +176,7 @@ def start(self):
self.subscription_service.set_loop(self.loop)
serverState = Node(self.isession, ua.NodeId(ua.ObjectIds.Server_ServerStatus_State))
serverState.set_value(ua.uaprotocol_auto.ServerState.Running, ua.VariantType.Int32)
Node(self.isession, ua.NodeId(ua.ObjectIds.Server_ServerStatus_StartTime)).set_value(datetime.utcnow())
Node(self.isession, ua.NodeId(ua.ObjectIds.Server_ServerStatus_StartTime)).set_value(datetime.now(timezone.utc))
if not self.disabled_clock:
self._set_current_time()

Expand All @@ -196,9 +196,9 @@ def is_running(self):
return self.loop is not None

def _set_current_time(self):
self.current_time_node.set_value(datetime.utcnow())
self.current_time_node.set_value(datetime.now(timezone.utc))
ssdata = self.server_status_node.get_value()
ssdata.CurrentTime = datetime.utcnow()
ssdata.CurrentTime = datetime.now(timezone.utc)
self.server_status_node.set_value(ssdata)
self.loop.call_later(1, self._set_current_time)

Expand Down
4 changes: 2 additions & 2 deletions opcua/server/internal_subscription.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ def deadband_callback(self, values, flt):
((abs(values.get_current_value() - values.get_old_value())) > flt.DeadbandValue):
return True
elif flt.DeadbandType == ua.DeadbandType.Percent:
self.logger.warn("DeadbandType Percent is not implemented !")
self.logger.warning("DeadbandType Percent is not implemented !")
return True
else:
return False
Expand Down Expand Up @@ -447,7 +447,7 @@ def _eval_el(self, index, event):
elif el.FilterOperator == ua.FilterOperator.Or:
return self._eval_op(ops[0], event) or self._eval_op(ops[1], event)
elif el.FilterOperator == ua.FilterOperator.Cast:
self.logger.warn("Cast operand not implemented, assuming True")
self.logger.warning("Cast operand not implemented, assuming True")
return True
elif el.FilterOperator == ua.FilterOperator.OfType:
return event.EventType == self._eval_op(ops[0], event)
Expand Down
8 changes: 4 additions & 4 deletions opcua/tools.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging
import sys
import argparse
from datetime import datetime, timedelta
from datetime import datetime, timedelta, timezone
import math
import time

Expand Down Expand Up @@ -621,7 +621,7 @@ def str_to_datetime(s, default=None):
if not s:
if default is not None:
return default
return datetime.utcnow()
return datetime.now(timezone.utc)
# FIXME: try different datetime formats
for fmt in ["%Y-%m-%d", "%Y-%m-%d %H:%M", "%Y-%m-%d %H:%M:%S"]:
try:
Expand Down Expand Up @@ -656,8 +656,8 @@ def uahistoryread():
client.connect()
try:
node = get_node(client, args)
starttime = str_to_datetime(args.starttime, datetime.utcnow() - timedelta(days=1))
endtime = str_to_datetime(args.endtime, datetime.utcnow())
starttime = str_to_datetime(args.starttime, datetime.now(timezone.utc) - timedelta(days=1))
endtime = str_to_datetime(args.endtime, datetime.now(timezone.utc))
print("Reading raw history of node {0} at {1}; start at {2}, end at {3}\n".format(node, args.url, starttime, endtime))
if args.events:
evs = node.read_event_history(starttime, endtime, numvalues=args.limit)
Expand Down
4 changes: 2 additions & 2 deletions opcua/ua/uatypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import uuid
import re
import itertools
from datetime import datetime, timedelta, MAXYEAR, tzinfo
from datetime import datetime, timedelta, MAXYEAR, tzinfo, timezone

from opcua.ua import status_codes
from opcua.ua import ObjectIds
Expand Down Expand Up @@ -985,7 +985,7 @@ def get_default_value(vtype):
elif vtype == VariantType.String:
return None # a string can be null
elif vtype == VariantType.DateTime:
return datetime.utcnow()
return datetime.now(timezone.utc)
elif vtype == VariantType.Guid:
return uuid.uuid4()
elif vtype == VariantType.XmlElement:
Expand Down
4 changes: 2 additions & 2 deletions schemas/generate_protocol_python.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def make_header(self):
self.write(f'Autogenerate code from xml spec\nDate:{datetime.datetime.now()}')
self.write("'''")
self.write("")
self.write("from datetime import datetime")
self.write("from datetime import datetime, timezone")
self.write("from enum import IntEnum")
self.write("")
#self.write("from opcua.ua.uaerrors import UaError")
Expand Down Expand Up @@ -217,7 +217,7 @@ def get_default_value(self, field):
elif field.uatype in ("Boolean"):
return "True"
elif field.uatype in ("DateTime"):
return "datetime.utcnow()"
return "datetime.now(timezone.utc)"
elif field.uatype in ("Int16", "Int32", "Int64", "UInt16", "UInt32", "UInt64", "Double", "Float", "Byte"):
return 0
elif field.uatype in ("ExtensionObject"):
Expand Down
4 changes: 2 additions & 2 deletions test_external_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import sys
import unittest
from concurrent.futures import Future
from datetime import datetime
from datetime import datetime, timezone
from datetime import timedelta
import time

Expand Down Expand Up @@ -116,7 +116,7 @@ def test_subscribe_server_time(self, client):

node, val, data = msclt.future.result()
self.assertEqual(node, server_time_node)
delta = datetime.utcnow() - val
delta = datetime.now(timezone.utc) - val
print("Timedelta is ", delta)
#self.assertTrue(delta < timedelta(seconds=2))

Expand Down
6 changes: 3 additions & 3 deletions tests/structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
THIS FILE IS AUTOGENERATED, DO NOT EDIT!!!
'''

from datetime import datetime
from datetime import datetime, timezone
from enum import IntEnum
import uuid

Expand Down Expand Up @@ -64,7 +64,7 @@ def __init__(self):
self.FloatValue = 0
self.DoubleValue = 0
self.StringValue = ''
self.DateTimeValue = datetime.utcnow()
self.DateTimeValue = datetime.now(timezone.utc)
self.GuidValue = uuid.uuid4()
self.ByteStringValue = b''
self.XmlElementValue = ua.XmlElement()
Expand Down Expand Up @@ -201,7 +201,7 @@ def __init__(self):
self.FloatDataType = 0
self.DoubleDataType = 0
self.StringDataType = ''
self.DateTimeDataType = datetime.utcnow()
self.DateTimeDataType = datetime.now(timezone.utc)
self.GuidDataType = uuid.uuid4()
self.ByteStringDataType = b''
self.XmlElementDataType = ua.XmlElement()
Expand Down
Loading