Exemple #1
0
class Base(db.Model):
    __abstract__ = True
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    slug = db.Column(db.String(80), unique=True)

    def __unicode__(self):
        return self.name

    @declared_attr
    def __tablename__(cls):
        return cls.__name__.lower()

    def set_name(self, name):
        slug = slugify(name)
        counter = 2
        while self.query.filter_by(slug=slug).first() is not None:
            slug = slugify(name) + "-" + str(counter)
            counter = counter + 1
        self.name = name
        self.slug = slug

    def __init__(self, *args, **kwargs):
        if not 'slug' in kwargs:
            self.set_name(kwargs.get('name', ''))
        super().__init__(*args, **kwargs)
class Attack(db.Model):
    __tablename__ = 'attack'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    damage = db.relationship("Dice", uselist=False, backref="damage_dice")
    to_hit_mod = db.Column(db.Integer, default=0)
    damage_mod = db.Column(db.Integer, default=0)
Exemple #3
0
class Trap(db.Model):
    __tablename__ = 'trap'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    statistics = db.relationship("Statistics",
                                 uselist=False,
                                 backref="trap_statistics")
Exemple #4
0
class Character(db.Model):
    __tablename__ = 'character'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    player_character = db.Column(db.Boolean, default=False)
    race = db.relationship("Race", backref="characters")
    race_id = db.Column(db.Integer, db.ForeignKey('race.id'))
    character_classes = db.relationship("CharacterClass", lazy='dynamic')
    abilities = db.relationship("CharacterAbility", lazy='dynamic')
    skills = db.relationship("CharacterSkill", lazy='dynamic')

    def get_ability(self, ability):
        return self.abilities.filter(
            CharacterAbility.ability.has(name=ability)).first()

    def get_skill(self, skill):
        return self.skills.filter(CharacterSkill.skill.has(name=skill)).first()

    def add_race_modifiers(self):
        for ability_mod in self.race.ability_mods:
            iterator = (
                char_ability for char_ability in self.abilities
                if ability_mod.ability.name in char_ability.ability.name)
            for ability in iterator:
                ability.score = ability.score + ability_mod.modifier
Exemple #5
0
class CharacterLog(Base, TimestampMixin):
    character_id = db.Column(db.ForeignKey('character.id'), index=True)
    character = db.relationship('Character', backref=backref("logs", cascade="all, delete"))
    log_id = db.Column(db.ForeignKey('adventurelog.id'), index=True)
    log = db.relationship('AdventureLog', backref=backref("characters", cascade="all, delete"))
    xp = db.Column(db.Integer, default=0)
    gold = db.Column(db.Integer, default=0)
Exemple #6
0
class Player(db.Model):
    __tablename__ = 'player'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    active = db.Column(db.Boolean, default=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User',
                           backref=db.backref('players', lazy='dynamic'))
Exemple #7
0
class ClassInfo(db.Model):
    __tablename__ = 'class_info'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    spell_ability = db.relationship("Ability")
    spell_ability_id = db.Column(db.Integer, db.ForeignKey('ability.id'))
    skill_proficiencies = db.relationship("Skill",
                                          secondary=class_skill_table,
                                          backref="class_skills")
Exemple #8
0
class Character(db.Model):
    __tablename__ = 'character'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    theme = db.Column(db.String(32))
    hostile = db.Column(db.Boolean, default=False)
    current_health = db.Column(db.Integer, null=True)
    statistics = db.relationship("Statistics",
                                 uselist=False,
                                 backref="character_statistics")
Exemple #9
0
class TimestampMixin(object):
    created = db.Column(db.DateTime, default=datetime.utcnow)
    updated = db.Column(db.DateTime, default=datetime.utcnow)

    @declared_attr
    def __mapper_args__(cls):
        return {'order_by': 'created desc'}

    def readable_date(self, date, format=DATETIMEFORMAT):
        """Format the given date using the given format."""
        return date.strftime(format)
Exemple #10
0
class Room(db.Model):
    __tablename__ = 'room'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    dungeon_id = db.Column(db.Integer, db.ForeignKey('dungeon.id'))
    dungeon = db.relationship('Dungeon',
                              backref=db.backref('rooms', lazy='dynamic'))
    doors = db.relationship('Room',
                            secondary=door,
                            primaryjoin=id == door.c.room_id,
                            secondaryjoin=id == door.c.door_id)
Exemple #11
0
class RaceAbility(db.Model):
    __tablename__ = 'race_ability'
    race_id = db.Column(db.Integer, db.ForeignKey('race.id'), primary_key=True)
    ability_id = db.Column(db.Integer,
                           db.ForeignKey('ability.id'),
                           primary_key=True)
    modifier = db.Column(db.Integer)
    ability = db.relationship("Ability")

    def __init__(self, ability, modifier):
        self.ability = ability
        self.modifier = modifier
