- 1
Только в Самаре втб глючит или у всех?
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
Только в Самаре втб глючит или у всех?
+1
https://ru.hitmotop.com/song/62686119
+1
Nadkusanty sosnooley
+1
Объявляется неделя английского языка
с воскресенья по субботу общаемся только по-английски; уклонившийся - вонючка
+1
#!/usr/bin/env python3
# -*- coding: UTF8 -*-
from datetime import date
from os import environ, mkdir, system
from os.path import dirname, exists, join as path_join
from time import time
def check_verbose():
return environ.get("DEBUG") in ("true", "True", "TRUE", True, "yes", "Yes", "YES")
class Timer:
def __init__(self):
"""
Объект добавляет в начале текста временные метки
"""
self.start_epoch = self.last_call = time()
@staticmethod
def __fully_scope(timer: int or str) -> str:
"""
Преобразует однозначные значения в двузначные.
:param timer: Время
:return: Двузначное значение
"""
if len(str(timer)) == 2:
return str(timer)
elif len(str(timer)) == 1:
return "0" + str(timer)
elif len(str(timer)) <= 0:
return "00"
elif len(str(timer)) >= 2:
return str(timer)[:2]
def __formatter(self, timestep: float) -> str:
"""
Форматирует время
:return: время hh:mm:ss
"""
_hours = int(timestep // 3600), int(timestep % 3600)
_minute = int(_hours[1] // 60), int(_hours[1] % 60)
_current_epoch = f"{self.__fully_scope(_minute[0])}:{self.__fully_scope(_minute[1])}"
if _hours[0] > 0:
_current_epoch = f"{_hours[0]}:" + _current_epoch
return _current_epoch
def __call__(self, fix_call: bool = True) -> str:
"""
Считает время с начала сценария + с последнего шага
:return: время hh:mm:ss(+hh:mm:ss)
"""
current_epoch = self.__formatter(time() - self.start_epoch)
timedelta_epoch = self.__formatter(time() - self.last_call)
if fix_call:
self.last_call = time()
return f"{current_epoch}(+{timedelta_epoch})"
def __bool__(self):
return True
class Logger:
def __init__(self, name: str):
self.start_time = time()
self.name = name.upper()
self.timer = Timer()
self.log_file = path_join(environ["RESULT_DIR"], name, f"{name}_{date.today().isoformat()}.log")
def check_file(self):
if not exists(self.log_file):
if not exists(dirname(self.log_file)):
mkdir(dirname(self.log_file))
system(f"echo {date.today().isoformat()}> {self.log_file}")
def save_log(self, msg: str):
self.check_file()
with open(self.log_file, "a+") as _log_file:
_log_file.write(msg + "\n")
def massage(self, msg: str):
print(f"{self.timer()}::{self.name}::{msg}")
self.check_file()
self.save_log(f"{self.timer()}::{self.name}::{msg}")
def multi_msg(self, level: str, msg: any):
if isinstance(msg, (str, int, float, bool)):
self.massage(f"{level.upper()}::{msg}")
elif isinstance(msg, (tuple, list, set)):
for _msg in msg:
self.multi_msg(level, _msg)
elif isinstance(msg, dict):
for _msg_key in msg:
Ну собственно самописный логгер, потому что "библиатечный логгер переусложнен НИНАДА!"
+1
class FileCheckError(Exception):
def __init__(self, check, file):
self.check = check
self.file = file
self.exceptions = ['не является файлом',
'не является .wav файлом',
'не находится в списке требуемых сэмплов',]
def __str__(self):
return f'{self.file} {self.exceptions[self.check]}'
def validate_pack(pack) -> list:
"""
Checks for invalid files in a pack folder
Makes a list of invalid files if found any or
makes a list of accepted samples
"""
accepted_samples = []
found_errors = []
for sample in listdir(pack):
checks = [isfile(join(pack, sample)),
fnmatch(sample, '*.wav'),
Path(pack / sample).stem in required_samples, ]
try:
for check in range(len(checks)):
if not checks[check]:
raise FileCheckError(check=check, file=sample)
except FileCheckError as E:
found_errors.append(str(E))
continue
accepted_samples.append(sample)
if len(found_errors) != 0:
return found_errors
else:
return accepted_samples
result = validate_pack(Path('drumpacks/rock'))
print(result, sep='\n')
+1
С днём программиста, питухи!
И курицы.
+1
Яндекс сгнил :(
+1
Конструктор по умолчанию?
Не, не слышали.
Рефлексией итерируемся по свойствам и вызываем функцию инициализации полей ))))))))))))))
+1
СТРЗАМЕНИТЬ(СОКРЛ(СТРЗАМЕНИТЬ(уатПутевойЛист.Номер, "0", " ")), " ", "0") КАК НомерПЛ,
Удаляет нули в номере документа для вывода на печатную форму