3 new revisions:

Revision: bdff3dda795f
Branch:   default
Author:   Pekka Klärck
Date:     Tue May  6 11:21:32 2014 UTC
Log:      DateTime: Combatibility with Python/Jython < 2.7....
http://code.google.com/p/robotframework/source/detail?r=bdff3dda795f

Revision: ee5a5293f667
Branch:   default
Author:   Pekka Klärck
Date:     Tue May  6 11:27:13 2014 UTC
Log:      test data cleanup
http://code.google.com/p/robotframework/source/detail?r=ee5a5293f667

Revision: caac344db28e
Branch:   default
Author:   Pekka Klärck
Date:     Tue May  6 22:22:41 2014 UTC
Log: DateTime: Support Python/Jython 2.5 and workaround IronPython bug....
http://code.google.com/p/robotframework/source/detail?r=caac344db28e

==============================================================================
Revision: bdff3dda795f
Branch:   default
Author:   Pekka Klärck
Date:     Tue May  6 11:21:32 2014 UTC
Log:      DateTime: Combatibility with Python/Jython < 2.7.

Update issue 415
Python/Jython < 2.7 compatibility.
http://code.google.com/p/robotframework/source/detail?r=bdff3dda795f

Modified:
 /src/robot/libraries/DateTime.py

=======================================
--- /src/robot/libraries/DateTime.py    Tue Apr 29 18:01:18 2014 UTC
+++ /src/robot/libraries/DateTime.py    Tue May  6 11:21:32 2014 UTC
@@ -1,6 +1,5 @@
 from datetime import timedelta, datetime
-from numbers import Number
-from time import mktime
+import time
 from string import digits
 import re

@@ -24,7 +23,9 @@

     def _convert_time_to_seconds(self, time):
         if isinstance(time, timedelta):
-            return time.total_seconds()
+            # timedelta.total_seconds() is new in Python 2.7
+            return (time.days * 24 * 60 * 60 + time.seconds +
+                    time.microseconds / 1000000.0)
         if isinstance(time, basestring):
             match = self._clock_re.match(time)
             if match:
@@ -72,7 +73,7 @@
             return dt
         if isinstance(dt, basestring):
             return self._string_to_datetime(dt, input_format)
-        if isinstance(dt, Number):
+        if isinstance(dt, (int, long, float)):
             return datetime.fromtimestamp(dt)

     def _string_to_datetime(self, dt, input_format):
@@ -100,7 +101,7 @@
         return str(self.dt)

     def _convert_to_epoch(self):
-        return mktime(self.dt.timetuple())
+        return time.mktime(self.dt.timetuple())

     def _convert_to_datetime(self):
         return self.dt

==============================================================================
Revision: ee5a5293f667
Branch:   default
Author:   Pekka Klärck
Date:     Tue May  6 11:27:13 2014 UTC
Log:      test data cleanup
http://code.google.com/p/robotframework/source/detail?r=ee5a5293f667

Modified:
 /atest/testdata/standard_libraries/datetime/convert_date_input_format.txt
 /atest/testdata/standard_libraries/datetime/convert_date_result_format.txt

=======================================
--- /atest/testdata/standard_libraries/datetime/convert_date_input_format.txt Tue Apr 29 18:01:18 2014 UTC +++ /atest/testdata/standard_libraries/datetime/convert_date_input_format.txt Tue May 6 11:27:13 2014 UTC
@@ -1,30 +1,33 @@
 *** Settings ***
-Library         DateTime
-Test Template   Date Conversion Should Succeed
-Variables       datesandtimes.py
+Test Template     Date Conversion Should Succeed
+Library           DateTime
+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
+*** Variables ***
+${DATE}           ${datetime(2014, 4, 24, 21, 45, 12, 123000)}

-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 +*** 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 +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 +Datetime object ${DATE} ${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 + 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}
+    [Arguments]    ${input}    ${input_format}    ${expected}
+    ${ts} =    Convert Date    ${input}    input_format=${input_format}
+    Should Be Equal    ${ts}    ${expected}
=======================================
--- /atest/testdata/standard_libraries/datetime/convert_date_result_format.txt Tue Apr 29 18:01:18 2014 UTC +++ /atest/testdata/standard_libraries/datetime/convert_date_result_format.txt Tue May 6 11:27:13 2014 UTC
@@ -2,25 +2,31 @@
 Library         DateTime
 Test Template   Date Conversion Should Succeed
 Variables       datesandtimes.py
+
+*** Variables ***
+${DATE}         ${datetime(2014, 4, 24, 21, 45, 12, 123000)}

 *** 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 timestamp
