adding sqlalchemy models
							parent
							
								
									804dda48ea
								
							
						
					
					
						commit
						a5d58dfb18
					
				@ -0,0 +1,58 @@
 | 
			
		||||
from sqlalchemy import (
 | 
			
		||||
    Column,
 | 
			
		||||
    Identity,  # Identity replaced Serial
 | 
			
		||||
    Integer,
 | 
			
		||||
    BigInteger,
 | 
			
		||||
    Numeric,
 | 
			
		||||
    String,
 | 
			
		||||
    ForeignKey,
 | 
			
		||||
    DateTime,
 | 
			
		||||
    Boolean,
 | 
			
		||||
    Enum,
 | 
			
		||||
)
 | 
			
		||||
from sqlalchemy.orm import relationship
 | 
			
		||||
from sqlalchemy.sql import expression
 | 
			
		||||
from sqlalchemy.ext.compiler import compiles
 | 
			
		||||
from sqlalchemy.types import DateTime as DatetimeType
 | 
			
		||||
 | 
			
		||||
from . import db
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class utcnow(expression.FunctionElement):
 | 
			
		||||
    type = DatetimeType()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@compiles(utcnow, "postgresql")
 | 
			
		||||
def pg_utcnow(element, compiler, **kw):
 | 
			
		||||
    return "TIMEZONE('utc', CURRENT_TIMESTAMP)"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def ReferenceCol(tablename, nullable=False, **kw):
 | 
			
		||||
    """A utility function for declaring foreign key relationships."""
 | 
			
		||||
    return Column(ForeignKey("{}.id".format(tablename)), nullable=nullable, **kw)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DBMixin:
 | 
			
		||||
    id = Column(BigInteger, Identity(start=100000), primary_key=True)
 | 
			
		||||
    created_date = Column(DateTime(timezone=True), server_default=utcnow())
 | 
			
		||||
    modified_date = Column(
 | 
			
		||||
        DateTime(timezone=True), server_default=utcnow(), onupdate=utcnow()
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def to_dict(self):
 | 
			
		||||
        d = self.__dict__.copy()
 | 
			
		||||
        if "_sa_instance_state" in d:
 | 
			
		||||
            d.pop("_sa_instance_state")
 | 
			
		||||
        return d
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Cookie(DBMixin, db.Model):
 | 
			
		||||
    """A Cookie Class"""
 | 
			
		||||
 | 
			
		||||
    __tablename__ = "cookies"
 | 
			
		||||
 | 
			
		||||
    name = Column(String(50), index=True)
 | 
			
		||||
    recipe_url = Column(String(255))
 | 
			
		||||
    sku = Column(String(55))
 | 
			
		||||
    qoh = Column(Integer)
 | 
			
		||||
    unit_cost = Column(Numeric(12, 2))
 | 
			
		||||
@ -0,0 +1,19 @@
 | 
			
		||||
import datetime as dt
 | 
			
		||||
from decimal import Decimal
 | 
			
		||||
 | 
			
		||||
from flask.json import JSONEncoder
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CustomJSONEncoder(JSONEncoder):
 | 
			
		||||
    def default(self, obj):
 | 
			
		||||
        try:
 | 
			
		||||
            if isinstance(obj, dt.datetime):
 | 
			
		||||
                return obj.isoformat()
 | 
			
		||||
            if isinstance(obj, Decimal):
 | 
			
		||||
                return float(obj)
 | 
			
		||||
            iterable = iter(obj)
 | 
			
		||||
        except TypeError:
 | 
			
		||||
            pass
 | 
			
		||||
        else:
 | 
			
		||||
            return list(iterable)
 | 
			
		||||
        return JSONEncoder.default(self, obj)
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue