Added class object and tester, not finished.

The class object is to later be replacing the current nfo-file parser
and making custom class objects instead. Just about done with CPU in
SystemSpecs, next up is GPU and then later recommendedspecs.

Also a seed-script update.
This commit is contained in:
odecif 2026-02-17 02:35:39 +01:00
parent cda83592b1
commit 603bd11668
3 changed files with 484 additions and 2 deletions

View File

@ -1,5 +1,4 @@
-- ratingOrgan
INSERT INTO ratingOrgan (name) VALUES ('PEGI');
INSERT INTO ratingOrgan (name) VALUES ('ELSPA');
INSERT INTO ratingOrgan (name) VALUES ('USK');
@ -8,7 +7,6 @@ INSERT INTO ratingOrgan (name) VALUES ('VET / SFB');
INSERT INTO ratingOrgan (name) VALUES ('BBFC');
-- additionalFileType
INSERT INTO additionalFileType (name) VALUES ('patch');
INSERT INTO additionalFileType (name) VALUES ('manual');
INSERT INTO additionalFileType (name) VALUES ('quickstart');

405
gameobject.py Normal file
View File

@ -0,0 +1,405 @@
import pprint
from typing import List
class SystemSpecs:
def __init__(self):
pass
@property
def os(self):
return self._os
@os.setter
def os(self, os):
# List
self._os = os
@property
def ramsize(self):
return self._ramsize
@ramsize.setter
def ramsize(self, ramsize):
# Int
self._ramsize = ramsize
@property
def cpu(self):
return self._cpu
@cpu.setter
def cpu(self):
self._cpu = self.CPU()
@property
def opticaldrive(self):
return self._opticaldrive
@opticaldrive.setter
def opticaldrive(self, opticaldrive):
# String
self._opticaldrive = opticaldrive
@property
def gpu(self):
return self._gpu
@gpu.setter
def gpu(self):
self._gpu = self.GPU()
@property
def hddspace(self):
return self._hddspace
@hddpspace.setter
def hddspace(self, hddspace):
# Int
self.hddspace = hddspace
@property
def nic(self):
return self._nic
@nic.setter
def nic(self, nic):
# List
self._nic = nic
def to_dict(self):
d = self.__dict__
for value in self.cpu:
d["cpu"][d["cpu"].index(value)] = value.to_dict()
for value in self.gpu:
d["gpu"][d["gpu"].index(value)] = value.to_dict()
return d
class CPU:
def __init__(self):
pass
@property
def frequency(self):
return self._frequency
@frequency.setter
def frequency(self, frequency):
# String
self._frequency = frequency
@property
def unit(self):
return self._unit
@unit.setter
def unit(self, unit):
# String
self._unit = unit
@property
def model(self):
return self._model
@model.setter
def model(self, model):
# List
self._model = model
def to_dict(self):
return self.__dict__
class GPU:
def __init__(self):
pass
def manufacturer(self, manufacturer):
# String
self.manufacturer = manufacturer
def model(self, model):
# List
self.model = model
def transfertype(self, transfertype):
# List
self.transfertype = transfertype
def memorysize(self, memorysize):
# Int
self.memorysize = memorysize
def engine(self, engine):
# String
self.engine = engine
def directx(self, directx):
# String
self.directx = directx
def to_dict(self):
return self.__dict__
class Rating:
def __init__(self):
pass
def organ(self, organ):
# String
self.organ = organ
def verdict(self, verdict):
# String
self.verdict = verdict
def to_dict(self):
d = self.__dict__
return d
class Game:
#def __init__(self, title, year, originaltitle=""):
def __init__(self):
self._title = ""
# self._originaltitle = ""
# self._year = ""
# self._plot = ""
# self._genre = ""
# self._playermodes = ""
# self._cdkey = ""
# if originaltitle == "":
# self.originaltitle = title
# else:
# self.originaltitle = originaltitle
# self.year = year
@property
def title(self):
return self._title
@title.setter
def title(self, title):
self._title = title
@property
def originaltitle(self):
return self._originaltitle
@originaltitle.setter
def originaltitle(self, originaltitle):
if originaltitle == "":
originaltitle = self._title
self._originaltitle = originaltitle
@property
def year(self):
return self._year
@year.setter
def year(self, year):
self._year = year
def example(self):
self._title = "Battlefield 2142"
self._year = 2006
@property
def plot(self):
return self._plot
@plot.setter
def plot(self, plot):
self._plot = plot
@property
def genre(self):
return self._genre
@genre.setter
def genre(self, genre):
self._genre = genre
@property
def playermodes(self):
return self._playermodes
@playermodes.setter
def playermodes(self, playermodes):
modes = ["Singleplayer",
"Online Multiplayer",
"LAN"]
try:
if isinstance(playermodes, list):
for mode in playermodes:
assert mode in modes, (
"### Assert error: " + self.title +
": playermode \"" + mode +
"\" not valid. Valid options are " + str(modes) +
". Skipping.")
# if mode not in modes:
# raise Exception("playermode " + mode + " not valid")
self._playermodes = playermodes
except AssertionError as e:
print(e)
def artwork(self, artwork):
# TODO add type, title, region, notes and filename
pass
def imagelist(self, imagelist):
# TODO add type, name, titleD6
pass
@property
def cdkey(self):
return self._cdkey
@cdkey.setter
def cdkey(self, cdkey):
# TODO add validation of sorts
self._cdkey = cdkey
def documents(self, documents):
# TODO add type and path. Also validation
pass
@property
def linuxinstructions(self):
return self._linuxinstructions
@linuxinstructions.setter
def linuxinstructions(self, linuxinstructions):
self._linuxinstructions = linuxinstructions
@property
def systemrequirements(self):
return self._systemrequirements
@systemrequirements.setter
def systemrequirements(self, specs):
self._systemrequirements = SystemSpecs()
@property
def recommendedspecs(self):
return self._recommendedspecs
@recommendedspecs.setter
def recommendedspecs(self, specs):
self._recommendedspecs = SystemSpecs()
@property
def collab(self):
return self._collab
@collab.setter
def collab(self, collab):
self._collab = collab
@property
def developer(self):
return self._developer
@developer.setter
def developer(self, developer):
# String
self._developer = developer
@property
def credit(self):
return self._credit
@credit.setter
def credit(self, credit):
try:
if not isinstance(credit, list):
raise TypeError
self.credit = credit
except TypeError:
print("### Type error: " + self.title + ": credit is not a list")
@property
def rating(self):
return self._rating
@rating.setter
def rating(self):
self._rating = Rating()
def to_dict(self):
j = self.__dict__
try:
j["systemrequirements"] = self.systemrequirements.to_dict()
except AttributeError:
print("## " + self.title +
": no systemrequirements found, skipping")
try:
j["recommendedspecs"] = self.recommendedspecs.to_dict()
except AttributeError:
print("## " + self.title +
": no recommendedspecs found, skipping")
try:
j["rating"] = self.rating.to_dict()
except AttributeError:
print("## " + self.title +
": no rating found, skipping")
return j
def example():
# testdata object
g1 = Game("Battlefield 2142", 2006)
g1.plot("Framtidens krig\n\nMedan en förödande istid tömmer jordens " +
"resurser utkämpar två koalitioner ett desperat krig om det " +
"enda som spelar någon roll - överlevnad.\n\n* Från skaparna" +
" av den prisbelönta spelserien Battlefield\n* Krossa " +
"motståndarens Titan i det helt nya, målbaserade Titan-" +
"spelläget\n* Härska på slagfältet ned högteknologiska " +
"fordon och vapen, som svävarstridsvagnar och EMP-granater\n* " +
"Kämpa dig till titeln som överbefälhavare med belöningar i " +
"realtid och lås upp saker som kanonrobotar och flyttbara " +
"Spawn-punkter\n* Anpassa din karaktär så att den passar din " +
"spelstil")
g1.genre(["RPG", "FPS"])
g1.playermodes(["Singleplayer", "Online Multiplayer", "LAN"])
g1.cdkey("H98G-DW8M-USH8-VPL8-L265")
g1req = SystemSpecs()
g1req.os(["Windows XP"])
g1req.ramsize(536870912)
g1reqcpu = SystemSpecs().CPU()
g1reqcpu.frequency("1.7")
g1reqcpu.unit("GHz")
g1reqcpu.model(["Intel Pentium 4", "AMD Athlon"])
g1req.cpu = [g1reqcpu]
g1reqgpu1 = SystemSpecs().GPU()
g1reqgpu1.manufacturer("NVIDIA")
g1reqgpu1.model(["GeForce 5800"])
g1reqgpu1.transfertype(["AGP", "PCIe"])
g1reqgpu1.memorysize(134217728)
g1reqgpu1.directx("DirectX 9.0c")
g1reqgpu2 = SystemSpecs().GPU()
g1reqgpu2.manufacturer("ATI")
g1reqgpu2.model(["Radeon 9500"])
g1reqgpu2.transfertype(["AGP", "PCIe"])
g1reqgpu2.memorysize(134217728)
g1reqgpu2.directx("DirectX 9.0c")
g1req.gpu = [g1reqgpu1, g1reqgpu2]
g1req.opticaldrive("DVD 8x")
g1req.hddspace(2362232013)
g1req.nic(["128kbps"])
g1.systemrequirements = g1req
g1.developer("dice")
g1.credit(["EA", "BINK Video", "SoundBlaster X-Fi", "gamespy"])
g1rating = Rating()
g1rating.organ("PEGI")
g1rating.verdict("16+")
g1.rating = g1rating
myjson = g1.to_dict()
pprint.pp(myjson)
#example()

