homesec 1.2.0__py3-none-any.whl → 1.2.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,16 +13,19 @@ homesec/health/__init__.py,sha256=fbndfsLOR9aA7d_5I1mEZN0oM5IYMmcJNjOt0iaXKZc,10
13
13
  homesec/health/server.py,sha256=VP-4XmZ0K3ooFyd000AFOZohZ5R7QcnZC4n7oj0RMqI,7014
14
14
  homesec/maintenance/__init__.py,sha256=6a5W2x8oUgnoWaK374-Wq_nrOD5UDAUqUtSANaEck2M,60
15
15
  homesec/maintenance/cleanup_clips.py,sha256=sqeWLE9GrJfe29ntCasgvT2M-FWTymydHDQG-fZ3khg,23451
16
- homesec/models/__init__.py,sha256=IVmkIEgTe1SvOzXilWw6BwSRQezAeBbqAt5y6EdZV5o,1955
16
+ homesec/models/__init__.py,sha256=0gcTdSg0CW77Hy3D7wlCyyYvvBJMdD51BL5uIiz4Vfc,2043
17
17
  homesec/models/alert.py,sha256=cMFr4NUGygq0-m2ep0jhjzVrFKM7kN1wJON1J0XwGY4,1010
18
18
  homesec/models/clip.py,sha256=QaftnY7q20fQX4BTX6j-FBZLaoVSgk0DbpNf8kdnT60,2225
19
- homesec/models/config.py,sha256=Z70xKrbDHi96j8IoRXPBw7DYAI7sjHR4M6nqReHTNds,14184
19
+ homesec/models/config.py,sha256=5V0_RNIh-hqKA8OCU5EdBwQVRbZ3nmkqoay54V6vgVE,14272
20
20
  homesec/models/enums.py,sha256=WQk1PvYnJd5iaz51P5GM3XayqCf0VpQnLYmSuw1hrZk,3293
21
21
  homesec/models/events.py,sha256=sgPDCSp9w60VUKKREYxNBZaxrFWW_bYyLwMFGHBawjk,4942
22
22
  homesec/models/filter.py,sha256=6NS1rBI2zmrswK9NtMn0vZlbwbeMGCPuLCDKP9XWN0I,2259
23
- homesec/models/source.py,sha256=F8ksGrOa09bxx5IEgQmxPWJNWOm8zvFLsRJxihJTlM4,2367
24
23
  homesec/models/storage.py,sha256=63wyHdDt3QrfdsP0SmhrxtOeWRllZ1O2GPrA4jI7XmU,235
25
24
  homesec/models/vlm.py,sha256=Uk6TPwqbKxzyAsOlBSzZru74nKjp2-LLyzIp5b3wM_c,3293
25
+ homesec/models/source/__init__.py,sha256=vZFpll5ftShIGe_VOoqQ6XiFZKKAKqgZ3bOW9feB_VM,60
26
+ homesec/models/source/ftp.py,sha256=ZRU0YxNa99qTlCS2pIXKl8kmM1KQyIHOHyaFox6XPKk,2871
27
+ homesec/models/source/local_folder.py,sha256=ymneTjcCzvLzFmen3GF8kYfGIlxWgb10BDvgdXnWFcQ,803
28
+ homesec/models/source/rtsp.py,sha256=h_XzIM22JKHA0Mz4IUZMTPlzKkU_U7sSF6p5PPIVoWw,4852
26
29
  homesec/pipeline/__init__.py,sha256=kiQLECc6JIPmeIdBJrVpTApPs0GBAgWoZ1kU4XZyJVY,214
27
30
  homesec/pipeline/alert_policy.py,sha256=gFl5SJ96fgEfEUnhSL51YA6O2GPGXTXmxaDC-q3h1rs,152
28
31
  homesec/pipeline/core.py,sha256=D552e-xpIpom5C-Y_TkWB9Ufbm8xClGmCdo_4tseXuU,23840
