Skip to content

Commit e45f429

Browse files
committed
re-write vid_file_vendor(). Now consistant for description and no description.
code is more readable, uses less calls to random, and should be more consistant and reliable as far as speed goes.
1 parent aaa8054 commit e45f429

2 files changed

Lines changed: 31 additions & 32 deletions

File tree

generate_mac/__init__.py

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -146,45 +146,44 @@ def vid_file_random(vid_file):
146146
return(output)
147147

148148
def vid_file_vendor(vid_file,vendor,desc=None):
149-
'''Generates a random MAC from a specified vendor name. Takes three parameters. file name, vendor name, and description which is optional. description can be a partial match'''
149+
'''Generates a random MAC from a specified vendor name. Takes three parameters. file name, vendor name, and description(optional). description can be a partial match'''
150150
file_lines = generate_mac._read_vid_file(vid_file)
151151

152152
line_vendor = ""
153153
vid_bytes = ""
154-
file_desc = "" # description from file
154+
file_desc = ""
155155
rand_line = ""
156156
# If the vendor is not in vendor list, throw an error, otherwise
157-
# function will hang
158-
if vendor not in generate_mac._valid_vendors:
159-
raise KeyError(vendor + " has no associated VID byte in manuf file")
160-
if desc == None:
161-
while line_vendor != vendor:
162-
# Get a random line from the file, and then proccess
163-
rand_line = file_lines[ random.randrange( len(file_lines) ) ]
164-
rand_line = generate_mac._get_processed_vid(rand_line)
165-
# Fill in the blanks
166-
if len(rand_line) == 4:
167-
vid_bytes,bytes_needed,line_vendor,file_desc = rand_line
168-
elif len(rand_line) == 3:
169-
vid_bytes,bytes_needed,line_vendor = rand_line
157+
# function will hang if vendor not in
158+
# generate_mac._valid_vendors: raise KeyError(vendor + " has no
159+
# associated VID byte in manuf file")
170160

171-
else:
172-
search_lines = []
173-
for line in file_lines:
174-
line = generate_mac._get_processed_vid(line)
175-
if len(line) == 4:
176-
vid_bytes,bytes_needed,line_vendor,file_desc = line
177-
else:
178-
continue
179-
180-
if line_vendor.lower() == vendor.lower() and desc.lower() in file_desc.lower():
181-
search_lines.append(line)
182-
183-
if len(search_lines) == 0:
184-
raise KeyError("No such description with " + vendor + " in file")
185-
186-
rand_line = search_lines[ random.randrange( len(search_lines) ) ]
187-
vid_bytes,bytes_needed,line_vendor,file_desc = rand_line
161+
search_lines = []
162+
for line in file_lines:
163+
line = generate_mac._get_processed_vid(line)
164+
# split the line into named variables. for formating see above fuction _get_processed_vid()
165+
if len(line) == 4:
166+
vid_bytes,bytes_needed,line_vendor,file_desc = line
167+
elif len(line) == 3:
168+
vid_bytes,bytes_needed,line_vendor = line
169+
else:
170+
continue
171+
172+
# Compile a list of matching lines into search_lines. use description if its present
173+
if desc == None and vendor.lower() == line_vendor.lower():
174+
search_lines.append(line)
175+
elif desc == None:
176+
continue
177+
elif desc.lower() in file_desc.lower() and vendor.lower() == line_vendor.lower():
178+
search_lines.append(line)
179+
else:
180+
continue
181+
182+
# If there are no search_lines, there are no matches, raise error
183+
if len(search_lines) == 0:
184+
raise KeyError("No Match Vendor: " + vendor + " Desc: " + str(desc))
185+
rand_line = search_lines[ random.randrange( len(search_lines) ) ]
186+
vid_bytes,bytes_needed,line_vendor,file_desc = rand_line
188187

189188
# Now generate the random device bytes
190189
bytes_needed = rand_line[1] //2
-5.77 KB
Binary file not shown.

0 commit comments

Comments
 (0)