From 06615fea8f3b0db9aa4701184da3eae5bae3ced6 Mon Sep 17 00:00:00 2001 From: frederik Date: Wed, 29 Oct 2025 18:56:59 +0100 Subject: [PATCH] move more complex classes to their own module, keep imports helpers.py core python --- scripts/birdnet_analysis.py | 3 ++- scripts/server.py | 7 +++--- scripts/utils/helpers.py | 44 ------------------------------------- scripts/utils/reporting.py | 3 ++- 4 files changed, 7 insertions(+), 50 deletions(-) diff --git a/scripts/birdnet_analysis.py b/scripts/birdnet_analysis.py index c730d9b..1e796e3 100644 --- a/scripts/birdnet_analysis.py +++ b/scripts/birdnet_analysis.py @@ -12,7 +12,8 @@ import inotify.adapters from inotify.constants import IN_CLOSE_WRITE from server import load_global_model, run_analysis -from utils.helpers import get_settings, ParseFileName, get_wav_files, ANALYZING_NOW +from utils.helpers import get_settings, get_wav_files, ANALYZING_NOW +from utils.classes import ParseFileName from utils.reporting import extract_detection, summary, write_to_file, write_to_db, apprise, bird_weather, heartbeat, \ update_json_file diff --git a/scripts/server.py b/scripts/server.py index a2883a0..1b10715 100644 --- a/scripts/server.py +++ b/scripts/server.py @@ -5,9 +5,9 @@ import time import librosa import numpy as np -from utils.helpers import get_settings, Detection, get_language -from utils.models import get_model - +from scripts.utils.classes import Detection, ParseFileName +from scripts.utils.helpers import get_settings, get_language +from scripts.utils.models import get_model log = logging.getLogger(__name__) @@ -193,7 +193,6 @@ def run_analysis(file): if __name__ == '__main__': - from utils.helpers import ParseFileName conf = get_settings() model = conf['MODEL'] test_files = ['../tests/testdata/2024-02-24-birdnet-16:19:37.wav'] diff --git a/scripts/utils/helpers.py b/scripts/utils/helpers.py index e470f90..c1e68de 100644 --- a/scripts/utils/helpers.py +++ b/scripts/utils/helpers.py @@ -1,4 +1,3 @@ -import datetime import glob import json import os @@ -8,8 +7,6 @@ from collections import OrderedDict from configparser import ConfigParser from itertools import chain -from tzlocal import get_localzone - _settings = None DB_PATH = os.path.expanduser('~/BirdNET-Pi/scripts/birds.db') @@ -60,47 +57,6 @@ def get_settings(settings_path='/etc/birdnet/birdnet.conf', force_reload=False): return settings -class Detection: - def __init__(self, file_date, start_time, stop_time, scientific_name, common_name, confidence): - self.start = float(start_time) - self.stop = float(stop_time) - self.datetime = file_date + datetime.timedelta(seconds=self.start) - self.date = self.datetime.strftime("%Y-%m-%d") - self.time = self.datetime.strftime("%H:%M:%S") - self.iso8601 = self.datetime.astimezone(get_localzone()).isoformat() - self.week = self.datetime.isocalendar()[1] - self.confidence = round(float(confidence), 4) - self.confidence_pct = round(self.confidence * 100) - self.species = scientific_name - self.scientific_name = scientific_name - self.common_name = common_name - self.common_name_safe = self.common_name.replace("'", "").replace(" ", "_") - self.file_name_extr = None - - -class ParseFileName: - def __init__(self, file_name): - self.file_name = file_name - name = os.path.splitext(os.path.basename(file_name))[0] - date_created = re.search('^[0-9]+-[0-9]+-[0-9]+', name).group() - time_created = re.search('[0-9]+:[0-9]+:[0-9]+$', name).group() - self.file_date = datetime.datetime.strptime(f'{date_created}T{time_created}', "%Y-%m-%dT%H:%M:%S") - self.root = name - - ident_match = re.search("RTSP_[0-9]+-", file_name) - self.RTSP_id = ident_match.group() if ident_match is not None else "" - - @property - def iso8601(self): - current_iso8601 = self.file_date.astimezone(get_localzone()).isoformat() - return current_iso8601 - - @property - def week(self): - week = self.file_date.isocalendar()[1] - return week - - def get_open_files_in_dir(dir_name): result = subprocess.run(['lsof', '-w', '-Fn', '+D', f'{dir_name}'], check=False, capture_output=True) ret = result.stdout.decode('utf-8') diff --git a/scripts/utils/reporting.py b/scripts/utils/reporting.py index 3edd086..8c19928 100644 --- a/scripts/utils/reporting.py +++ b/scripts/utils/reporting.py @@ -12,7 +12,8 @@ from time import sleep import requests from PIL import Image, ImageDraw, ImageFont -from .helpers import get_settings, ParseFileName, Detection, get_font, DB_PATH +from .helpers import get_settings, get_font, DB_PATH +from .classes import Detection, ParseFileName from .notifications import sendAppriseNotifications log = logging.getLogger(__name__)