rb-commons 0.4.0__py3-none-any.whl → 0.4.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rb_commons/orm/managers.py +16 -17
 - rb_commons/permissions/role_permissions.py +1 -1
 - {rb_commons-0.4.0.dist-info → rb_commons-0.4.2.dist-info}/METADATA +1 -1
 - {rb_commons-0.4.0.dist-info → rb_commons-0.4.2.dist-info}/RECORD +6 -6
 - {rb_commons-0.4.0.dist-info → rb_commons-0.4.2.dist-info}/WHEEL +0 -0
 - {rb_commons-0.4.0.dist-info → rb_commons-0.4.2.dist-info}/top_level.txt +0 -0
 
    
        rb_commons/orm/managers.py
    CHANGED
    
    | 
         @@ -3,7 +3,7 @@ from typing import TypeVar, Type, Generic, Optional, List, Dict, Literal, Union, 
     | 
|
| 
       3 
3 
     | 
    
         
             
            from sqlalchemy import select, delete, update, and_, func, desc, inspect
         
     | 
| 
       4 
4 
     | 
    
         
             
            from sqlalchemy.exc import IntegrityError, SQLAlchemyError, NoResultFound
         
     | 
| 
       5 
5 
     | 
    
         
             
            from sqlalchemy.ext.asyncio import AsyncSession
         
     | 
| 
       6 
     | 
    
         
            -
            from sqlalchemy.orm import declarative_base, InstrumentedAttribute, selectinload
         
     | 
| 
      
 6 
     | 
    
         
            +
            from sqlalchemy.orm import declarative_base, InstrumentedAttribute, selectinload, RelationshipProperty
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            from rb_commons.http.exceptions import NotFoundException
         
     | 
| 
       9 
9 
     | 
    
         
             
            from rb_commons.orm.exceptions import DatabaseException, InternalException
         
     | 
| 
         @@ -74,7 +74,7 @@ class BaseManager(Generic[ModelType]): 
     | 
|
| 
       74 
