]> gitweb.michael.orlitzky.com - dead/htsn-import.git/blobdiff - src/TSN/XML/JFile.hs
Fix present-but-empty vleague parsing in jfilexml.
[dead/htsn-import.git] / src / TSN / XML / JFile.hs
index b3b3280f097dfad1a0dce9930be3ad093e2d9903..f570784083f22ef662e451ba42bb8a25055c5d90 100644 (file)
@@ -23,19 +23,18 @@ module TSN.XML.JFile (
 where
 
 -- System imports
-import Control.Monad ( forM_ )
+import Control.Monad ( forM_, join )
 import Data.List ( intercalate )
 import Data.String.Utils ( split )
 import Data.Time ( UTCTime(..) )
 import Data.Tuple.Curry ( uncurryN )
+import qualified Data.Vector.HFixed as H ( HVector, convert )
 import Database.Groundhog (
   countAll,
   deleteAll,
-  migrate,
-  runMigration,
-  silentMigrationLogger )
+  migrate )
 import Database.Groundhog.Core ( DefaultKey )
-import Database.Groundhog.Generic ( runDbConn )
+import Database.Groundhog.Generic ( runDbConn, runMigrationSilent )
 import Database.Groundhog.Sqlite ( withSqliteConn )
 import Database.Groundhog.TH (
   groundhog,
@@ -62,7 +61,7 @@ import Text.XML.HXT.Core (
 
 
 -- Local imports
-import Generics ( Generic(..), to_tuple )
+import Misc ( double_just )
 import TSN.Codegen ( tsn_codegen_config )
 import TSN.Database ( insert_or_select )
 import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
@@ -127,9 +126,9 @@ data Message =
   deriving (Eq, GHC.Generic, Show)
 
 
--- | For 'Generics.to_tuple'.
+-- | For 'H.convert'.
 --
-instance Generic Message
+instance H.HVector Message
 
 
 instance ToDb Message where
@@ -257,9 +256,9 @@ data JFileGameXml =
   deriving (Eq, GHC.Generic, Show)
 
 
--- | For 'Generics.to_tuple'.
+-- | For 'H.convert'.
 --
-instance Generic JFileGameXml
+instance H.HVector JFileGameXml
 
 
 -- * JFileGameListXml
@@ -435,7 +434,7 @@ mkPersist tsn_codegen_config [groundhog|
 pickle_message :: PU Message
 pickle_message =
   xpElem "message" $
-    xpWrap (from_tuple, to_tuple) $
+    xpWrap (from_tuple, H.convert) $
     xp6Tuple (xpElem "XML_File_ID" xpInt)
              (xpElem "heading" xpText)
              (xpElem "category" xpText)
@@ -460,7 +459,7 @@ pickle_gamelist =
 pickle_game :: PU JFileGameXml
 pickle_game =
   xpElem "game" $
-    xpWrap (from_tuple, to_tuple) $
+    xpWrap (from_tuple, to_tuple') $
     xp14Tuple (xpElem "game_id" xpInt)
               (xpElem "schedule_id" xpInt)
               pickle_odds_info
@@ -468,7 +467,7 @@ pickle_game =
               (xpElem "Game_Date" xp_date_padded)
               (xpElem "Game_Time" xp_tba_time)
               pickle_away_team
-              (xpOption $ xpElem "vleague" xpText)
+              (xpOption $ xpElem "vleague" (xpOption xpText))
               pickle_home_team
               (xpOption $ xpElem "hleague" xpText)
               (xpElem "vscore" xpInt)
@@ -476,7 +475,11 @@ pickle_game =
               (xpOption $ xpElem "time_r" xpText)
               pickle_status
   where
-    from_tuple = uncurryN JFileGameXml
+    from_tuple (a,b,c,d,e,f,g,h,i,j,k,l,m,n) =
+      JFileGameXml a b c d e f g (join h) i j k l m n
+
+    to_tuple' (JFileGameXml a b c d e f g h i j k l m n) =
+      (a, b, c, d, e, f, g, double_just h, i, j, k, l, m, n)
 
 
 pickle_odds_info :: PU JFileGameOddsInfo
@@ -553,7 +556,7 @@ pickle_home_team =
              (xpOption xpText) -- Yup, some are nameless
   where
     from_tuple = HTeam . (uncurryN Team)
-    to_tuple' (HTeam t) = to_tuple t
+    to_tuple' (HTeam t) = H.convert t
 
 
 -- | (Un)pickle an away team to/from the dual XML/DB representation
@@ -568,7 +571,7 @@ pickle_away_team =
              (xpOption xpText) -- Yup, some are nameless
   where
     from_tuple = VTeam . (uncurryN Team)
-    to_tuple' (VTeam t) = to_tuple t
+    to_tuple' (VTeam t) = H.convert t
 
 
 pickle_status :: PU JFileGameStatus
@@ -663,7 +666,7 @@ test_on_delete_cascade = testGroup "cascading delete tests"
       let c = undefined :: JFileGame
 
       actual <- withSqliteConn ":memory:" $ runDbConn $ do
-                  runMigration silentMigrationLogger $ do
+                  runMigrationSilent $ do
                     migrate a
                     migrate b
                     migrate c