add observation class for importing observations

This commit is contained in:
Arno Kaimbacher 2022-02-23 16:46:47 +01:00
parent 1dafc5824c
commit 7dd739b04e
5 changed files with 75 additions and 28 deletions

View File

@ -1,2 +1,4 @@
# For relative imports to work in Python 3.6 ''' For relative imports to work in Python 3.6 '''
import os, sys; sys.path.append(os.path.dirname(os.path.realpath(__file__))) import os
import sys
sys.path.append(os.path.dirname(os.path.realpath(__file__)))

View File

@ -1,6 +1,6 @@
# import os # import os
# #import connexion # #import connexion
# from sqlalchemy.ext import # from sqlalchemy.ext import
# from marshmallow import Marshmallow # from marshmallow import Marshmallow
@ -9,4 +9,4 @@
# Initialize Marshmallow # Initialize Marshmallow
# ma = Marshmallow(app) # ma = Marshmallow(app)

View File

@ -10,10 +10,10 @@ import os
# currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
# parentdir = os.path.dirname(currentdir) # parentdir = os.path.dirname(currentdir)
# sys.path.insert(0, parentdir) # sys.path.insert(0, parentdir)
from db.pg_models import create_pg_session
from sqlalchemy.orm import session from sqlalchemy.orm import session
from gschliefgraben_glasfaser.models import PersonSchema from models import ObservationSchema, Person, PersonSchema, Observation
from models import Person, PersonSchema from db.pg_models import create_pg_session
#from models import Person, PersonSchema
# response = requests.get('https://api.com/') # response = requests.get('https://api.com/')
# print(response) # shows the response's HTTP status code # print(response) # shows the response's HTTP status code
# print(response.json()) # shows the response's JSON response body, if it has one # print(response.json()) # shows the response's JSON response body, if it has one
@ -21,21 +21,29 @@ from models import Person, PersonSchema
def main(): def main():
# db_user = os.environ.get("POSTGIS_DBUSER") ''' main method '''
# print(db_user) db_user = os.environ.get("POSTGIS_DBUSER")
print(db_user)
pg_session: session = create_pg_session() pg_session: session = create_pg_session()
pg_person: Person = pg_session.query(Person).first() # pg_person: Person = pg_session.query(Person).first()
observation: Observation = pg_session.query(Observation).first()
print (observation)
# serialize db data to json # serialize db data to json
person_schema = PersonSchema() # person_schema = PersonSchema()
dump_data = person_schema.dump(pg_person) # dump_data = person_schema.dump(pg_person)
# print(dump_data)
# serialize db data to json
observation_schema = ObservationSchema()
dump_data = observation_schema.dump(observation)
print(dump_data) print(dump_data)
# deserialize # # deserialize
load_data: Person = person_schema.load(dump_data) # load_data: Person = person_schema.load(dump_data)
print(load_data) # print(load_data)
create(dump_data)
# create(dump_data)
def create(person_json: PersonSchema): def create(person_json: PersonSchema):
@ -48,14 +56,14 @@ def create(person_json: PersonSchema):
login = person_json.get('login') login = person_json.get('login')
#lname = person.get('lname') #lname = person.get('lname')
session = create_pg_session() db_session = create_pg_session()
# existing_person = Person.query \ # existing_person = Person.query \
# .filter(Person.login == login) \ # .filter(Person.login == login) \
# .one_or_none() # .one_or_none()
existing_person: bool = ( \ existing_person: bool = ( \
session.query(Person) \ db_session.query(Person) \
.filter(Person.login == login) .filter(Person.login == login)
.one_or_none() .one_or_none()
) )
@ -66,9 +74,9 @@ def create(person_json: PersonSchema):
# deserialize to object # deserialize to object
new_person: Person = schema.load(person_json) new_person: Person = schema.load(person_json)
# Add the person to the database # Add the person to the database
session.add(new_person) db_session.add(new_person)
session.commit() db_session.commit()
# Serialize and return the newly created person in the response # Serialize and return the newly created person in the response
data = schema.dump(new_person) data = schema.dump(new_person)

View File

@ -10,16 +10,52 @@ from datetime import datetime
# import os # import os
from sqlalchemy import (Column, Integer, from sqlalchemy import (Column, Integer,
String, DateTime) String, DateTime, ForeignKey, Numeric)
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import session from sqlalchemy.orm import session, relationship
from marshmallow import Schema #from marshmallow import Schema
from db.pg_models import create_pg_session
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema from marshmallow_sqlalchemy import SQLAlchemyAutoSchema
from db.pg_models import create_pg_session
Base = declarative_base() Base = declarative_base()
class Observation(Base):
""" observation class """
__tablename__ = 'observation'
__table_args__ = {"schema": "gba"}
id = Column('observation_id', Integer, primary_key=True)
name = Column('name', String)
value_type = Column('value_type', String)
# pitch = Column('PITCH', String)
# roll = Column('ROLL', String)
sampling_time_start = Column('sampling_time_start', DateTime)
sampling_time_end = Column('sampling_time_end', DateTime)
result_time = Column('result_time', DateTime)
sta_identifier = Column('sta_identifier', String)
value_quantity = Column('value_quantity', Numeric(20, 10), nullable=False)
# fk_dataset_id = Column('fk_dataset_id', Integer,
# ForeignKey('gba.dataset.dataset_id'))
# dataset = relationship("Dataset", lazy="joined",
# foreign_keys=[fk_dataset_id])
fk_dataset_id = Column(Integer, ForeignKey(
'gba.dataset.dataset_id'), nullable=False)
# dataset = relationship("Dataset", back_populates="observations")
class ObservationSchema(SQLAlchemyAutoSchema):
""" Platform class """
class Meta:
""" Platform class """
model = Observation
include_relationships = True
load_instance = True
#pg_session: session = create_pg_session()
sqla_session: session = create_pg_session()
class Person(Base): class Person(Base):
""" Platform class """ """ Platform class """
__tablename__ = 'accounts' __tablename__ = 'accounts'
@ -30,9 +66,10 @@ class Person(Base):
login = Column(String(255)) login = Column(String(255))
timestamp = Column('updated_at', DateTime, default=datetime.utcnow, timestamp = Column('updated_at', DateTime, default=datetime.utcnow,
onupdate=datetime.utcnow) onupdate=datetime.utcnow)
def __repr__(self): def __repr__(self):
return "<User(name='%s', lastname='%s')>" % ( return "<User(name='%s', lastname='%s')>" % (
self.login, self.lname) self.login, self.lname)
class PersonSchema(SQLAlchemyAutoSchema): class PersonSchema(SQLAlchemyAutoSchema):

View File

@ -30,7 +30,7 @@ d:/Software/geomon/.venv/Scripts/python.exe -m pip install -U autopep8
python -m pip install fdb python -m pip install fdb
python -m pip install sqlalchemy-firebird python -m pip install sqlalchemy-firebird
python -m pip install psycopg2 python -m pip uninstall psycopg2
Marshmallow provides functionality to serialize and deserialize Python objects as they flow out of and into our JSON-based REST API. Marshmallow converts Python class instances to objects that can be converted to JSON. Marshmallow provides functionality to serialize and deserialize Python objects as they flow out of and into our JSON-based REST API. Marshmallow converts Python class instances to objects that can be converted to JSON.
python -m pip install marshmallow-sqlalchemy marshmallow python -m pip install marshmallow-sqlalchemy marshmallow