def testEncodeDateTimes ( self ): # Construct the message message1 = Message ( ) message1.addFieldRawDate ( 2010, 0, 0, 'date-Year' ) message1.addFieldRawDate ( 2010, 3, 0, 'date-Month' ) message1.addFieldRawDate ( 2010, 3, 4, 'date-Day' ) for precision, name, timezone in ( ( fudgepyc.types.PRECISION_HOUR, 'time-Hour-UTC', 0 ), ( fudgepyc.types.PRECISION_MINUTE, 'time-Minute-UTC', 0 ), ( fudgepyc.types.PRECISION_SECOND, 'time-Second-UTC', 0 ), ( fudgepyc.types.PRECISION_MILLISECOND, 'time-Milli-UTC', 0 ), ( fudgepyc.types.PRECISION_MICROSECOND, 'time-Micro-UTC', 0 ), ( fudgepyc.types.PRECISION_NANOSECOND, 'time-Nano-UTC', 0 ), ( fudgepyc.types.PRECISION_NANOSECOND, 'time-Nano', None ), ( fudgepyc.types.PRECISION_NANOSECOND, 'time-Nano-+1h', 4 ) ): if timezone is None: message1.addFieldRawTime ( precision, 11, 12, 13, 987654321, name = name ) else: message1.addFieldRawTime ( precision, 11, 12, 13, 987654321, timezone, name ) message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_MILLENNIUM, 1000, name = 'datetime-Millenia' ) message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_CENTURY, 1900, name = 'datetime-Century' ) for timezone, name in ( ( 0, 'datetime-Nano-UTC' ), ( None, 'datetime-Nano' ), ( 4, 'datetime-Nano-+1h' ) ): if timezone is None: message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_NANOSECOND, 2010, 3, 4, 11, 12, 13, 987654321, name = name ) else: message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_NANOSECOND, 2010, 3, 4, 11, 12, 13, 987654321, timezone, name ) # Encode it and compare against the test file encoded = Envelope ( message1 ).encode ( ) reference = self.__loadFile ( 'DATETIMES' ) self.assertEquals ( encoded, reference )
def testDateTimeFields ( self ): message1 = Message ( ) # Populate message using raw datetime methods message1.addFieldRawDate ( name = 'nodate' ) message1.addFieldRawDate ( 1689, name = 'year' ) message1.addFieldRawDate ( 1689, 12, name = 'month' ) message1.addFieldRawDate ( 1689, 12, 16, name = 'day' ) message1.addFieldRawTime ( fudgepyc.types.PRECISION_MILLENNIUM, name = 'notime' ) message1.addFieldRawTime ( fudgepyc.types.PRECISION_HOUR, 18, name = 'hour' ) message1.addFieldRawTime ( fudgepyc.types.PRECISION_MINUTE, 18, 4, name = 'minute' ) message1.addFieldRawTime ( fudgepyc.types.PRECISION_SECOND, 18, 4, 40, name = 'second' ) message1.addFieldRawTime ( fudgepyc.types.PRECISION_NANOSECOND, 18, 4, 40, 237363123, name = 'nanosecond' ) message1.addFieldRawTime ( fudgepyc.types.PRECISION_MILLENNIUM, offset = 0, name = 'notime_utc' ) message1.addFieldRawTime ( fudgepyc.types.PRECISION_HOUR, 18, offset = 8, name = 'hour_+2h' ) message1.addFieldRawTime ( fudgepyc.types.PRECISION_MINUTE, 18, 4, offset = -4, name = 'minute_-1h' ) message1.addFieldRawTime ( fudgepyc.types.PRECISION_SECOND, 18, 4, 40, offset = -20, name = 'second_-5h' ) message1.addFieldRawTime ( fudgepyc.types.PRECISION_NANOSECOND, 18, 4, 40, 237363123, offset = 0, name = 'nanosecond_utc' ) message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_CENTURY, name = 'nodatetime' ) message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_YEAR, 1689, name = 'dt_year' ) message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_MONTH, 1689, 12, name = 'dt_month', offset = -6 ) message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_DAY, 1689, 12, 16, name = 'dt_day' ) message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_HOUR, 1689, 12, 16, 18, name = 'dt_hour' ) message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_MINUTE, 1689, 12, 16, 18, 4, name = 'dt_minute', offset = 0 ) message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_SECOND, 1689, 12, 16, 18, 4, 40, name = 'dt_second' ) message1.addFieldRawDateTime ( fudgepyc.types.PRECISION_NANOSECOND, 1689, 12, 16, 18, 4, 40, 237363123, name = 'dt_nanosecond', offset = 1 ) # Access the fields as raw tuples self.assertEqual ( message1 [ 'nodate' ].getRawDate ( ), ( 0, 0, 0 ) ) self.assertEqual ( message1 [ 'year' ].getRawDate ( ), ( 1689, 0, 0 ) ) self.assertEqual ( message1 [ 'month' ].getRawDate ( ), ( 1689, 12, 0 ) ) self.assertEqual ( message1 [ 'day' ].getRawDate ( ), ( 1689, 12, 16 ) ) self.assertEqual ( message1 [ 'notime' ].getRawTime ( ), ( fudgepyc.types.PRECISION_MILLENNIUM, 0, 0, 0, 0, None ) ) self.assertEqual ( message1 [ 'hour' ].getRawTime ( ), ( fudgepyc.types.PRECISION_HOUR, 18, 0, 0, 0, None ) ) self.assertEqual ( message1 [ 'minute' ].getRawTime ( ), ( fudgepyc.types.PRECISION_MINUTE, 18, 4, 0, 0, None ) ) self.assertEqual ( message1 [ 'second' ].getRawTime ( ), ( fudgepyc.types.PRECISION_SECOND, 18, 4, 40, 0, None ) ) self.assertEqual ( message1 [ 'nanosecond' ].getRawTime ( ), ( fudgepyc.types.PRECISION_NANOSECOND, 18, 4, 40, 237363123, None ) ) self.assertEqual ( message1 [ 'notime_utc' ].getRawTime ( ), ( fudgepyc.types.PRECISION_MILLENNIUM, 0, 0, 0, 0, 0 ) ) self.assertEqual ( message1 [ 'hour_+2h' ].getRawTime ( ), ( fudgepyc.types.PRECISION_HOUR, 18, 0, 0, 0, 8 ) ) self.assertEqual ( message1 [ 'minute_-1h' ].getRawTime ( ), ( fudgepyc.types.PRECISION_MINUTE, 18, 4, 0, 0, -4 ) ) self.assertEqual ( message1 [ 'second_-5h' ].getRawTime ( ), ( fudgepyc.types.PRECISION_SECOND, 18, 4, 40, 0, -20 ) ) self.assertEqual ( message1 [ 'nanosecond_utc' ].getRawTime ( ), ( fudgepyc.types.PRECISION_NANOSECOND, 18, 4, 40, 237363123, 0 ) ) self.assertEqual ( message1 [ 'nodatetime' ].getRawDateTime ( ), ( fudgepyc.types.PRECISION_CENTURY, 0, 0, 0, 0, 0, 0, 0, None ) ) self.assertEqual ( message1 [ 'dt_year' ].getRawDateTime ( ), ( fudgepyc.types.PRECISION_YEAR, 1689, 0, 0, 0, 0, 0, 0, None ) ) self.assertEqual ( message1 [ 'dt_month' ].getRawDateTime ( ), ( fudgepyc.types.PRECISION_MONTH, 1689, 12, 0, 0, 0, 0, 0, -6 ) ) self.assertEqual ( message1 [ 'dt_day' ].getRawDateTime ( ), ( fudgepyc.types.PRECISION_DAY, 1689, 12, 16, 0, 0, 0, 0, None ) ) self.assertEqual ( message1 [ 'dt_hour' ].getRawDateTime ( ), ( fudgepyc.types.PRECISION_HOUR, 1689, 12, 16, 18, 0, 0, 0, None ) ) self.assertEqual ( message1 [ 'dt_minute' ].getRawDateTime ( ), ( fudgepyc.types.PRECISION_MINUTE, 1689, 12, 16, 18, 4, 0, 0, 0 ) ) self.assertEqual ( message1 [ 'dt_second' ].getRawDateTime ( ), ( fudgepyc.types.PRECISION_SECOND, 1689, 12, 16, 18, 4, 40, 0, None ) ) self.assertEqual ( message1 [ 'dt_nanosecond' ].getRawDateTime ( ), ( fudgepyc.types.PRECISION_NANOSECOND, 1689, 12, 16, 18, 4, 40, 237363123, 1 ) ) # Access the fields as datetime objects self.assertEqual ( message1 [ 'nodate' ].value ( ), datetime.date ( 1, 1, 1 ) ) self.assertEqual ( message1 [ 'year' ].value ( ), datetime.date ( 1689, 1, 1 ) ) self.assertEqual ( message1 [ 'month' ].value ( ), datetime.date ( 1689, 12, 1 ) ) self.assertEqual ( message1 [ 'day' ].value ( ), datetime.date ( 1689, 12, 16 ) ) self.assertEqual ( message1 [ 'notime' ].value ( ), datetime.time ( 0, 0, 0 ) ) self.assertEqual ( message1 [ 'hour' ].value ( ), datetime.time ( 18, 0, 0 ) ) self.assertEqual ( message1 [ 'minute' ].value ( ), datetime.time ( 18, 4, 0 ) ) self.assertEqual ( message1 [ 'second' ].value ( ), datetime.time ( 18, 4, 40 ) ) self.assertEqual ( message1 [ 'nanosecond' ].value ( ), datetime.time ( 18, 4, 40, 237363 ) ) self.assertEqual ( message1 [ 'notime_utc' ].value ( ), datetime.time ( 0, 0, 0, 0, fudgepyc.timezone.Timezone ( 0 ) ) ) self.assertEqual ( message1 [ 'hour_+2h' ].value ( ), datetime.time ( 18, 0, 0, 0, fudgepyc.timezone.Timezone ( 8 ) ) ) self.assertEqual ( message1 [ 'minute_-1h' ].value ( ), datetime.time ( 18, 4, 0, 0, fudgepyc.timezone.Timezone ( -4 ) ) ) self.assertEqual ( message1 [ 'second_-5h' ].value ( ), datetime.time ( 18, 4, 40, 0, fudgepyc.timezone.Timezone ( -20 ) ) ) self.assertEqual ( message1 [ 'nanosecond_utc' ].value ( ), datetime.time ( 18, 4, 40, 237363, fudgepyc.timezone.Timezone ( 0 ) ) ) self.assertEqual ( message1 [ 'nodatetime' ].value ( ), datetime.datetime ( 1, 1, 1, 0, 0, 0, 0 ) ) self.assertEqual ( message1 [ 'dt_year' ].value ( ), datetime.datetime ( 1689, 1, 1, 0, 0, 0, 0 ) ) self.assertEqual ( message1 [ 'dt_month' ].value ( ), datetime.datetime ( 1689, 12, 1, 0, 0, 0, 0, fudgepyc.timezone.Timezone ( -6 ) ) ) self.assertEqual ( message1 [ 'dt_day' ].value ( ), datetime.datetime ( 1689, 12, 16, 0, 0, 0, 0 ) ) self.assertEqual ( message1 [ 'dt_hour' ].value ( ), datetime.datetime ( 1689, 12, 16, 18, 0, 0, 0 ) ) self.assertEqual ( message1 [ 'dt_minute' ].value ( ), datetime.datetime ( 1689, 12, 16, 18, 4, 0, 0, fudgepyc.timezone.Timezone ( 0 ) ) ) self.assertEqual ( message1 [ 'dt_second' ].value ( ), datetime.datetime ( 1689, 12, 16, 18, 4, 40, 0 ) ) self.assertEqual ( message1 [ 'dt_nanosecond' ].value ( ), datetime.datetime ( 1689, 12, 16, 18, 4, 40, 237363, fudgepyc.timezone.Timezone ( 1 ) ) )