+ 2014-04-24 21:45:12.123 timeSTAMP ${NONE} 2014-04-24 21:45:12.123 + 2014-04-24 21:45:12.123 tImestamp %Y-%m-%d %H:%M:%S.%f 2014-04-24 21:45:12.123 + ${1398365112.0} TIMEstamp ${NONE} 2014-04-24 21:45:12 + ${DATE} 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 epoch
+ 2014-04-24 21:45:12.123 epoch ${NONE} ${1398365112.0} + 2014-04-24 21:45:12.123 epoch %Y-%m-%d %H:%M:%S.%f ${1398365112.0} + ${1398365112.0} epoch ${NONE} ${1398365112.0} + ${DATE} 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')}
+Should convert to datetime
+    2014-04-24 21:45:12.123    datetime    ${NONE}                 ${DATE}
+    2014-04-24 21:45:12.123    datetime    %Y-%m-%d %H:%M:%S.%f    ${DATE}
+    ${1398365112.123}          dateTiMe    ${NONE}                 ${DATE}
+    ${DATE}                    datetimE    ${NONE}                 ${DATE}

 *** 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}
+ [Arguments] ${input} ${output_format} ${input_format} ${expected} + ${ts} = Convert Date ${input} ${output_format} ${input_format}
+    Should Be Equal    ${ts}    ${expected}

==============================================================================
Revision: caac344db28e
Branch:   default
Author:   Pekka Klärck
Date:     Tue May  6 22:22:41 2014 UTC
Log:      DateTime: Support Python/Jython 2.5 and workaround IronPython bug.

Update issue 415
Support Python/Jython 2.5 and workaround IronPython bug.
http://code.google.com/p/robotframework/source/detail?r=caac344db28e

Modified:
 /atest/robot/standard_libraries/datetime/convert_date_input_format.txt
 /atest/testdata/standard_libraries/datetime/convert_date_input_format.txt
 /src/robot/libraries/DateTime.py

=======================================
--- /atest/robot/standard_libraries/datetime/convert_date_input_format.txt Tue Apr 29 18:01:18 2014 UTC +++ /atest/robot/standard_libraries/datetime/convert_date_input_format.txt Tue May 6 22:22:41 2014 UTC
@@ -9,6 +9,9 @@

 Formatted strings
     Check Test Case    ${TESTNAME}
+
+Formatted with %f in middle
+    Check Test Case    ${TESTNAME}

 Epoch
     Check Test Case    ${TESTNAME}
@@ -18,3 +21,9 @@

 Pad zeroes to missing values
     Check Test Case    ${TESTNAME}
+
+Invalid input format
+    Check Test Case    ${TESTNAME}
+
+Rounding milliseconds
+    Check Test Case    ${TESTNAME}
=======================================
--- /atest/testdata/standard_libraries/datetime/convert_date_input_format.txt Tue May 6 11:27:13 2014 UTC +++ /atest/testdata/standard_libraries/datetime/convert_date_input_format.txt Tue May 6 22:22:41 2014 UTC
@@ -2,9 +2,6 @@
 Test Template     Date Conversion Should Succeed
 Library           DateTime
 Variables         datesandtimes.py
-
-*** Variables ***
-${DATE}           ${datetime(2014, 4, 24, 21, 45, 12, 123000)}

*** Test Cases *** INPUT FORMAT OUTPUT String inputs 2014-04-24 21:45:12.123 ${NONE} 2014-04-24 21:45:12.123
@@ -12,19 +9,49 @@
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 +Formatted strings 2014-04-24 21:45:12.123 %Y-%m-%d %H:%M:%S.%f 2014-04-24 21:45:12.123 + 2014-04-24T21:45:12.123 %Y-%m-%dT%H:%M:%S.%f 2014-04-24 21:45:12.123 + 24.4.2014 21:45:12-123 %d.%m.%Y %H:%M:%S-%f 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

+Formatted with %f in middle
+    [Template]    NONE
+    Run Keyword If    sys.version_info < (2, 6) or sys.platform == 'cli'
+ ... Run Keyword And Expect Error ValueError: %f directive is supported only at the end of the format string on this Python interpreter. + ... Date Conversion Should Succeed 21:45:12.123 24.04.2014 %H:%M:%S.%f %d.%m.%Y 2014-04-24 21:45:12.123
+    ...    ELSE
+ ... Date Conversion Should Succeed 21:45:12.123 24.04.2014 %H:%M:%S.%f %d.%m.%Y 2014-04-24 21:45:12.123
+
Epoch ${1398365112.0} ${NONE} 2014-04-24 21:45:12 ${1398365112.123} ${NONE} 2014-04-24 21:45:12.123

-Datetime object ${DATE} ${NONE} 2014-04-24 21:45:12.123 +Datetime object ${datetime(2014, 4, 24, 21, 45, 12, 123000)} ${NONE} 2014-04-24 21:45:12.123 + ${datetime(2014, 4, 24, 21)} ${NONE} 2014-04-24 21:00:00

 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
