browsertrix/backend/btrixcloud/operator/profiles.py
Tessa Walsh 123705c53f
Serialize datetimes with Z suffix (#2058)
Use timezone aware datetimes instead of timezone naive datetimes:
- Update mongodb client to use tz-aware conversion
- Convert dt_now() to return timezone aware UTC date
- Rename to_k8s_date -> date_to_str, just returns ISO UTC date with 'Z'
(instead of '+00:00' suffix)
- Rename from_k8s_date -> str_to_date, returns timezone aware date from
str
- Standardize all string<->date conversion to use either date_to_str or
str_to_date
- Update frontend to assume iso date, not append 'Z' directly
- Update tests to check for 'Z' suffix on some dates

---------
Co-authored-by: Ilya Kreymer <ikreymer@gmail.com>
2024-09-12 16:16:13 -07:00

55 lines
1.8 KiB
Python

""" Operator handler for ProfileJobs """
from btrixcloud.utils import str_to_date, dt_now
from btrixcloud.models import StorageRef
from .models import MCSyncData
from .baseoperator import BaseOperator
# ============================================================================
class ProfileOperator(BaseOperator):
"""ProfileOperator"""
def init_routes(self, app):
"""init routes for this operator"""
@app.post("/op/profilebrowsers/sync")
async def mc_sync_profile_browsers(data: MCSyncData):
return await self.sync_profile_browsers(data)
async def sync_profile_browsers(self, data: MCSyncData):
"""sync profile browsers"""
spec = data.parent.get("spec", {})
expire_time = str_to_date(spec.get("expireTime"))
browserid = spec.get("id")
if expire_time and dt_now() >= expire_time:
self.run_task(self.k8s.delete_profile_browser(browserid))
return {"status": {}, "children": []}
params = {}
params.update(self.k8s.shared_params)
params["id"] = browserid
params["userid"] = spec.get("userid", "")
oid = spec.get("oid")
storage = StorageRef(spec.get("storageName"))
storage_path = storage.get_storage_extra_path(oid)
storage_secret = storage.get_storage_secret_name(oid)
params["storage_path"] = storage_path
params["storage_secret"] = storage_secret
params["profile_filename"] = spec.get("profileFilename", "")
params["crawler_image"] = spec["crawlerImage"]
params["url"] = spec.get("startUrl", "about:blank")
params["vnc_password"] = spec.get("vncPassword")
children = self.load_from_yaml("profilebrowser.yaml", params)
return {"status": {}, "children": children}