Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions namer/configuration_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import os
import random
import re
import sys
import tempfile
from configparser import ConfigParser
from datetime import timedelta
Expand Down Expand Up @@ -167,3 +168,10 @@ def default_config() -> NamerConfig:
default_locations = [Path("./namer.cfg")]
config.read(default_locations)
return from_config(config)


def configure_logging_verifier(configuration: NamerConfig, formatter: PartialFormatter) -> bool:
logger.remove()
logger.add(sys.stdout, format="{time} {level} {message}", level="INFO", diagnose=False)
logger.info(str(configuration))
return verify_configuration(configuration, formatter)
77 changes: 65 additions & 12 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ Pillow = "^9.1.1"
requests-cache = "^0.9.4"
ffmpeg-python = "^0.2.0"
ImageHash = "^4.2.1"
dependency-injector = "^4.39.1"

[tool.poetry.dev-dependencies]
pytest = "^7.0.0"
Expand Down
95 changes: 95 additions & 0 deletions test/namer_container_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
from pathlib import Path
import shutil
import unittest

from namer.filenameparts import parse_file_name
from namer.ffmpeg import ffprobe
from namer.name_formatter import PartialFormatter
from namer.configuration_utils import default_config, configure_logging_verifier

from test.utils import environment

from dependency_injector import containers, providers


class Services(containers.DeclarativeContainer):

# Namer's external configuration - perhaps redundant or highly coupled, or both
namer_configuration = providers.Singleton(
default_config
)

# The formatter that can convert FileNameParts to a full name
name_formatter = providers.Singleton(
PartialFormatter
)

properly_configured = providers.Singleton(
configure_logging_verifier,
configuration=namer_configuration,
formatter=name_formatter,
)


class WorkItem(containers.DeclarativeContainer):

config = providers.Configuration()

services = providers.Container(
Services,
)

target_file = providers.Singleton(
str,
config.get("file")
)

target_path = providers.Singleton(
Path,
target_file
)

ffprobe_results = providers.Singleton(
ffprobe,
target_path
)

file_name_parts = providers.Singleton(
parse_file_name,
filename=target_file,
# TODO: regex_config=services.namer_configuration.name_parser
)


class UnitTestAsTheDefaultExecution(unittest.TestCase):
"""
Always test first.
"""
def test_get_resolution(self):
with environment() as (tempdir, _parrot, config):
container = Services()
container.namer_configuration.override(providers.Object(config))
for provider in container.traverse():
print(provider)
print(container)

container.load_config()
container.check_dependencies()
container.init_resources()

self.assertTrue(container.properly_configured())
item_container = WorkItem()

test_dir = Path(__file__).resolve().parent
target_file = (tempdir / "DorcelClub - 2021-12-23 - Aya.Benetti.Megane.Lopez.And.Bella.Tina.mp4")
shutil.copy(test_dir / "Site.22.01.01.painful.pun.XXX.720p.xpost.mp4", target_file)

item_container = WorkItem()
item_container.assign_parent(container)
item_container.target_file.override(providers.Object(str(target_file)))
ffprobe_results = item_container.ffprobe_results()
file_name_parts = item_container.file_name_parts()
self.assertIsNotNone(ffprobe_results)
self.assertIsNotNone(file_name_parts)

print("okay")
8 changes: 8 additions & 0 deletions test/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,14 @@ def environment(config: NamerConfig = sample_config()):
with tempfile.TemporaryDirectory(prefix="test") as tmpdir:
with FakeTPDB() as fakeTpdb:
tempdir = Path(tmpdir)
config.watch_dir = tempdir / "watch"
config.watch_dir.mkdir(parents=True, exist_ok=True)
config.failed_dir = tempdir / "failed"
config.failed_dir.mkdir(parents=True, exist_ok=True)
config.dest_dir = tempdir / "dest"
config.dest_dir.mkdir(parents=True, exist_ok=True)
config.work_dir = tempdir / "working"
config.work_dir.mkdir(parents=True, exist_ok=True)
config.override_tpdb_address = fakeTpdb.get_url()
yield tempdir, fakeTpdb, config

Expand Down