+
+Rounding milliseconds
+ 2014-04-24 21:45:12.123456 ${NONE} 2014-04-24 21:45:12.123 + 2014-04-24 21:45:12.1234 ${NONE} 2014-04-24 21:45:12.123 + 2014-04-24 21:45:12.1235 ${NONE} 2014-04-24 21:45:12.124 + 2014-04-24T21:45:12.123456 %Y-%m-%dT%H:%M:%S.%f 2014-04-24 21:45:12.123 + 2014-04-24T21:45:12.1234 %Y-%m-%dT%H:%M:%S.%f 2014-04-24 21:45:12.123 + 2014-04-24T21:45:12.1235 %Y-%m-%dT%H:%M:%S.%f 2014-04-24 21:45:12.124 + ${1398365112.123456} ${NONE} 2014-04-24 21:45:12.123 + ${1398365112.1234} ${NONE} 2014-04-24 21:45:12.123 + ${1398365112.1235} ${NONE} 2014-04-24 21:45:12.124 + ${datetime(2014, 4, 24, 21, 45, 12, 123456)} ${NONE} 2014-04-24 21:45:12.123 + ${datetime(2014, 4, 24, 21, 45, 12, 123400)} ${NONE} 2014-04-24 21:45:12.123 + ${datetime(2014, 4, 24, 21, 45, 12, 123500)} ${NONE} 2014-04-24 21:45:12.124
+
+Invalid input format
+    [Documentation]    FAIL ValueError: Unsupported input 'None'.
+    [Template]    NONE
+    Convert Date    ${NONE}

 *** Keywords ***
 Date Conversion Should Succeed
=======================================
--- /src/robot/libraries/DateTime.py    Tue May  6 11:21:32 2014 UTC
+++ /src/robot/libraries/DateTime.py    Tue May  6 22:22:41 2014 UTC
@@ -1,6 +1,7 @@
 from datetime import timedelta, datetime
 import time
-from string import digits
+import string
+import sys
 import re

from robot.utils import elapsed_time_to_string, secs_to_timestr, timestr_to_secs
@@ -65,43 +66,69 @@


 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, (int, long, float)):
-            return datetime.fromtimestamp(dt)
+            dt = self._string_to_datetime(dt, input_format)
+        elif isinstance(dt, (int, long, float)):
+            dt = self._dt_from_timestamp(dt)
+        elif not isinstance(dt, datetime):
+            raise ValueError("Unsupported input '%s'." % dt)
+        return self._round_dt_to_millis(dt)
+
+    def _round_dt_to_millis(self, dt):
+        return datetime(dt.year, dt.month, dt.day, dt.hour, dt.minute,
+                        dt.second, int(round(dt.microsecond, -3)))

     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'
+        if '%f' in input_format and (sys.version_info < (2, 6) or
+                                     sys.platform == 'cli'):
+            return self._handle_un_supported_f_directive(dt, input_format)
         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])
+        ts = ''.join(d for d in date if d in string.digits).ljust(20, '0')
+ return '%s-%s-%s %s:%s:%s.%s' % (ts[:4], ts[4:6], ts[6:8], ts[8:10],
+                                         ts[10:12], ts[12:14], ts[14:])
+
+    def _handle_un_supported_f_directive(self, dt, input_format):
+        if not input_format.endswith('%f'):
+ raise ValueError('%f directive is supported only at the end of ' + 'the format string on this Python interpreter.')
+        input_format = input_format[:-2]
+        micro = re.search('\d+$', dt).group(0)
+        dt = dt[:-len(micro)]
+        epoch = time.mktime(time.strptime(dt, input_format))
+        epoch += float(micro) / 10**len(micro)
+        return self._dt_from_timestamp(epoch)
+
+    def _dt_from_timestamp(self, ts):
+        # Jython and IronPython handle floats incorrectly. For example,
+        # datetime.fromtimestamp(1399410716.123).microsecond == 122999
+        dt = datetime.fromtimestamp(ts)
+        return datetime(dt.year, dt.month, dt.day, dt.hour, dt.minute,
+                        dt.second, int(round(ts % 1 * 10**6, -3)))

-    def convert(self, output_format):
+    def convert(self, format):
         try:
- result_converter = getattr(self, '_convert_to_%s' % output_format.lower()) + result_converter = getattr(self, '_convert_to_%s' % format.lower())
         except AttributeError:
-            raise ValueError("Unknown format '%s'." % output_format)
-        return result_converter()
+            raise ValueError("Unknown format '%s'." % format)
+        return result_converter(self.dt)

-    def _convert_to_timestamp(self):
-        if self.dt.microsecond:
-            return str(self.dt)[:-3]
-        return str(self.dt)
+    def _convert_to_timestamp(self, dt):
+        if dt.microsecond:
+            return str(dt)[:-3]
+        return str(dt)

-    def _convert_to_epoch(self):
-        return time.mktime(self.dt.timetuple())
+    def _convert_to_epoch(self, dt):
+        return time.mktime(dt.timetuple())

-    def _convert_to_datetime(self):
-        return self.dt
+    def _convert_to_datetime(self, dt):
+        return 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