HCE Project Python language Distributed Tasks Manager Application, Distributed Crawler Application and client API bindings.  2.0.0-chaika
Hierarchical Cluster Engine Python language binding
dc_processor.PDateTimezonesHandler.PDateTimezonesHandler Class Reference
Inheritance diagram for dc_processor.PDateTimezonesHandler.PDateTimezonesHandler:
Collaboration diagram for dc_processor.PDateTimezonesHandler.PDateTimezonesHandler:

Public Member Functions

def __init__ (self)
 

Static Public Member Functions

def loadProperties (propertyString, logger=None)
 
def transform (dt, utcOffset, propertyString, urlString, logger=None)
 
def utcOffsetToNumeric (utcOffset, logger=None)
 
def getLocalOffset ()
 
def isEqualOffset (lhs, rhs, logger=None)
 
def transformationHandlerAlways (dt, utcOffset, zoneTo, zoneFrom, logger=None)
 
def transformationHandlerTimezoneDefined (dt, utcOffset, zoneTo, zoneFrom, logger=None)
 
def transformationHandlerNoTimezoneDefined (dt, utcOffset, zoneTo, zoneFrom, logger=None)
 
def transformationHandlerTimezoneEqual (dt, utcOffset, zoneTo, zoneFrom, logger=None)
 
def transformationHandlerTimezoneNotEqual (dt, utcOffset, zoneTo, zoneFrom, logger=None)
 
def applyTimezone (dt, timezone, logger=None)
 

Static Public Attributes

string PROPERTY_OPTION_PATTERN = 'pattern'
 
string PROPERTY_OPTION_ZONE_TO = 'zone_to'
 
string PROPERTY_OPTION_ZONE_FROM = 'zone_from'
 
string PROPERTY_OPTION_CONDITION = 'condition'
 
string VALUE_ZONE_FROM_LOCAL = 'LOCAL'
 
string ERROR_BAD_PARAMETER = 'Bad parameter'
 
string ERROR_LOAD_PROPERTIES = 'Load properties fail'
 
string ERROR_MANDATORY_FIELDS = 'Missed some mandatory fields'
 
string ERROR_WRONG_CONDITION = "Wrong '" + PROPERTY_OPTION_CONDITION + "' value"
 
string USE_PATTERN = 'Use pattern'
 
list patternListTimezoneOffset
 
int TRANSFORMATION_ALWAYS = 0
 
int TRANSFORMATION_TIMEZONE_DEFINED = 1
 
int TRANSFORMATION_NO_TIMEZONE_DEFINED = 2
 
int TRANSFORMATION_TIMEZONE_EQUAL = 3
 
int TRANSFORMATION_TIMEZONE_NOT_EQUAL = 4
 

Detailed Description

Definition at line 35 of file PDateTimezonesHandler.py.

Constructor & Destructor Documentation

◆ __init__()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.__init__ (   self)

Definition at line 62 of file PDateTimezonesHandler.py.

62  def __init__(self):
63  pass
64 
def __init__(self)
constructor
Definition: UIDGenerator.py:19

Member Function Documentation

◆ applyTimezone()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.applyTimezone (   dt,
  timezone,
  logger = None 
)
static

Definition at line 414 of file PDateTimezonesHandler.py.

414  def applyTimezone(dt, timezone, logger=None):
415  utcOffset = DateTimeType.extractUtcOffset(timezone, logger, True)
416  if logger is not None:
417  logger.debug("timezone: '%s', utcOffset: %s", str(timezone), str(utcOffset))
418 
419  res = PDateTimezonesHandler.transformationHandlerAlways(dt, utcOffset, timezone, None, logger)
420  if logger is not None:
421  logger.debug("result: %s", str(res))
422 
423  if res is not None:
424  dt = res
425 
426  return dt
427 

◆ getLocalOffset()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.getLocalOffset ( )
static

Definition at line 231 of file PDateTimezonesHandler.py.

231  def getLocalOffset():
232  gmTime = time.gmtime()
233  locTime = time.localtime()
234 
235  tmMinute = (gmTime.tm_hour * 60 + gmTime.tm_min) - (locTime.tm_hour * 60 + locTime.tm_min)
236  hour = tmMinute // 60 * (-1)
237  minute = tmMinute - tmMinute // 60 * 60
238  # structTime = (time.strptime(str(hour) + ' ' + str(minute), "%H %M"))
239  # return str(time.strftime('%H:%M', structTime))
240 
241  return str(hour) + ':' + str(minute)
242 
243 

◆ isEqualOffset()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.isEqualOffset (   lhs,
  rhs,
  logger = None 
)
static

