Add email field to account

master
esensar 2018-05-03 15:28:57 +02:00
parent e188141a2a
commit 066b6a5fd3
4 changed files with 61 additions and 14 deletions

View File

@ -1,13 +1,14 @@
from sqlalchemy import (Model, Column, String, from sqlalchemy import Column, Integer, String, ForeignKey, relationship
Integer, ForeignKey, relationship) from app import db
class Account(Model): class Account(db.Model):
__tablename__ = 'accounts' __tablename__ = 'accounts'
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
username = Column(String) username = Column(String, index=True, unique=True)
password = Column(String) password = Column(String)
emails = Column(String, index=True, unique=True)
role_id = Column(Integer, ForeignKey("roles.id")) role_id = Column(Integer, ForeignKey("roles.id"))
role = relationship("Role", foreign_keys=[role_id]) role = relationship("Role", foreign_keys=[role_id])
@ -23,7 +24,7 @@ class Account(Model):
return '<Account (name=%s, role=%s)>' % self.username, self.role return '<Account (name=%s, role=%s)>' % self.username, self.role
class Role(Model): class Role(db.Model):
__tablename__ = 'roles' __tablename__ = 'roles'
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)

View File

@ -1,9 +1,10 @@
from datetime import datetime from datetime import datetime
from sqlalchemy import Model, DateTime, String, Column, Integer from app import db
from sqlalchemy import Column, Integer, DateTime, String
from sqlalchemy.dialects.postgresql import JSON from sqlalchemy.dialects.postgresql import JSON
class Recording(Model): class Recording(db.Model):
__tablename__ = 'recordings' __tablename__ = 'recordings'
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)

View File

@ -2,6 +2,7 @@ import sys
import json import json
from flask_mqtt import Mqtt from flask_mqtt import Mqtt
from .models import Recording from .models import Recording
from app import db, app
mqtt = Mqtt() mqtt = Mqtt()
@ -37,16 +38,16 @@ def handle_subscribe(client, userdata, mid, granted_qos):
def handle_mqtt_message(client, userdata, message): def handle_mqtt_message(client, userdata, message):
from .. import db
print("Received message!") print("Received message!")
print("Topic: " + message.topic) print("Topic: " + message.topic)
print("Payload: " + message.payload.decode()) print("Payload: " + message.payload.decode())
try: try:
# If type is JSON # If type is JSON
recording = parse_json_message(message.topic, message.payload.decode()) recording = parse_json_message(message.topic, message.payload.decode())
with app.app_context():
db.session
db.session.add(recording) db.session.add(recording)
db.session.commit() db.session.commit()
print(recording)
except ValueError: except ValueError:
print("ERROR!") print("ERROR!")
error_type, error_instance, traceback = sys.exc_info() error_type, error_instance, traceback = sys.exc_info()
@ -59,9 +60,11 @@ def parse_json_message(topic, payload) -> Recording:
try: try:
json_msg = json.loads(payload) json_msg = json.loads(payload)
device_id = get_device_id(topic) device_id = get_device_id(topic)
return Recording(device_id, json_msg["record_type"], return Recording(device_id=device_id,
json_msg["record_value"], json_msg["recorded_at"], record_type=json_msg["record_type"],
json_msg) record_value=json_msg["record_value"],
recorded_at=json_msg["recorded_at"],
raw_json=json_msg)
except KeyError: except KeyError:
error_type, error_instance, traceback = sys.exc_info() error_type, error_instance, traceback = sys.exc_info()
raise ValueError("JSON parsing failed! Key error: " raise ValueError("JSON parsing failed! Key error: "

View File

@ -0,0 +1,42 @@
"""empty message
Revision ID: 151f16e166d2
Revises: 5bdb53d5de37
Create Date: 2018-05-03 14:59:15.784509
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '151f16e166d2'
down_revision = '5bdb53d5de37'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('accounts')
op.drop_table('roles')
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('roles',
sa.Column('id', sa.INTEGER(), server_default=sa.text("nextval('roles_id_seq'::regclass)"), nullable=False),
sa.Column('display_name', sa.VARCHAR(), autoincrement=False, nullable=True),
sa.PrimaryKeyConstraint('id', name='roles_pkey'),
postgresql_ignore_search_path=False
)
op.create_table('accounts',
sa.Column('id', sa.INTEGER(), nullable=False),
sa.Column('username', sa.VARCHAR(), autoincrement=False, nullable=True),
sa.Column('password', sa.VARCHAR(), autoincrement=False, nullable=True),
sa.Column('role_id', sa.INTEGER(), autoincrement=False, nullable=True),
sa.ForeignKeyConstraint(['role_id'], ['roles.id'], name='accounts_role_id_fkey'),
sa.PrimaryKeyConstraint('id', name='accounts_pkey')
)
# ### end Alembic commands ###