]> gitweb.michael.orlitzky.com - dead/htsn-import.git/commitdiff
Add a pickler for AutoRacingResults <RaceDate> elements.
authorMichael Orlitzky <michael@orlitzky.com>
Thu, 12 Jun 2014 19:52:59 +0000 (15:52 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Thu, 12 Jun 2014 19:52:59 +0000 (15:52 -0400)
Add a padded variant of xp_date and use it in two places.

src/TSN/Picklers.hs
src/TSN/XML/AutoRacingSchedule.hs
src/TSN/XML/News.hs
src/TSN/XML/Odds.hs

index 608f907e5b43896dc059e6aca8ea5be144b9fc46..dc3ed9a05cb452fbba1ad884593fc5ace02967c9 100644 (file)
@@ -3,7 +3,9 @@
 --
 module TSN.Picklers (
   xp_date,
+  xp_date_padded,
   xp_gamedate,
+  xp_racedate,
   xp_tba_time,
   xp_time,
   xp_time_stamp )
@@ -26,19 +28,73 @@ import TSN.Parse (
   time_stamp_format )
 
 
+-- | The format string for a base date in m/d/yyyy format. The
+--   day/month are not padded at all. This will match for example,
+--
+--   * 2/15/1983
+--   * 1/1/0000
+--
+date_format :: String
+date_format = "%-m/%-d/%Y"
+
+
+-- | The format string for a base date in mm/dd/yyyy format. The
+--   day/month are padded to two characters with zeros. This will
+--   match for example,
+--
+--   * 02/15/1983
+--   * 01/01/0000
+--
+date_format_padded :: String
+date_format_padded = "%0m/%0d/%Y"
+
+
 -- | (Un)pickle a UTCTime without the time portion.
 --
 xp_date :: PU UTCTime
 xp_date =
   (to_date, from_date) `xpWrapMaybe` xpText
   where
-    format = "%-m/%-d/%Y"
+    to_date :: String -> Maybe UTCTime
+    to_date = parseTime defaultTimeLocale date_format
+
+    from_date :: UTCTime -> String
+    from_date = formatTime defaultTimeLocale date_format
+
 
+-- | (Un)pickle a UTCTime without the time portion. The day/month are
+--   padded to two characters with zeros.
+--
+xp_date_padded :: PU UTCTime
+xp_date_padded =
+  (to_date, from_date) `xpWrapMaybe` xpText
+  where
     to_date :: String -> Maybe UTCTime
-    to_date = parseTime defaultTimeLocale format
+    to_date = parseTime defaultTimeLocale date_format_padded
 
     from_date :: UTCTime -> String
-    from_date = formatTime defaultTimeLocale format
+    from_date = formatTime defaultTimeLocale date_format_padded
+
+
+-- | (Un)pickle a 'UTCTime' from a \<RaceDate\> element in an
+--   'AutoRaceResults' message.
+--
+--   Example:
+--
+--   <RaceDate>6/1/2014 1:00:00 PM</RaceDate>
+--   <RaceDate>5/24/2014 2:45:00 PM</RaceDate>
+--
+xp_racedate :: PU UTCTime
+xp_racedate =
+  (to_racedate, from_racedate) `xpWrapMaybe` xpText
+  where
+    format = date_format ++ " " ++ "%-I:%M:%S %p"
+
+    to_racedate :: String -> Maybe UTCTime
+    to_racedate = parseTime defaultTimeLocale format
+
+    from_racedate :: UTCTime -> String
+    from_racedate = formatTime defaultTimeLocale format
 
 
 -- | (Un)pickle a UTCTime from a weather forecast's gamedate. Example
index 54144e43c1d2dd7bb41dd1eab82aac37ecb97606..1f459860244b33d0e5c7b6b1d907e074a40e200b 100644 (file)
@@ -56,7 +56,7 @@ import Text.XML.HXT.Core (
 import TSN.Codegen (
   tsn_codegen_config )
 import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
-import TSN.Picklers ( xp_date, xp_tba_time, xp_time_stamp )
+import TSN.Picklers ( xp_date_padded, xp_tba_time, xp_time_stamp )
 import TSN.XmlImport ( XmlImport(..), XmlImportFk(..) )
 import Xml (
   FromXml(..),
@@ -419,7 +419,7 @@ pickle_listing =
   xpElem "Listing" $
     xpWrap (from_tuple, to_tuple) $
       xp10Tuple (xpElem "RaceID" xpInt)
-                (xpElem "Race_Date" xp_date)
+                (xpElem "Race_Date" xp_date_padded)
                 (xpElem "Race_Time" xp_tba_time)
                 (xpElem "RaceName" xpText)
                 (xpElem "TrackName" xpText)
index 276151978f0d962a280ec8f83304308aaa7b554e..913477168540ea47e178adca60e0d1b21bd2165e 100644 (file)
@@ -85,9 +85,9 @@ dtd = "newsxml.dtd"
 
 -- * News/Message
 
--- | The msg_id child of <message> contains an event_id attribute; we
---   embed it into the 'News' type. We (pointlessly) use the "db_"
---   prefix here so that the two names don't collide on "id" when
+-- | The msg_id child of \<message\> contains an event_id attribute; we
+--   embed it into the 'News' type. We (pointlessly) use the \"db_\"
+--   prefix here so that the two names don't collide on \"id\" when
 --   Groundhog is creating its fields using our field namer.
 --
 data MsgId =
index 9672c9ce4a1531c45153a5df1372af3e1766fe35..63ecb3b8b62d8e2dcb52a82cc0253f38959dd3d6 100644 (file)
@@ -66,7 +66,7 @@ import Text.XML.HXT.Core (
 import TSN.Codegen (
   tsn_codegen_config )
 import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
-import TSN.Picklers ( xp_date, xp_time, xp_time_stamp )
+import TSN.Picklers ( xp_date_padded, xp_time, xp_time_stamp )
 import TSN.XmlImport ( XmlImport(..), XmlImportFk(..) )
 import Xml (
   FromXml(..),
@@ -692,7 +692,7 @@ pickle_game =
   xpWrap (from_tuple, to_tuple) $
   xp6Tuple
     (xpElem "GameID" xpInt)
-    (xpElem "Game_Date" xp_date)
+    (xpElem "Game_Date" xp_date_padded)
     (xpElem "Game_Time" xp_time)
     pickle_away_team
     pickle_home_team