Реализован класс TempFolderCleaner для очистки временной папки с логированием; добавлены тесты для проверки функциональности; добавлены настройки для тестирования в VSCode и конфигурация для линтинга кода.

This commit is contained in:
kromskii2 committed 2025-01-29 00:08:05 +07:00
1 parent d6b9490432
commit 8caa88cce1
4 files changed
+108 -19

No files matched your search

+11
View File
@@ -0,0 +1,11 @@
{
"python.testing.unittestArgs": [
"-v",
"-s",
"./tests",
"-p",
"*test.py"
],
"python.testing.pytestEnabled": false,
"python.testing.unittestEnabled": true
}
+20 -14
View File
@@ -1,18 +1,24 @@
import os
import logging
def clean_temp_folder():
temp_folder = os.environ.get('TEMP')
if temp_folder:
print(f"Cleaning Temp folder: {temp_folder}")
for root, dirs, files in os.walk(temp_folder):
for file in files:
try:
os.remove(os.path.join(root, file))
except Exception as e:
print(f"Error deleting {file}: {e}")
print("Temp folder has been cleaned.")
else:
print("Temp folder not found.")
class TempFolderCleaner:
def __init__(self):
self.temp_folder = os.environ.get('TEMP')
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def clean_temp_folder(self):
if self.temp_folder:
logging.info(f"Очистка папки Temp: {self.temp_folder}")
for root, dirs, files in os.walk(self.temp_folder):
for file in files:
try:
os.remove(os.path.join(root, file))
except Exception as e:
logging.error(f"Ошибка при удалении {file}: {e}")
logging.info("Папка Temp очищена.")
else:
logging.warning("Папка Temp не найдена.")
if __name__ == "__main__":
clean_temp_folder()
cleaner = TempFolderCleaner()
cleaner.clean_temp_folder()
+52 -5
View File
@@ -1,13 +1,60 @@
import os
import unittest
from src.main import clean_temp_folder
from unittest.mock import patch, MagicMock
from src.main import TempFolderCleaner
class TestCleanTempFolder(unittest.TestCase):
def test_clean_temp_folder(self):
# Здесь можно добавить тесты для проверки работы функции clean_temp_folder
# Например, можно использовать mock для проверки удаления файлов
pass
@patch('src.main.os.environ.get')
@patch('src.main.os.walk')
@patch('src.main.os.remove')
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__':
unittest.main()
+25
View File
@@ -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/