def _model_to_protobuf(cls, model_instance, _entity_class=datastore.Entity): logging.info('=========== Model to Protobuf ===========') logging.info('Model: '+str(model_instance)) if model_instance.parent() is not None: logging.info('Model has parent.') if model_instance.key().name() is not None: logging.info('Model has key name.') n = NormalizedObject(model_instance.key().parent(), key_name=model_instance.key().name()) else: logging.info('Model has no key name.') n = NormalizedObject(model_instance.key().parent()) else: logging.info('Model has no parent.') if model_instance.is_saved(): if model_instance.key().name() is not None: logging.info('Model has key name.') n = NormalizedObject(key_name=model_instance.key().name()) else: logging.info('Model has no key name.') n = NormalizedObject() else: n = NormalizedObject() logging.info('Copying model properties...') _props = model_instance.properties() _d_props = model_instance.dynamic_properties() for prop in list(_props.keys()+_d_props): value = getattr(model_instance, prop) if isinstance(value, list) and len(value) == 0: continue else: setattr(n, prop, getattr(model_instance, prop)) logging.info('Setting prop '+str(prop)+' to '+str(getattr(model_instance, prop))) logging.info('Setting model path property as '+str(model_instance.class_key())+'...') n.data_class_path = '.'.join(model_instance.path_key()) _mi = n._populate_entity(_entity_class).ToPb() logging.info('_N: '+str(_mi)) return _mi
def _model_from_protobuf(cls, pb, _entity_class=datastore.Entity): logging.info('=========== Model from Protobuf ===========') logging.info('Pb: '+str(pb)) entity = _entity_class.FromPb(pb) logging.info('Entity: '+str(entity)) _n_obj = NormalizedObject.from_entity(entity) if _n_obj.data_class_path is not None: classpath = _n_obj.data_class_path.split('.') model = DataController.import_model(classpath) logging.info('Model: '+str(model)) else: logging.critical('No data class path pointer found.') ##@TODO: fallback to regular from entity if _n_obj.parent() is not None: if _n_obj.is_saved(): if _n_obj.key().name() is not None: obj = model(_n_obj.key().parent(),key_name=_n_obj.key().name()) else: obj = model(_n_obj.key().parent()) else: obj = model(_n_obj.parent()) else: if _n_obj.is_saved(): if _n_obj.key().name() is not None: obj = model(key_name=_n_obj.key().name()) else: obj = model() else: obj = model() for item in entity: logging.info('Setting model property '+str(item) +' to value '+str(entity[item])) setattr(obj, item, entity[item]) #res = model.from_entity(entity) logging.info('Finishing up and returning '+str(obj)+'.') return obj