Реализован класс TempFolderCleaner для очистки временной папки с логированием; добавлены тесты для проверки функциональности; добавлены настройки для тестирования в VSCode и конфигурация для линтинга кода.
This commit is contained in:
1 parent
d6b9490432
commit
8caa88cce1
4 files changed
+108
-19
No files matched your search
Vendored
+11
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"python.testing.unittestArgs": [
|
||||||
|
"-v",
|
||||||
|
"-s",
|
||||||
|
"./tests",
|
||||||
|
"-p",
|
||||||
|
"*test.py"
|
||||||
|
],
|
||||||
|
"python.testing.pytestEnabled": false,
|
||||||
|
"python.testing.unittestEnabled": true
|
||||||
|
}
|
||||||
+20
-14
@@ -1,18 +1,24 @@
|
|||||||
import os
|
import os
|
||||||
|
import logging
|
||||||
|
|
||||||
def clean_temp_folder():
|
class TempFolderCleaner:
|
||||||
temp_folder = os.environ.get('TEMP')
|
def __init__(self):
|
||||||
if temp_folder:
|
self.temp_folder = os.environ.get('TEMP')
|
||||||
print(f"Cleaning Temp folder: {temp_folder}")
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
||||||
for root, dirs, files in os.walk(temp_folder):
|
|
||||||
for file in files:
|
def clean_temp_folder(self):
|
||||||
try:
|
if self.temp_folder:
|
||||||
os.remove(os.path.join(root, file))
|
logging.info(f"Очистка папки Temp: {self.temp_folder}")
|
||||||
except Exception as e:
|
for root, dirs, files in os.walk(self.temp_folder):
|
||||||
print(f"Error deleting {file}: {e}")
|
for file in files:
|
||||||
print("Temp folder has been cleaned.")
|
try:
|
||||||
else:
|
os.remove(os.path.join(root, file))
|
||||||
print("Temp folder not found.")
|
except Exception as e:
|
||||||
|
logging.error(f"Ошибка при удалении {file}: {e}")
|
||||||
|
logging.info("Папка Temp очищена.")
|
||||||
|
else:
|
||||||
|
logging.warning("Папка Temp не найдена.")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
clean_temp_folder()
|
cleaner = TempFolderCleaner()
|
||||||
|
cleaner.clean_temp_folder()
|
||||||
+52
-5
@@ -1,13 +1,60 @@
|
|||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
from src.main import clean_temp_folder
|
from unittest.mock import patch, MagicMock
|
||||||
|
from src.main import TempFolderCleaner
|
||||||
|
|
||||||
class TestCleanTempFolder(unittest.TestCase):
|
class TestCleanTempFolder(unittest.TestCase):
|
||||||
|
|
||||||
def test_clean_temp_folder(self):
|
@patch('src.main.os.environ.get')
|
||||||
# Здесь можно добавить тесты для проверки работы функции clean_temp_folder
|
@patch('src.main.os.walk')
|
||||||
# Например, можно использовать mock для проверки удаления файлов
|
@patch('src.main.os.remove')
|
||||||
pass
|
def test_clean_temp_folder(self, mock_remove, mock_walk, mock_get_env):
|
||||||
|
# Настройка тестовой среды
|
||||||
|
mock_get_env.return_value = '/mock/temp'
|
||||||
|
mock_walk.return_value = [
|
||||||
|
('/mock/temp', ('subdir',), ('file1.txt', 'file2.txt')),
|
||||||
|
('/mock/temp/subdir', (), ('file3.txt',))
|
||||||
|
]
|
||||||
|
|
||||||
|
cleaner = TempFolderCleaner()
|
||||||
|
cleaner.clean_temp_folder()
|
||||||
|
|
||||||
|
# Проверка, что os.remove был вызван для каждого файла
|
||||||
|
mock_remove.assert_any_call('/mock/temp/file1.txt')
|
||||||
|
mock_remove.assert_any_call('/mock/temp/file2.txt')
|
||||||
|
mock_remove.assert_any_call('/mock/temp/subdir/file3.txt')
|
||||||
|
self.assertEqual(mock_remove.call_count, 3)
|
||||||
|
|
||||||
|
@patch('src.main.os.environ.get')
|
||||||
|
@patch('src.main.os.walk')
|
||||||
|
@patch('src.main.os.remove')
|
||||||
|
def test_clean_temp_folder_with_errors(self, mock_remove, mock_walk, mock_get_env):
|
||||||
|
# Настройка тестовой среды
|
||||||
|
mock_get_env.return_value = '/mock/temp'
|
||||||
|
mock_walk.return_value = [
|
||||||
|
('/mock/temp', ('subdir',), ('file1.txt', 'file2.txt')),
|
||||||
|
('/mock/temp/subdir', (), ('file3.txt',))
|
||||||
|
]
|
||||||
|
mock_remove.side_effect = [None, Exception("Ошибка удаления"), None]
|
||||||
|
|
||||||
|
cleaner = TempFolderCleaner()
|
||||||
|
cleaner.clean_temp_folder()
|
||||||
|
|
||||||
|
# Проверка, что os.remove был вызван для каждого файла и обработка ошибок
|
||||||
|
mock_remove.assert_any_call('/mock/temp/file1.txt')
|
||||||
|
mock_remove.assert_any_call('/mock/temp/file2.txt')
|
||||||
|
mock_remove.assert_any_call('/mock/temp/subdir/file3.txt')
|
||||||
|
self.assertEqual(mock_remove.call_count, 3)
|
||||||
|
|
||||||
|
@patch('src.main.os.environ.get')
|
||||||
|
def test_temp_folder_not_found(self, mock_get_env):
|
||||||
|
# Настройка тестовой среды
|
||||||
|
mock_get_env.return_value = None
|
||||||
|
|
||||||
|
cleaner = TempFolderCleaner()
|
||||||
|
with self.assertLogs(level='WARNING') as log:
|
||||||
|
cleaner.clean_temp_folder()
|
||||||
|
self.assertIn('Папка Temp не найдена.', log.output[0])
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
name: Lint Code Base
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install flake8
|
||||||
|
|
||||||
|
- name: Run flake8
|
||||||
|
run: |
|
||||||
|
flake8 src/ tests/
|
||||||
Reference in new issue
Block a user