Definition at line 251 of file PDateTimezonesHandler.py.

251  def isEqualOffset(lhs, rhs, logger=None):
252  # variable for result
253  ret = False
254  # extract lhs timezone offset
255  lUtcOffset = DateTimeType.extractUtcOffset(lhs, logger)
256  if lUtcOffset is not None:
257  # extract rhs timezome offset
258  rUtcOffset = DateTimeType.extractUtcOffset(rhs, logger)
259 
260  if rUtcOffset is not None:
261  lOperation, lHour, lMinute = PDateTimezonesHandler.utcOffsetToNumeric(lUtcOffset, logger)
262  rOperation, rHour, rMinute = PDateTimezonesHandler.utcOffsetToNumeric(rUtcOffset, logger)
263  # compare extracter numeric values
264  if lOperation and rOperation and lOperation == rOperation and lHour == rHour and lMinute == rMinute:
265  ret = True
266 
267  return ret
268 
269 

◆ loadProperties()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.loadProperties (   propertyString,
  logger = None 
)
static

Definition at line 71 of file PDateTimezonesHandler.py.

71  def loadProperties(propertyString, logger=None):
72  # variable for result
73  properties = []
74  try:
75  obj = json.loads(propertyString)
76  for elem in obj:
77  if PDateTimezonesHandler.PROPERTY_OPTION_PATTERN in elem and \
78  PDateTimezonesHandler.PROPERTY_OPTION_ZONE_TO in elem and \
79  PDateTimezonesHandler.PROPERTY_OPTION_ZONE_FROM in elem and \
80  PDateTimezonesHandler.PROPERTY_OPTION_CONDITION in elem:
81  properties.append(PDateTimezonesProperties(elem[PDateTimezonesHandler.PROPERTY_OPTION_PATTERN],
82  elem[PDateTimezonesHandler.PROPERTY_OPTION_ZONE_TO],
83  elem[PDateTimezonesHandler.PROPERTY_OPTION_ZONE_FROM],
84  elem[PDateTimezonesHandler.PROPERTY_OPTION_CONDITION]))
85  elif PDateTimezonesHandler.PROPERTY_OPTION_PATTERN in elem and \
86  PDateTimezonesHandler.PROPERTY_OPTION_ZONE_TO in elem and \
87  PDateTimezonesHandler.PROPERTY_OPTION_CONDITION in elem:
88  properties.append(PDateTimezonesProperties(elem[PDateTimezonesHandler.PROPERTY_OPTION_PATTERN],
89  elem[PDateTimezonesHandler.PROPERTY_OPTION_ZONE_TO],
90  None,
91  elem[PDateTimezonesHandler.PROPERTY_OPTION_CONDITION]))
92  else:
93  if logger is not None:
94  errorMessage = PDateTimezonesHandler.ERROR_MANDATORY_FIELDS + ': '
95  if PDateTimezonesHandler.PROPERTY_OPTION_PATTERN not in elem:
96  errorMessage += "'" + PDateTimezonesHandler.PROPERTY_OPTION_PATTERN + "',"
97 
98  if PDateTimezonesHandler.PROPERTY_OPTION_ZONE_TO not in elem:
99  errorMessage += "'" + PDateTimezonesHandler.PROPERTY_OPTION_ZONE_TO + "',"
100 
101  if PDateTimezonesHandler.PROPERTY_OPTION_CONDITION not in elem:
102  errorMessage += "'" + PDateTimezonesHandler.PROPERTY_OPTION_CONDITION + "',"
103 
104  logger.debug(errorMessage)
105 
106  except Exception, err:
107  if logger is not None:
108  logger.error(PDateTimezonesHandler.ERROR_LOAD_PROPERTIES + ': ' + str(err))
109 
110  return properties
111 
112 

◆ transform()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.transform (   dt,
  utcOffset,
  propertyString,
  urlString,
  logger = None 
)
static

Definition at line 122 of file PDateTimezonesHandler.py.

