2022-10-24 01:35:40 -07:00
import mysql . connector
from mysql . connector import errorcode
import re
import config
import csv
try :
db = mysql . connector . connect (
host = config . host ,
user = config . user ,
passwd = config . passwd ,
database = config . database
)
except mysql . connector . Error as err :
if err . errno == errorcode . ER_ACCESS_DENIED_ERROR :
print ( " Something is wrong with your user name or password " )
elif err . errno == errorcode . ER_BAD_DB_ERROR :
print ( " Database does not exist " )
else :
print ( err )
else :
cur = db . cursor ( named_tuple = True )
try :
with open ( ' wahapediaSetupDatabase.sql ' , mode = ' r ' ) as f :
resItr = cur . execute ( f . read ( ) , multi = True )
for res in resItr :
print ( " Running query: " , res )
print ( f " Affected { res . rowcount } rows " )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to load wahapediaSetupDatabase.sql " )
# ORDER OF DATA INSERTION
# sources;
# factions;
# wargear;
# wargear_list;
# datasheets;
# abilities;
# datasheets_abilities;
# psychic_powers;
# warlord_traits;
# strategems;
# datasheets_damage;
# datasheets_keywords;
# datasheets_models;
# datasheets_options;
# datasheets_wargear;
# all the data has an unused column at the end, which is why every processor cuts off the last column
# MySQL doesn't have the boolean datatype, we're using INT with 1 = true, 0 = false, -1 = data input error
print ( " \n SOURCES " )
try :
with open ( " wahapedia/Source.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " id " ) :
indexer [ " source_id " ] = i
elif ( column == " name " ) :
indexer [ " name " ] = i
elif ( column == " type " ) :
indexer [ " type " ] = i
elif ( column == " edition " ) :
indexer [ " edition " ] = i
elif ( column == " version " ) :
indexer [ " version " ] = i
elif ( column == " errata_date " ) :
indexer [ " errata_date " ] = i
elif ( column == " errata_link " ) :
indexer [ " errata_link " ] = i
i = i + 1
query = " INSERT IGNORE INTO sources (source_id, name, type, edition, version, errata_date, errata_link) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s , %s ), "
data = data + [
row [ indexer [ " source_id " ] ] if row [ indexer [ " source_id " ] ] != ' ' else None , # source_id
row [ indexer [ " name " ] ] if row [ indexer [ " name " ] ] != ' ' else None , # name
row [ indexer [ " type " ] ] if row [ indexer [ " type " ] ] != ' ' else None , # type
row [ indexer [ " edition " ] ] if row [ indexer [ " edition " ] ] != ' ' else None , # edition
row [ indexer [ " version " ] ] if row [ indexer [ " version " ] ] != ' ' else None , # version
row [ indexer [ " errata_date " ] ] if row [ indexer [ " errata_date " ] ] != ' ' else None , # errata_date
row [ indexer [ " errata_link " ] ] if row [ indexer [ " errata_link " ] ] != ' ' else None , # errata_link
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into sources " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Source.csv " )
print ( " \n FACTIONS " )
try :
with open ( " wahapedia/Factions.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " id " ) :
indexer [ " faction_id " ] = i
elif ( column == " name " ) :
indexer [ " name " ] = i
elif ( column == " link " ) :
indexer [ " link " ] = i
elif ( column == " is_subfaction " ) :
indexer [ " is_subfaction " ] = i
i = i + 1
primary_factions = { }
query = " INSERT IGNORE INTO factions (faction_id, name, link, is_subfaction, main_faction_id) VALUES "
data = [ ]
for row in csvF :
main_faction_id = None
if ( re . sub ( ' /.*$ ' , ' ' , re . sub ( ' https://wahapedia.ru/wh40k9ed/factions/ ' , ' ' , row [ indexer [ " link " ] ] ) ) == re . sub ( ' [^0-9a-zA-Z]+ ' , ' - ' , row [ indexer [ " name " ] ] . lower ( ) ) ) :
main_faction_id = row [ indexer [ " faction_id " ] ]
primary_factions [ row [ indexer [ " link " ] ] ] = main_faction_id
query + = " ( %s , %s , %s , %s , %s ), "
# data has duplicate information
data = data + [
row [ indexer [ " faction_id " ] ] if row [ indexer [ " faction_id " ] ] != ' ' else None , # faction_id
row [ indexer [ " name " ] ] if row [ indexer [ " name " ] ] != ' ' else None , # name
row [ indexer [ " link " ] ] if row [ indexer [ " link " ] ] != ' ' else None , # link
row [ indexer [ " is_subfaction " ] ] if row [ indexer [ " is_subfaction " ] ] != ' ' else None , # link
main_faction_id , # effectively foreign key to this table's faction_id
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into factions " )
db . commit ( )
# updating non primary_factions with their associated primary_faction's faction_id
cur . execute ( " UPDATE factions f1 INNER JOIN factions f2 ON f1.link LIKE CONCAT(f2.link, ' % ' ) SET f1.main_faction_id = f2.main_faction_id WHERE f2.main_faction_id IS NOT NULL; " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Factions.csv " )
print ( " \n WARGEAR " )
try :
with open ( " wahapedia/Wargear.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " id " ) :
indexer [ " wargear_id " ] = i
elif ( column == " name " ) :
indexer [ " name " ] = i
elif ( column == " type " ) :
indexer [ " type " ] = i
elif ( column == " description " ) :
indexer [ " description " ] = i
elif ( column == " is_relic " ) :
indexer [ " is_relic " ] = i
elif ( column == " faction_id " ) :
indexer [ " faction_id " ] = i
elif ( column == " legend " ) :
indexer [ " legend " ] = i
i = i + 1
query = " INSERT IGNORE INTO wargear (wargear_id, name, type, description, is_relic, faction_id, legend) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s , %s ), "
# data has unused column
data = data + [
row [ indexer [ " wargear_id " ] ] if row [ indexer [ " wargear_id " ] ] != ' ' else None , # wargear_id
row [ indexer [ " name " ] ] if row [ indexer [ " name " ] ] != ' ' else None , # name
row [ indexer [ " type " ] ] if row [ indexer [ " type " ] ] != ' ' else None , # type
row [ indexer [ " description " ] ] if row [ indexer [ " description " ] ] != ' ' else None , # description
1 if row [ indexer [ " is_relic " ] ] == " true " else 0 if row [ indexer [ " is_relic " ] ] == " false " else - 1 , # is_relic, boolean
row [ indexer [ " faction_id " ] ] if row [ indexer [ " faction_id " ] ] != ' ' else None , # faction_id
row [ indexer [ " legend " ] ] if row [ indexer [ " legend " ] ] != ' ' else None , # legend
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into wargear " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Wargear.csv " )
print ( " \n WARGEAR LIST " )
try :
with open ( " wahapedia/Wargear_list.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
query = " INSERT IGNORE INTO wargear_list (wargear_id, line, name, weapon_range, type, strength, armor_piercing, damage, abilities) VALUES "
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " wargear_id " ) :
indexer [ " wargear_id " ] = i
elif ( column == " line " ) :
indexer [ " line " ] = i
elif ( column == " name " ) :
indexer [ " name " ] = i
elif ( column == " Range " ) :
indexer [ " weapon_range " ] = i
elif ( column == " type " ) :
indexer [ " type " ] = i
elif ( column == " S " ) :
indexer [ " strength " ] = i
elif ( column == " AP " ) :
indexer [ " armor_piercing " ] = i
elif ( column == " D " ) :
indexer [ " damage " ] = i
elif ( column == " abilities " ) :
indexer [ " abilities " ] = i
i = i + 1
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s , %s , %s , %s ), "
data = data + [
row [ indexer [ " wargear_id " ] ] if row [ indexer [ " wargear_id " ] ] != ' ' else None , # wargear_id
row [ indexer [ " line " ] ] if row [ indexer [ " line " ] ] != ' ' else None , # line
row [ indexer [ " name " ] ] if row [ indexer [ " name " ] ] != ' ' else None , # name
row [ indexer [ " weapon_range " ] ] . replace ( ' " ' , ' ″ ' ) if row [ indexer [ " weapon_range " ] ] != ' ' else None , # weapon_range
row [ indexer [ " type " ] ] if row [ indexer [ " type " ] ] != ' ' else None , # type
row [ indexer [ " strength " ] ] if row [ indexer [ " strength " ] ] != ' ' else None , # strength
row [ indexer [ " armor_piercing " ] ] if row [ indexer [ " armor_piercing " ] ] != ' ' else None , # armor_piercing
row [ indexer [ " damage " ] ] if row [ indexer [ " damage " ] ] != ' ' else None , # damage
row [ indexer [ " abilities " ] ] if row [ indexer [ " abilities " ] ] != ' ' else None , # abilities
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into wargear_list " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Wargear_list.csv " )
print ( " \n DATASHEETS " )
try :
with open ( " wahapedia/Datasheets.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " id " ) :
indexer [ " datasheet_id " ] = i
elif ( column == " name " ) :
indexer [ " name " ] = i
elif ( column == " link " ) :
indexer [ " link " ] = i
elif ( column == " faction_id " ) :
indexer [ " faction_id " ] = i
elif ( column == " source_id " ) :
indexer [ " source_id " ] = i
elif ( column == " role " ) :
indexer [ " role " ] = i
elif ( column == " unit_composition " ) :
indexer [ " unit_composition " ] = i
elif ( column == " transport " ) :
indexer [ " transport " ] = i
elif ( column == " power_points " ) :
indexer [ " power_points " ] = i
elif ( column == " priest " ) :
indexer [ " priest " ] = i
elif ( column == " psyker " ) :
indexer [ " psyker " ] = i
elif ( column == " open_play_only " ) :
indexer [ " open_play_only " ] = i
elif ( column == " crusade_only " ) :
indexer [ " crusade_only " ] = i
elif ( column == " virtual " ) :
indexer [ " virtual_ " ] = i
elif ( column == " Cost " ) :
indexer [ " cost " ] = i
elif ( column == " cost_per_unit " ) :
indexer [ " cost_per_unit " ] = i
i = i + 1
query = " INSERT IGNORE INTO datasheets (datasheet_id, name, link, faction_id, source_id, role, unit_composition, transport, power_points, priest, psyker, open_play_only, crusade_only, virtual_, cost, cost_per_unit) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s ), "
data = data + [
row [ indexer [ " datasheet_id " ] ] if row [ indexer [ " datasheet_id " ] ] != ' ' else None , # datasheet_id
row [ indexer [ " name " ] ] if row [ indexer [ " name " ] ] != ' ' else None , # name
row [ indexer [ " link " ] ] if row [ indexer [ " link " ] ] != ' ' else None , # link
row [ indexer [ " faction_id " ] ] if row [ indexer [ " faction_id " ] ] != ' ' else None , # faction_id
row [ indexer [ " source_id " ] ] if row [ indexer [ " source_id " ] ] != ' ' else None , # source_id
row [ indexer [ " role " ] ] if row [ indexer [ " role " ] ] != ' ' else None , # role
row [ indexer [ " unit_composition " ] ] if row [ indexer [ " unit_composition " ] ] != ' ' else None , # unit_composition
row [ indexer [ " transport " ] ] if row [ indexer [ " transport " ] ] != ' ' else None , # transport
row [ indexer [ " power_points " ] ] if row [ indexer [ " power_points " ] ] != ' ' else None , # power_points
row [ indexer [ " priest " ] ] if row [ indexer [ " priest " ] ] != ' ' else None , # priest
row [ indexer [ " psyker " ] ] if row [ indexer [ " psyker " ] ] != ' ' else None , # psyker
1 if row [ indexer [ " open_play_only " ] ] == " true " else 0 if row [ indexer [ " open_play_only " ] ] == " false " else - 1 , # open_play_only, boolean
1 if row [ indexer [ " crusade_only " ] ] == " true " else 0 if row [ indexer [ " crusade_only " ] ] == " false " else - 1 , # crusade_only, boolean
1 if row [ indexer [ " virtual_ " ] ] == " true " else 0 if row [ indexer [ " virtual_ " ] ] == " false " else - 1 , # virtual_, boolean
row [ indexer [ " cost " ] ] if row [ indexer [ " cost " ] ] != ' ' else None , # cost
1 if row [ indexer [ " cost_per_unit " ] ] == " true " else 0 if row [ indexer [ " cost_per_unit " ] ] == " false " else - 1 , # cost_per_unit, boolean
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into datasheets " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Datasheets.csv " )
print ( " \n ABILITIES " )
try :
with open ( " wahapedia/Abilities.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " id " ) :
indexer [ " ability_id " ] = i
elif ( column == " type " ) :
indexer [ " type " ] = i
elif ( column == " name " ) :
indexer [ " name " ] = i
elif ( column == " legend " ) :
indexer [ " legend " ] = i
elif ( column == " is_other_wargear " ) :
indexer [ " is_other_wargear " ] = i
elif ( column == " faction_id " ) :
indexer [ " faction_id " ] = i
elif ( column == " description " ) :
indexer [ " description " ] = i
i = i + 1
query = " INSERT IGNORE INTO abilities (ability_id, type, name, legend, is_other_wargear, faction_id, description) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s , %s ), "
data = data + [
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " ability_id " ] ] ) , # ability_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " type " ] ] , # type
row [ indexer [ " name " ] ] , # name
row [ indexer [ " legend " ] ] , # legend
1 if row [ indexer [ " is_other_wargear " ] ] == " true " else 0 if row [ indexer [ " is_other_wargear " ] ] == " false " else - 1 , # is_other_wargear, boolean
row [ indexer [ " faction_id " ] ] , # faction_id,
row [ indexer [ " description " ] ] , # description
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into abilities " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Abilities.csv " )
print ( " \n DATASHEETS ABILITIES " )
try :
with open ( " wahapedia/Datasheets_abilities.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " datasheet_id " ) :
indexer [ " datasheet_id " ] = i
elif ( column == " line " ) :
indexer [ " line " ] = i
elif ( column == " ability_id " ) :
indexer [ " ability_id " ] = i
elif ( column == " is_index_wargear " ) :
indexer [ " is_index_wargear " ] = i
elif ( column == " cost " ) :
indexer [ " cost " ] = i
elif ( column == " model " ) :
indexer [ " model " ] = i
i = i + 1
query = " INSERT IGNORE INTO datasheets_abilities (datasheet_id, line, ability_id, is_index_wargear, cost, model) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s ), "
data = data + [
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " datasheet_id " ] ] ) , # datasheet_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " line " ] ] , # line
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " ability_id " ] ] ) , # ability_id
2022-10-24 01:35:40 -07:00
1 if row [ indexer [ " is_index_wargear " ] ] == " true " else 0 if row [ indexer [ " is_index_wargear " ] ] == " false " else - 1 , # is_index_wargear, boolean
row [ indexer [ " cost " ] ] , # cost
row [ indexer [ " model " ] ] , # model
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into datasheets_abilities " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Datasheets_abilities.csv " )
print ( " \n PSYCHIC POWERS " )
try :
with open ( " wahapedia/PsychicPowers.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " id " ) :
indexer [ " psychic_power_id " ] = i
elif ( column == " roll " ) :
indexer [ " roll " ] = i
elif ( column == " name " ) :
indexer [ " name " ] = i
elif ( column == " faction_id " ) :
indexer [ " faction_id " ] = i
elif ( column == " legend " ) :
indexer [ " legend " ] = i
elif ( column == " type " ) :
indexer [ " type " ] = i
elif ( column == " description " ) :
indexer [ " description " ] = i
i = i + 1
query = " INSERT IGNORE INTO psychic_powers (psychic_power_id, roll, name, faction_id, legend, type, description) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s , %s ), "
# input data is out of order (doesn't start with id) and contains duplicate information
data = data + [
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " psychic_power_id " ] ] ) , # psychic_power_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " roll " ] ] , # roll
row [ indexer [ " name " ] ] , # name
row [ indexer [ " faction_id " ] ] , # faction_id
row [ indexer [ " legend " ] ] , # legend
row [ indexer [ " type " ] ] , # type
row [ indexer [ " description " ] ] , # description
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into psychic_powers " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/PsychicPowers.csv " )
print ( " \n WARLORD TRAITS " )
try :
with open ( " wahapedia/Warlord_traits.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " faction_id " ) :
indexer [ " faction_id " ] = i
elif ( column == " type " ) :
indexer [ " type " ] = i
elif ( column == " roll " ) :
indexer [ " roll " ] = i
elif ( column == " name " ) :
indexer [ " name " ] = i
elif ( column == " legend " ) :
indexer [ " legend " ] = i
elif ( column == " description " ) :
indexer [ " description " ] = i
i = i + 1
query = " INSERT IGNORE INTO warlord_traits (trait_id, faction_id, type, roll, name, legend, description) VALUES "
data = [ ]
for row in csvF :
# data doesn't have ID for rows
query + = " (DEFAULT, %s , %s , %s , %s , %s , %s ), "
# data has duplicate information
data = data + [
row [ indexer [ " faction_id " ] ] , # faction_id
row [ indexer [ " type " ] ] , # type
row [ indexer [ " roll " ] ] , # roll
row [ indexer [ " name " ] ] , # name
row [ indexer [ " legend " ] ] , # legend
row [ indexer [ " description " ] ] , # description
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into warlord_traits " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Warlord_traits.csv " )
print ( " \n STRATAGEMS " )
try :
with open ( " wahapedia/Stratagems.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " id " ) :
indexer [ " strategem_id " ] = i
elif ( column == " faction_id " ) :
indexer [ " faction_id " ] = i
elif ( column == " name " ) :
indexer [ " name " ] = i
elif ( column == " type " ) :
indexer [ " type " ] = i
elif ( column == " cp_cost " ) :
indexer [ " cp_cost " ] = i
elif ( column == " legend " ) :
indexer [ " legend " ] = i
elif ( column == " source_id " ) :
indexer [ " source_id " ] = i
elif ( column == " description " ) :
indexer [ " description " ] = i
i = i + 1
query = " INSERT IGNORE INTO strategems (strategem_id, faction_id, name, type, cp_cost, legend, source_id, description) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s , %s , %s ), "
# input data is out of order (doesn't start with id)
data = data + [
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " strategem_id " ] ] ) , # strategem_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " faction_id " ] ] , # faction_id
row [ indexer [ " name " ] ] , # name
row [ indexer [ " type " ] ] , # type
row [ indexer [ " cp_cost " ] ] , # cp_cost
row [ indexer [ " legend " ] ] , # legend
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " source_id " ] ] ) , # source_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " description " ] ] , # description
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into strategems " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Stratagems.csv " )
print ( " \n DATASHEETS DAMAGE " )
try :
with open ( " wahapedia/Datasheets_damage.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " datasheet_id " ) :
indexer [ " datasheet_id " ] = i
elif ( column == " line " ) :
indexer [ " line " ] = i
elif ( column == " Col1 " ) :
indexer [ " col1 " ] = i
elif ( column == " Col2 " ) :
indexer [ " col2 " ] = i
elif ( column == " Col3 " ) :
indexer [ " col3 " ] = i
elif ( column == " Col4 " ) :
indexer [ " col4 " ] = i
elif ( column == " Col5 " ) :
indexer [ " col5 " ] = i
i = i + 1
query = " INSERT IGNORE INTO datasheets_damage (datasheet_id, line, col1, col2, col3, col4, col5) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s , %s ), "
# every col column is highly variable
data = data + [
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " datasheet_id " ] ] ) , # datasheet_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " line " ] ] , # line
2022-12-21 01:27:48 -08:00
row [ indexer [ " col1 " ] ] . replace ( ' + ' , ' ' ) . replace ( ' " ' , ' ' ) , # col1
row [ indexer [ " col2 " ] ] . replace ( ' + ' , ' ' ) . replace ( ' " ' , ' ' ) , # col2
row [ indexer [ " col3 " ] ] . replace ( ' + ' , ' ' ) . replace ( ' " ' , ' ' ) , # col3
row [ indexer [ " col4 " ] ] . replace ( ' + ' , ' ' ) . replace ( ' " ' , ' ' ) , # col4
row [ indexer [ " col5 " ] ] . replace ( ' + ' , ' ' ) . replace ( ' " ' , ' ' ) , # col5
2022-10-24 01:35:40 -07:00
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into datasheets_damage " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Datasheets_damage.csv " )
print ( " \n DATASHEETS KEYWORDS " )
try :
with open ( " wahapedia/Datasheets_keywords.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " datasheet_id " ) :
indexer [ " datasheet_id " ] = i
elif ( column == " keyword " ) :
indexer [ " keyword " ] = i
elif ( column == " model " ) :
indexer [ " model " ] = i
elif ( column == " is_faction_keyword " ) :
indexer [ " is_faction_keyword " ] = i
i = i + 1
query = " INSERT IGNORE INTO datasheets_keywords (datasheet_id, keyword, model, is_faction_keyword) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s ), "
data = data + [
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " datasheet_id " ] ] ) , # datasheet_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " keyword " ] ] , # keyword
row [ indexer [ " model " ] ] if row [ indexer [ " model " ] ] != ' ' else None , # model
1 if row [ indexer [ " is_faction_keyword " ] ] == " true " else 0 if row [ indexer [ " is_faction_keyword " ] ] == " false " else - 1 , # is_faction_keyword, boolean
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into datasheets_keywords " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Datasheets_keywords.csv " )
print ( " \n DATASHEETS MODELS " )
try :
with open ( " wahapedia/Datasheets_models.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " datasheet_id " ) :
indexer [ " datasheet_id " ] = i
elif ( column == " line " ) :
indexer [ " line " ] = i
elif ( column == " name " ) :
indexer [ " name " ] = i
elif ( column == " M " ) :
indexer [ " movement " ] = i
elif ( column == " WS " ) :
indexer [ " weapon_skill " ] = i
elif ( column == " BS " ) :
indexer [ " ballistic_skill " ] = i
elif ( column == " S " ) :
indexer [ " strength " ] = i
elif ( column == " T " ) :
indexer [ " toughness " ] = i
elif ( column == " W " ) :
indexer [ " wounds " ] = i
elif ( column == " A " ) :
indexer [ " attacks " ] = i
elif ( column == " Ld " ) :
indexer [ " leadership " ] = i
elif ( column == " Sv " ) :
indexer [ " save " ] = i
elif ( column == " Cost " ) :
indexer [ " cost " ] = i
elif ( column == " cost_description " ) :
indexer [ " cost_description " ] = i
elif ( column == " models_per_unit " ) :
indexer [ " models_per_unit " ] = i
elif ( column == " cost_including_wargear " ) :
indexer [ " cost_including_wargear " ] = i
elif ( column == " base_size " ) :
indexer [ " base_size " ] = i
elif ( column == " base_size_descr " ) :
indexer [ " base_size_descr " ] = i
i = i + 1
query = " INSERT IGNORE INTO datasheets_models (datasheet_id, line, name, movement, weapon_skill, ballistic_skill, strength, toughness, wounds, attacks, leadership, save, cost, cost_description, models_per_unit, cost_including_wargear, base_size, base_size_descr) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s , %s ), "
data = data + [
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " datasheet_id " ] ] ) , # datasheet_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " line " ] ] , # line
row [ indexer [ " name " ] ] , # name
row [ indexer [ " movement " ] ] . replace ( ' " ' , ' ' ) , # movement
row [ indexer [ " weapon_skill " ] ] [ 0 ] if row [ indexer [ " weapon_skill " ] ] [ 0 ] != ' - ' else None , # weapon_skill, deformatted
row [ indexer [ " ballistic_skill " ] ] [ 0 ] if row [ indexer [ " ballistic_skill " ] ] [ 0 ] != ' - ' else None , # ballistic_skill, deformatted
row [ indexer [ " strength " ] ] if row [ indexer [ " strength " ] ] [ 0 ] != ' - ' else None , # strength, formatted
row [ indexer [ " toughness " ] ] if row [ indexer [ " toughness " ] ] [ 0 ] != ' - ' else None , # toughness, formatted
row [ indexer [ " wounds " ] ] if row [ indexer [ " wounds " ] ] [ 0 ] != ' - ' else None , # wounds, formatted
row [ indexer [ " attacks " ] ] if row [ indexer [ " attacks " ] ] [ 0 ] != ' - ' else None , # attacks, formatted
row [ indexer [ " leadership " ] ] if row [ indexer [ " leadership " ] ] [ 0 ] != ' - ' else None , # leadership, formatted
row [ indexer [ " save " ] ] [ 0 ] if row [ indexer [ " save " ] ] [ 0 ] != ' - ' else None , # save, deformatted
row [ indexer [ " cost " ] ] , # cost
row [ indexer [ " cost_description " ] ] , # cost_description
row [ indexer [ " models_per_unit " ] ] , # models_per_unit
1 if row [ indexer [ " cost_including_wargear " ] ] == " true " else 0 if row [ indexer [ " cost_including_wargear " ] ] == " false " else - 1 , # cost_including_wargear, boolean
row [ indexer [ " base_size " ] ] , # base_size
row [ indexer [ " base_size_descr " ] ] , # base_size_descr
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into datasheets_models " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Datasheets_models.csv " )
print ( " \n DATASHEETS OPTIONS " )
try :
with open ( " wahapedia/Datasheets_options.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " datasheet_id " ) :
indexer [ " datasheet_id " ] = i
elif ( column == " line " ) :
indexer [ " line " ] = i
elif ( column == " button " ) :
indexer [ " button " ] = i
elif ( column == " description " ) :
indexer [ " description " ] = i
elif ( column == " is_index_wargear " ) :
indexer [ " is_index_wargear " ] = i
i = i + 1
query = " INSERT IGNORE INTO datasheets_options (datasheet_id, line, button, description, is_index_wargear) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s ), "
data = data + [
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " datasheet_id " ] ] ) , # datasheet_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " line " ] ] , # line
row [ indexer [ " button " ] ] , # button
row [ indexer [ " description " ] ] , # description
1 if row [ indexer [ " is_index_wargear " ] ] == " true " else 0 if row [ indexer [ " is_index_wargear " ] ] == " false " else - 1 , # is_index_wargear, boolean
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into datasheets_options " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Datasheets_options.csv " )
print ( " \n DATASHEETS WARGEAR " )
try :
with open ( " wahapedia/Datasheets_wargear.csv " , mode = ' r ' ) as f :
csvF = csv . reader ( f , delimiter = ' | ' )
indexer = { }
i = 0
columns = next ( csvF )
for column in columns :
column = column . replace ( u ' \ufeff ' , ' ' )
if ( column == " datasheet_id " ) :
indexer [ " datasheet_id " ] = i
elif ( column == " line " ) :
indexer [ " line " ] = i
elif ( column == " wargear_id " ) :
indexer [ " wargear_id " ] = i
elif ( column == " cost " ) :
indexer [ " cost " ] = i
elif ( column == " is_index_wargear " ) :
indexer [ " is_index_wargear " ] = i
elif ( column == " model " ) :
indexer [ " model " ] = i
elif ( column == " is_upgrade " ) :
indexer [ " is_upgrade " ] = i
i = i + 1
query = " INSERT IGNORE INTO datasheets_wargear (datasheet_id, line, wargear_id, cost, is_index_wargear, model, is_upgrade) VALUES "
data = [ ]
for row in csvF :
query + = " ( %s , %s , %s , %s , %s , %s , %s ), "
# MySQL doesn't support booleans, so we're re-using an INT (-1 is data isn't boolean)
data = data + [
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " datasheet_id " ] ] ) , # datasheet_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " line " ] ] , # line
2022-12-05 21:56:26 -08:00
re . sub ( " [a-zA-Z]* " , " " , row [ indexer [ " wargear_id " ] ] ) , # wargear_id
2022-10-24 01:35:40 -07:00
row [ indexer [ " cost " ] ] , # cost
1 if row [ indexer [ " is_index_wargear " ] ] == " true " else 0 if row [ indexer [ " is_index_wargear " ] ] == " false " else - 1 , # is_index_wargear, boolean
row [ indexer [ " model " ] ] , # model
1 if row [ indexer [ " is_upgrade " ] ] == " true " else 0 if row [ indexer [ " is_upgrade " ] ] == " false " else - 1 , # is_upgrade, boolean
]
query = query [ : - 1 ] + " ON DUPLICATE KEY UPDATE check_me=1 "
cur . execute ( query , data )
print ( cur . rowcount , " rows inserted into datasheets_wargear " )
db . commit ( )
except mysql . connector . Error as err :
print ( err )
except IOError :
print ( " unable to open wahapedia/Datasheets_wargear.csv " )
print ( " \n DATA ERRORS " )
try :
query = " SELECT COUNT(*) AS count FROM sources WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in sources " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM factions WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in factions " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM wargear WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in wargear " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM wargear_list WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in wargear_list " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM datasheets WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in datasheets " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM abilities WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in abilities " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM datasheets_abilities WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in datasheets_abilities " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM psychic_powers WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in psychic_powers " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM warlord_traits WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in warlord_traits " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM strategems WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in strategems " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM datasheets_damage WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in datasheets_damage " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM datasheets_keywords WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in datasheets_keywords " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM datasheets_models WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in datasheets_models " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM datasheets_options WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in datasheets_options " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
try :
query = " SELECT COUNT(*) AS count FROM datasheets_wargear WHERE check_me = 1 "
cur . execute ( query )
errors = cur . fetchone ( ) . count
if ( errors ) :
print ( " {count} Error(s) in datasheets_wargear " . format ( count = errors ) )
except mysql . connector . Error as err :
print ( err )
print ( " \n script ending " )
cur . close ( )
db . close ( )