bcns-gameDistributionSystem/gameobject.py
odecif 603bd11668 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.
2026-02-17 02:35:39 +01:00

406 lines
9.8 KiB
Python

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()