category va elonlanri olish optimalashtrildi
This commit is contained in:
@@ -13,6 +13,7 @@ Docker orqali:
|
||||
import os
|
||||
import json
|
||||
from decimal import Decimal, InvalidOperation
|
||||
from datetime import datetime, timezone
|
||||
|
||||
import firebase_admin
|
||||
from firebase_admin import credentials, firestore
|
||||
@@ -80,10 +81,25 @@ class Command(BaseCommand):
|
||||
action="store_true",
|
||||
help="Mavjud mahsulotlarni ham yangilaydi",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--after",
|
||||
type=str,
|
||||
default=None,
|
||||
metavar="SANA",
|
||||
help="Faqat shu vaqtdan keyin qo'shilganlar. Misol: '2024-01-15' yoki '2024-01-15 10:30:00'",
|
||||
)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
dry_run = options["dry_run"]
|
||||
update = options["update"]
|
||||
after_dt: datetime | None = None
|
||||
|
||||
if options["after"]:
|
||||
try:
|
||||
after_dt = self._parse_date(options["after"])
|
||||
except ValueError as e:
|
||||
self.stderr.write(self.style.ERROR(str(e)))
|
||||
return
|
||||
|
||||
try:
|
||||
db = _init_firebase()
|
||||
@@ -92,7 +108,13 @@ class Command(BaseCommand):
|
||||
return
|
||||
|
||||
self.stdout.write("Firebase vendor_products o'qilmoqda…")
|
||||
docs = list(db.collection("vendor_products").stream())
|
||||
query = db.collection("vendor_products")
|
||||
if after_dt:
|
||||
query = query.where("createdAt", ">=", after_dt)
|
||||
self.stdout.write(
|
||||
f"Filter: createdAt >= {after_dt.strftime('%Y-%m-%d %H:%M:%S')} (UTC)"
|
||||
)
|
||||
docs = list(query.stream())
|
||||
self.stdout.write(f"Jami Firebase'da: {len(docs)} ta mahsulot\n")
|
||||
|
||||
created = updated = skipped = errors = 0
|
||||
@@ -171,6 +193,17 @@ class Command(BaseCommand):
|
||||
if dry_run:
|
||||
self.stdout.write(self.style.WARNING("\n[DRY-RUN] Hech narsa saqlanmadi."))
|
||||
|
||||
def _parse_date(self, date_str: str) -> datetime:
|
||||
for fmt in ("%Y-%m-%d %H:%M:%S", "%Y-%m-%d"):
|
||||
try:
|
||||
return datetime.strptime(date_str, fmt).replace(tzinfo=timezone.utc)
|
||||
except ValueError:
|
||||
continue
|
||||
raise ValueError(
|
||||
f"Noto'g'ri sana: '{date_str}'. "
|
||||
"To'g'ri format: '2024-01-15' yoki '2024-01-15 10:30:00'"
|
||||
)
|
||||
|
||||
def _print_progress(self, current, total, created, updated, skipped, errors):
|
||||
percent = int(current / total * 100) if total else 0
|
||||
bar_filled = percent // 5
|
||||
|
||||
Reference in New Issue
Block a user