commit 88a331ee75cb3eb229ad76b8711abd5028afdc3c Author: luxick Date: Thu Feb 22 00:10:35 2018 +0100 Add sql models and domain models diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..73a7fd0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,93 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# IPython Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# dotenv +.env + +# virtualenv +.venv/ +venv/ +ENV/ + +# Spyder project settings +.spyderproject + +# Rope project settings +.ropeproject + +.idea +install.txt diff --git a/dsst/dsst_core/__init__.py b/dsst/dsst_core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dsst/dsst_core/core.py b/dsst/dsst_core/core.py new file mode 100644 index 0000000..4097970 --- /dev/null +++ b/dsst/dsst_core/core.py @@ -0,0 +1,59 @@ +import datetime +from dsst_core import models, sql + + +class DSSTCore: + def __init__(self): + # Set DB Connection + sql.create_tables() + + @staticmethod + def insert_player(model: models.Player): + sql.Player.create(name=model.name, hex_id=model.hex_id) + + @staticmethod + def insert_enemy(enemy: models.Enemy): + sql.Enemy.create(name=enemy.name) + + @staticmethod + def insert_drink(model: models.Drink): + sql.Drink.create(name=model.name, vol=model.vol) + + @staticmethod + def insert_season(season: models.Season): + sql.Season.create(number=season.number, game_name=season.game_name, start_date=season.start_date, + end_date=season.end_date) + + @staticmethod + def insert_episode(episode: models.Episode): + sql.Episode.update() + +if __name__ == '__main__': + core = DSSTCore() + # Insert player + # player = models.Player() + # player.name = 'Marvin' + # core.insert_player(player) + + # Insert a Season + # season = models.Season() + # season.number = 1 + # season.game_name = 'Dark Souls' + # season.start_date = datetime.date(2017, 1, 1) + # core.insert_season(season) + + # core.insert_drink(models.Drink({'name': 'Pfeffi', 'vol': 22.5})) + + # core.insert_enemy(models.Enemy({'name': 'Newton'})) + + # Insert an episode + ep = models.Episode() + ep.date = datetime.date(2017, 2, 5) + ep.number = 1 + ep.seq_number = 1 + ep.players = [models.Player({'id': 1,}), models.Player({'id': 2})] + ep.deaths = [models.Death({ + 'player': 1, + 'enemy': 1, + 'penalty': 1, + })] diff --git a/dsst/dsst_core/models.py b/dsst/dsst_core/models.py new file mode 100644 index 0000000..882c905 --- /dev/null +++ b/dsst/dsst_core/models.py @@ -0,0 +1,63 @@ +class Season: + def __init__(self, arg={}): + self.id = arg.get('id') + self.game_name = arg.get('game_name') + self.number = arg.get('number') + self.start_date = arg.get('start_date') + self.end_date = arg.get('end_date') + + self.players = arg.get('players') + self.enemies = arg.get('enemies') + self.episodes = arg.get('episodes') + + +class Episode: + def __init__(self, arg={}): + self.id = arg.get('id') + self.seq_number = arg.get('seq_number') + self.number = arg.get('number') + self.date = arg.get('date') + + self.players = arg.get('players') + self.enemies = arg.get('enemies') + self.deaths = arg.get('deaths') + self.victories = arg.get('victories') + + +class GameEvent: + def __init__(self, arg={}): + self.id = arg.get('id') + self.player = arg.get('player') + self.enemy = arg.get('enemy') + self.info = arg.get('info') + + +class Death(GameEvent): + def __init__(self, arg={}): + GameEvent.__init__(self, arg) + self.penalty = arg.get('penalty') + + +class Victory(GameEvent): + def __init__(self, arg={}): + GameEvent.__init__(self, arg) + + +class Player: + def __init__(self, arg={}): + self.id = arg.get('id') + self.name = arg.get('name') + self.hex_id = arg.get('hex_id') + + +class Enemy: + def __init__(self, arg={}): + self.id = arg.get('id') + self.name = arg.get('name') + + +class Drink: + def __init__(self, arg={}): + self.id = arg.get('id') + self.name = arg.get('name') + self.vol = arg.get('vol') \ No newline at end of file diff --git a/dsst/dsst_core/sql.py b/dsst/dsst_core/sql.py new file mode 100644 index 0000000..19b9a77 --- /dev/null +++ b/dsst/dsst_core/sql.py @@ -0,0 +1,116 @@ +from peewee import * + +connection = MySQLDatabase('dsst', user='dsst', password='dsst') + + +class Season(Model): + id = AutoField() + number = IntegerField() + game_name = CharField() + start_date = DateField(null=True) + end_date = DateField(null=True) + + class Meta: + database = connection + + +class Episode(Model): + id = AutoField() + seq_number = IntegerField() + number = CharField() + date = DateTimeField(null=True) + + class Meta: + database = connection + + +class Player(Model): + id = AutoField() + name = CharField() + hex_id = CharField(null=True) + + class Meta: + database = connection + + +class Drink(Model): + id = AutoField() + name = CharField() + vol = DecimalField() + + class Meta: + database = connection + + +class Enemy(Model): + id = AutoField() + name = CharField() + + class Meta: + database = connection + + +class Death(Model): + id = AutoField() + info = CharField(null=True) + player = ForeignKeyField(Player) + enemy = ForeignKeyField(Enemy) + penalty = ForeignKeyField(Drink) + + class Meta: + database = connection + + +class Victory(Model): + id = AutoField() + info = CharField(null=True) + player = ForeignKeyField(Player) + enemy = ForeignKeyField(Enemy) + + class Meta: + database = connection + + +class SeasonEpisode(Model): + id = AutoField() + season = ForeignKeyField(Season) + episode = ForeignKeyField(Episode) + + class Meta: + database = connection + + +class EpisodePlayer(Model): + id = AutoField() + episode = ForeignKeyField(Episode,) + player = ForeignKeyField(Player) + + class Meta: + database = connection + + +class EpisodeDeath(Model): + id = AutoField() + episode = ForeignKeyField(Episode) + death = ForeignKeyField(Death) + + class Meta: + database = connection + + +class EpisodeVictory(Model): + id = AutoField() + episode = ForeignKeyField(Episode) + victory = ForeignKeyField(Victory) + + class Meta: + database = connection + + +def create_tables(): + models = [Season, Episode, Player, Drink, Enemy, Death, Victory, SeasonEpisode, EpisodePlayer, EpisodeDeath, + EpisodeVictory] + for model in models: + model.create_table() + +