class DjangoSource(ProxySource):
source_type = 'django_model'
def load(self):
"""
Load proxy list from specified source and validate loaded data.
Each server could be in two forms:
* simple: "server:port"
* complex: "server:port:user:pwd"
"""
now = datetime.now()
expired = now + timedelta(seconds=self.read_timeout)
query = Proxy.objects.filter(Q(expiration=None) | Q(expiration__gt=expired))
lines = u"\n".join([unicode(p) for p in query])
self.read_time = time.time()
self.server_list = self.get_server_list(lines)
self.server_list_iterator = itertools.cycle(self.server_list)
class DjangoProxyList(ProxyList):
def __init__(self, proxy_type='http', **kwargs):
self.init_kwargs = deepcopy(kwargs)
self.source = DjangoSource('django', proxy_type=proxy_type, **kwargs)
self.source.load()
self.filter_config = {}
self.geoip_resolver = None
def get_random(self):
"""
Return random server from the list
"""
if self.source.reload():
self.apply_filter()
if self.source.server_list:
return choice(self.source.server_list)