category va elonlanri olish optimalashtrildi
This commit is contained in:
@@ -13,6 +13,7 @@ Docker orqali:
|
|||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
from decimal import Decimal, InvalidOperation
|
from decimal import Decimal, InvalidOperation
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
import firebase_admin
|
import firebase_admin
|
||||||
from firebase_admin import credentials, firestore
|
from firebase_admin import credentials, firestore
|
||||||
@@ -80,10 +81,25 @@ class Command(BaseCommand):
|
|||||||
action="store_true",
|
action="store_true",
|
||||||
help="Mavjud mahsulotlarni ham yangilaydi",
|
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):
|
def handle(self, *args, **options):
|
||||||
dry_run = options["dry_run"]
|
dry_run = options["dry_run"]
|
||||||
update = options["update"]
|
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:
|
try:
|
||||||
db = _init_firebase()
|
db = _init_firebase()
|
||||||
@@ -92,7 +108,13 @@ class Command(BaseCommand):
|
|||||||
return
|
return
|
||||||
|
|
||||||
self.stdout.write("Firebase vendor_products o'qilmoqda…")
|
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")
|
self.stdout.write(f"Jami Firebase'da: {len(docs)} ta mahsulot\n")
|
||||||
|
|
||||||
created = updated = skipped = errors = 0
|
created = updated = skipped = errors = 0
|
||||||
@@ -171,6 +193,17 @@ class Command(BaseCommand):
|
|||||||
if dry_run:
|
if dry_run:
|
||||||
self.stdout.write(self.style.WARNING("\n[DRY-RUN] Hech narsa saqlanmadi."))
|
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):
|
def _print_progress(self, current, total, created, updated, skipped, errors):
|
||||||
percent = int(current / total * 100) if total else 0
|
percent = int(current / total * 100) if total else 0
|
||||||
bar_filled = percent // 5
|
bar_filled = percent // 5
|
||||||
|
|||||||
Reference in New Issue
Block a user