async def _get_model_by_id_or_alias(model_id, token):
    try:
        model_id = UUID(model_id)
        model_project = ModelProject.from_uuid(str(model_id), kg_client, api="nexus")
    except ValueError:
        model_alias = str(model_id)
        model_project = ModelProject.from_alias(model_alias, kg_client, api="nexus")
    if not model_project:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"Model with ID or alias '{model_id}' not found.",
        )
    # todo: fairgraph should accept UUID object as well as str
    await _check_model_access(model_project, token)
    return model_project
 def is_valid(self):
     # check alias is unique
     if "alias" in self.data and self.data["alias"]:
         if self.obj and self.obj.alias == self.data["alias"]:
             return True
         logger.debug("Checking for model with same alias")
         model_with_same_alias = ModelProject.from_alias(
             self.data["alias"], self.client)
         if bool(model_with_same_alias):
             self.errors.append(
                 "Another model with this alias already exists.")
             return False
     if "private" in self.data:
         if not isinstance(self.data["private"], bool):
             self.errors.append("'private' must be a boolean")
             return False
     if "author" not in self.data or not self.data["author"]:
         self.errors.append("This field may not be blank.")
         return False
     return True  # todo
def model_alias_exists(alias, client):
    if alias:
        model_with_same_alias = ModelProject.from_alias(alias, client, api="nexus")
        return bool(model_with_same_alias)
    return False