-
Notifications
You must be signed in to change notification settings - Fork 1
/
collector.py
104 lines (84 loc) · 3.6 KB
/
collector.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
'''Data collector'''
import time
from textwrap import wrap
from selenium import webdriver
from selenium.webdriver.common.by import By
from progress.spinner import Spinner
TEMP = []
# Temporary list for checking duplicates
TEMP_LINES = []
# Генератор стукруты из списка
def generator(data, file, info, indent = ' ' * 4):
'''Generate data from xapi and write data to file'''
colon_finder = [c for c in range(len(data)) if ':' in data[c] or 'Raw' in data[c]]
if colon_finder:
data = data[:colon_finder[0]]
TEMP.append(data)
for i in enumerate(data[1:]):
name = i[1]
# print(i[0], i[1])
compare = i[0]+1 != len(data[1:])
if compare:
my_line = f'{indent*i[0]}class {name}:\n{indent*i[0]}\n'
elif not compare:
info_line = f'\n{indent*i[0]}{indent}'.join(wrap(' '.join(info), 80)) # Wrap string
my_line = f'{indent*i[0]}def {name}():\
\n{indent*i[0]} """{info_line}"""\
\n{indent*i[0]} return "{" ".join(data)}"\n\n'
if my_line not in TEMP_LINES:
TEMP_LINES.append(my_line)
file.write(my_line)
# Запрос перечня ссылок на группы комманд
def xapi_cmd(url='https://roomos.cisco.com/xapi?Product=hopen', output_file_name=None):
'''Get links on command groups'''
with open(f'pyroomos/{output_file_name}', 'w', encoding='utf-8') as file:
driver = webdriver.Chrome()
driver.get(url)
time.sleep(1)
spinner = Spinner('Get data ')
# Пакуем группы команд
reference = driver.find_element(By.CLASS_NAME, 'sub-menu').text.split('\n')
# Перебор xCommand
driver.find_element(
By.CSS_SELECTOR,
"#app > div > form > div.type-buttons.filter > button:nth-child(2)"
).click()
for i in enumerate(reference):
spinner.next()
driver.find_element(
By.XPATH,
f'//a[contains(@href,"/xapi/domain/?domain={reference[i[0]]}")]'
).click()
command_line = [
'.'.join(p) for p in [c.split()[1:] for c in \
[c.text for c in driver.find_elements(By.CLASS_NAME, 'node-path')]]
]
for j in enumerate(command_line):
driver.find_element(
By.XPATH,
f'//a[contains(@href,"/xapi/Command.{command_line[j[0]]}/")]'
).click()
driver.find_element(By.CLASS_NAME, 'switcher').click()
switcher = driver.find_element(
By.CLASS_NAME,
'language-javascript'
).text.split()
info = driver.find_element(By.CLASS_NAME, 'info').text.split()
# try:
# param = driver.find_element(By.CLASS_NAME, 'param').text
# print(f"'''\n{param}\n'''\n\n")
# file.write(f"'''\n{param}\n'''\n\n")
# except:
# pass
# try:
# props = driver.find_element(By.CLASS_NAME, 'props').text
# print(f"'''\n{props}\n'''\n\n")
# file.write(f"'''\n{props}\n'''\n\n")
# except:
# pass
print('REFERENCE:', reference, '\n')
print('INFO:', info, '\n')
generator(data=switcher, file=file, info=info)
if __name__ == '__main__':
xapi_cmd(output_file_name='xCommand.py')
print('\ndone')