@@ -35,25 +38,32 @@ homesec/plugins/alert_policies/noop.py,sha256=xcdyZAlQf6X_AqQWUPkRMHLK8J6d7PTXWo
35
38
  homesec/plugins/analyzers/__init__.py,sha256=GLC01lACmqZjKjMbkUnB_yYnOTxW_XEOwOfHK-I9SX0,915
36
39
  homesec/plugins/analyzers/openai.py,sha256=qLN9Qhj-DvqEE6nHXIfW0QPp2EhSVwIVVXzq-QSqdzQ,15979
37
40
  homesec/plugins/filters/__init__.py,sha256=JgPJTcW8yKa6JRIED4w8o5j_n_k5J7xwQbhAqDYofA4,866
38
- homesec/plugins/filters/yolo.py,sha256=gCuFHtqZsJVimaX1p7XvP9MTP9vliLiwniZWioAH5RA,11130
41
+ homesec/plugins/filters/yolo.py,sha256=RUJqP9vtHDEoTqR9U3zt2ae_4Y8DGaJ2bsmJGVlfYMw,11126
39
42
  homesec/plugins/notifiers/__init__.py,sha256=6T3OX4Vg1XKZeSG6AlZzw0o2KlaRr_mePBDIZEbr5Rw,1066
40
43
  homesec/plugins/notifiers/mqtt.py,sha256=1zUKUHFvT65ysawFXEwWHvY8rg310fRsSSKhIFeaUL4,5946
41
44
  homesec/plugins/notifiers/multiplex.py,sha256=LlnwozjkMDQwz7__v7mT4AohZbiWZK39CZunamRp7FM,3676
42
45
  homesec/plugins/notifiers/sendgrid_email.py,sha256=gZSv3FRaN8qCMO6D-MX8b6XVz-gSgrFhkFV6j1ILdi4,8682
43
46
  homesec/plugins/sources/__init__.py,sha256=weLYuCLrmWIUvRTYmfgqVcOFHonZgTngDKFSks4yg8s,1025
44
- homesec/plugins/sources/ftp.py,sha256=hdMcjC3lhCAdn9ZnuYNZbKbUWsXUOcql1r_OJXoCPso,849
45
- homesec/plugins/sources/local_folder.py,sha256=nCAJr0l8FpUpI3amkOPDN69XkAYtxgez3utq1jNRdPQ,1214
46
- homesec/plugins/sources/rtsp.py,sha256=PbSrDEcvbTPq6xnA6i87DLCEtxHWdMVBjd6QQm1DAsc,814
47
+ homesec/plugins/sources/ftp.py,sha256=c2HktqWlzQyRDMVMVEb6R9zIK-Q1AyJMHPUp92jHhyM,853
48
+ homesec/plugins/sources/local_folder.py,sha256=zHyMT-PKEJCaf4mw29TBjj-jK_oQmO3zPyOAt4n5HWI,1227
49
+ homesec/plugins/sources/rtsp.py,sha256=rqWtOOKgxGqC2lwdgkEdpH_xMatH2-3xn_Kt_biAA20,824
47
50
  homesec/plugins/storage/__init__.py,sha256=oJPrjgpke7VK3MY8L-GGmDVB4eWx7IgXcmVQXMcMw7g,1235
48
51
  homesec/plugins/storage/dropbox.py,sha256=AQkEFV4lXqS1pbVazNuskEaEpr5CvLkrYdUK8EE7eAM,9992
49
52
  homesec/plugins/storage/local.py,sha256=CbuSaWEi9ft1zxOURcmOKzwyq0UXIyHqyHoQD6sxivI,3231
50
53
  homesec/repository/__init__.py,sha256=6cye2uQIA2v6jeLk5D2S9y3rlkfzJH5GceqdOroF3hU,160
51
54
  homesec/repository/clip_repository.py,sha256=nRcswsIX--Z9p7J33FsqNlDtMAmt438VUbfvZHX0FlY,17090
