mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-09 03:31:28 +00:00
60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
import json
|
|
import os
|
|
from abc import abstractmethod
|
|
from typing import Dict, Optional
|
|
|
|
from typing_extensions import override
|
|
|
|
from approvaltests.core.namer import Namer
|
|
|
|
|
|
class NamerBase(Namer):
|
|
def __init__(self, extension: Optional[str] = None) -> None:
|
|
self.extension_with_dot = extension or ".txt"
|
|
self.config_loaded = False
|
|
self.config: Optional[Dict[str, str]] = None
|
|
|
|
@abstractmethod
|
|
def get_file_name(self) -> str:
|
|
raise Exception("This class is abstract, override this method in a subclass")
|
|
|
|
@abstractmethod
|
|
def get_directory(self) -> str:
|
|
raise Exception("This class is abstract, override this method in a subclass")
|
|
|
|
def config_directory(self) -> str:
|
|
# pylint:disable=no-self-use
|
|
return None
|
|
|
|
def get_config(self) -> Dict[str, str]:
|
|
"""lazy load config when we need it, then store it in the instance variable self.config"""
|
|
if not self.config_loaded:
|
|
config_file = os.path.join(
|
|
self.config_directory(), "approvaltests_config.json"
|
|
)
|
|
if os.path.exists(config_file):
|
|
with open(config_file, "r", encoding="utf8") as file:
|
|
self.config = json.load(file)
|
|
else:
|
|
self.config = {}
|
|
self.config_loaded = True
|
|
return self.config
|
|
|
|
def get_basename(self) -> str:
|
|
file_name = self.get_file_name()
|
|
subdirectory = self.get_config().get("subdirectory", "")
|
|
return str(os.path.join(self.get_directory(), subdirectory, file_name))
|
|
|
|
@override
|
|
def get_received_filename(self, base: Optional[str] = None) -> str:
|
|
base = base or self.get_basename()
|
|
return base + Namer.RECEIVED + self.extension_with_dot
|
|
|
|
@override
|
|
def get_approved_filename(self, base: Optional[str] = None) -> str:
|
|
base = base or self.get_basename()
|
|
return base + Namer.APPROVED + self.extension_with_dot
|
|
|
|
def set_extension(self, extension: str) -> None:
|
|
self.extension_with_dot = extension
|