def __init__(self, model, api=None): if check_model_structure(model): self.resource_id = model["resource"] else: # If only the model id is provided, the short version of the model # resource is used to build a basic summary of the model if api is None: api = BigML() self.resource_id = get_model_id(model) if self.resource_id is None: raise Exception(api.error_message(model, resource_type="model", method="get")) query_string = ONLY_MODEL model = retrieve_resource(api, self.resource_id, query_string=query_string) # Stored copies of the model structure might lack some necessary # keys if not check_model_structure(model): model = api.get_model(self.resource_id, query_string=query_string) if "object" in model and isinstance(model["object"], dict): model = model["object"] if "model" in model and isinstance(model["model"], dict): status = get_status(model) if "code" in status and status["code"] == FINISHED: if "model_fields" in model["model"] or "fields" in model["model"]: fields = model["model"].get("model_fields", model["model"].get("fields", [])) # pagination or exclusion might cause a field not to # be in available fields dict if not all(key in model["model"]["fields"] for key in fields.keys()): raise Exception( "Some fields are missing" " to generate a local model." " Please, provide a model with" " the complete list of fields." ) for field in fields: field_info = model["model"]["fields"][field] if "summary" in field_info: fields[field]["summary"] = field_info["summary"] fields[field]["name"] = field_info["name"] objective_field = model["objective_fields"] ModelFields.__init__(self, fields, objective_id=extract_objective(objective_field)) self.description = model["description"] self.field_importance = model["model"].get("importance", None) if self.field_importance: self.field_importance = [element for element in self.field_importance if element[0] in fields] self.locale = model.get("locale", DEFAULT_LOCALE) else: raise Exception("The model isn't finished yet") else: raise Exception( "Cannot create the BaseModel instance. Could not" " find the 'model' key in the resource:\n\n%s" % model )
def check_local_but_fields(model): """Whether the information in `model` is enough to use it locally except for the fields section """ try: return resource_is_ready(model) and \ check_model_structure(model) except Exception: return False
def __init__(self, model, api=None): if check_model_structure(model): self.resource_id = model['resource'] else: # If only the model id is provided, the short version of the model # resource is used to build a basic summary of the model if api is None: api = BigML() self.resource_id = get_model_id(model) if self.resource_id is None: raise Exception(api.error_message(model, resource_type='model', method='get')) query_string = ONLY_MODEL model = retrieve_resource(api, self.resource_id, query_string=query_string) # Stored copies of the model structure might lack some necessary # keys if not check_model_structure(model): model = api.get_model(self.resource_id, query_string=query_string) if 'object' in model and isinstance(model['object'], dict): model = model['object'] if 'model' in model and isinstance(model['model'], dict): status = get_status(model) if 'code' in status and status['code'] == FINISHED: if ('model_fields' in model['model'] or 'fields' in model['model']): fields = model['model'].get('model_fields', model['model'].get('fields', [])) # pagination or exclusion might cause a field not to # be in available fields dict if not all(key in model['model']['fields'] for key in fields.keys()): raise Exception("Some fields are missing" " to generate a local model." " Please, provide a model with" " the complete list of fields.") for field in fields: field_info = model['model']['fields'][field] if 'summary' in field_info: fields[field]['summary'] = field_info['summary'] fields[field]['name'] = field_info['name'] objective_field = model['objective_fields'] ModelFields.__init__( self, fields, objective_id=extract_objective(objective_field)) self.description = model['description'] self.field_importance = model['model'].get('importance', None) if self.field_importance: self.field_importance = [element for element in self.field_importance if element[0] in fields] self.locale = model.get('locale', DEFAULT_LOCALE) else: raise Exception("The model isn't finished yet") else: raise Exception("Cannot create the BaseModel instance. Could not" " find the 'model' key in the resource:\n\n%s" % model)
def __init__(self, model, api=None, fields=None): if check_model_structure(model): self.resource_id = model['resource'] else: # If only the model id is provided, the short version of the model # resource is used to build a basic summary of the model if api is None: api = BigML() self.resource_id = get_model_id(model) if self.resource_id is None: raise Exception(api.error_message(model, resource_type='model', method='get')) if fields is not None and isinstance(fields, dict): query_string = EXCLUDE_FIELDS else: query_string = ONLY_MODEL model = retrieve_resource(api, self.resource_id, query_string=query_string) # Stored copies of the model structure might lack some necessary # keys if not check_model_structure(model): model = api.get_model(self.resource_id, query_string=query_string) if 'object' in model and isinstance(model['object'], dict): model = model['object'] if 'model' in model and isinstance(model['model'], dict): status = get_status(model) if 'code' in status and status['code'] == FINISHED: if (fields is None and ('model_fields' in model['model'] or 'fields' in model['model'])): fields = model['model'].get('model_fields', model['model'].get('fields', [])) # pagination or exclusion might cause a field not to # be in available fields dict if not all(key in model['model']['fields'] for key in fields.keys()): raise Exception("Some fields are missing" " to generate a local model." " Please, provide a model with" " the complete list of fields.") for field in fields: field_info = model['model']['fields'][field] if 'summary' in field_info: fields[field]['summary'] = field_info['summary'] fields[field]['name'] = field_info['name'] objective_field = model['objective_fields'] ModelFields.__init__( self, fields, objective_id=extract_objective(objective_field)) self.description = model['description'] self.field_importance = model['model'].get('importance', None) if self.field_importance: self.field_importance = [element for element in self.field_importance if element[0] in fields] self.locale = model.get('locale', DEFAULT_LOCALE) else: raise Exception("The model isn't finished yet") else: raise Exception("Cannot create the BaseModel instance. Could not" " find the 'model' key in the resource:\n\n%s" % model)