def test_search_string_exsistint_string_return_True(self): ''' поиск существующеего текста в логе ''' text_to_search = '291894706' self.fe = FileExplorer(open, DATA_43_LOG) is_found = self.fe.search_string(text_to_search) self.assertTrue(is_found, 'существующий в логе текст не найден') self.assertEqual(self.fe.cur_line_index, 35419, 'неправильный индекс у найденной строки')
def __init__(self, port): ip = getCurrMachineIp() self.username, self.password = None, None self.socket = zhelper.newServerSocket(zmq.REP, ip, port) self.db = Db("TrackerDB") self.uploader = Uploader(self.socket, self.db) self.downloader = Downloader(self.socket, self.db) self.fileExplorer = FileExplorer(self.socket, self.db)
def get_file_explorer(): # ensure required options if get_config(CONFIG_OPTION_PORT) == None: raise click.BadParameter("Missing option '-p' / '--port'") if get_config(CONFIG_OPTION_BAUD) == None: raise click.BadParameter("Missing option '-b' / '--baud'") port = get_config(CONFIG_OPTION_PORT) if platform.system() == "Windows": port = windows_full_port_name(port) return FileExplorer(port, get_config(CONFIG_OPTION_BAUD))
class ClientHandler: def __init__(self, port): ip = getCurrMachineIp() self.username, self.password = None, None self.socket = zhelper.newServerSocket(zmq.REP, ip, port) self.db = Db("TrackerDB") self.uploader = Uploader(self.socket, self.db) self.downloader = Downloader(self.socket, self.db) self.fileExplorer = FileExplorer(self.socket, self.db) def handleRequest(self): """ syncrounous (blocking) function, waits until receiving an action, handle it and return """ clientRequestInfo = self.socket.recv_json() userToken = clientRequestInfo.get("token") if not self._authenticate(userToken): print("authentication error") return function = clientRequestInfo.get("function") if function == "ls": self.fileExplorer.explore(self.socket, self.username) elif function == "download": fileName = clientRequestInfo.get("fileName") self.uploader.upload(fileName, self.username) elif function == "upload": self.downloader.download() else: print("not correct function: ", function, " should be one of 'download, upload, ls'") self.socket.send_string("Either you don't send a function or it is not a valid function") def _authenticate(self, userToken): if not userToken: print("no user token is supplied: ", userToken) self.socket.send_string("you should provide a token") return False self.username, self.password = decodeToken(userToken) if not self.username: print("can't decode the token: ", userToken) self.socket.send_string("Invalid token") return False return True
def print_200_lines_of_log(server, port, auth, logs_dir, log_file_mask, line_id): ''' Подключается по SFTP к указанному серверу, ищет в указанной папке по указанной маске файлы Ищет в этих файлах первое вхождение указанного идентификатора и печатает -100 строк от него, саму строку и +100 строк от нее server - IP сервера где лежит лог port - SSH порт auth - user / password logs_dir - папка, где лежат файлы log_file_mask - маска путей к лог файлу на основе Unix-wildcards. line-id - уникальный ID для строки в файле, по которому будет производится поиск ''' line_id = str(line_id) trace('Connect to {0}:{1}'.format(server, port)) with Sftp(server, port, auth) as sftp: trace("Search for logs in '{0}' by mask '{1}'".format( logs_dir, log_file_mask)) logs = sftp.search(logs_dir, log_file_mask) if len(logs) == 0: trace('No logs has been found.') return trace('Logs has been found: {0}'.format(len(logs))) for log_path in logs: trace('Open log: {0}'.format(log_path)) with FileExplorer(sftp.open, log_path, 'utf-8') as log: if log.search_string(line_id): trace( "'{0}' string has been found. Print 100 line up and down of it" .format(line_id)) trace('------- start print -------') for line in log.read(201, log.cur_line_index - 101): print(line) trace('------- end print -------') break else: trace("No '{0}' occurrencies has been found.".format( line_id))
class Client: def __init__(self): self.socket = zhelper.newSocket(zmq.REQ, TRACKER_IP, TRACKER_PORTS) self.downloader = Downloader() self.uploader = Uploader() self.fileExplorer = FileExplorer() def listFiles(self, token): files = self.fileExplorer.explore(self.socket, token) print("listFiles: files are") print("\n".join(files)) return files def downloadFile(self, token, fileName, savePathDir="."): downloadedFile = self.downloader.download(self.socket, token, fileName) if (not downloadedFile): return False utils.writeVideo(downloadedFile, f"{savePathDir}/{fileName}_rec.mp4") return downloadedFile def uploadLocalFile(self, token, filePath): return self.uploader.upload(self.socket, token, filePath)
def setUp(self): self.fe = FileExplorer(open, DATA_01_LOG)
class TestFileExplorer(unittest.TestCase): def setUp(self): self.fe = FileExplorer(open, DATA_01_LOG) def tearDown(self): self.fe.close() def test_cur_line_index_iterates_from_0(self): ''' cur_line_index итерируется правильно ''' index = 0 for l in self.fe: index += 1 self.assertEqual(self.fe.cur_line_index, index) def test_read_1_line_return_one_line(self): ''' чтение одной строки''' line = self.fe.read() self.assertEqual( line, '20:10:29.085040 185130259 dqhl gzytdvpprvflrivlle h i') self.assertEqual(self.fe.cur_line_index, 1, '') def test_read_n_lines(self): ''' read возвращает указанное количество строк. ''' lines_to_read = 5 lines = self.fe.read(lines_to_read) self.assertEqual( len(lines), lines_to_read, ) self.assertEqual( lines[0], '20:10:29.085040 185130259 dqhl gzytdvpprvflrivlle h i', 'Первая прочитанная строка не равна строке из файла') self.assertEqual( lines[lines_to_read - 1], '20:10:29.085040 258262132 vzkpk ivvdtpsxlcffehbibvgmjkvq', '{0} строка не равна строке из файла'.format(lines_to_read)) self.assertEqual(self.fe.cur_line_index, lines_to_read, '') def test_seek_line_return_correct_line(self): ''' seek - должен переходить к указанной строке в файле ''' line_to_seek = 21 self.fe.seek(line_to_seek) self.assertEqual(self.fe.cur_line_index, 21, 'cur_line_index неправильный') def test_seek_return_to_previous_line(self): ''' возвращение на уже прочитанную линию ''' lines_to_read = 5 seak_line = 2 self.fe.read(lines_to_read) self.fe.seek(seak_line) self.assertEqual(self.fe.cur_line_index, seak_line, 'курсор не встал на линию {0}'.format(seak_line)) self.assertEqual( self.fe.read(), '20:10:29.085040 987719878 p tiwj puca yhl kt gqqeihc', 'читается неправильная строка') def test_read_n_lines_from_start_pos(self): ''' чтение указанного количества строк, начиная с указанной позиции ''' start_pos = 12 lines_to_read = 5 lines = self.fe.read(lines_to_read, start_pos) self.assertEqual(len(lines), lines_to_read, 'прочитаны не все строки') self.assertEqual( lines[0], '20:10:29.086017 392548458 hcwxu rr doiu mofiansylomvsfi', 'Первая прочитанная строка не равна строке из файла') self.assertEqual( lines[lines_to_read - 1], '20:10:29.086017 858173529 r evgcpe cepkzed daz fddjdecmu', '{0} строка не равна строке из файла'.format(start_pos + lines_to_read)) self.assertEqual(self.fe.cur_line_index, start_pos + lines_to_read, 'после чтения курсор не на той позиции') def test_search_string_exsistint_string_return_True(self): ''' поиск существующеего текста в логе ''' text_to_search = '291894706' self.fe = FileExplorer(open, DATA_43_LOG) is_found = self.fe.search_string(text_to_search) self.assertTrue(is_found, 'существующий в логе текст не найден') self.assertEqual(self.fe.cur_line_index, 35419, 'неправильный индекс у найденной строки') def test_read_till_end_of_file(self): ''' чтение до конца файла ''' self.fe.seek(999) last_line = self.fe.read() self.assertEqual( last_line, '20:10:29.149529 293517476 bmsmbnbbmb pjxvia ghg arvirots', 'Последняя линия прочитана неправильно') self.assertEqual(self.fe.cur_line_index, 1000, 'индекс последней строки (EOF) не верен') self.assertEqual( self.fe.read(), '', 'При чтении в конце файла не возвращается пустой символ') self.assertEqual(self.fe.EOF, True, 'Не проставлен флаг окончания файла') self.assertEqual( self.fe.read(), '', 'При чтении в конце файла не возвращается пустой символ') self.assertEqual( self.fe.cur_line_index, 1000, 'после чтение в конце файла индекс последней строки изменился. Этого быть не должно' ) def test_read_n_lines_more_than_end_of_file(self): ''' чтение строк больше чем есть в файле ''' end_lines = self.fe.read(50, 990) self.assertEqual(len(end_lines), 10, 'Прочитано неверное количество строк') self.assertEqual( end_lines[-1], '20:10:29.149529 293517476 bmsmbnbbmb pjxvia ghg arvirots', 'Последняя строка неверная') def test_read_till_x_return_to_y_and_then_read_till_z_more_than_x(self): ''' Прочитать до Х, затем вернуться до y затем читать до Z > X''' x, y, z = 5, 2, 7 self.fe.read(x) self.fe.seek(y) self.fe.read(z) self.assertEqual(self.fe.cur_line_index, 9)
def __init__(self): self.socket = zhelper.newSocket(zmq.REQ, TRACKER_IP, TRACKER_PORTS) self.downloader = Downloader() self.uploader = Uploader() self.fileExplorer = FileExplorer()
def setupUi(self, DiskStartWidget): DiskStartWidget.setObjectName("DiskStartWidget") DiskStartWidget.resize(1280, 1024) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( DiskStartWidget.sizePolicy().hasHeightForWidth()) DiskStartWidget.setSizePolicy(sizePolicy) DiskStartWidget.setMinimumSize(QtCore.QSize(1280, 1024)) DiskStartWidget.setMaximumSize(QtCore.QSize(1280, 1024)) self.verticalLayoutWidget = QtWidgets.QWidget(DiskStartWidget) self.verticalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 1281, 1021)) self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.backButton = QtWidgets.QPushButton(self.verticalLayoutWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.backButton.sizePolicy().hasHeightForWidth()) self.backButton.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setPointSize(16) self.backButton.setFont(font) self.backButton.setCheckable(False) self.backButton.setChecked(False) self.backButton.setObjectName("backButton") self.horizontalLayout_3.addWidget(self.backButton) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem) self.verticalLayout.addLayout(self.horizontalLayout_3) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.widget = FileExplorer(self.verticalLayoutWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widget.sizePolicy().hasHeightForWidth()) self.widget.setSizePolicy(sizePolicy) self.widget.setObjectName("widget") self.horizontalLayout_2.addWidget(self.widget) self.verticalLayout.addLayout(self.horizontalLayout_2) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.SaveAsPresetButton = QtWidgets.QPushButton( self.verticalLayoutWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.SaveAsPresetButton.sizePolicy().hasHeightForWidth()) self.SaveAsPresetButton.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setPointSize(16) self.SaveAsPresetButton.setFont(font) self.SaveAsPresetButton.setObjectName("SaveAsPresetButton") self.horizontalLayout.addWidget(self.SaveAsPresetButton) self.NextButton = QtWidgets.QPushButton(self.verticalLayoutWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.NextButton.sizePolicy().hasHeightForWidth()) self.NextButton.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setPointSize(16) self.NextButton.setFont(font) self.NextButton.setObjectName("NextButton") self.horizontalLayout.addWidget(self.NextButton) self.verticalLayout.addLayout(self.horizontalLayout) self.retranslateUi(DiskStartWidget) QtCore.QMetaObject.connectSlotsByName(DiskStartWidget)