From 0fa2d93c7fe436038e0f2b14d68b9e3cc3e165f7 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Thu, 12 Jun 2014 15:52:59 -0400 Subject: [PATCH] Add a pickler for AutoRacingResults elements. Add a padded variant of xp_date and use it in two places. --- src/TSN/Picklers.hs | 62 +++++++++++++++++++++++++++++-- src/TSN/XML/AutoRacingSchedule.hs | 4 +- src/TSN/XML/News.hs | 6 +-- src/TSN/XML/Odds.hs | 4 +- 4 files changed, 66 insertions(+), 10 deletions(-) diff --git a/src/TSN/Picklers.hs b/src/TSN/Picklers.hs index 608f907..dc3ed9a 100644 --- a/src/TSN/Picklers.hs +++ b/src/TSN/Picklers.hs @@ -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 \ element in an +-- 'AutoRaceResults' message. +-- +-- Example: +-- +-- 6/1/2014 1:00:00 PM +-- 5/24/2014 2:45:00 PM +-- +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 diff --git a/src/TSN/XML/AutoRacingSchedule.hs b/src/TSN/XML/AutoRacingSchedule.hs index 54144e4..1f45986 100644 --- a/src/TSN/XML/AutoRacingSchedule.hs +++ b/src/TSN/XML/AutoRacingSchedule.hs @@ -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) diff --git a/src/TSN/XML/News.hs b/src/TSN/XML/News.hs index 2761519..9134771 100644 --- a/src/TSN/XML/News.hs +++ b/src/TSN/XML/News.hs @@ -85,9 +85,9 @@ dtd = "newsxml.dtd" -- * News/Message --- | The msg_id child of 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 \ 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 = diff --git a/src/TSN/XML/Odds.hs b/src/TSN/XML/Odds.hs index 9672c9c..63ecb3b 100644 --- a/src/TSN/XML/Odds.hs +++ b/src/TSN/XML/Odds.hs @@ -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 -- 2.44.2