Exemple #12
0
class Entity(db.Model):
    __tablename__ = 'entity'
    id = db.Column(db.Integer, primary_key=True)
    active = db.Column(db.Boolean, default=True)
    room_id = db.Column(db.Integer, db.ForeignKey('room.id'))
    room = db.relationship('Room',
                           backref=db.backref('entities', lazy='dynamic'))
    character_id = db.Column(db.Integer, db.ForeignKey('character.id'))
    character = db.relationship('Character',
                                backref=db.backref('entities', lazy='dynamic'))
    trap_id = db.Column(db.Integer, db.ForeignKey('trap.id'))
    trap = db.relationship('Trap',
                           backref=db.backref('entities', lazy='dynamic'))
Exemple #13
0
class Race(db.Model):
    __tablename__ = 'race'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    size = db.Column(db.String(32))
    speed = db.Column(db.Integer, default=30)
    ability_mods = db.relationship("RaceAbility")

    def get_ability_modifier(self, ability):
        iterator = (modifier for modifier in self.ability_mods
                    if ability in modifier.ability.name)
        for modifier in iterator:
            return modifier
        return RaceAbility(get_ability(ability), modifier=0)
Exemple #14
0
class Host(db.Model):
    __tablename__ = 'host'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    preference = db.relationship("Preference", uselist=False, backref="host")

    def is_available(self, date):
        if type(date) is not datetime.date:
            raise TypeError('arg must be a datetime.date, not a %s' %
                            type(date))
        for suspended_date in self.suspended_dates:
            if date >= suspended_date.from_date and date <= suspended_date.to_date:
                return False
        return True
Exemple #15
0
class CharacterSkill(db.Model):
    __tablename__ = 'character_skill'
    character_id = db.Column(db.Integer,
                             db.ForeignKey('character.id'),
                             primary_key=True)
    proficient = db.Column(db.Boolean, default=False)
    modifier = db.Column(db.Integer)
    skill_id = db.Column(db.Integer,
                         db.ForeignKey('skill.id'),
                         primary_key=True)
    skill = db.relationship("Skill")

    def __init__(self, skill):
        self.skill = skill
        self.proficient = True
Exemple #16
0
class AdventureLog(Base, TimestampMixin):
    date_ran = db.Column(db.DateTime, default=datetime.utcnow)
    length = db.Column(db.Integer)
    author_id = db.Column(db.ForeignKey('user.id'), index=True)
    author = db.relationship('User',  backref='logs')
    def xp_total(self):
        xp = 0
        for character in self.characters:
            xp = character.xp + xp
        return xp
    def gold_total(self):
        gold = 0
        for character in self.characters:
            gold = character.gold + gold
        return gold
Exemple #17
0
class CharacterClass(db.Model):
    __tablename__ = 'character_class'
    character_id = db.Column(db.Integer,
                             db.ForeignKey('character.id'),
                             primary_key=True)
    starting = db.Column(db.Boolean, default=False)
    level = db.Column(db.Integer)
    class_info_id = db.Column(db.Integer,
                              db.ForeignKey('class_info.id'),
                              primary_key=True)
    class_info = db.relationship("ClassInfo")

    def __init__(self, class_info, level, starting=False):
        self.class_info = class_info
        self.level = level
        self.starting = starting
Exemple #18
0
class Preference(db.Model):
    __tablename__ = 'preference'
    id = db.Column(db.Integer, primary_key=True)
    language = db.Column(db.String(32))
    wheelchair_access = db.Column(db.Boolean, default=False)
    smoking_allowed = db.Column(db.Boolean, default=False)
    pets_allowed = db.Column(db.Boolean, default=False)
    has_pets = db.Column(db.Boolean, default=False)
    overnight_stays_allowed = db.Column(db.Boolean, default=False)
    host_id = db.Column(db.Integer, db.ForeignKey('host.id'))
Exemple #19
0
class Spell(db.Model):
    __tablename__ = 'spell'
    id = db.Column(db.Integer, primary_key=True)
    casting_time = db.Column(db.String(32))
    components = db.Column(db.String(32))
    description = db.Column(db.String(256))
    duration = db.Column(db.String(32))
    level = db.Column(db.Integer, default=0)
    range_distance = db.Column(db.Integer, default=0)
    school = db.Column(db.String(32))
Exemple #20
0
class Trait(db.Model):
    __tablename__ = 'trait'
    id = db.Column(db.Integer, primary_key=True)
    language = db.Column(db.String(32))
    disabled = db.Column(db.Boolean, default=False)
    smoker = db.Column(db.Boolean, default=False)
    pets_allowed = db.Column(db.Boolean, default=False)
    has_pets = db.Column(db.Boolean, default=False)
    overnight_stay = db.Column(db.Boolean, default=False)
    guest_id = db.Column(db.Integer, db.ForeignKey('guest.id'))