52
- homesec/sources/__init__.py,sha256=wuCtiF44ceo7n3wJN51VHHcDavko3ubUDICtFbWmaRI,505
55
+ homesec/sources/__init__.py,sha256=zjjoGbpha4Aqx2Y3fca743gs6gEyYDtRjUbCCwJ0NG0,598
53
56
  homesec/sources/base.py,sha256=dKTxJxcDwJtykWDN3WYzkW5mtkRqlOJxJLWcLy82_Zo,7582
54
- homesec/sources/ftp.py,sha256=ynIPbgcbIi1jub8yr4H1259Y1HbNM42RFDBBivXD4mg,7308
55
- homesec/sources/local_folder.py,sha256=eW7ghgRsqTnZ5ZMPbsXh9ntqfue1UeM29ZpvRvLthPA,8461
56
- homesec/sources/rtsp.py,sha256=T_DoAExu58pukRDjPNZ7wELDIebbQpVFrg29L9xACa8,48866
57
+ homesec/sources/ftp.py,sha256=t1XFo7aN31mN4wFfSVJuJhA2o_nFi1zQQZCl4VZGQlA,7312
58
+ homesec/sources/local_folder.py,sha256=UduSyDKesT5DBoBx8Qjp7tAZatUR6bvXTEHzC7VoLWQ,8474
59
+ homesec/sources/rtsp/__init__.py,sha256=wtBzdwzL7Cg0HyIGIpS3lBagekCAi_EYJOyCZFbT7K0,103
60
+ homesec/sources/rtsp/clock.py,sha256=Gf-CLBfgUmxfajmZim89vmWRG14hnc7iUUBVNNiUz6w,338
61
+ homesec/sources/rtsp/core.py,sha256=tX6FH_ete2Xop-6O7CzH-a0A42OaCa2-jUQXjl5oQ0E,48235
62
+ homesec/sources/rtsp/frame_pipeline.py,sha256=cIGrH5z4WE8swoAThTl7Wu3SViNq-00YyCcKMLBrCso,11620
63
+ homesec/sources/rtsp/hardware.py,sha256=sKCJhoVdmkDfCk2s5RL0lDPX_CuvcwlgVUESgRJK3us,4892
64
+ homesec/sources/rtsp/motion.py,sha256=FKDa1hvD_H3uxgnQ-Z0c7MhVd6u_35cO6XKZRVrXpaY,2870
65
+ homesec/sources/rtsp/recorder.py,sha256=fqL-zr-vtnFrDQc87zZFYeM-6JSUfMwQsc0zfR-mgy4,7009
66
+ homesec/sources/rtsp/utils.py,sha256=aufPAP6oc39kyFAiN0HTDhdXf3bQqWSVeVWNIHx5MmI,1021
57
67
  homesec/state/__init__.py,sha256=Evt1jqTebmpJD1NUzNh3vwt5pbjDlLjQ0DgMCSAZOuM,255
58
68
  homesec/state/postgres.py,sha256=I-cXqW5cgz-hpaHc0JIv3DnIBTmGxE28P8ZxBAGabSw,17765
59
69
  homesec/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -61,8 +71,8 @@ homesec/telemetry/db_log_handler.py,sha256=KM8g4kcOyPzFJbpGxpSzecx_hrEWY0YfpoIKy
61
71
  homesec/telemetry/postgres_settings.py,sha256=EVD2_oi_KReFJvQmXxW026aurl_YD-KexT7rkbGQPHc,1198
62
72
  homesec/telemetry/db/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
63
73
  homesec/telemetry/db/log_table.py,sha256=wcZLwRht7FMa0z2gf37f_RxdVTNIdDiK4i_N3c_ibwg,473
