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