122  def transform(dt, utcOffset, propertyString, urlString, logger=None):
123  # variable for result
124  ret = None
125  try:
126  if not isinstance(dt, datetime.datetime):
127  raise Exception(PDateTimezonesHandler.ERROR_BAD_PARAMETER + " 'Datatime'")
128 
129  if (not isinstance(propertyString, str) and not isinstance(propertyString, unicode)) or not propertyString:
130  raise Exception(PDateTimezonesHandler.ERROR_BAD_PARAMETER + " 'propertyString'")
131 
132  if (not isinstance(urlString, str) and not isinstance(urlString, unicode)) or not urlString:
133  raise Exception(PDateTimezonesHandler.ERROR_BAD_PARAMETER + " 'urlString'")
134 
135  # try load properties
136  properties = PDateTimezonesHandler.loadProperties(propertyString, logger)
137  # Transform each element
138  for elem in properties:
139  match = re.search(elem.pattern, urlString)
140  if match:
141  if logger is not None:
142  logger.debug(PDateTimezonesHandler.USE_PATTERN + ": '" + str(elem.pattern) + "'")
143 
144  transformHandlers = {\
145  PDateTimezonesHandler.TRANSFORMATION_ALWAYS:\
146  PDateTimezonesHandler.transformationHandlerAlways, \
147  PDateTimezonesHandler.TRANSFORMATION_TIMEZONE_DEFINED:\
148  PDateTimezonesHandler.transformationHandlerTimezoneDefined, \
149  PDateTimezonesHandler.TRANSFORMATION_NO_TIMEZONE_DEFINED:\
150  PDateTimezonesHandler.transformationHandlerNoTimezoneDefined, \
151  PDateTimezonesHandler.TRANSFORMATION_TIMEZONE_EQUAL:\
152  PDateTimezonesHandler.transformationHandlerTimezoneEqual, \
153  PDateTimezonesHandler.TRANSFORMATION_TIMEZONE_NOT_EQUAL:\
154  PDateTimezonesHandler.transformationHandlerTimezoneNotEqual}
155 
156  if int(elem.condition) < len(transformHandlers) and int(elem.condition) >= 0:
157  # check value of zoneFrom
158  if elem.zoneFrom is None:
159  elem.zoneFrom = DateTimeType.getTimezone(dt) # from datetime
160  elif elem.zoneFrom == PDateTimezonesHandler.VALUE_ZONE_FROM_LOCAL:
161  elem.zoneFrom = PDateTimezonesHandler.getLocalOffset() # from local offset
162 
163  logger.debug('>>>>> d.isoformat: ' + str(dt.isoformat(' ')))
164  logger.debug('>>>>> elem.zoneFrom: ' + str(elem.zoneFrom))
165  logger.debug('>>>>> elem.zoneTo: ' + str(elem.zoneTo))
166  logger.debug('>>>>> elem.condition = ' + str(elem.condition))
167 
168  # Make excution accord to different algorithms
169  ret = transformHandlers[int(elem.condition)](dt, utcOffset, elem.zoneTo, elem.zoneFrom, logger)
170  else:
171  if logger is not None:
172  logger.debug(PDateTimezonesHandler.ERROR_WRONG_CONDITION + ': ' + str(elem.condition))
173 
174  except Exception, err:
175  if logger is not None:
176  logger.error(str(err))
177 
178  logger.debug("!!! ret: %s", str(ret))
179  return ret
180 
181 

◆ transformationHandlerAlways()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.transformationHandlerAlways (   dt,
  utcOffset,
  zoneTo,
  zoneFrom,
  logger = None 
)
static

Definition at line 279 of file PDateTimezonesHandler.py.

279  def transformationHandlerAlways(dt, utcOffset, zoneTo, zoneFrom, logger=None): # pylint: disable=W0613,W0612
280  # variable for result
281  ret = None
282  # local variables
283  tZoneTo = datetime.timedelta(hours=0)
284  tZoneFrom = datetime.timedelta(hours=0)
285  opZoneFrom = 1
286 
287  zoneToOffset = DateTimeType.extractUtcOffset(zoneTo, logger)
288  if zoneToOffset is not None:
289  zoneTo = str(zoneToOffset)
290 
291  zoneFromOffset = DateTimeType.extractUtcOffset(zoneFrom, logger)
292  if zoneFromOffset is not None:
293  zoneFrom = str(zoneFromOffset)
294 
295  opZoneTo, hour, minute = PDateTimezonesHandler.utcOffsetToNumeric(zoneTo, logger)
296  if opZoneTo is None:
297  opZoneTo = 1
298 
299  if opZoneTo is not None:
300  tZoneTo = datetime.timedelta(hours=hour, minutes=minute) # pylint: disable=R0204
301 
302  if zoneFrom is None:
303  tZoneFrom = datetime.timedelta(hours=0, minutes=0) # pylint: disable=R0204
304  opZoneFrom = 1
305  else:
306  opZoneFrom, hour, minute = PDateTimezonesHandler.utcOffsetToNumeric(zoneFrom, logger)
307  if opZoneFrom is None:
308  opZoneFrom = 1
309  tZoneFrom = datetime.timedelta(hours=hour, minutes=minute)
310 
311  if logger is not None:
312  logger.debug("!!! opZoneTo = %s, opZoneFrom = %s", str(opZoneTo), str(opZoneFrom))
313  logger.debug("!!! tZoneTo = %s, tZoneFrom = %s", str(tZoneTo), str(tZoneFrom))
314 
315  if opZoneTo is not None and opZoneFrom is not None:
316  if int(opZoneTo) >= 0 and int(opZoneFrom) >= 0:
317  # ret = dt - (max(tZoneTo, tZoneFrom * (-1)) - min(tZoneTo, tZoneFrom * (-1)))
318  ret = dt + tZoneFrom * (-1) + tZoneTo
319  if logger is not None:
320  logger.debug("!!! GOOD !!! ret = %s", str(ret))
321 
322  elif int(opZoneTo) < 0 and int(opZoneFrom) < 0:
323  # ret = dt + (max(tZoneTo, tZoneFrom * (-1)) - min(tZoneTo, tZoneFrom * (-1)))
324  ret = dt + tZoneFrom * (-1) + tZoneTo
325 
326  else:
327  ret = dt + (abs(tZoneTo) + abs(tZoneFrom)) * opZoneTo
328  # ret = dt + (tZoneFrom * (-1) + tZoneTo) * opZoneTo
329 
330  return ret
331 
332 

