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.

Reply via email to