Skip to content

Instantly share code, notes, and snippets.

@Cheaterman
Created June 3, 2022 20:43
Show Gist options
  • Save Cheaterman/cd04e947024056fdbb738360c78a78c9 to your computer and use it in GitHub Desktop.
Save Cheaterman/cd04e947024056fdbb738360c78a78c9 to your computer and use it in GitHub Desktop.
vehicle.py
from sqlalchemy import Column, Float, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from . import Base
class Dealership(Base):
__tablename__ = 'dealerships'
id = Column(Integer, primary_key=True)
name = Column(String(128), nullable=False)
x = Column(Float, nullable=False)
y = Column(Float, nullable=False)
z = Column(Float, nullable=False)
vehicles = relationship('Vehicle', back_populates='dealership')
class Vehicle(Base):
__tablename__ = 'vehicles'
id = Column(Integer, primary_key=True)
model_id = Column(Integer, nullable=False)
color_1 = Column(Integer, nullable=False)
color_2 = Column(Integer, nullable=False)
paintjob = Column(Integer)
mod_0 = Column(Integer)
mod_1 = Column(Integer)
mod_2 = Column(Integer)
mod_3 = Column(Integer)
mod_4 = Column(Integer)
mod_5 = Column(Integer)
mod_6 = Column(Integer)
mod_7 = Column(Integer)
mod_8 = Column(Integer)
mod_9 = Column(Integer)
mod_10 = Column(Integer)
mod_11 = Column(Integer)
mod_12 = Column(Integer)
mod_13 = Column(Integer)
mod_14 = Column(Integer)
mod_15 = Column(Integer)
price = Column(Integer, nullable=False)
x = Column(Float, nullable=False)
y = Column(Float, nullable=False)
z = Column(Float, nullable=False)
rotation = Column(Float, nullable=False)
dealership_id = Column(Integer, ForeignKey('dealerships.id'))
owner_id = Column(Integer, ForeignKey('users.id'))
dealership = relationship('Dealership', back_populates='vehicles')
owner = relationship('User', back_populates='vehicles')
def __init__(self, **kwargs):
if 'mods' in kwargs:
mods = kwargs.pop('mods')
valid_mod_slots = range(16)
for mod_slot, mod_id in mods.items():
if mod_slot not in valid_mod_slots:
raise ValueError(f'Invalid mod slot {mod_slot}')
kwargs[f'mod_{mod_slot}'] = mod_id
super().__init__(**kwargs)
@property
def mods(self):
valid_mod_slots = range(16)
return {
mod_slot: getattr(self, f'mod_{mod_slot}')
for mod_slot in valid_mod_slots
if getattr(self, f'mod_{mod_slot}') is not None
}
@mods.setter
def mods(self, value):
valid_mod_slots = range(16)
for mod_slot, mod_id in value.items():
if mod_slot not in valid_mod_slots:
raise ValueError(f'Invalid mod slot {mod_slot}')
setattr(self, f'mod_{mod_slot}', mod_id)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment