From 35b6b51146c1536cd4689e780eeb73dc0eeb5dfc Mon Sep 17 00:00:00 2001 From: Taka Date: Mon, 24 Apr 2017 10:29:25 +0000 Subject: [PATCH] Changed the terminology for card/tag types. --- asl_cards/db.py | 14 +-- asl_cards/parse.py | 2 +- asl_cards/tests/test_real_data.py | 185 +++++++++++++++--------------- 3 files changed, 103 insertions(+), 98 deletions(-) diff --git a/asl_cards/db.py b/asl_cards/db.py index cc48e1e..c702b21 100644 --- a/asl_cards/db.py +++ b/asl_cards/db.py @@ -37,7 +37,7 @@ class AslCard( DbBase , DbBaseMixin ) : """Models an ASL card.""" __tablename__ = "card" card_id = Column( Integer , primary_key=True , autoincrement=True ) - tag = Column( String(40) ) + card_tag = Column( String(40) ) nationality = Column( String(40) ) name = Column( String(40) ) page_id = Column( Integer ) @@ -102,15 +102,15 @@ def load_cards() : card_index = defaultdict( lambda: defaultdict(list) ) # generate the card index for card in cards : - d = card_index[ card.nationality ] - tag = card.tag.lower() - if tag.startswith( "vehicle" ) : + cards2 = card_index[ card.nationality ] + card_tag = card.card_tag.lower() + if card_tag.startswith( "vehicle" ) : tag_type = TAGTYPE_VEHICLE - elif tag.startswith( "ordnance" ) : + elif card_tag.startswith( "ordnance" ) : tag_type = TAGTYPE_ORDNANCE else : - raise RuntimeError( "Unknown tag type ({}) for AslCard: {}".format( tag , card ) ) - d[ tag_type ].append( card ) + raise RuntimeError( "Invalid card tag ({}) for AslCard: {}".format( card_tag , card ) ) + cards2[ tag_type ].append( card ) return card_index # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/asl_cards/parse.py b/asl_cards/parse.py index 77e1645..f8ed6fe 100644 --- a/asl_cards/parse.py +++ b/asl_cards/parse.py @@ -109,7 +109,7 @@ class PdfParser: # generate the AslCard page_pos = 0 if items[0].y0 > lt_page.height/2 else 1 return AslCard( - tag = _tidy( item_texts[0] ).replace( "# ", "#" ) , + card_tag = _tidy( item_texts[0] ).replace( "# ", "#" ) , nationality = _tidy( item_texts[1] ) , name = _tidy( item_texts[2] ) , page_id = lt_page.pageid , diff --git a/asl_cards/tests/test_real_data.py b/asl_cards/tests/test_real_data.py index ba9119e..98ba456 100755 --- a/asl_cards/tests/test_real_data.py +++ b/asl_cards/tests/test_real_data.py @@ -19,113 +19,118 @@ class TestRealData( unittest.TestCase ) : if not os.path.isfile( fname2 ) : raise RuntimeError( "Missing data file: {}".format( fname2 ) ) pdf_parser = PdfParser( - #progress = lambda _,msg: print( msg , file=sys.stderr ) + #progress = lambda _,msg: print( msg , file=sys.stderr , flush=True ) ) - cards = pdf_parser.parse_file( fname2 , images=False ) + cards = pdf_parser.parse( fname2 , images=False ) # check the results if len(cards) != len(expected_cards) : raise RuntimeError( "{}: got {} cards, expected {}.".format( fname , len(cards) , len(expected_cards) ) ) + # get the attributes we're interested in + card = expected_cards[0] + attrs = [ a for a in dir(card) if not a.startswith("_") and not callable(getattr(card,a)) ] + attrs.remove( "card_image" ) # this is messing things up :-/ + # compare the extracted cards with the expected results for i in range(0,len(cards)) : - if cards[i] != expected_cards[i] : + if not all( getattr(cards[i],a) == getattr(expected_cards[i],a) for a in attrs ) : raise RuntimeError( "{}: Card mismatch ({}): got {}, expected {}.".format( fname , i , cards[i] , expected_cards[i] ) ) def test_italian_ordnance( self ) : self._test_pdf_parser( "ItalianOrdnance.pdf" , [ - AslCard(page_id=1, page_pos=0, tag="Ordnance5#51", nationality="Italian", name="Mortaio5da545") , - AslCard(page_id=1, page_pos=1, tag="Ordnance5#52", nationality="Italian", name="Mortaio5da581/14") , - AslCard(page_id=2, page_pos=0, tag="Ordnance3#33", nationality="Italian", name="Fucile9cc3S") , - AslCard(page_id=2, page_pos=1, tag="Ordnance3#34", nationality="Italian", name="Cannone9cc3da337/45") , - AslCard(page_id=3, page_pos=0, tag="Ordnance3#35", nationality="Italian", name="Cannone3da347/32") , - AslCard(page_id=3, page_pos=1, tag="Ordnance3#36", nationality="Italian", name="Cannone3da365/17") , - AslCard(page_id=4, page_pos=0, tag="Ordnance5#57", nationality="Italian", name="Cannone5da570/15") , - AslCard(page_id=4, page_pos=1, tag="Ordnance5#58", nationality="Italian", name="Obice5da575/13") , - AslCard(page_id=5, page_pos=0, tag="Ordnance1#19", nationality="Italian", name="Cannone1da175/27") , - AslCard(page_id=5, page_pos=1, tag="Ordnance1#110", nationality="Italian", name="Obice1da175/18") , - AslCard(page_id=6, page_pos=0, tag="Ordnance6#611", nationality="Italian", name="Cannone6da675/32") , - AslCard(page_id=6, page_pos=1, tag="Ordnance6#612", nationality="Italian", name="Obice6da6100/17") , - AslCard(page_id=7, page_pos=0, tag="Ordnance2#213", nationality="Italian", name="Cannone2da2105/28") , - AslCard(page_id=7, page_pos=1, tag="Ordnance2#214", nationality="Italian", name="Obice2da2149/13") , - AslCard(page_id=8, page_pos=0, tag="Ordnance2#215", nationality="Italian", name="Cannone2da2149/35") , - AslCard(page_id=8, page_pos=1, tag="Ordnance2#216", nationality="Italian", name="Cannone2da2149/40") , - AslCard(page_id=9, page_pos=0, tag="Ordnance #17", nationality="Italian", name="Cannone6mitr 20") , - AslCard(page_id=9, page_pos=1, tag="Ordnance #17", nationality="Italian", name="Cannone6mitr 20 LF") , - AslCard(page_id=10, page_pos=0, tag="Ordnance1#118", nationality="Italian", name="Cannone0aa175/39") , - AslCard(page_id=10, page_pos=1, tag="Ordnance1#119", nationality="Italian", name="Cannone0aa175/46") , - AslCard(page_id=11, page_pos=0, tag="Ordnance*#*20", nationality="Italian", name="Cannone3aa*90/53") , + AslCard(page_id=1, page_pos=0, card_tag="Ordnance5#51", nationality="Italian", name="Mortaio5da545") , + AslCard(page_id=1, page_pos=1, card_tag="Ordnance5#52", nationality="Italian", name="Mortaio5da581/14") , + AslCard(page_id=2, page_pos=0, card_tag="Ordnance3#33", nationality="Italian", name="Fucile9cc3S") , + AslCard(page_id=2, page_pos=1, card_tag="Ordnance3#34", nationality="Italian", name="Cannone9cc3da337/45") , + AslCard(page_id=3, page_pos=0, card_tag="Ordnance3#35", nationality="Italian", name="Cannone3da347/32") , + AslCard(page_id=3, page_pos=1, card_tag="Ordnance3#36", nationality="Italian", name="Cannone3da365/17") , + AslCard(page_id=4, page_pos=0, card_tag="Ordnance5#57", nationality="Italian", name="Cannone5da570/15") , + AslCard(page_id=4, page_pos=1, card_tag="Ordnance5#58", nationality="Italian", name="Obice5da575/13") , + AslCard(page_id=5, page_pos=0, card_tag="Ordnance1#19", nationality="Italian", name="Cannone1da175/27") , + AslCard(page_id=5, page_pos=1, card_tag="Ordnance1#110", nationality="Italian", name="Obice1da175/18") , + AslCard(page_id=6, page_pos=0, card_tag="Ordnance6#611", nationality="Italian", name="Cannone6da675/32") , + AslCard(page_id=6, page_pos=1, card_tag="Ordnance6#612", nationality="Italian", name="Obice6da6100/17") , + AslCard(page_id=7, page_pos=0, card_tag="Ordnance2#213", nationality="Italian", name="Cannone2da2105/28") , + AslCard(page_id=7, page_pos=1, card_tag="Ordnance2#214", nationality="Italian", name="Obice2da2149/13") , + AslCard(page_id=8, page_pos=0, card_tag="Ordnance2#215", nationality="Italian", name="Cannone2da2149/35") , + AslCard(page_id=8, page_pos=1, card_tag="Ordnance2#216", nationality="Italian", name="Cannone2da2149/40") , + AslCard(page_id=9, page_pos=0, card_tag="Ordnance #17", nationality="Italian", name="Cannone6mitr 20") , + AslCard(page_id=9, page_pos=1, card_tag="Ordnance #17", nationality="Italian", name="Cannone6mitr 20 LF") , + AslCard(page_id=10, page_pos=0, card_tag="Ordnance1#118", nationality="Italian", name="Cannone0aa175/39") , + AslCard(page_id=10, page_pos=1, card_tag="Ordnance1#119", nationality="Italian", name="Cannone0aa175/46") , + AslCard(page_id=11, page_pos=0, card_tag="Ordnance*#*20", nationality="Italian", name="Cannone3aa*90/53") , ] ) def test_japanese_vehicles( self ) : self._test_pdf_parser( "JapaneseVehiclesFeb15.pdf" , [ - AslCard(page_id=1, page_pos=0, tag="Vehicle #1", nationality="Japanese", name="Type 92A") , - AslCard(page_id=1, page_pos=1, tag="Vehicle #1", nationality="Japanese", name="Type 92B") , - AslCard(page_id=2, page_pos=0, tag="Vehicle #2", nationality="Japanese", name="Type 94") , - AslCard(page_id=2, page_pos=1, tag="Vehicle #3", nationality="Japanese", name="Type 95 SO4KI") , - AslCard(page_id=3, page_pos=0, tag="Vehicle #4", nationality="Japanese", name="Type 97A TE6KE") , - AslCard(page_id=3, page_pos=1, tag="Vehicle #4", nationality="Japanese", name="Type 97B TE6KE") , - AslCard(page_id=4, page_pos=0, tag="Vehicle #5", nationality="Japanese", name="Type 95 HA6GO") , - AslCard(page_id=4, page_pos=1, tag="Vehicle #6", nationality="Japanese", name="Type 2 KA6MI") , - AslCard(page_id=5, page_pos=0, tag="Vehicle #6", nationality="Japanese", name="Type 2 KA:MI w/o") , - AslCard(page_id=5, page_pos=1, tag="Vehicle #7", nationality="Japanese", name="Type 89A CHI:RO") , - AslCard(page_id=6, page_pos=0, tag="Vehicle #7", nationality="Japanese", name="Type 89B CHI7RO") , - AslCard(page_id=6, page_pos=1, tag="Vehicle #8", nationality="Japanese", name="Type 97A CHI7HA") , - AslCard(page_id=7, page_pos=0, tag="Vehicle #8", nationality="Japanese", name="Type 97B CHI6HA") , - AslCard(page_id=7, page_pos=1, tag="Vehicle #9", nationality="Japanese", name="Type 1 CHI6HE") , - AslCard(page_id=8, page_pos=0, tag="Vehicle #10", nationality="Japanese", name="Type 91") , - AslCard(page_id=8, page_pos=1, tag="Vehicle #11", nationality="Japanese", name="Type 92") , - AslCard(page_id=9, page_pos=0, tag="Vehicle #12", nationality="Japanese", name="Type 1 HO?NI I") , - AslCard(page_id=9, page_pos=1, tag="Vehicle #13", nationality="Japanese", name="Type 4 HO?RO") , - AslCard(page_id=10, page_pos=0, tag="Vehicle #14", nationality="Japanese", name="Type 1 HO?KI") , - AslCard(page_id=10, page_pos=1, tag="Vehicle #15", nationality="Japanese", name="Type 98 SHI?KE") , - AslCard(page_id=11, page_pos=0, tag="Vehicle #16", nationality="Japanese", name="Type 92 IBKE") , - AslCard(page_id=11, page_pos=1, tag="Vehicle #17", nationality="Japanese", name="Type 95") , - AslCard(page_id=12, page_pos=0, tag="Vehicle #18", nationality="Japanese", name="Type 94 Truck") , - AslCard(page_id=12, page_pos=1, tag="Vehicle #18", nationality="Japanese", name="Type 97 Truck") , + AslCard(page_id=1, page_pos=0, card_tag="Vehicle #1", nationality="Japanese", name="Type 92A") , + AslCard(page_id=1, page_pos=1, card_tag="Vehicle #1", nationality="Japanese", name="Type 92B") , + AslCard(page_id=2, page_pos=0, card_tag="Vehicle #2", nationality="Japanese", name="Type 94") , + AslCard(page_id=2, page_pos=1, card_tag="Vehicle #3", nationality="Japanese", name="Type 95 SO4KI") , + AslCard(page_id=3, page_pos=0, card_tag="Vehicle #4", nationality="Japanese", name="Type 97A TE6KE") , + AslCard(page_id=3, page_pos=1, card_tag="Vehicle #4", nationality="Japanese", name="Type 97B TE6KE") , + AslCard(page_id=4, page_pos=0, card_tag="Vehicle #5", nationality="Japanese", name="Type 95 HA6GO") , + AslCard(page_id=4, page_pos=1, card_tag="Vehicle #6", nationality="Japanese", name="Type 2 KA6MI") , + AslCard(page_id=5, page_pos=0, card_tag="Vehicle #6", nationality="Japanese", name="Type 2 KA:MI w/o") , + AslCard(page_id=5, page_pos=1, card_tag="Vehicle #7", nationality="Japanese", name="Type 89A CHI:RO") , + AslCard(page_id=6, page_pos=0, card_tag="Vehicle #7", nationality="Japanese", name="Type 89B CHI7RO") , + AslCard(page_id=6, page_pos=1, card_tag="Vehicle #8", nationality="Japanese", name="Type 97A CHI7HA") , + AslCard(page_id=7, page_pos=0, card_tag="Vehicle #8", nationality="Japanese", name="Type 97B CHI6HA") , + AslCard(page_id=7, page_pos=1, card_tag="Vehicle #9", nationality="Japanese", name="Type 1 CHI6HE") , + AslCard(page_id=8, page_pos=0, card_tag="Vehicle #10", nationality="Japanese", name="Type 91") , + AslCard(page_id=8, page_pos=1, card_tag="Vehicle #11", nationality="Japanese", name="Type 92") , + AslCard(page_id=9, page_pos=0, card_tag="Vehicle #12", nationality="Japanese", name="Type 1 HO?NI I") , + AslCard(page_id=9, page_pos=1, card_tag="Vehicle #13", nationality="Japanese", name="Type 4 HO?RO") , + AslCard(page_id=10, page_pos=0, card_tag="Vehicle #14", nationality="Japanese", name="Type 1 HO?KI") , + AslCard(page_id=10, page_pos=1, card_tag="Vehicle #15", nationality="Japanese", name="Type 98 SHI?KE") , + AslCard(page_id=11, page_pos=0, card_tag="Vehicle #16", nationality="Japanese", name="Type 92 IBKE") , + AslCard(page_id=11, page_pos=1, card_tag="Vehicle #17", nationality="Japanese", name="Type 95") , + AslCard(page_id=12, page_pos=0, card_tag="Vehicle #18", nationality="Japanese", name="Type 94 Truck") , + AslCard(page_id=12, page_pos=1, card_tag="Vehicle #18", nationality="Japanese", name="Type 97 Truck") , ] ) def test_chinese_ordnance( self ) : self._test_pdf_parser( "ChineseOrdnanceMidApril15.pdf" , [ - AslCard(page_id=1, page_pos=0, tag="Ordnance3#31", nationality="Chinese", name="Type3273GL") , - AslCard(page_id=1, page_pos=1, tag="Ordnance3#32", nationality="Chinese", name="Mortaio3da3453 i") , - AslCard(page_id=2, page_pos=0, tag="Ordnance0#02", nationality="Chinese", name="5cm0leGrW0360 g") , - AslCard(page_id=2, page_pos=1, tag="Ordnance0#02", nationality="Chinese", name="50mm0RM0obr 380 r") , - AslCard(page_id=3, page_pos=0, tag="Ordnance1#12", nationality="Chinese", name="Type1891HGL1 j") , - AslCard(page_id=3, page_pos=1, tag="Ordnance1#13", nationality="Chinese", name="M2160mm1 a") , - AslCard(page_id=4, page_pos=0, tag="Ordnance3#34", nationality="Chinese", name="Stokes33>in3 b") , - AslCard(page_id=4, page_pos=1, tag="Ordnance3#34", nationality="Chinese", name="8cm3GrW3343 g") , - AslCard(page_id=5, page_pos=0, tag="Ordnance2#24", nationality="Chinese", name="82mm2BM2o 2372 r") , - AslCard(page_id=5, page_pos=1, tag="Ordnance2#25", nationality="Chinese", name="M1281mm2 a") , - AslCard(page_id=6, page_pos=0, tag="Ordnance5#55", nationality="Chinese", name="M254 2?in5 a") , - AslCard(page_id=6, page_pos=1, tag="Ordnance5#56", nationality="Chinese", name="3 7cm5PaK535/365 g") , - AslCard(page_id=7, page_pos=0, tag="Ordnance2#26", nationality="Chinese", name="M3A1237mm2 a") , - AslCard(page_id=7, page_pos=1, tag="Ordnance2#27", nationality="Chinese", name="37mm2PP2o 215R2 r") , - AslCard(page_id=8, page_pos=0, tag="Ordnance2#27", nationality="Chinese", name="Cann 2da270/152 i") , - AslCard(page_id=8, page_pos=1, tag="Ordnance2#28", nationality="Chinese", name="7 5cm2Krupp2 g") , - AslCard(page_id=9, page_pos=0, tag="Ordnance1#18", nationality="Chinese", name="Obice1da175/131 i") , - AslCard(page_id=9, page_pos=1, tag="Ordnance1#19", nationality="Chinese", name="7 5cm1leIG1181 g") , - AslCard(page_id=10, page_pos=0, tag="Ordnance2#29", nationality="Chinese", name="76 2mm2PP2o 2272 r") , - AslCard(page_id=10, page_pos=1, tag="Ordnance2#210", nationality="Chinese", name="M1A1275mm2 a") , - AslCard(page_id=11, page_pos=0, tag="Ordnance #11", nationality="Chinese", name="7 7cm FK 16 g") , - AslCard(page_id=11, page_pos=1, tag="Ordnance #11", nationality="Chinese", name="76 2mm o 02/30 r") , - AslCard(page_id=12, page_pos=0, tag="Ordnance4#411", nationality="Chinese", name="OQF418pdr4 b") , - AslCard(page_id=12, page_pos=1, tag="Ordnance4#412", nationality="Chinese", name="10 5cm4leFH4164 g") , - AslCard(page_id=13, page_pos=0, tag="Ordnance1#112", nationality="Chinese", name="Cann 1da1105/281 i") , - AslCard(page_id=13, page_pos=1, tag="Ordnance1#112", nationality="Chinese", name="M2A11105mm1 a") , - AslCard(page_id=14, page_pos=0, tag="Ordnance1#113", nationality="Chinese", name="122mm1o 10/301 r") , - AslCard(page_id=14, page_pos=1, tag="Ordnance1#113", nationality="Chinese", name="122mm1G1o 1381 r") , - AslCard(page_id=15, page_pos=0, tag="Ordnance4#414", nationality="Chinese", name="Obice4da4149/134 i") , - AslCard(page_id=15, page_pos=1, tag="Ordnance4#415", nationality="Chinese", name="Oerlikon4FF4 g") , - AslCard(page_id=16, page_pos=0, tag="Ordnance #15", nationality="Chinese", name="Oerlikon FF LF") , - AslCard(page_id=16, page_pos=1, tag="Ordnance #15", nationality="Chinese", name="Cann Amitr 20/65 i") , - AslCard(page_id=17, page_pos=0, tag="Ordnance #15", nationality="Chinese", name="Cann 5mitr 20/65 LF") , - AslCard(page_id=17, page_pos=1, tag="Ordnance #15", nationality="Chinese", name="2cm FlaK 30 g") , - AslCard(page_id=18, page_pos=0, tag="Ordnance #15", nationality="Chinese", name="2cm FlaK 30 LF") , - AslCard(page_id=18, page_pos=1, tag="Ordnance #16", nationality="Chinese", name="3 7cm FlaK 36/37 g") , - AslCard(page_id=19, page_pos=0, tag="Ordnance #16", nationality="Chinese", name="Bofors 40mm L/60") , - AslCard(page_id=19, page_pos=1, tag="Ordnance #16", nationality="Chinese", name="Bofors 40mm L/60 LF") , - AslCard(page_id=20, page_pos=0, tag="Ordnance #17", nationality="Chinese", name="Bofors 76mm M29") , - AslCard(page_id=20, page_pos=1, tag="Ordnance #17", nationality="Chinese", name="Bofors 76mm M29 LF") , - AslCard(page_id=21, page_pos=0, tag="Ordnance #17", nationality="Chinese", name="8 8cm FlaK 18 g") , - AslCard(page_id=21, page_pos=1, tag="Ordnance #17", nationality="Chinese", name="8 8cm FlaK 18 LF") , + AslCard(page_id=1, page_pos=0, card_tag="Ordnance3#31", nationality="Chinese", name="Type3273GL") , + AslCard(page_id=1, page_pos=1, card_tag="Ordnance3#32", nationality="Chinese", name="Mortaio3da3453 i") , + AslCard(page_id=2, page_pos=0, card_tag="Ordnance0#02", nationality="Chinese", name="5cm0leGrW0360 g") , + AslCard(page_id=2, page_pos=1, card_tag="Ordnance0#02", nationality="Chinese", name="50mm0RM0obr 380 r") , + AslCard(page_id=3, page_pos=0, card_tag="Ordnance1#12", nationality="Chinese", name="Type1891HGL1 j") , + AslCard(page_id=3, page_pos=1, card_tag="Ordnance1#13", nationality="Chinese", name="M2160mm1 a") , + AslCard(page_id=4, page_pos=0, card_tag="Ordnance3#34", nationality="Chinese", name="Stokes33>in3 b") , + AslCard(page_id=4, page_pos=1, card_tag="Ordnance3#34", nationality="Chinese", name="8cm3GrW3343 g") , + AslCard(page_id=5, page_pos=0, card_tag="Ordnance2#24", nationality="Chinese", name="82mm2BM2o 2372 r") , + AslCard(page_id=5, page_pos=1, card_tag="Ordnance2#25", nationality="Chinese", name="M1281mm2 a") , + AslCard(page_id=6, page_pos=0, card_tag="Ordnance5#55", nationality="Chinese", name="M254 2?in5 a") , + AslCard(page_id=6, page_pos=1, card_tag="Ordnance5#56", nationality="Chinese", name="3 7cm5PaK535/365 g") , + AslCard(page_id=7, page_pos=0, card_tag="Ordnance2#26", nationality="Chinese", name="M3A1237mm2 a") , + AslCard(page_id=7, page_pos=1, card_tag="Ordnance2#27", nationality="Chinese", name="37mm2PP2o 215R2 r") , + AslCard(page_id=8, page_pos=0, card_tag="Ordnance2#27", nationality="Chinese", name="Cann 2da270/152 i") , + AslCard(page_id=8, page_pos=1, card_tag="Ordnance2#28", nationality="Chinese", name="7 5cm2Krupp2 g") , + AslCard(page_id=9, page_pos=0, card_tag="Ordnance1#18", nationality="Chinese", name="Obice1da175/131 i") , + AslCard(page_id=9, page_pos=1, card_tag="Ordnance1#19", nationality="Chinese", name="7 5cm1leIG1181 g") , + AslCard(page_id=10, page_pos=0, card_tag="Ordnance2#29", nationality="Chinese", name="76 2mm2PP2o 2272 r") , + AslCard(page_id=10, page_pos=1, card_tag="Ordnance2#210", nationality="Chinese", name="M1A1275mm2 a") , + AslCard(page_id=11, page_pos=0, card_tag="Ordnance #11", nationality="Chinese", name="7 7cm FK 16 g") , + AslCard(page_id=11, page_pos=1, card_tag="Ordnance #11", nationality="Chinese", name="76 2mm o 02/30 r") , + AslCard(page_id=12, page_pos=0, card_tag="Ordnance4#411", nationality="Chinese", name="OQF418pdr4 b") , + AslCard(page_id=12, page_pos=1, card_tag="Ordnance4#412", nationality="Chinese", name="10 5cm4leFH4164 g") , + AslCard(page_id=13, page_pos=0, card_tag="Ordnance1#112", nationality="Chinese", name="Cann 1da1105/281 i") , + AslCard(page_id=13, page_pos=1, card_tag="Ordnance1#112", nationality="Chinese", name="M2A11105mm1 a") , + AslCard(page_id=14, page_pos=0, card_tag="Ordnance1#113", nationality="Chinese", name="122mm1o 10/301 r") , + AslCard(page_id=14, page_pos=1, card_tag="Ordnance1#113", nationality="Chinese", name="122mm1G1o 1381 r") , + AslCard(page_id=15, page_pos=0, card_tag="Ordnance4#414", nationality="Chinese", name="Obice4da4149/134 i") , + AslCard(page_id=15, page_pos=1, card_tag="Ordnance4#415", nationality="Chinese", name="Oerlikon4FF4 g") , + AslCard(page_id=16, page_pos=0, card_tag="Ordnance #15", nationality="Chinese", name="Oerlikon FF LF") , + AslCard(page_id=16, page_pos=1, card_tag="Ordnance #15", nationality="Chinese", name="Cann Amitr 20/65 i") , + AslCard(page_id=17, page_pos=0, card_tag="Ordnance #15", nationality="Chinese", name="Cann 5mitr 20/65 LF") , + AslCard(page_id=17, page_pos=1, card_tag="Ordnance #15", nationality="Chinese", name="2cm FlaK 30 g") , + AslCard(page_id=18, page_pos=0, card_tag="Ordnance #15", nationality="Chinese", name="2cm FlaK 30 LF") , + AslCard(page_id=18, page_pos=1, card_tag="Ordnance #16", nationality="Chinese", name="3 7cm FlaK 36/37 g") , + AslCard(page_id=19, page_pos=0, card_tag="Ordnance #16", nationality="Chinese", name="Bofors 40mm L/60") , + AslCard(page_id=19, page_pos=1, card_tag="Ordnance #16", nationality="Chinese", name="Bofors 40mm L/60 LF") , + AslCard(page_id=20, page_pos=0, card_tag="Ordnance #17", nationality="Chinese", name="Bofors 76mm M29") , + AslCard(page_id=20, page_pos=1, card_tag="Ordnance #17", nationality="Chinese", name="Bofors 76mm M29 LF") , + AslCard(page_id=21, page_pos=0, card_tag="Ordnance #17", nationality="Chinese", name="8 8cm FlaK 18 g") , + AslCard(page_id=21, page_pos=1, card_tag="Ordnance #17", nationality="Chinese", name="8 8cm FlaK 18 LF") , ] ) # ---------------------------------------------------------------------