Files

166 lines
4.7 KiB
Python
Raw Permalink Normal View History

2023-05-24 14:44:55 -07:00
import sqlalchemy
2023-05-24 17:04:30 -04:00
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Float, DateTime
2023-05-24 14:44:55 -07:00
from sqlalchemy.orm import declarative_base
2023-05-24 17:04:30 -04:00
from sqlalchemy.orm import relationship, sessionmaker
import sys
from flask import Flask, render_template
# Create the Flask application
app = Flask(__name__)
# Create the database engine
engine = create_engine('sqlite:///scraper_design.db')
# Create a session factory
Session = sessionmaker(bind=engine)
# Create a base class
Base = declarative_base()
# Define the product class
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")
# Define the retailer class
class Retailer(Base):
__tablename__ = 'retailer'
id = Column(Integer, primary_key=True)
name = Column(String)
products = relationship("Product", secondary="retailer_product")
# Define the price class
class Price(Base):
__tablename__ = 'price'
id = Column(Integer, primary_key=True)
MOQ = Column(Integer)
price = Column(Float)
# Define the scraperjob class
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)
# Define the price history class
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")
# Define the user class
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)
2023-05-24 14:44:55 -07:00
def __str__(self):
return f"{self.id=} {self.username=} {self.creation_date=} {self.modification_date=}"
2023-05-24 17:04:30 -04:00
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)
# Create the database tables
Base.metadata.create_all(engine)
2023-05-24 14:44:55 -07:00
@app.route('/')
def homepage():
# Create a session
session = Session()
# Get all the classes from SQLAlchemy
classes = Base.__subclasses__()
statement = sqlalchemy.select(User)
users = session.scalars(statement).all()
# Render the template with the classes
return render_template('test3.html', classes=classes, users=users)
2023-05-24 17:04:30 -04:00
# Create command-line arguments for the user class
def main():
if len(sys.argv) < 2:
2023-05-24 14:44:55 -07:00
app.run()
2023-05-24 17:04:30 -04:00
command = sys.argv[1]
if command == "create":
if len(sys.argv) != 3:
print("Usage: python user_tool.py create [username]")
return
username = sys.argv[2]
# Create a new user object
user = User(username=username)
# Add the user to the database
session = Session()
session.add(user)
session.commit()
print("User created successfully.")
elif command == "edit":
if len(sys.argv) != 4:
print("Usage: python user_tool.py edit [user_id] [new_username]")
return
user_id = int(sys.argv[2])
new_username = sys.argv[3]
# Retrieve the user from the database
session = Session()
user = session.query(User).get(user_id)
if user:
# Update the user object
user.username = new_username
session.commit()
print("User updated successfully.")
else:
print("User not found.")
elif command == "delete":
if len(sys.argv) != 3:
print("Usage: python user_tool.py delete [user_id]")
return
user_id = int(sys.argv[2])
# Retrieve the user from the database
session = Session()
user = session.query(User).get(user_id)
if user:
# Delete the user from the database
session.delete(user)
session.commit()
print("User deleted successfully.")
else:
print("User not found.")
else:
2023-05-24 14:44:55 -07:00
print("Usage: python user_tool.py [create|edit|delete]")
return
2023-05-24 17:04:30 -04:00
if __name__ == "__main__":
2023-05-24 14:44:55 -07:00
main()