74 
     | 
    
         
             
                    """
         
     | 
| 
       75 
75 
     | 
    
         
             
                    if load_all_relations:
         
     | 
| 
       76 
76 
     | 
    
         
             
                        mapper = inspect(self.model)
         
     | 
| 
       77 
     | 
    
         
            -
                        load_relations = [rel.key for rel in mapper.relationships 
     | 
| 
      
 77 
     | 
    
         
            +
                        load_relations = [rel.key for rel in mapper.relationships]
         
     | 
| 
       78 
78 
     | 
    
         | 
| 
       79 
79 
     | 
    
         
             
                        if load_relations:
         
     | 
| 
       80 
80 
     | 
    
         
             
                            for rel in load_relations:
         
     | 
| 
         @@ -103,26 +103,25 @@ class BaseManager(Generic[ModelType]): 
     | 
|
| 
       103 
103 
     | 
    
         
             
                    self._filtered = True
         
     | 
| 
       104 
104 
     | 
    
         
             
                    self.filters = []
         
     | 
| 
       105 
105 
     | 
    
         | 
| 
       106 
     | 
    
         
            -
                    allowed_operators = {"eq", "ne", "gt", "lt", "gte", "lte", "in", "contains"}
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
106 
     | 
    
         
             
                    for key, value in kwargs.items():
         
     | 
| 
       109 
107 
     | 
    
         
             
                        parts = key.split("__")
         
     | 
| 
       110 
108 
     | 
    
         | 
| 
       111 
     | 
    
         
            -
                         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
                            operator = "eq"
         
     | 
| 
       116 
     | 
    
         
            -
                            field_path = parts
         
     | 
| 
      
 109 
     | 
    
         
            +
                        operator = "eq"
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                        if parts[-1] in {"eq", "ne", "gt", "lt", "gte", "lte", "in", "contains"}:
         
     | 
| 
      
 112 
     | 
    
         
            +
                            operator = parts.pop()
         
     | 
| 
       117 
113 
     | 
    
         | 
| 
       118 
114 
     | 
    
         
             
                        current_attr = self.model
         
     | 
| 
       119 
     | 
    
         
            -
                        for idx, field_name in enumerate(field_path):
         
     | 
| 
       120 
     | 
    
         
            -
                            current_attr = getattr(current_attr, field_name, None)
         
     | 
| 
       121 
     | 
    
         
            -
                            if current_attr is None:
         
     | 
| 
       122 
     | 
    
         
            -
                                raise ValueError(f"Invalid filter field: {'.'.join(field_path)}")
         
     | 
| 
       123 
115 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
                         
     | 
| 
       125 
     | 
    
         
            -
                             
     | 
| 
      
 116 
     | 
    
         
            +
                        for field_name in parts:
         
     | 
| 
      
 117 
     | 
    
         
            +
                            attr_candidate = getattr(current_attr, field_name, None)
         
     | 
| 
      
 118 
     | 
    
         
            +
                            if attr_candidate is None:
         
     | 
| 
      
 119 
     | 
    
         
            +
                                raise ValueError(f"Invalid filter field: {'.'.join(parts)}")
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                            if hasattr(attr_candidate, "property") and isinstance(attr_candidate.property, RelationshipProperty):
         
     | 
| 
      
 122 
     | 
    
         
            +
                                current_attr = attr_candidate.property.mapper.class_
         
     | 
| 
      
 123 
     | 
    
         
            +
                            else:
         
     | 
| 
      
 124 
     | 
    
         
            +
                                current_attr = attr_candidate
         
     | 
| 
       126 
125 
     | 
    
         | 
| 
       127 
126 
     | 
    
         
             
                        if operator == "eq":
         
     | 
| 
       128 
127 
     | 
    
         
             
                            # e.g., column == value
         
     | 
| 
         @@ -146,7 +145,7 @@ class BaseManager(Generic[ModelType]): 
     | 
|
| 
       146 
145 
     | 
    
         | 
| 
       147 
146 
     | 
    
         
             
                        elif operator == "in":
         
     | 
| 
       148 
147 
     | 
    
         
             
                            if not isinstance(value, list):
         
     | 
| 
       149 
     | 
    
         
            -
                                raise ValueError(f"{'.'.join( 
     | 
| 
      
 148 
     | 
    
         
            +
                                raise ValueError(f"{'.'.join(parts)}__in requires a list, got {type(value)}")
         
     | 
| 
       150 
149 
     | 
    
         
             
                            self.filters.append(current_attr.in_(value))
         
     | 
| 
       151 
150 
     | 
    
         | 
| 
       152 
151 
     | 
    
         
             
                        elif operator == "contains":
         
     | 
| 
         @@ -18,7 +18,7 @@ class BasePermission: 
     | 
|
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
            class IsAdmin(BasePermission):
         
     | 
| 
       20 
20 
     | 
    
         
             
                def has_permission(self, claims: Claims) -> bool:
         
     | 
| 
       21 
     | 
    
         
            -
                    return claims.user_role == UserRole.ADMIN
         
     | 
| 
      
 21 
     | 
    
         
            +
                    return claims.user_role == UserRole.ADMIN and claims.shop_id is not None
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
            class IsCustomer(BasePermission):
         
     | 
| 
         @@ -11,15 +11,15 @@ rb_commons/http/consul.py,sha256=Ioq72VD1jGwoC96set7n2SgxN40olzI-myA2lwKkYi4,186 
     | 
|
| 
       11 
11 
     | 
    
         
             
            rb_commons/http/exceptions.py,sha256=EGRMr1cRgiJ9Q2tkfANbf0c6-zzXf1CD6J3cmCaT_FA,1885
         
     | 
| 
       12 
12 
     | 
    
         
             
            rb_commons/orm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         
     | 
| 
       13 
13 
     | 
    
         
             
            rb_commons/orm/exceptions.py,sha256=1aMctiEwrPjyehoXVX1l6ML5ZOhmDkmBISzlTD5ey1Y,509
         
     | 
| 
       14 
     | 
    
         
            -
            rb_commons/orm/managers.py,sha256= 
     | 
| 
      
 14 
     | 
    
         
            +
            rb_commons/orm/managers.py,sha256=PedAa8zEIrbeW0d9V0_2rrPvbYsJuB05_aVNnLewsI8,13893
         
     | 
| 
       15 
15 
     | 
    
         
             
            rb_commons/orm/services.py,sha256=71eRcJ4TxZvzNz-hLXo12X4U7PGK54ZfbLAb27AjZi8,1589
         
     | 
| 
       16 
16 
     | 
    
         
             
            rb_commons/permissions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         
     | 
| 
       17 
     | 
    
         
            -
            rb_commons/permissions/role_permissions.py,sha256= 
     | 
| 
      
 17 
     | 
    
         
            +
            rb_commons/permissions/role_permissions.py,sha256=HL50s5RHW1nk2U3-YTESg0EDGkJDu1vN4QchcfK-L5g,988
         
     | 
| 
       18 
18 
     | 
    
         
             
            rb_commons/schemes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         
     | 
| 
       19 
19 
     | 
    
         
             
            rb_commons/schemes/jwt.py,sha256=F66JJDhholuOPPzlKeoC6f1TL4gXg4oRUrV5yheNpyo,1675
         
     | 
| 
       20 
20 
     | 
    
         
             
            rb_commons/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         
     | 
| 
       21 
21 
     | 
    
         
             
            rb_commons/utils/media.py,sha256=KNY_9SdRa3Rp7d3B1tZaXkhmzVa65RcS62BYwZP1bVM,332
         
     | 
| 
       22 
     | 
    
         
            -
            rb_commons-0.4. 
     | 
| 
       23 
     | 
    
         
            -
            rb_commons-0.4. 
     | 
| 
       24 
     | 
    
         
            -
            rb_commons-0.4. 
     | 
| 
       25 
     | 
    
         
            -
            rb_commons-0.4. 
     | 
| 
      
 22 
     | 
    
         
            +
            rb_commons-0.4.2.dist-info/METADATA,sha256=VMbwhfKeMWhIbyVJ1NFfCRvtwG26z1MhOvPf_OAAz1g,6570
         
     | 
| 
      
 23 
     | 
    
         
            +
            rb_commons-0.4.2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
         
     | 
| 
      
 24 
     | 
    
         
            +
            rb_commons-0.4.2.dist-info/top_level.txt,sha256=HPx_WAYo3_fbg1WCeGHsz3wPGio1ucbnrlm2lmqlJog,11
         
     | 
| 
      
 25 
     | 
    
         
            +
            rb_commons-0.4.2.dist-info/RECORD,,
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     |