@@ -16,24 +16,23 @@ class Reader:
16
16
_meta = {}
17
17
data = b""
18
18
19
- file = False
20
- file_size = 0
19
+ _file_size = 0
21
20
22
21
_v4offset = 0
23
22
_v6offsetCache = {}
24
23
25
24
def __init__ (self , name ):
26
- self . file = open (name , "rb" )
27
- self .data = self . file .read ()
28
- self .file_size = len (self .data )
25
+ file = open (name , "rb" )
26
+ self .data = file .read ()
27
+ self ._file_size = len (self .data )
29
28
30
29
meta_length = bytes2long (self .data [0 ], self .data [1 ], self .data [2 ], self .data [3 ])
31
30
meta = json .loads (self .data [4 :meta_length + 4 ])
32
31
33
32
self ._meta = MetaData (** meta )
34
33
if len (self ._meta .languages ) == 0 or len (self ._meta .fields ) == 0 :
35
34
raise DatabaseError ("database meta error" )
36
- if self .file_size != (4 + meta_length + self ._meta .total_size ):
35
+ if self ._file_size != (4 + meta_length + self ._meta .total_size ):
37
36
raise DatabaseError ("database size error" )
38
37
39
38
self .data = self .data [4 + meta_length :]
@@ -49,7 +48,7 @@ def _find_node(self, ip):
49
48
else :
50
49
bit_count = 32
51
50
52
- i = 0
51
+ idx = 0
53
52
node = 0
54
53
key = ip .packed [0 :2 ]
55
54
if bit_count == 32 :
@@ -67,27 +66,28 @@ def _find_node(self, ip):
67
66
else :
68
67
val = self ._v6offsetCache .get (key , - 1 )
69
68
if val > - 1 :
70
- i = 16
69
+ idx = 16
71
70
node = val
72
71
73
- while i < bit_count :
72
+ while idx < bit_count :
74
73
if node > self ._meta .node_count :
75
74
break
76
- node = self ._read_node (node , (1 & (ip .packed [i >> 3 ] >> 7 - (i % 8 ))))
77
- i += 1
78
- if i == 16 :
75
+ node = self ._read_node (node , (1 & (ip .packed [idx >> 3 ] >> 7 - (idx % 8 ))))
76
+ idx += 1
77
+ if idx == 16 :
79
78
self ._v6offsetCache [key ] = node
80
-
79
+
81
80
if node > self ._meta .node_count :
82
81
return node
83
82
elif node == self ._meta .node_count :
84
83
return 0
85
-
86
- return None
84
+ raise DatabaseError ("database is error" )
87
85
88
86
def _resolve (self , node ):
89
87
resolved = node - self ._meta .node_count + self ._meta .node_count * 8
90
88
size = bytes2long (0 , 0 , self .data [resolved ], self .data [resolved + 1 ])
89
+ if (resolved + 2 + size ) > len (self .data ):
90
+ raise DatabaseError ("database is error" )
91
91
return self .data [resolved + 2 :resolved + 2 + size ]
92
92
93
93
def find (self , addr , language = "CN" ):
0 commit comments