Skip to content

Commit e3743d2

Browse files
author
pgaref
committed
A second Enum approach #32 without Metaclass compatible with Python 2 and 3
1 parent 9ab1a91 commit e3743d2

File tree

6 files changed

+55
-41
lines changed

6 files changed

+55
-41
lines changed

http_request_randomizer/requests/parsers/FreeProxyParser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def create_proxy_object(self, dataset):
6161
elif field[0] == 'Port':
6262
port = field[1].strip() # String strip()
6363
elif field[0] == 'Anonymity':
64-
anonymity = AnonymityLevel(field[1].strip()) # String strip()
64+
anonymity = AnonymityLevel.get(field[1].strip()) # String strip()
6565
elif field[0] == 'Country':
6666
country = field[1].strip() # String strip()
6767
return ProxyObject(source=self.id, ip=ip, port=port, anonymity_level=anonymity, country=country)

http_request_randomizer/requests/parsers/ProxyForEuParser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def create_proxy_object(self, dataset):
6464
elif field[0] == 'Port':
6565
port = field[1].strip() # String strip()
6666
elif field[0] == 'Anon':
67-
anonymity = AnonymityLevel(field[1].strip()) # String strip()
67+
anonymity = AnonymityLevel.get(field[1].strip()) # String strip()
6868
elif field[0] == 'Country':
6969
country = field[1].strip() # String strip()
7070
return ProxyObject(source=self.id, ip=ip, port=port, anonymity_level=anonymity, country=country)

http_request_randomizer/requests/parsers/RebroWeeblyParser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def create_proxy_object(self, dataset):
6464
port = dataset.split(":")[1]
6565
# TODO: Parse extra tables and combine data - Provider seems to be out-of-date
6666
country = "Unknown"
67-
anonymity = AnonymityLevel("unknown")
67+
anonymity = AnonymityLevel.get("unknown")
6868

6969
return ProxyObject(source=self.id, ip=ip, port=port, anonymity_level=anonymity, country=country)
7070

http_request_randomizer/requests/parsers/SamairProxyParser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def create_proxy_object(self, row):
9090
return None
9191
port = text.split(":")[1]
9292
elif td_row.attrs['data-label'] == 'Anonymity Type: ':
93-
anonymity = AnonymityLevel(td_row.text.strip())
93+
anonymity = AnonymityLevel.get(td_row.text.strip())
9494
elif td_row.attrs['data-label'] == 'Country: ':
9595
country = td_row.text.strip()
9696
return ProxyObject(source=self.id, ip=ip, port=port, anonymity_level=anonymity, country=country)

http_request_randomizer/requests/proxy/ProxyObject.py

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from enum import EnumMeta, Enum
1+
from enum import Enum
22

33

44
class ProxyObject(object):
@@ -37,34 +37,48 @@ def to_str(self):
3737
self.tunnel)
3838

3939

40-
class AnonymityEnumMeta(EnumMeta):
41-
def __call__(cls, value, *args, **kw):
42-
if isinstance(value, str):
43-
# map string Alias to enum values, defaults to Unknown
44-
value = {
45-
'transparent': 1,
46-
'transparent proxy': 1,
47-
'LOW': 1,
48-
'anonymous': 2,
49-
'anonymous proxy': 2,
50-
'high-anonymous': 2,
51-
'elite': 3,
52-
'elite proxy': 3,
53-
'HIGH': 3
54-
}.get(value, 0)
55-
return super(AnonymityEnumMeta, cls).__call__(value, *args, **kw)
40+
# class AnonymityEnumMeta(EnumMeta):
41+
# def __call__(cls, value, *args, **kw):
42+
# if isinstance(value, str):
43+
# # map string Alias to enum values, defaults to Unknown
44+
# value = {
45+
# 'transparent': 1,
46+
# 'transparent proxy': 1,
47+
# 'LOW': 1,
48+
# 'anonymous': 2,
49+
# 'anonymous proxy': 2,
50+
# 'high-anonymous': 2,
51+
# 'elite': 3,
52+
# 'elite proxy': 3,
53+
# 'HIGH': 3
54+
# }.get(value, 0)
55+
# return super(AnonymityEnumMeta, cls).__call__(value, *args, **kw)
5656

5757

