# -*- coding: utf-8 -*- MANUAL_SLUG = "manual" class WorkerVersionMixin(object): def get_worker_version(self, worker_version_id: str) -> dict: """ Get worker version from cache if possible, otherwise make API request """ if worker_version_id in self._worker_version_cache: return self._worker_version_cache[worker_version_id] worker_version = self.request("RetrieveWorkerVersion", id=worker_version_id) self._worker_version_cache[worker_version_id] = worker_version return worker_version def get_worker_version_slug(self, worker_version_id: str) -> str: """ Get worker version slug from cache if possible, otherwise make API request Should use `get_ml_result_slug` instead of using this method directly """ worker_version = self.get_worker_version(worker_version_id) return worker_version["worker"]["slug"] def get_ml_result_slug(self, ml_result) -> str: """ Helper function to get the slug from element, classification or transcription Can handle old and new (source vs worker_version) :type ml_result: Element or classification or transcription """ if ( "source" in ml_result and ml_result["source"] and ml_result["source"]["slug"] ): return ml_result["source"]["slug"] elif "worker_version" in ml_result and ml_result["worker_version"]: return self.get_worker_version_slug(ml_result["worker_version"]) # transcriptions have worker_version_id but elements have worker_version elif "worker_version_id" in ml_result and ml_result["worker_version_id"]: return self.get_worker_version_slug(ml_result["worker_version_id"]) elif "worker_version" in ml_result and ml_result["worker_version"] is None: return MANUAL_SLUG elif ( "worker_version_id" in ml_result and ml_result["worker_version_id"] is None ): return MANUAL_SLUG else: raise ValueError(f"Unable to get slug from: {ml_result}")