Exemple #21
0
class Suspend(db.Model):
    __tablename__ = 'suspend'
    id = db.Column(db.Integer, primary_key=True)
    host_id = db.Column(db.Integer, db.ForeignKey('host.id'))
    host = db.relationship('Host',
                           backref=db.backref('suspended_dates',
                                              lazy='dynamic'))
    from_date = db.Column(db.Date)
    to_date = db.Column(db.Date)

    def is_available(self, date):
        if type(date) is not datetime.date:
            raise TypeError('arg must be a datetime.date, not a %s' %
                            type(date))
        if date >= self.from_date and date <= self.to_date:
            return False
        else:
            return True
Exemple #22
0
class CharacterAbility(db.Model):
    __tablename__ = 'character_ability'
    character_id = db.Column(db.Integer,
                             db.ForeignKey('character.id'),
                             primary_key=True)
    score = db.Column(db.Integer)
    modifier = db.Column(db.Integer)
    ability_id = db.Column(db.Integer,
                           db.ForeignKey('ability.id'),
                           primary_key=True)
    ability = db.relationship("Ability")

    def __init__(self, ability, score):
        self.ability = ability
        self.score = score

    def __setattr__(self, name, value):
        # Call the parent class method first.
        super(CharacterAbility, self).__setattr__(name, value)
        if (name == "score"):
            self.modifier = int((self.score - 10) / 2)
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(32), index=True)
    password_hash = db.Column(db.String(128))
    first_name = db.Column(db.String(32))
    last_name = db.Column(db.String(32))
    email = db.Column(db.String(64))
    gender = db.Column(db.String(32))
    admin = db.Column(db.Boolean, default=False)

    def hash_password(self, password):
        self.password_hash = pwd_context.hash(password)

    def verify_password(self, password):
        return pwd_context.verify(password, self.password_hash)
Exemple #24
0
class Location(db.Model):
    __tablename__ = 'address'
    id = db.Column(db.Integer, primary_key=True)
    address1 = db.Column(db.String(64))
    address2 = db.Column(db.String(64))
    city = db.Column(db.String(32))
    state = db.Column(db.String(32))
    host_id = db.Column(db.Integer, db.ForeignKey('host.id'))
    host = db.relationship('Host',
                           backref=db.backref('location', lazy='dynamic'))
Exemple #25
0
class Dungeon(db.Model):
    __tablename__ = 'dungeon'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
Exemple #26
0
from v1.apps import db

door = db.Table(
    'doors', db.Model.metadata,
    db.Column('room_id', db.Integer, db.ForeignKey('room.id'), index=True),
    db.Column('door_id', db.Integer, db.ForeignKey('room.id')),
    db.UniqueConstraint('room_id', 'door_id', name='unique_door'))


class Dungeon(db.Model):
    __tablename__ = 'dungeon'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))


class Room(db.Model):
    __tablename__ = 'room'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    dungeon_id = db.Column(db.Integer, db.ForeignKey('dungeon.id'))
    dungeon = db.relationship('Dungeon',
                              backref=db.backref('rooms', lazy='dynamic'))
    doors = db.relationship('Room',
                            secondary=door,
                            primaryjoin=id == door.c.room_id,
                            secondaryjoin=id == door.c.door_id)
Exemple #27
0
class Guest(db.Model):
    __tablename__ = 'guest'
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    trait = db.relationship("Trait", uselist=False, backref="guest")
Exemple #28
0
class Statistics(db.Model):
    __tablename__ = 'statistics'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))
    level = db.Column(db.Integer, default=1)
    max_health = db.Column(db.Integer, default=1)
    damage_min = db.Column(db.Integer, default=1)
    damage_max = db.Column(db.Integer, default=4)
    armor_class = db.Column(db.Integer, default=10)
    strength = db.Column(db.Integer, default=8)
    dexterity = db.Column(db.Integer, default=8)
    consitution = db.Column(db.Integer, default=8)
    intelligence = db.Column(db.Integer, default=8)
    wisdom = db.Column(db.Integer, default=8)
    charisma = db.Column(db.Integer, default=8)
    character_id = db.Column(db.Integer, db.ForeignKey('character.id'))
    trap_id = db.Column(db.Integer, db.ForeignKey('trap.id'))
class SkillEntity(db.Model):
    __tablename__ = 'skill_entity'
    statistics_id = db.Column(db.Integer, db.ForeignKey('statistics.id'), primary_key=True)
    modifier = db.Column(db.Integer, default=0)
    skill_id = db.Column(db.Integer, db.ForeignKey('skill.id'))
    skill = db.relationship("Skill")
class AbilityEntity(db.Model):
    __tablename__ = 'ability_entity'
    statistics_id = db.Column(db.Integer, db.ForeignKey('statistics.id'), primary_key=True)
    modifier = db.Column(db.Integer, default=0)
    ability_id = db.Column(db.Integer, db.ForeignKey('ability.id'))
    ability = db.relationship("Ability")