def importWeaponsByJob(job: str, amount: int): r = Reader(job) results = r.getArms(amount) msg: List[Dict] = [] if len(results) >= 1: db = DB(Base) session = db.newSession() for i in results: try: sqlRes = session.query(Weapon).filter(Weapon.name == i.name).one() msg.append({ "msg": f"Item was already present.", "item": i.name }) except Exception as e: w = Weapon() w.convertToSqlObject(i) w.stats = Stats() w.stats.convertToSqlObject(i.stats) w.repair = Repair() w.repair.convertToSqlObject(i.repair) w.materia = Materia() w.materia.convertToSqlObject(i.materia) session.add(w) session.commit() msg.append({ "msg": "Item was added to the database", "item": i.name }) session.close() return dumps(msg)
class DbInit(): def __init__(self) -> None: self.db = DB(Base) self.cd = os.getcwd() self.cd = f"{self.cd}/xivdb/static/images/itemIcons/" pass def runJob(self) -> None: self.downloadExternalData() pass def downloadExternalData(self) -> None: r = Reader(job='gnb') gnbList: List[Weapon] = r.getArms(recordLimit=10) for i in gnbList: self.checkSql(i) def checkSql(self, item: Weapon) -> None: session = self.db.newSession() try: returnedItem: Weapon = session.query(Weapon).filter(Weapon.name == item.name).one() session.close() except Exception as e: w: Weapon = Weapon() w.convertToSqlObject(item) s: Stats = Stats() s.convertToSqlObject(item.stats) r: Repair = Repair() r.convertToSqlObject(item.repair) m: Materia = Materia() m.convertToSqlObject(item.materia) w.stats = s w.repair = r w.materia = m self.downloadPicturesToStatic(w.pictureUrl, w.name) session.add(w) session.commit() session.close() def downloadPicturesToStatic(self, pictureUrl: str, itemName: str) -> None: png = f"{self.cd}{itemName}.png" if os.path.exists(png) == False: self.downloadPicture(png, pictureUrl) if os.path.exists(png) == False: print(f"failed to download icon for {itemName}") def downloadPicture(self, pngPath: str, pictureUrl: str) -> None: try: requestRes = requests.get(pictureUrl, stream=True) requestRes.raw.decode_content = True with open(pngPath, 'wb') as imgFile: shutil.copyfileobj(requestRes.raw, imgFile) except Exception as e: print(e)
from flask import render_template, Blueprint from xivdb.sql import DB, Base, Weapon, Repair, Materia, Stats from typing import List, Dict from sqlalchemy.orm import Session, Query from json import dumps from XivDbReader import Reader d = DB(Base) parse_bp = Blueprint('parse', __name__) @parse_bp.route('/weapons/<string:job>/<int:amount>', methods=['POST']) def importWeaponsByJob(job: str, amount: int): r = Reader(job) results = r.getArms(amount) msg: List[Dict] = [] if len(results) >= 1: db = DB(Base) session = db.newSession() for i in results: try: sqlRes = session.query(Weapon).filter(Weapon.name == i.name).one() msg.append({ "msg": f"Item was already present.", "item": i.name }) except Exception as e: w = Weapon() w.convertToSqlObject(i)
from flask import render_template, Blueprint, send_file from xivdb.sql import DB, Base, Weapon, Repair, Materia, Stats, PictureIcon from typing import List from sqlalchemy.orm import sessionmaker, Session, Query import os import io d = DB(Base) session: Session = d.newSession() weapon_bp = Blueprint('weapons', __name__, template_folder="templates") @weapon_bp.route('/') def index(): return render_template('weapons/index.html') @weapon_bp.route('/list') def weaponsList(): items: List[dict] = [] session = d.newSession() try: for names in session.query(Weapon.name,Weapon.level ,Weapon.itemLevel ,Weapon.id ): items.append({ 'name': names[0] ,'level': names[1] ,'itemLevel': names[2] ,'id': names[3] }) except Exception as e: print(e)
def __init__(self) -> None: self.db = DB(Base) self.cd = os.getcwd() self.cd = f"{self.cd}/xivdb/static/images/itemIcons/" pass
def __init__(self): self.db = DB(Base) pass
class importCsv: def __init__(self): self.db = DB(Base) pass def intakeWeapons(self, row: int) -> Weapon: with open("weapons.csv", "r") as csvfile: r = csv.reader(csvfile, delimiter=",") lineNumber: int = 0 for line in r: if lineNumber == 0: lineNumber = lineNumber + 1 continue session = self.db.session() try: name = line[3] res: Weapon = session.query(Weapon).filter( Weapon.name == name).one() if name == res.name: print(f"{name} is already present in SQL.") return Weapon() except Exception as e: print(e) w = self.db.newWeapon() w.url = line[1] w.pictureUrl = line[2] w.name = line[3] w.rarity = line[4] w.untradeable = self.checkBoolResult(line[5]) w.unique = self.checkBoolResult(line[6]) w.slot = str(line[7]) w.itemLevel = int(line[8]) w.jobs = line[9] w.level = line[10] w.compnayCrest = self.checkBoolResult(line[11]) w.armorie = self.checkBoolResult(line[12]) w.glamourChest = self.checkBoolResult(line[13]) w.dyeable = self.checkBoolResult(line[14]) w.extractable = self.checkBoolResult(line[15]) w.projectable = self.checkBoolResult(line[16]) w.desynth = str(line[17]) return w pass def intakeStats(self, row: int) -> Stats: with open("stats.csv", "r") as csvfile: r = csv.reader(csvfile, delimiter=",") lineNumber: int = 0 for line in r: if lineNumber == 0: lineNumber = lineNumber + 1 continue s = self.db.newStats() s.str = line[1] s.vit = line[2] s.dex = line[3] s.int = line[4] s.mnd = line[5] s.det = line[6] s.skl = line[7] s.spl = line[8] s.dhr = line[9] s.ten = line[10] s.pie = line[11] return s def intakeRepair(self, row: int) -> Repair: with open("repair.csv", "r") as csvfile: r = csv.reader(csvfile, delimiter=",") i = self.db.newRepair() lineNumber: int = 0 for line in r: if lineNumber != row: lineNumber = lineNumber + 1 continue i.job = line[1] i.level = line[2] i.material = line[3] return i def intakeMateria(self, row: int) -> Materia: with open("materia.csv", "r") as csvfile: r = csv.reader(csvfile, delimiter=",") i = self.db.newMateria() lineNumber: int = 0 for line in r: if lineNumber != row: lineNumber = lineNumber + 1 continue i.slots = line[1] i.melderJob = line[2] i.melderLevel = line[3] i.advancedMelding = self.checkBoolResult(line[4]) return i def checkBoolResult(self, res: str) -> bool: if res == "True": return True else: return False def getAllWeapons(self) -> List[Weapon]: weapons: List[Weapon] = [] with open("weapons.csv", "r") as csvfile: r = csv.reader(csvfile, delimiter=",") lineNumber: int = 0 for line in r: if lineNumber == 0: lineNumber = lineNumber + 1 continue w = self.db.newWeapon() w.url = str(line[1]) w.pictureUrl = str(line[2]) w.name = str(line[3]) w.rarity = str(line[4]) w.untradeable = self.checkBoolResult(line[5]) w.unique = self.checkBoolResult(line[6]) w.slot = str(line[7]) w.itemLevel = int(line[8]) w.jobs = str(line[9]) w.level = int(line[10]) w.compnayCrest = self.checkBoolResult(line[11]) w.armorie = self.checkBoolResult(line[12]) w.glamourChest = self.checkBoolResult(line[13]) w.dyeable = self.checkBoolResult(line[14]) w.extractable = self.checkBoolResult(line[15]) w.projectable = self.checkBoolResult(line[16]) w.desynth = float(line[17]) weapons.append(w) return weapons def getAllStats(self) -> List[Stats]: stats: List[Stats] = [] with open("stats.csv", "r") as csvfile: r = csv.reader(csvfile, delimiter=",") lineNumber: int = 0 for line in r: if lineNumber == 0: lineNumber = lineNumber + 1 continue s = self.db.newStats() s.str = int(line[1]) s.vit = int(line[2]) s.dex = int(line[3]) s.int = int(line[4]) s.mnd = int(line[5]) s.det = int(line[6]) s.skl = int(line[7]) s.spl = int(line[8]) s.dhr = int(line[9]) s.ten = int(line[10]) s.pie = int(line[11]) stats.append(s) return stats def getAllRepairs(self) -> List[Repair]: repairs: List[Repair] = [] with open("repair.csv", "r") as csvfile: r = csv.reader(csvfile, delimiter=",") lineNumber: int = 0 for line in r: if lineNumber == 0: lineNumber = lineNumber + 1 continue i = self.db.newRepair() i.job = str(line[1]) i.level = int(line[2]) i.material = str(line[3]) repairs.append(i) return repairs def getAllMateria(self) -> List[Materia]: materias: List[Materia] = [] with open("materia.csv", "r") as csvfile: r = csv.reader(csvfile, delimiter=",") lineNumber: int = 0 for line in r: if lineNumber == 0: lineNumber = lineNumber + 1 continue i = self.db.newMateria() i.slots = str(line[1]) i.melderJob = str(line[2]) i.melderLevel = int(line[3]) i.advancedMelding = self.checkBoolResult(line[4]) materias.append(i) return materias
from xivdb.sql import DB, Base, Weapon, Repair, Materia, Stats from xivdb.importCsv import importCsv from typing import List from sqlalchemy.orm import sessionmaker from XivDbReader import Reader import sqlalchemy.orm d = DB(Base) session: sessionmaker = d.newSession() w = d.newWeapon() read: Reader = Reader(job='whm') whm = read.getArms(recordLimit=1) for i in whm: try: res: Weapon = session.query(Weapon).filter(Weapon.name == i.name).one() except Exception as e: #print(f"{i.name} was not found in the DB.") ic = importCsv() counter: int = 1 weapons: List[Weapon] = ic.getAllWeapons() stats: List[Stats] = ic.getAllStats() repairs: List[Repair] = ic.getAllRepairs() materias: List[Materia] = ic.getAllMateria() counter: int = 0 for i in weapons: