|
1 | 1 | from proxy_py import settings
|
2 |
| -from sqlalchemy import create_engine |
3 |
| -from sqlalchemy.ext.declarative import declarative_base |
4 |
| -from sqlalchemy import Column, Integer, String, SmallInteger, UniqueConstraint |
5 |
| -from sqlalchemy.orm import sessionmaker |
| 2 | +import peewee |
| 3 | +import peewee_async |
6 | 4 |
|
| 5 | +db = peewee_async.PooledPostgresqlDatabase( |
| 6 | + *settings.DATABASE_CONNECTION_ARGS, |
| 7 | + **settings.DATABASE_CONNECTION_KWARGS |
| 8 | +) |
7 | 9 |
|
8 |
| -engine = create_engine(*settings.DATABASE_CONNECTION_ARGS, **settings.DATABASE_CONNECTION_KWARGS) |
9 |
| -Base = declarative_base() |
10 |
| -Session = sessionmaker(bind=engine) |
11 | 10 |
|
12 |
| - |
13 |
| -class Proxy(Base): |
14 |
| - __tablename__ = "proxies" |
15 |
| - __table_args__ = ( |
16 |
| - UniqueConstraint("raw_protocol", "auth_data", "domain", "port"), |
17 |
| - ) |
| 11 | +class Proxy(peewee.Model): |
| 12 | + class Meta: |
| 13 | + database = db |
| 14 | + db_table = 'proxies' |
| 15 | + indexes = ( |
| 16 | + (('raw_protocol', 'auth_data', 'domain', 'port'), True), |
| 17 | + ) |
18 | 18 |
|
19 | 19 | PROTOCOLS = (
|
20 | 20 | 'http',
|
21 | 21 | 'socks4',
|
22 | 22 | 'socks5',
|
23 | 23 | )
|
24 | 24 |
|
25 |
| - id = Column(Integer, primary_key=True) |
26 |
| - raw_protocol = Column(SmallInteger, nullable=False) |
27 |
| - domain = Column(String(128), nullable=False) |
28 |
| - port = Column(Integer, nullable=False) |
29 |
| - auth_data = Column(String(64), default="", nullable=False) |
30 |
| - |
31 |
| - checking_period = Column(Integer, default=settings.MIN_PROXY_CHECKING_PERIOD, nullable=False) |
32 |
| - last_check_time = Column(Integer, default=0) |
33 |
| - number_of_bad_checks = Column(Integer, default=0) |
34 |
| - uptime = Column(Integer, nullable=True, default=None) |
35 |
| - bad_uptime = Column(Integer, nullable=True, default=None) |
| 25 | + id = peewee.IntegerField(primary_key=True) |
| 26 | + raw_protocol = peewee.SmallIntegerField(null=False) |
| 27 | + domain = peewee.CharField(settings.DB_MAX_DOMAIN_LENGTH, null=False) |
| 28 | + port = peewee.IntegerField(null=False) |
| 29 | + auth_data = peewee.CharField(settings.DB_AUTH_DATA_MAX_LENGTH, default='', null=False) |
| 30 | + |
| 31 | + checking_period = peewee.IntegerField(default=settings.MIN_PROXY_CHECKING_PERIOD, null=False) |
| 32 | + last_check_time = peewee.IntegerField(default=0, null=False) |
| 33 | + number_of_bad_checks = peewee.IntegerField(default=0, null=False) |
| 34 | + uptime = peewee.IntegerField(default=None, null=True) |
| 35 | + bad_uptime = peewee.IntegerField(default=None, null=True) |
36 | 36 | # in microseconds
|
37 |
| - response_time = Column(Integer, nullable=True, default=None) |
38 |
| - _white_ipv4 = Column(String(16), nullable=True) |
39 |
| - _white_ipv6 = Column(String(16), nullable=True) |
40 |
| - city = Column(String(), nullable=True) |
41 |
| - region = Column(String(), nullable=True) |
42 |
| - country_code = Column(String(3), nullable=True) |
| 37 | + response_time = peewee.IntegerField(default=None, null=True) |
| 38 | + # TODO: consider storing as binary |
| 39 | + _white_ipv4 = peewee.CharField(16, null=True) |
| 40 | + _white_ipv6 = peewee.CharField(45, null=True) |
| 41 | + city = peewee.TextField(null=True) |
| 42 | + region = peewee.TextField(null=True) |
| 43 | + country_code = peewee.CharField(3, null=True) |
43 | 44 |
|
44 | 45 | def get_raw_protocol(self):
|
45 | 46 | return self.raw_protocol
|
@@ -92,36 +93,49 @@ def __str__(self):
|
92 | 93 | __repr__ = __str__
|
93 | 94 |
|
94 | 95 |
|
95 |
| -class ProxyCountItem(Base): |
96 |
| - __tablename__ = "proxy_count_items" |
97 |
| - timestamp = Column(Integer, primary_key=True) |
98 |
| - good_proxies_count = Column(Integer, nullable=False) |
99 |
| - bad_proxies_count = Column(Integer, nullable=False) |
100 |
| - dead_proxies_count = Column(Integer, nullable=False) |
| 96 | +class ProxyCountItem(peewee.Model): |
| 97 | + class Meta: |
| 98 | + database = db |
| 99 | + db_table = 'proxy_count_items' |
101 | 100 |
|
| 101 | + timestamp = peewee.IntegerField(primary_key=True) |
| 102 | + good_proxies_count = peewee.IntegerField(null=False) |
| 103 | + bad_proxies_count = peewee.IntegerField(null=False) |
| 104 | + dead_proxies_count = peewee.IntegerField(null=False) |
102 | 105 |
|
103 |
| -class CollectorState(Base): |
104 |
| - __tablename__ = "collector_states" |
105 |
| - id = Column(Integer, primary_key=True) |
106 |
| - # python module name |
107 |
| - identifier = Column(String, unique=True) |
108 |
| - processing_period = Column(Integer, nullable=False) |
109 |
| - last_processing_time = Column(Integer, nullable=False) |
110 |
| - last_processing_proxies_count = Column(Integer, nullable=False, default=0) |
111 |
| - last_processing_new_proxies_count = Column(Integer, nullable=False, default=0) |
112 |
| - data = Column(String, nullable=True, default=None) |
113 | 106 |
|
| 107 | +class CollectorState(peewee.Model): |
| 108 | + class Meta: |
| 109 | + database = db |
| 110 | + db_table = 'collector_states' |
114 | 111 |
|
115 |
| -Base.metadata.create_all(engine) |
| 112 | + id = peewee.IntegerField(primary_key=True) |
| 113 | + # python module name |
| 114 | + identifier = peewee.TextField(unique=True) |
| 115 | + processing_period = peewee.IntegerField(null=False) |
| 116 | + last_processing_time = peewee.IntegerField(null=False) |
| 117 | + last_processing_proxies_count = peewee.IntegerField(default=0, null=False) |
| 118 | + last_processing_new_proxies_count = peewee.IntegerField(default=0, null=False) |
| 119 | + data = peewee.TextField(default=None, null=True) |
116 | 120 |
|
117 |
| -session = Session() |
| 121 | + |
| 122 | +_silent = True |
| 123 | +Proxy.create_table(_silent) |
| 124 | +ProxyCountItem.create_table(_silent) |
| 125 | +CollectorState.create_table(_silent) |
118 | 126 |
|
119 | 127 |
|
120 | 128 | def get_or_create(session, model, **kwargs):
|
121 |
| - instance = session.query(model).filter_by(**kwargs).first() |
122 |
| - if not instance: |
123 |
| - instance = model(**kwargs) |
124 |
| - session.add(instance) |
125 |
| - session.commit() |
| 129 | + # TODO: do it |
| 130 | + raise NotImplementedError() |
| 131 | + |
| 132 | + # instance = session.query(model).filter_by(**kwargs).first() |
| 133 | + # if not instance: |
| 134 | + # instance = model(**kwargs) |
| 135 | + # session.add(instance) |
| 136 | + # session.commit() |
| 137 | + # |
| 138 | + # return instance |
| 139 | + |
126 | 140 |
|
127 |
| - return instance |
| 141 | +db = peewee_async.Manager(db) |
0 commit comments