I think, I might be helped with the create_instance "event"

I will never ever stop a class from being saved/persistent, 

it is the other way around. I thought I was able to use joins and or relations 
to limit for "allowed" results from a query.
With all the polymorphic and self references I have got and the fact that I 
need to do so for multiple Polymorphic colums I came up with the ACL idea.

Im not sure it if will perform, but in the create_instance I will look up the 
ACL and set additional properties on the instance or create an empty one.

This whole system is getting very complex now and limiting returned data 
involves modifying relationsships a lot. I'm really glad I got that working.

Many classes are base on top of that and I the only IT guy working on this 
together with "programmers" with a chemistry degree. Who will need the API I am 
working on to do their stuff without knowing anything about Databases........

To have that I Inherit polymorphicly, have many-to-many self references, use 
mixins. 

I'll have a look at the PreFilteredQuery example you gave me, Any thoughts are 
helpful, I'll see If I can make up an example with persons and addresses again 
since the molecule stuff makes it even more confusing..
Will take me some time though 

Martijn




On Feb 7, 2011, at 5:18 PM, Michael Bayer wrote:

> 
> On Feb 7, 2011, at 10:55 AM, Martijn Moeling wrote:
> 
>> Hi,
>> 
>> It is me again with an interesting thing, I've searched the net, this group 
>> etc. Not a lot of people seem interested in append_result, I AM!!
>> 
>> I am looking for a way to implement the following:
>> 
>> 
>> I have many tables, a lot with polymorphic inheritance and self and cross 
>> references.
>> 
>> In order to control "available" data I have set up a system similar to ACL 
>> (Access Control Lists)
>> 
>> Depending on "Who I am" I can get data from the database.
>> 
>> I want to do so within the MapperExtension I already have set up to do some 
>> "before update" and "before insert"
> 
> Limitations on inserts, updates and queries are best done outside of the 
> Mapper.   By the time the mapper is dealing with instructions to persist or 
> load a row, its usually too late, unless you're looking to raise an exception 
> upon certain conditions.       For example there's no way to "stop" the 
> insert from happening inside of a "before insert" operation, short of raising 
> an exception (maybe that's what you're doing).    
> 
> A SessionExtension.before_flush() OTOH allows you to modify everything that's 
> going to happen before any flush plans are made.
> 
> Regarding append_result(), its a very old hook from 0.1 that's never had any 
> real use.   In this case I would instead be ensure that the undesired rows 
> are not in the result set to start with.   The recipe at 
> http://www.sqlalchemy.org/trac/wiki/UsageRecipes/PreFilteredQuery is a decent 
> starting point for such a recipe.
> 
> 
>> 
>> 
>>   def append_result(self, mapper, selectcontext, row, instance, result, 
>> **flags):
>>       if instance.__tablename__ == 'he':
>>           return EXT_STOP
>>       else:
>>           return EXT_CONTINUE
>> 
>> would do such a thing, but I want (for the sake of the code behind that) to 
>> continue with a heavily modified instance.
>> 
>> To avoid making this long code (a lot of different object types pass through 
>> here, remember the polymorhic bit)
>> 
>> Does anyone have an interesting approach to this? basically I need to do 
>> something like instance= instance_class_type(new, configuration, based, on, 
>> the, ACL)
>> 
>> 
>> 
>> Any help would be wonderfull,
>> 
>> Martijn
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "sqlalchemy" group.
>> To post to this group, send email to sqlalchemy@googlegroups.com.
>> To unsubscribe from this group, send email to 
>> sqlalchemy+unsubscr...@googlegroups.com.
>> For more options, visit this group at 
>> http://groups.google.com/group/sqlalchemy?hl=en.
>> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to