79
readnfo.py Normal file
View File

@ -0,0 +1,79 @@
import json
import sys
import gameobject as go
import pprint
nfofilearg = sys.argv[1]
content = ""
with open(nfofilearg, "r") as file:
content = file.read()
# TODO Better validation
try:
content = json.loads(content)
except:
print("couldn't load json, aborting")
exit
print(content)
c = content["game"]
g1 = go.Game()
keys = ["title", "originaltitle", "year", "plot", "genre", "playermodes" ,"cdkey" ,"linuxinstructions", "systemrequirements", "recommendedspecs", "recommendedspecs", "collab", "developer", "credit", "rating"]
for key in keys:
try:
assert key in c
except AssertionError:
print("###key " + key + " not in nfo-file, skipping")
keys.remove(key)
else:
sskeys = ["os", "ramsize", "cpu", "opticaldrive", "gpu", "hddpsace", "nic"]
cpukeys =["frequency", "unit", "model"]
if key == "title":
g1.title = c["title"]
if key == "originaltitle":
g1.originaltitle = c["originaltitle"]
if key == "year":
g1.year = c["year"]
if key == "plot":
g1.plot = c["plot"]
if key == "genre":
g1.genre = c["genre"]
if key == "playermodes":
g1.playermodes = c["playermodes"]
if key == "cdkey":
g1.cdkey = c["cdkey"]
if key == "linuxinstructions":
g1.linuxinstructions = c["linuxinstructions"]
if key == "systemrequirements":
sr1 = go.SystemSpecs()
csr = c["systemrequirements"]
for srkey in sskeys:
try:
assert srkey in c["systemrequirements"]
except AssertionError:
print("###key " + srkey + " not in nfo-file, skipping")
else:
if srkey == "os":
sr1.os = csr["os"]
if srkey == "ramsize":
sr1.ramsize = csr["ramsize"]
if srkey == "cpu":
cpu1 = go.SystemSpecs().CPU()
ccpu = csr["cpu"]
for cpukey in cpukeys:
try:
assert cpukey in ccpu
except AssertionError:
print("###key " + cpukey + " not in nfo-file, skipping")
else:
if cpukey == "frequency":
cpu1.frequency = ccpu["frequency"]
if cpukey == "unit":
cpu1.unit = ccpu["unit"]
if cpukey == "model":
cpu1.model = ccpu["model"]
# g1.systemrequirements = c["systemrequirements"]
# g1.recommendedspcs = c["recommendedspecs"]
pprint.pp(g1.to_dict())