add autoLoader
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
from autoLoader.loader.connector import *
|
||||
from autoLoader.loader.loader import *
|
||||
@@ -0,0 +1,53 @@
|
||||
from autoLoader.config import SFTP_HOSTNAME, SFTP_USERNAME, SFTP_PASSWORD
|
||||
|
||||
|
||||
import socket
|
||||
def check_connection():
|
||||
"""Проверка доступности сервера"""
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.settimeout(10)
|
||||
|
||||
try:
|
||||
result = sock.connect_ex((SFTP_HOSTNAME, 22))
|
||||
if result == 0:
|
||||
print("Порт 22 доступен")
|
||||
else:
|
||||
print(f"Порт 22 недоступен. Код ошибки: {result}")
|
||||
except Exception as e:
|
||||
print(f"Ошибка проверки соединения: {e}")
|
||||
finally:
|
||||
sock.close()
|
||||
|
||||
# Перед подключением вызовите проверку
|
||||
# check_connection()
|
||||
|
||||
import paramiko
|
||||
class ConnectorSFTP():
|
||||
def __init__(self):
|
||||
self.sftp = None
|
||||
self.ssh = paramiko.SSHClient()
|
||||
|
||||
def connect(self, remote_path: str):
|
||||
try:
|
||||
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
self.ssh.connect(
|
||||
hostname=SFTP_HOSTNAME,
|
||||
username=SFTP_USERNAME,
|
||||
password=SFTP_PASSWORD,
|
||||
)
|
||||
self.sftp = self.ssh.open_sftp()
|
||||
remote_path = remote_path.lstrip('/') # Удаляем начальный слэш, если есть
|
||||
self.sftp.chdir(remote_path) # Переходим в директори
|
||||
|
||||
except paramiko.AuthenticationException:
|
||||
print("Ошибка аутентификации. Проверьте имя пользователя и пароль.")
|
||||
return None, None
|
||||
except paramiko.SSHException as e:
|
||||
print(f"Ошибка SSH: {e}")
|
||||
return None, None
|
||||
except FileNotFoundError:
|
||||
print(f"Директория {remote_path} не найдена на сервере.")
|
||||
return None, None
|
||||
except IOError as e:
|
||||
print(f"Ошибка ввода-вывода: {e}")
|
||||
return None, None
|
||||
@@ -0,0 +1,58 @@
|
||||
from autoLoader.config import FILESAPTH
|
||||
from autoLoader.loader import ConnectorSFTP
|
||||
import datetime, os
|
||||
from autoLoader.database import *
|
||||
|
||||
local_path = os.path.join(os.getcwd(), FILESAPTH)
|
||||
class Loader():
|
||||
def __init__(self):
|
||||
self.call_types = ['in']
|
||||
pass
|
||||
|
||||
def filter_call(self, filename: str):
|
||||
if filename.split("-")[0] in self.call_types:
|
||||
return True
|
||||
return False
|
||||
|
||||
def load(self):
|
||||
|
||||
date_now = datetime.datetime.now()# - datetime.timedelta(days=1)
|
||||
remote_path = f"/{date_now.strftime('%Y/%m/%d')}"
|
||||
|
||||
connector = ConnectorSFTP()
|
||||
connector.connect(remote_path=remote_path)
|
||||
|
||||
sftp_client = connector.sftp
|
||||
ssh_client = connector.ssh
|
||||
|
||||
if sftp_client is None or ssh_client is None:
|
||||
print("Не удалось подключиться к SFTP. Завершение работы.")
|
||||
exit(1)
|
||||
|
||||
db = get_db()
|
||||
|
||||
try:
|
||||
listdir = sftp_client.listdir()
|
||||
os.makedirs(local_path, exist_ok = True)
|
||||
diskdir = os.listdir(local_path)
|
||||
|
||||
for file in listdir:
|
||||
if self.filter_call(filename=file):
|
||||
remote_file = f"{file}".lstrip('/')
|
||||
filepath = os.path.join(local_path, file)
|
||||
try:
|
||||
sftp_client.get(remote_file, filepath) # Скачиваем файл
|
||||
audio = Audio()
|
||||
audio.index_date = datetime.datetime.now()
|
||||
audio.filename = file
|
||||
db.session.add(audio)
|
||||
db.session.commit()
|
||||
|
||||
print(f"Скачан файл: {remote_file}")
|
||||
except Exception as e:
|
||||
print(f"Ошибка при скачивании файла {remote_file}: {e}")
|
||||
|
||||
finally:
|
||||
# Закрываем соединения
|
||||
sftp_client.close()
|
||||
ssh_client.close()
|
||||
Reference in New Issue
Block a user