183 lines
4.4 KiB
Python
183 lines
4.4 KiB
Python
#!/usr/bin/env python
|
|
# coding: utf-8
|
|
|
|
# In[ ]:
|
|
|
|
|
|
from sqlalchemy import create_engine, Column, Integer, String, Float, DateTime, ForeignKey
|
|
from sqlalchemy.orm import sessionmaker, relationship
|
|
from sqlalchemy.orm import declarative_base
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
# Create a base class for declarative models
|
|
Base = declarative_base()
|
|
|
|
class Product(Base):
|
|
__tablename__ = 'product'
|
|
id = Column(Integer, primary_key=True)
|
|
name = Column(String)
|
|
SKU_PLU_UPC_number = Column(String)
|
|
price_histories = relationship("PriceHistory", back_populates="product")
|
|
|
|
class Retailer(Base):
|
|
__tablename__ = 'retailer'
|
|
id = Column(Integer, primary_key=True)
|
|
name = Column(String)
|
|
products = relationship("Product", secondary="retailer_product")
|
|
|
|
class Price(Base):
|
|
__tablename__ = 'price'
|
|
id = Column(Integer, primary_key=True)
|
|
MOQ = Column(Integer)
|
|
price = Column(Float)
|
|
|
|
class ScraperJob(Base):
|
|
__tablename__ = 'scraper_job'
|
|
id = Column(Integer, primary_key=True)
|
|
start_time = Column(DateTime)
|
|
end_time = Column(DateTime)
|
|
parameters = Column(String)
|
|
statistics = Column(String)
|
|
|
|
class PriceHistory(Base):
|
|
__tablename__ = 'price_history'
|
|
id = Column(Integer, primary_key=True)
|
|
location = Column(String)
|
|
zip_code = Column(Integer)
|
|
city_name = Column(String)
|
|
price_at_time = Column(DateTime)
|
|
price = Column(Float)
|
|
scraper_job_id = Column(Integer, ForeignKey('scraper_job.id'))
|
|
product_id = Column(Integer, ForeignKey('product.id'))
|
|
product = relationship("Product", back_populates="price_histories")
|
|
scraper_job = relationship("ScraperJob")
|
|
|
|
class User(Base):
|
|
__tablename__ = 'user'
|
|
id = Column(Integer, primary_key=True)
|
|
username = Column(String)
|
|
credentials = Column(String)
|
|
creation_date = Column(DateTime)
|
|
modification_date = Column(DateTime)
|
|
|
|
class RetailerProduct(Base):
|
|
__tablename__ = 'retailer_product'
|
|
retailer_id = Column(Integer, ForeignKey('retailer.id'), primary_key=True)
|
|
product_id = Column(Integer, ForeignKey('product.id'), primary_key=True)
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
# Create the database engine
|
|
engine = create_engine('sqlite:///user_database.db')
|
|
Base.metadata.create_all(engine)
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
# Create a session factory
|
|
Session = sessionmaker(bind=engine)
|
|
session = Session()
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
import sys
|
|
|
|
# Create a command-line tool that parses sys.argv to allow a user to create/edit/delete user objects.
|
|
|
|
if len(sys.argv) < 2:
|
|
print("Usage: python script.py [create|edit|delete] [username] [credentials]")
|
|
sys.exit(1)
|
|
|
|
command = sys.argv[1]
|
|
|
|
if command == "create":
|
|
if len(sys.argv) < 4:
|
|
print("Usage: python script.py create [username] [credentials]")
|
|
sys.exit(1)
|
|
|
|
username = sys.argv[2]
|
|
credentials = sys.argv[3]
|
|
|
|
# Create a new user object
|
|
new_user = User(username=username, credentials=credentials)
|
|
session.add(new_user)
|
|
session.commit()
|
|
print("User created successfully!")
|
|
|
|
elif command == "edit":
|
|
if len(sys.argv) < 4:
|
|
print("Usage: python script.py edit [username] [new_credentials]")
|
|
sys.exit(1)
|
|
|
|
username = sys.argv[2]
|
|
new_credentials = sys.argv[3]
|
|
|
|
# Find the user object
|
|
user = session.query(User).filter_by(username=username).first()
|
|
|
|
if user:
|
|
# Update user credentials
|
|
user.credentials = new_credentials
|
|
session.commit()
|
|
print("User edited successfully!")
|
|
else:
|
|
print("User not found!")
|
|
|
|
elif command == "delete":
|
|
if len(sys.argv) < 3:
|
|
print("Usage: python script.py delete [username]")
|
|
sys.exit(1)
|
|
|
|
username = sys.argv[2]
|
|
|
|
# Find the user object
|
|
user = session.query(User).filter_by(username=username).first()
|
|
|
|
if user:
|
|
# Delete the user object
|
|
session.delete(user)
|
|
session.commit()
|
|
print("User deleted successfully!")
|
|
else:
|
|
print("User not found!")
|
|
|
|
else:
|
|
print("Invalid command!")
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
from flask import Flask, render_template
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
|
# Create a database connection
|
|
engine = create_engine('sqlite:///user_database.db')
|
|
Session = sessionmaker(bind=engine)
|
|
session = Session()
|
|
|
|
@app.route('/')
|
|
def home():
|
|
# Get all user objects
|
|
users = session.query(User).all()
|
|
return render_template('index.html', users=users)
|
|
|
|
if __name__ == '__main__':
|
|
app.run()
|
|
|