Hi Mike,

In the meantime, I tested like that and it works like a charm :

if orm_execute_state.is_update:
mapper = orm_execute_state.bind_arguments['mapper']
scope = mapper.entity.__name__
rights = check_rights(session, infos, role, get_scope(scope))
orm_execute_state.statement = orm_execute_state.statement.options(
with_loader_criteria(
mapper.entity,
mapper.entity.id.in_(rights),
include_aliases=True
)
)
return

Le dimanche 27 décembre 2020 à 11:31:41 UTC+1, Frédéric CLEMENT a écrit :

> Hi Mike,
> Many thanks for your reply, giving a try to it as soon as it will be 
> released.
>
>
>
> Le mercredi 23 décembre 2020 à 16:46:53 UTC+1, Mike Bayer a écrit :
>
>> In a little while the git master will have new accessors:
>>
>> ORMExecuteState.bind_mapper
>> ORMExecuteState.all_mappers
>>
>> so that you can reliably get at the Mapper objects that are the target of 
>> an ORM-enabled select(), update() , or delete()
>>
>> see https://gerrit.sqlalchemy.org/c/sqlalchemy/sqlalchemy/+/2432 for the 
>> patch going through testing now.
>>
>>
>>
>> On Wed, Dec 23, 2020, at 10:16 AM, Mike Bayer wrote:
>>
>> First off I admire your motivation to make that happen, that's all new 
>> stuff and note there's a lot of fixes to the with_loader_criteria() thing 
>> that are sitting in github master right now that will be in 1.4.0b2.
>>
>> The good news is that update() and delete() both support options as well 
>> so feel free to use with_loader_criteria() with these constructs as well, 
>> using the 2.0-style execution described at 
>> https://docs.sqlalchemy.org/en/14/orm/session_basics.html#update-and-delete-with-arbitrary-where-clause
>>  
>> .
>>
>> it might be nice for us to add a universal "mappers" accessor to 
>> ORMExecuteState but for the moment you can likely work for all statements 
>> generically as:
>>
>> if orm_execute_state.is_orm_statement:
>>     mapper = orm_execute_state.bind_arguments['mapper']
>>     cls = mapper.class_
>>
>> see if that works out and we will likely need to add an accessor that 
>> guarantees being able to provide the target "mapper" and/or mappers for any 
>> operation.
>>
>>
>>
>>
>>
>> On Wed, Dec 23, 2020, at 4:54 AM, Frédéric CLEMENT wrote:
>>
>> Hi the list,
>>
>>
>> Version 1.4Beta (hopefully 2.0 very soon)
>>
>> I am writing a multitenant application and I need to filter all requests 
>> using subqueries.
>> I succeeded to do it for selects doing something like that :
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *for desc in orm_execute_state.statement.column_descriptions: t = 
>> desc['type'] classname = desc['name'] scope = get_scope(classname) if scope 
>> != None: rights = check_rights(session, infos, role, scope) 
>> orm_execute_state.statement = orm_execute_state.statement.options( 
>> with_loader_criteria( t, t.id.in_(rights), include_aliases=True ) )*
>>
>> But I didn't find out how to do it for updates and deletes.
>> If some of yours have an idea .... :)
>>
>> Thanks a lot,
>>
>> Fred
>>
>>
>>
>> -- 
>> SQLAlchemy - 
>> The Python SQL Toolkit and Object Relational Mapper
>>  
>> http://www.sqlalchemy.org/
>>  
>> To post example code, please provide an MCVE: Minimal, Complete, and 
>> Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
>> description.
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to sqlalchemy+...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/sqlalchemy/69ab301d-e223-4b5d-9e37-756ce5b04801n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/sqlalchemy/69ab301d-e223-4b5d-9e37-756ce5b04801n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>>
>>
>> -- 
>> SQLAlchemy - 
>> The Python SQL Toolkit and Object Relational Mapper
>>  
>> http://www.sqlalchemy.org/
>>  
>> To post example code, please provide an MCVE: Minimal, Complete, and 
>> Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
>> description.
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to sqlalchemy+...@googlegroups.com.
>>
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/sqlalchemy/7c47c079-bca5-44de-aea2-40d8eb708c7b%40www.fastmail.com
>>  
>> <https://groups.google.com/d/msgid/sqlalchemy/7c47c079-bca5-44de-aea2-40d8eb708c7b%40www.fastmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>>
>>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/ae9720a9-bf3a-432d-8ba1-5bc7e55d1c49n%40googlegroups.com.

Reply via email to