New store setup

This commit is contained in:
Richard Bronkhorst
2023-07-10 19:25:01 +02:00
parent 6537db3c03
commit b1e3621490
14 changed files with 212 additions and 136 deletions

View File

@@ -0,0 +1,12 @@
from nullptr.models.base import Base
from nullptr.models.waypoint import Waypoint
from nullptr.models.sector import Sector
from nullptr.models.system import System
from nullptr.models.agent import Agent
from nullptr.models.marketplace import Marketplace
from nullptr.models.jumpgate import Jumpgate
from nullptr.models.ship import Ship
from nullptr.models.contract import Contract
from nullptr.models.survey import Survey
__all__ = [ 'Waypoint', 'Sector', 'Ship', 'Survey', 'Agent', 'Marketplace', 'Jumpgate', 'Contract', 'Base' ]

View File

@@ -1,18 +1,38 @@
from copy import deepcopy
from nullptr.util import sg
class Reference:
def __init__(self, typ, symbol, store):
self.typ = typ
self.symbol = symbol
self.store = store
@classmethod
def create(cls, obj):
o = cls(type(obj), obj.symbol, obj.store)
return o
def resolve(self):
self.store.get(self.typ, self.symbol)
def __repr__(self):
return f'*REF*{self.symbol}.{self.typ.ext()}'
class Base:
identifier = 'symbol'
symbol: str
store: object
def __init__(self, symbol, store):
self.disable_dirty = True
self.file_offset = 0
self.store = store
self.symbol = symbol
self.define()
self.disable_dirty = False
@classmethod
def ext(cls):
raise NotImplementedError('no ext')
def define(self):
pass
@@ -38,10 +58,18 @@ class Base:
setattr(self, attr, lst)
def __setattr__(self, name, value):
if name not in ['symbol','store','disable_dirty'] and not self.disable_dirty:
if name not in ['symbol','store','disable_dirty', 'file_offset'] and not self.disable_dirty:
self.store.dirty(self)
if issubclass(type(value), Base):
value = Reference.create(value)
super().__setattr__(name, value)
def __getattribute__(self, nm):
val = super().__getattribute__(nm)
if type(val) == Reference:
val = val.resolve()
return val
def update(self, d):
pass
@@ -52,22 +80,15 @@ class Base:
self.disable_dirty = True
self.__dict__.update(d)
self.disable_dirty = False
def dict(self):
def __getstate__(self):
r = {}
for k,v in self.__dict__.items():
if k in ['store']:
if k in ['store','file_offset', 'disable_dirty', 'file_offset']:
continue
r[k] = deepcopy(v)
return r
def path(self):
raise NotImplementedError('path')
@classmethod
def ext(self):
raise NotImplementedError('extension')
def type(self):
return self.__class__.__name__

View File

@@ -1,7 +1,7 @@
from .system_member import SystemMember
from .base import Base
from dataclasses import field
class Jumpgate(SystemMember):
class Jumpgate(Base):
def define(self):
self.range: int = 0
self.faction: str = ''

View File

@@ -1,10 +1,10 @@
from .system_member import SystemMember
from .base import Base
from time import time
from nullptr.util import *
from dataclasses import field
class Marketplace(SystemMember):
class Marketplace(Base):
def define(self):
self.imports:list = []
self.exports:list = []

View File

@@ -1,10 +1,10 @@
from time import time
from nullptr.util import *
from .system_member import SystemMember
from .base import Base
size_names = ['SMALL','MODERATE','LARGE']
class Survey(SystemMember):
class Survey(Base):
identifier = 'signature'
def define(self):
self.type: str = ''

View File

@@ -1,10 +0,0 @@
from .base import Base
class SystemMember(Base):
@classmethod
def ext(cls):
return 'obj'
def system(self):
p = self.symbol.split('-')
return f'{p[0]}-{p[1]}'

View File

@@ -1,8 +1,8 @@
from .system_member import SystemMember
from .base import Base
from nullptr.util import *
from dataclasses import field
class Waypoint(SystemMember):
class Waypoint(Base):
def define(self):
self.x:int = 0
self.y:int = 0