◆ transformationHandlerNoTimezoneDefined()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.transformationHandlerNoTimezoneDefined (   dt,
  utcOffset,
  zoneTo,
  zoneFrom,
  logger = None 
)
static

Definition at line 361 of file PDateTimezonesHandler.py.

361  def transformationHandlerNoTimezoneDefined(dt, utcOffset, zoneTo, zoneFrom, logger=None):
362  # variable for result
363  ret = None
364  sourceTimeZone = DateTimeType.extractUtcOffset(utcOffset, logger)
365  if sourceTimeZone is None:
366  ret = PDateTimezonesHandler.transformationHandlerAlways(dt, utcOffset, zoneTo, zoneFrom, logger)
367 
368  return ret
369 
370 

◆ transformationHandlerTimezoneDefined()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.transformationHandlerTimezoneDefined (   dt,
  utcOffset,
  zoneTo,
  zoneFrom,
  logger = None 
)
static

Definition at line 342 of file PDateTimezonesHandler.py.

342  def transformationHandlerTimezoneDefined(dt, utcOffset, zoneTo, zoneFrom, logger=None):
343  # variable for result
344  ret = None
345  sourceTimeZone = DateTimeType.extractUtcOffset(utcOffset, logger, True)
346  if sourceTimeZone is not None:
347  ret = PDateTimezonesHandler.transformationHandlerAlways(dt, utcOffset, zoneTo, zoneFrom, logger)
348 
349  return ret
350 
351 

◆ transformationHandlerTimezoneEqual()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.transformationHandlerTimezoneEqual (   dt,
  utcOffset,
  zoneTo,
  zoneFrom,
  logger = None 
)
static

Definition at line 380 of file PDateTimezonesHandler.py.

380  def transformationHandlerTimezoneEqual(dt, utcOffset, zoneTo, zoneFrom, logger=None):
381  # variable for result
382  ret = None
383  if PDateTimezonesHandler.isEqualOffset(utcOffset, zoneFrom):
384  ret = PDateTimezonesHandler.transformationHandlerAlways(dt, utcOffset, zoneTo, zoneFrom, logger)
385 
386  return ret
387 
388 

◆ transformationHandlerTimezoneNotEqual()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.transformationHandlerTimezoneNotEqual (   dt,
  utcOffset,
  zoneTo,
  zoneFrom,
  logger = None 
)
static

Definition at line 398 of file PDateTimezonesHandler.py.

398  def transformationHandlerTimezoneNotEqual(dt, utcOffset, zoneTo, zoneFrom, logger=None):
399  # variable for result
400  ret = None
401  if not PDateTimezonesHandler.isEqualOffset(utcOffset, zoneFrom):
402  ret = PDateTimezonesHandler.transformationHandlerAlways(dt, utcOffset, zoneTo, zoneFrom, logger)
403 
404  return ret
405 
406 

◆ utcOffsetToNumeric()

def dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.utcOffsetToNumeric (   utcOffset,
  logger = None 
)
static

Definition at line 188 of file PDateTimezonesHandler.py.

