コード例 #1
0
ファイル: __init__.py プロジェクト: sgammon/ProvidenceClarity
    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
コード例 #2
0
ファイル: __init__.py プロジェクト: sgammon/ProvidenceClarity
    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