Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
        
Example #5
0
 def __init__(self) -> None:
     self.db = DB(Base)
     self.cd = os.getcwd()
     self.cd = f"{self.cd}/xivdb/static/images/itemIcons/"
     pass
Example #6
0
 def __init__(self):
     self.db = DB(Base)
     pass
Example #7
0
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
Example #8
0
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: