Exemplo n.º 1
0
def save_instance(instance, tenant_id, schema_id, table_id, instance_id):
    fields = retrieve_schema_table_fields(tenant_id, schema_id, table_id)
    instance = instance_object(id=instance_id, tenant_id=tenant_id, schema_id=schema_id, table_id=table_id, instance_data=instance)
    DB.session.add(instance)
    DB.session.commit()
    save_unique_values(instance, tenant_id, schema_id, table_id, fields)
    save_index_values(instance, tenant_id, schema_id, table_id, fields)
    return instance
Exemplo n.º 2
0
def retrieve_all_instances(tenant_id, schema_id, table_id, query_filters={}):
    """
    """
    criteria = [Instance.tenant_id == tenant_id,
        Instance.schema_id == schema_id,
        Instance.table_id == table_id]
    ext_criteria = []
    if query_filters:
        meta_fields = dict([(field.field_name, field) for field in retrieve_schema_table_fields(tenant_id, schema_id, table_id)])
        index_fields = [field_name for field_name, field in meta_fields.items() if query_filters.has_key(field_name) and field.index_single]
        non_index_fields = set(query_filters.keys()) - set(index_fields)
        query_filters = dict([(field_name, set_field_type(meta_fields[field_name]).type(value)) for field_name, value in query_filters.items()])
        ext_criteria = ( [add_index_query_filter(index_field, query_filters[index_field]) for index_field in index_fields] +
            [add_query_filter(non_index, query_filters[non_index]) for non_index in non_index_fields] )     
    criteria = and_(or_(*ext_criteria), *criteria)
    return Instance.query.filter(criteria).all()
Exemplo n.º 3
0
def local_type(verifield, type_name):
    """ Checks if a field conforms to the local table definition, which is basically a join/sub-object

    :param type_name: URI of the tenant.schema.table Ids that would be reference of the object to validate against
    :type type_name: URI
    :returns: bool
    """
    from polyglot.pyapi.meta import retrieve_schema_table_fields
    from polyglot.pyapi.instance import create_instance_validators
    from polyglot.models.schema import Instance
    (tenant_id, schema_id, table_id) = type_name.split("::")
    fields = retrieve_schema_table_fields(tenant_id, schema_id, table_id)
    validators = Instance._validations
    validators['instance_data'] = create_instance_validators(fields)
    instance = Instance(**instance)
    instance.validate(validators)
    instance._validations = validators
    return not((hasattr(instance, 'validation_errors') 
        and instance.validation_errors) \
    or instance.instance_data.get('validation_errors', {})) 
Exemplo n.º 4
0
def get_table_fields(tenant_id, schema_id, table_id):
    return unwrap_response(retrieve_schema_table_fields(tenant_id, schema_id, table_id))