sms
This commit is contained in:
1 parent
250cdbab7f
commit
5c6069c3ef
87 files changed
+29209
-3697
No files matched your search
@@ -0,0 +1,50 @@
|
||||
"""زمانبند/اسکنر: پیدا کردن موارد سررسیدشده و قرار دادن آنها در صف پیامک."""
|
||||
import logging
|
||||
import signal
|
||||
import time
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from admin_panel.sms.scanner import run_all
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "اسکن یادآوریهای پیامک و قرار دادن آنها در صف."
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self._stop = False
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument("--loop", action="store_true", help="اجرای پیوسته")
|
||||
parser.add_argument("--interval", type=float, default=300.0, help="فاصلهٔ بین اجراها (ثانیه)")
|
||||
|
||||
def handle(self, *args, **options):
|
||||
signal.signal(signal.SIGTERM, self._handle_signal)
|
||||
signal.signal(signal.SIGINT, self._handle_signal)
|
||||
loop = options["loop"]
|
||||
interval = options["interval"]
|
||||
|
||||
while not self._stop:
|
||||
results = run_all()
|
||||
summary = ", ".join(f"{name}={count}" for name, count in results.items())
|
||||
self._emit(f"اسکن پیامک: {summary}")
|
||||
if not loop:
|
||||
break
|
||||
# خواب قابلقطع
|
||||
slept = 0.0
|
||||
while slept < interval and not self._stop:
|
||||
time.sleep(min(1.0, interval - slept))
|
||||
slept += 1.0
|
||||
|
||||
def _handle_signal(self, signum, frame):
|
||||
self._stop = True
|
||||
|
||||
def _emit(self, text):
|
||||
"""نوشتن خروجی با تحمل کدگذاری محدود کنسول (مثلاً cp1252 در ویندوز)."""
|
||||
try:
|
||||
self.stdout.write(text)
|
||||
except UnicodeEncodeError:
|
||||
self.stdout.write(text.encode("ascii", "replace").decode("ascii"))
|
||||
Reference in new issue
Block a user