64
- homesec-1.2.0.dist-info/METADATA,sha256=0N3Lg00FUl57PUV4VWe_vbIfQDOq-xib2wnkSU6dQS4,23274
65
- homesec-1.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
66
- homesec-1.2.0.dist-info/entry_points.txt,sha256=8ocCj_fP1qxIuL-DVDAUiaUbEdTMX_kg_BzVrJsbQYg,45
67
- homesec-1.2.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
68
- homesec-1.2.0.dist-info/RECORD,,
74
+ homesec-1.2.2.dist-info/METADATA,sha256=dYxpcVPEWLuX_TLZIEZZywjcgYgJO--J1IGgDu8aUyQ,25157
75
+ homesec-1.2.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
76
+ homesec-1.2.2.dist-info/entry_points.txt,sha256=8ocCj_fP1qxIuL-DVDAUiaUbEdTMX_kg_BzVrJsbQYg,45
77
+ homesec-1.2.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
78
+ homesec-1.2.2.dist-info/RECORD,,
homesec/models/source.py DELETED
@@ -1,81 +0,0 @@
1
- """Source configuration models."""
2
-
3
- from __future__ import annotations
4
-
5
- from pydantic import BaseModel, Field, field_validator
6
-
7
-
8
- class RTSPSourceConfig(BaseModel):
9
- """RTSP source configuration."""
10
-
11
- model_config = {"extra": "forbid"}
12
-
13
- camera_name: str | None = None
14
- rtsp_url_env: str | None = None
15
- rtsp_url: str | None = None
16
- detect_rtsp_url_env: str | None = None
17
- detect_rtsp_url: str | None = None
18
- output_dir: str = "./recordings"
19
- pixel_threshold: int = 45
20
- min_changed_pct: float = 1.0
21
- blur_kernel: int = 5
22
- stop_delay: float = 10.0
23
- max_recording_s: float = 60.0
24
- max_reconnect_attempts: int = 20
25
- disable_hwaccel: bool = False
26
- frame_timeout_s: float = 2.0
27
- frame_queue_size: int = 20
28
- reconnect_backoff_s: float = 1.0
29
- debug_motion: bool = False
30
- heartbeat_s: float = 30.0
31
- rtsp_connect_timeout_s: float = 2.0
32
- rtsp_io_timeout_s: float = 2.0
33
- ffmpeg_flags: list[str] = Field(default_factory=list)
34
-
35
-
36
- class LocalFolderSourceConfig(BaseModel):
37
- """Local folder source configuration."""
38
-
39
- model_config = {"extra": "forbid"}
40
-
41
- camera_name: str | None = None
42
- watch_dir: str = "recordings"
43
- poll_interval: float = 1.0
44
- stability_threshold_s: float = 3.0
45
-
46
-
47
- class FtpSourceConfig(BaseModel):
48
- """FTP source configuration."""
49
-
50
- model_config = {"extra": "forbid"}
51
-
52
- camera_name: str | None = None
53
- host: str = "0.0.0.0"
54
- port: int = 2121
55
- root_dir: str = "./ftp_incoming"
56
- ftp_subdir: str | None = None
57
- anonymous: bool = True
58
- username_env: str | None = None
59
- password_env: str | None = None
60
- perms: str = "elw"
61
- passive_ports: str | None = None
62
- masquerade_address: str | None = None
63
- heartbeat_s: float = 30.0
64
- allowed_extensions: list[str] = Field(default_factory=lambda: [".mp4"])
65
- delete_non_matching: bool = True
66
- delete_incomplete: bool = True
67
- default_duration_s: float = 10.0
68
- log_level: str = "INFO"
69
-
70
- @field_validator("allowed_extensions")
71
- @classmethod
72
- def _normalize_extensions(cls, value: list[str]) -> list[str]:
73
- cleaned: list[str] = []
74
- for item in value:
75
- ext = str(item).strip().lower()
76
- if not ext:
77
- continue
78
- if not ext.startswith("."):
79
- ext = f".{ext}"
80
- cleaned.append(ext)
81
- return cleaned