5858
class AnonymityLevel(Enum):
59-
__metaclass__ = AnonymityEnumMeta
59+
# __metaclass__ = AnonymityEnumMeta
6060
"""
6161
UNKNOWN: The proxy anonymity capabilities are not exposed
6262
TRANSPARENT: The proxy does not hide the requester's IP address.
6363
ANONYMOUS: The proxy hides the requester's IP address, but adds headers to the forwarded request that make it clear
6464
that the request was made using a proxy.
6565
ELITE: The proxy hides the requester's IP address and does not add any proxy-related headers to the request.
6666
"""
67-
UNKNOWN = 0 # default
68-
TRANSPARENT = 1
69-
ANONYMOUS = 2
70-
ELITE = 3
67+
UNKNOWN = 0 # default
68+
TRANSPARENT = 1, 'transparent', 'transparent proxy', 'LOW'
69+
ANONYMOUS = 2, 'anonymous', 'anonymous proxy', 'high-anonymous'
70+
ELITE = 3, 'elite', 'elite proxy', 'HIGH'
71+
72+
def __new__(cls, int_value, *value_aliases):
73+
obj = object.__new__(cls)
74+
obj._value_ = int_value
75+
for alias in value_aliases:
76+
cls._value2member_map_[alias] = obj
77+
return obj
78+
79+
@classmethod
80+
def get(cls, name):
81+
try:
82+
return cls(name)
83+
except ValueError:
84+
return cls.UNKNOWN

tests/test_proxyObject.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,27 @@ def test_AnonymityLevels(self):
1919
self.assertTrue(len(AnonymityLevel) == 4) # Enum values
2020

2121
def test_UnknownEnumLevel(self):
22-
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel('unknown'))
23-
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel('none'))
24-
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel('bad'))
25-
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel(''))
26-
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel('*'))
27-
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel('??'))
22+
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel.get('unknown'))
23+
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel.get('none'))
24+
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel.get('bad'))
25+
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel.get(''))
26+
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel.get('*'))
27+
self.assertEqual(AnonymityLevel.UNKNOWN, AnonymityLevel.get('??'))
2828

2929
def test_TransparentEnumLevel(self):
30-
self.assertEqual(AnonymityLevel.TRANSPARENT, AnonymityLevel('transparent'))
31-
self.assertEqual(AnonymityLevel.TRANSPARENT, AnonymityLevel('transparent proxy'))
32-
self.assertEqual(AnonymityLevel.TRANSPARENT, AnonymityLevel('LOW'))
30+
self.assertEqual(AnonymityLevel.TRANSPARENT, AnonymityLevel.get('transparent'))
31+
self.assertEqual(AnonymityLevel.TRANSPARENT, AnonymityLevel.get('transparent proxy'))
32+
self.assertEqual(AnonymityLevel.TRANSPARENT, AnonymityLevel.get('LOW'))
3333

3434
def test_AnonymousEnumLevel(self):
35-
self.assertEqual(AnonymityLevel.ANONYMOUS, AnonymityLevel('anonymous'))
36-
self.assertEqual(AnonymityLevel.ANONYMOUS, AnonymityLevel('anonymous proxy'))
37-
self.assertEqual(AnonymityLevel.ANONYMOUS, AnonymityLevel('high-anonymous'))
35+
self.assertEqual(AnonymityLevel.ANONYMOUS, AnonymityLevel.get('anonymous'))
36+
self.assertEqual(AnonymityLevel.ANONYMOUS, AnonymityLevel.get('anonymous proxy'))
37+
self.assertEqual(AnonymityLevel.ANONYMOUS, AnonymityLevel.get('high-anonymous'))
3838

3939
def test_EliteEnumLevel(self):
40-
self.assertEqual(AnonymityLevel.ELITE, AnonymityLevel('elite'))
41-
self.assertEqual(AnonymityLevel.ELITE, AnonymityLevel('elite proxy'))
42-
self.assertEqual(AnonymityLevel.ELITE, AnonymityLevel('HIGH'))
40+
self.assertEqual(AnonymityLevel.ELITE, AnonymityLevel.get('elite'))
41+
self.assertEqual(AnonymityLevel.ELITE, AnonymityLevel.get('elite proxy'))
42+
self.assertEqual(AnonymityLevel.ELITE, AnonymityLevel.get('HIGH'))
4343

4444

4545
if __name__ == '__main__':

0 commit comments

Comments
 (0)