Revision: 36ff2e45fa37
Branch: default
Author: Janne Piironen <janne.piiro...@gmail.com>
Date: Tue Apr 29 18:01:18 2014 UTC
Log: DateTime: implemented "Convert Date" keyword
Update issue 415
Implemented "Convert Date" keyword
http://code.google.com/p/robotframework/source/detail?r=36ff2e45fa37
Added:
/atest/robot/standard_libraries/datetime/convert_date_input_format.txt
/atest/robot/standard_libraries/datetime/convert_date_result_format.txt
/atest/testdata/standard_libraries/datetime/calculations.txt
/atest/testdata/standard_libraries/datetime/convert_date_input_format.txt
/atest/testdata/standard_libraries/datetime/convert_date_result_format.txt
Modified:
/atest/testdata/standard_libraries/datetime/datesandtimes.py
/src/robot/libraries/DateTime.py
=======================================
--- /dev/null
+++ /atest/robot/standard_libraries/datetime/convert_date_input_format.txt
Tue Apr 29 18:01:18 2014 UTC
@@ -0,0 +1,20 @@
+*** Settings ***
+Suite Setup Run Tests ${EMPTY}
standard_libraries/datetime/convert_date_input_format.txt
+Force Tags regression pybot jybot
+Resource atest_resource.txt
+
+*** Test Cases ***
+String inputs
+ Check Test Case ${TESTNAME}
+
+Formatted strings
+ Check Test Case ${TESTNAME}
+
+Epoch
+ Check Test Case ${TESTNAME}
+
+Datetime object
+ Check Test Case ${TESTNAME}
+
+Pad zeroes to missing values
+ Check Test Case ${TESTNAME}
=======================================
--- /dev/null
+++ /atest/robot/standard_libraries/datetime/convert_date_result_format.txt
Tue Apr 29 18:01:18 2014 UTC
@@ -0,0 +1,14 @@
+*** Settings ***
+Suite Setup Run Tests ${EMPTY}
standard_libraries/datetime/convert_date_result_format.txt
+Force Tags regression pybot jybot
+Resource atest_resource.txt
+
+*** Test Cases ***
+Should convert to timestamp
+ Check Test Case ${TESTNAME}
+
+Should convert to epoch
+ Check Test Case ${TESTNAME}
+
+Should convert to datetime
+ Check Test Case ${TESTNAME}
=======================================
--- /dev/null
+++
/atest/testdata/standard_libraries/datetime/convert_date_input_format.txt
Tue Apr 29 18:01:18 2014 UTC
@@ -0,0 +1,30 @@
+*** Settings ***
+Library DateTime
+Test Template Date Conversion Should Succeed
+Variables datesandtimes.py
+
+*** Test Cases *** INPUT FORMAT
OUTPUT
+String inputs 2014-04-24 21:45:12.123 ${NONE}
2014-04-24 21:45:12.123
+ 2014-04-24 21:45:12 ${NONE}
2014-04-24 21:45:12
+ 2014-04-24T21:45:12.123 ${NONE}
2014-04-24 21:45:12.123
+ 2014.04+24@@21/45!12,123 ${NONE}
2014-04-24 21:45:12.123
+
+Formatted strings 21:45:12.123 24.04.2014 %H:%M:%S.%f %d.%m.%Y
2014-04-24 21:45:12.123
+ 04/24/2014T21.45.12 %m/%d/%YT%H.%M.%S
2014-04-24 21:45:12
+ 24.04.2014 %d.%m.%Y
2014-04-24 00:00:00
+ 24-04.2014@21 %d-%m.%Y@%H
2014-04-24 21:00:00
+
+Epoch ${1398365112.0} ${NONE}
2014-04-24 21:45:12
+ ${1398365112.123} ${NONE}
2014-04-24 21:45:12.123
+
+Datetime object ${datetime.strptime('2014-04-24
21:45:12.123', '%Y-%m-%d %H:%M:%S.%f')} ${NONE} 2014-04-24 21:45:12.123
+
+Pad zeroes to missing values
+ 2014-04-24 ${NONE}
2014-04-24 00:00:00
+ 2014.04.24 21 ${NONE}
2014-04-24 21:00:00
+
+*** Keywords ***
+Date Conversion Should Succeed
+ [Arguments] ${input} ${input_format} ${expected}
+ ${ts} = Convert Date ${input} input_format=${input_format}
+ Should Be Equal ${ts} ${expected}
=======================================
--- /dev/null
+++
/atest/testdata/standard_libraries/datetime/convert_date_result_format.txt
Tue Apr 29 18:01:18 2014 UTC
@@ -0,0 +1,26 @@
+*** Settings ***
+Library DateTime
+Test Template Date Conversion Should Succeed
+Variables datesandtimes.py
+
+*** Test Cases ***
+Should convert to timestamp 2014-04-24 21:45:12.123 timeSTAMP
${NONE} 2014-04-24 21:45:12.123
+ 21:45:12.123 2014-04-24
tImestamp %H:%M:%S.%f %Y-%m-%d 2014-04-24 21:45:12.123
+ ${1398365112.0} TIMEstamp
${NONE} 2014-04-24 21:45:12
+ ${datetime.strptime('2014-04-24
21:45:12.123000', '%Y-%m-%d %H:%M:%S.%f')} TimeStamp ${NONE} 2014-04-24
21:45:12.123
+
+Should convert to epoch 2014-04-24 21:45:12.123 epoch
${NONE} ${1398365112.0}
+ 21:45:12.123 2014-04-24
epoch %H:%M:%S.%f %Y-%m-%d ${1398365112.0}
+ ${1398365112.0} epoch
${NONE} ${1398365112.0}
+ ${datetime.strptime('2014-04-24
21:45:12.123000', '%Y-%m-%d %H:%M:%S.%f')} epoch ${NONE} ${1398365112.0}
+
+Should convert to datetime 2014-04-24 21:45:12.123 datetime
${NONE} ${datetime.strptime('2014-04-24
21:45:12.123000', '%Y-%m-%d %H:%M:%S.%f')}
+ 21:45:12.123 2014-04-24
datetime %H:%M:%S.%f %Y-%m-%d ${datetime.strptime('2014-04-24
21:45:12.123000', '%Y-%m-%d %H:%M:%S.%f')}
+ ${1398365112.123} dateTiMe
${NONE} ${datetime.strptime('2014-04-24
21:45:12.123000', '%Y-%m-%d %H:%M:%S.%f')}
+ ${datetime.strptime('2014-04-24
21:45:12.123000', '%Y-%m-%d %H:%M:%S.%f')} datetimE ${NONE}
${datetime.strptime('2014-04-24 21:45:12.123000', '%Y-%m-%d %H:%M:%S.%f')}
+
+*** Keywords ***
+Date Conversion Should Succeed
+ [Arguments] ${input} ${output_format} ${input_format} ${expected}
+ ${ts} = Convert Date ${input} ${output_format} ${input_format}
+ Should Be Equal ${ts} ${expected}
=======================================
--- /atest/testdata/standard_libraries/datetime/datesandtimes.py Fri Apr 25
13:22:40 2014 UTC
+++ /atest/testdata/standard_libraries/datetime/datesandtimes.py Tue Apr 29
18:01:18 2014 UTC
@@ -1,2 +1,2 @@
-from datetime import timedelta
+from datetime import timedelta, datetime
=======================================
--- /src/robot/libraries/DateTime.py Fri Apr 25 13:22:40 2014 UTC
+++ /src/robot/libraries/DateTime.py Tue Apr 29 18:01:18 2014 UTC
@@ -1,4 +1,7 @@
-from datetime import timedelta
+from datetime import timedelta, datetime
+from numbers import Number
+from time import mktime
+from string import digits
import re
from robot.utils import elapsed_time_to_string, secs_to_timestr,
timestr_to_secs
@@ -9,6 +12,9 @@
def convert_time(self, time, result_format='number',
exclude_millis=False):
return Time(time).convert(result_format, millis=not exclude_millis)
+ def convert_date(self, date, result_format='timestamp',
input_format=None):
+ return Date(date, input_format).convert(result_format)
+
class Time(object):
_clock_re = re.compile('(\d{2,}):(\d{2}):(\d{2})(\.(\d{3}))?')
@@ -55,3 +61,46 @@
def _convert_to_timedelta(self, seconds, millis=True):
return timedelta(seconds=seconds)
+
+
+class Date(object):
+ def __init__(self, dt, input_format):
+ self.dt = self._convert_to_dt(dt, input_format)
+
+ def _convert_to_dt(self, dt, input_format):
+ if isinstance(dt, datetime):
+ return dt
+ if isinstance(dt, basestring):
+ return self._string_to_datetime(dt, input_format)
+ if isinstance(dt, Number):
+ return datetime.fromtimestamp(dt)
+
+ def _string_to_datetime(self, dt, input_format):
+ if not input_format:
+ dt = self._normalize_timestamp(dt)
+ input_format = '%Y-%m-%d %H:%M:%S.%f'
+ return datetime.strptime(dt, input_format)
+
+ def _normalize_timestamp(self, date):
+ stamp = ''.join(digit for digit in date if digit in digits)
+ stamp = stamp.ljust(17, '0')
+ return '%s-%s-%s %s:%s:%s.%s' % (stamp[:4], stamp[4:6],
stamp[6:8], stamp[8:10],
+ stamp[10:12], stamp[12:14],
stamp[14:17])
+
+ def convert(self, output_format):
+ try:
+ result_converter = getattr(self, '_convert_to_%s' %
output_format.lower())
+ except AttributeError:
+ raise ValueError("Unknown format '%s'." % output_format)
+ return result_converter()
+
+ def _convert_to_timestamp(self):
+ if self.dt.microsecond:
+ return str(self.dt)[:-3]
+ return str(self.dt)
+
+ def _convert_to_epoch(self):
+ return mktime(self.dt.timetuple())
+
+ def _convert_to_datetime(self):
+ return self.dt
--
---
You received this message because you are subscribed to the Google Groups "robotframework-commit" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to robotframework-commit+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.