188  def utcOffsetToNumeric(utcOffset, logger=None):
189  # variable for result
190  operation = None
191  hour = 0
192  minute = 0
193 
194  utcOffset = utcOffset.replace('−', '-')
195 
196  try:
197  for pattern in PDateTimezonesHandler.patternListTimezoneOffset:
198  match = re.search(pattern, utcOffset)
199  if match:
200  if 'op' in match.groupdict():
201  if match.groupdict()['op'] == '-':
202  operation = -1
203  else:
204  operation = 1
205 
206  if 'hour' in match.groupdict():
207  hour = int(match.groupdict()['hour'])
208 
209  if operation is None:
210  operation = 1
211 
212  if 'min' in match.groupdict():
213  minute = int(match.groupdict()['min'])
214  break
215 
216  if logger is not None:
217  logger.debug('operation: ' + str(operation) + ' hour: ' + str(hour) + ' minute: ' + str(minute))
218 
219  except Exception, err:
220  if logger:
221  logger.debug(str(err))
222 
223  return operation, int(hour), int(minute)
224 
225 

Member Data Documentation

◆ ERROR_BAD_PARAMETER

string dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.ERROR_BAD_PARAMETER = 'Bad parameter'
static

Definition at line 44 of file PDateTimezonesHandler.py.

◆ ERROR_LOAD_PROPERTIES

string dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.ERROR_LOAD_PROPERTIES = 'Load properties fail'
static

Definition at line 45 of file PDateTimezonesHandler.py.

◆ ERROR_MANDATORY_FIELDS

string dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.ERROR_MANDATORY_FIELDS = 'Missed some mandatory fields'
static

Definition at line 46 of file PDateTimezonesHandler.py.

◆ ERROR_WRONG_CONDITION

string dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.ERROR_WRONG_CONDITION = "Wrong '" + PROPERTY_OPTION_CONDITION + "' value"
static

Definition at line 47 of file PDateTimezonesHandler.py.

◆ patternListTimezoneOffset

list dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.patternListTimezoneOffset
static
Initial value:
= [r'(?P<op>[+−-])(?P<hour>[0-9][0-9]):(?P<min>[0-9][0-9])',
r'(?P<op>[+−-])(?P<hour>[0-9][0-9])(?P<min>[0-9][0-9])',
r'(?P<op>[+-])(?P<hour>\d{1,2})',
r'(?P<hour>[−][0-9][0-9])']

Definition at line 51 of file PDateTimezonesHandler.py.

◆ PROPERTY_OPTION_CONDITION

string dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.PROPERTY_OPTION_CONDITION = 'condition'
static

Definition at line 40 of file PDateTimezonesHandler.py.

◆ PROPERTY_OPTION_PATTERN

string dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.PROPERTY_OPTION_PATTERN = 'pattern'
static

Definition at line 37 of file PDateTimezonesHandler.py.

◆ PROPERTY_OPTION_ZONE_FROM

string dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.PROPERTY_OPTION_ZONE_FROM = 'zone_from'
static

Definition at line 39 of file PDateTimezonesHandler.py.

◆ PROPERTY_OPTION_ZONE_TO

string dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.PROPERTY_OPTION_ZONE_TO = 'zone_to'
static

Definition at line 38 of file PDateTimezonesHandler.py.

◆ TRANSFORMATION_ALWAYS

int dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.TRANSFORMATION_ALWAYS = 0
static

Definition at line 56 of file PDateTimezonesHandler.py.

◆ TRANSFORMATION_NO_TIMEZONE_DEFINED

int dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.TRANSFORMATION_NO_TIMEZONE_DEFINED = 2
static

Definition at line 58 of file PDateTimezonesHandler.py.

◆ TRANSFORMATION_TIMEZONE_DEFINED

int dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.TRANSFORMATION_TIMEZONE_DEFINED = 1
static

Definition at line 57 of file PDateTimezonesHandler.py.

◆ TRANSFORMATION_TIMEZONE_EQUAL

int dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.TRANSFORMATION_TIMEZONE_EQUAL = 3
static

Definition at line 59 of file PDateTimezonesHandler.py.

◆ TRANSFORMATION_TIMEZONE_NOT_EQUAL

int dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.TRANSFORMATION_TIMEZONE_NOT_EQUAL = 4
static

Definition at line 60 of file PDateTimezonesHandler.py.

◆ USE_PATTERN

string dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.USE_PATTERN = 'Use pattern'
static

Definition at line 49 of file PDateTimezonesHandler.py.

◆ VALUE_ZONE_FROM_LOCAL

string dc_processor.PDateTimezonesHandler.PDateTimezonesHandler.VALUE_ZONE_FROM_LOCAL = 'LOCAL'
static

Definition at line 42 of file PDateTimezonesHandler.py.


The documentation for this class was generated from the following file: