diff --git a/harvester/db/__init__.py b/harvester/db/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/harvester/db/models.py b/harvester/db/models.py new file mode 100644 index 0000000..d6b834a --- /dev/null +++ b/harvester/db/models.py @@ -0,0 +1,25 @@ +# harvester/db/models.py + +from sqlalchemy import Column, Integer, String, DateTime +from sqlalchemy.ext.declarative import declarative_base + +Base = declarative_base() + + +class Proxy(Base): + __tablename__ = 'proxies' + + id = Column(Integer, primary_key=True) + host = Column(String, nullable=False) + port = Column(Integer, nullable=False) + asn = Column(String) + egress_ip = Column(String) + egress_asn = Column(String) + date_added = Column(DateTime, nullable=False) + date_validated = Column(DateTime) + + def __repr__(self): + return ( + f'Proxy(id={self.id}, host={self.host}, port={self.port}, ' + f'egress={self.egress}, created_at={self.created_at})' + ) diff --git a/harvester/db/session.py b/harvester/db/session.py new file mode 100644 index 0000000..34b5c1d --- /dev/null +++ b/harvester/db/session.py @@ -0,0 +1,28 @@ +# harvester/db/session.py + +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + + +class SessionFactory: + def __init__(self, engine_url): + self.engine = create_engine(engine_url) + self.Session = sessionmaker(bind=self.engine) + + def create_session(self): + return self.Session() + + +# Create a singleton instance of the SessionFactory +session_factory = None + + +def get_session_factory(engine_url): + global session_factory + if session_factory is None: + session_factory = SessionFactory(engine_url) + return session_factory + + +def get_session(engine_url): + return get_session_factory(engine_url).create_session() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 10e8710..8f0cbbb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ requests -requests[socks] \ No newline at end of file +requests[socks] +sqlalchemy \ No newline at end of file