o
    rMf'                     @   sl   d dl mZ d dlmZ d dlmZ d dlZd dlmZ G dd de	Z
G dd	 d	eZG d
d deZdS )    )PropertyKey)QueryN)filterc                       s    e Zd ZdZ fddZ  ZS )	ModelMetazMetaclass for all Modelsc                    s   t t| ||| g | _ddlm} zStdd |rd|D ]}|j|  q|| | _|	 D ]}t
|| trB|| }|| | q/g }|  }	|	D ]}
|
jjdsZ||
j qKt| d| W d S W d S  typ   Y d S w )Nr   )get_managerc                 S   s
   t | tS N)
issubclassModel)b r   S/var/www/html/analyze/labelStudio/lib/python3.10/site-packages/boto/sdb/db/model.py<lambda>(   s   
 z$ModelMeta.__init__.<locals>.<lambda>__prop_names)superr   __init____sub_classes__boto.sdb.db.managerr   r   append_managerkeys
isinstancer   __property_config__
properties	__class____name__
startswithnamesetattr	NameError)clsr   basesdictr   basekeyproperty
prop_namespropspropr   r   r   r      s0   
zModelMeta.__init__)r   
__module____qualname____doc__r   __classcell__r   r   r+   r   r      s    r   c                   @   sJ  e Zd ZeZdZdZedd Zedd Z	ed<ddZ
ed=d	d
ZeZed<ddZed=ddZed=ddZedd Zed>ddZedd Zedd Zedd Zd<ddZdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd<d*d+ZeZd,d- Zd.d/ ZeZ d0d1 Z!d2d3 Z"d4d5 Z#d6d7 Z$d<d8d9Z%ed:d; Z&dS )?r   FNc                 C   s$   dd |   D }|  d|S )Nc                 S   s   g | ]}|j qS r   r   ).0cr   r   r   
<listcomp>C   s    z%Model.get_lineage.<locals>.<listcomp>.)mroreversejoin)r"   lr   r   r   get_lineageA   s   
zModel.get_lineagec                 C   s   | j S r	   r0   r"   r   r   r   kindG   s   z
Model.kindc                 C   s   |s| j }|| |S r	   )r   
get_object)r"   idmanagerr   r   r   
_get_by_idK   s   zModel._get_by_idc                    s*   t |tr fdd|D }|S  |S )Nc                    s   g | ]}  |qS r   )r?   )r1   r=   r:   r   r   r3   T   s    z#Model.get_by_id.<locals>.<listcomp>)r   listr?   )r"   idsparentobjsr   r:   r   	get_by_idQ   s   

zModel.get_by_idc                 C      t d)Nz%Key Names are not currently supportedNotImplementedError)r"   	key_namesrB   r   r   r   get_by_key_name[      zModel.get_by_key_namec                 K   s4   t | ||d}| D ]\}}|d| | q|S )Nlimit
next_tokenz%s =)r   itemsr   )r"   rL   rM   paramsqr&   valuer   r   r   find_   s   z
Model.findc                 C   s   | j ||dS )NrK   )rR   )r"   rL   rM   r   r   r   allf   s   z	Model.allc                 K   rE   )Nz%get_or_insert not currently supportedrF   )key_namekwr   r   r   get_or_insertj   rJ   zModel.get_or_insertTc                 C   sn   g }| r5| j  D ]}| j | }t|tr#|s|jjds#|| q	t| j	dkr1| j	d } nd } | s|S Nr   r   )
__dict__r   r   r   r   r   r   r   len	__bases__)r"   hiddenr   r&   r*   r   r   r   r   n   s   



zModel.propertiesc                 C   sn   d }| r5| j  D ]}| j | }t|tr#|jjds#||jkr#|}q	t| j	dkr1| j	d } nd } | s|S rW   )
rX   r   r   r   r   r   r   r   rY   rZ   )r"   	prop_namer'   r&   r*   r   r   r   find_property}   s   


zModel.find_propertyc              
   C   s6   t | dsddlm} || d d d d d d d d	| _| jS )N_xmlmanagerr   )
XMLManagerF)hasattrboto.sdb.db.manager.xmlmanagerr_   r^   )r"   r_   r   r   r   get_xmlmanager   s   


zModel.get_xmlmanagerc                 C   s   |   }||S r	   )rb   unmarshal_object)r"   fp
xmlmanagerr   r   r   from_xml   s   
zModel.from_xmlc                 K   s   d| _ | jddD ]}zt| |j|  W q	 ty   Y q	w d|v r)|d | _|| _|D ])}|dkrWz
t| |||  W q. tyV } zt	j
| W Y d }~q.d }~ww q.d S )NFr[   r>   )_loadedr   r    r   default_value
ValueErrorr   r=   	Exceptionbotolog	exception)selfr=   rU   r*   r&   er   r   r   r      s(   
zModel.__init__c                 C   s   d| j j| jf S )Nz%s<%s>)r   r   r=   ro   r   r   r   __repr__   s   zModel.__repr__c                 C   s
   t | jS r	   )strr=   rq   r   r   r   __str__      
zModel.__str__c                 C   s   |ot |to| j|jkS r	   )r   r   r=   )ro   otherr   r   r   __eq__   s   zModel.__eq__c                 C   s   | j | S r	   )r   get_raw_itemrq   r   r   r   _get_raw_item   s   zModel._get_raw_itemc                 C   s$   | j r| js| j|  d S d S d S r	   r=   rh   r   load_objectrq   r   r   r   load   s   z
Model.loadc                 C   s    | j rd| _| j|  d S d S )NFrz   rq   r   r   r   reload   s   zModel.reloadc                 C   s   | j | | | S )a  
        Save this object as it is, with an optional expected value

        :param expected_value: Optional tuple of Attribute, and Value that
            must be the same in order to save this object. If this
            condition is not met, an SDBResponseError will be raised with a
            Confict status code.
        :type expected_value: tuple or list
        :return: This object
        :rtype: :class:`boto.sdb.db.model.Model`
        )r   save_object)ro   expected_valuer   r   r   put   s   z	Model.putc                 C   s\   t |ts	J d|D ]}|| }| |}|sJ d| | j|| || q|   | S )z
        Save just these few attributes, not the whole object

        :param attrs: Attributes to save, key->value dict
        :type attrs: dict
        :return: self
        :rtype: :class:`boto.sdb.db.model.Model`
        z.Argument must be a dict of key->values to savezProperty not found: %s)r   r$   r]   r   set_propertyr}   )ro   attrsr\   rQ   r*   r   r   r   put_attributes   s   	
zModel.put_attributesc                 C   s0   t |ts	J d| jj| j| |   | S )z
        Delete just these attributes, not the whole object.

        :param attrs: Attributes to save, as a list of string names
        :type attrs: list
        :return: self
        :rtype: :class:`boto.sdb.db.model.Model`
        z3Argument must be a list of names of keys to delete.)r   r@   r   domaindelete_attributesr=   r}   )ro   r   r   r   r   r      s   	zModel.delete_attributesc                 C   s   | j |  d S r	   )r   delete_objectrq   r   r   r   delete   s   zModel.deletec                 C   s
   t | dS )N)objr   rq   r   r   r   r&      ru   z	Model.keyc                 C   s
   || _ d S r	   )r   )ro   r>   r   r   r   set_manager   ru   zModel.set_managerc                 C   s@   i }| j ddD ]}t| |j||j< q|| jd}| jj|iS )NFrg   )r   r=   )r   getattrr   r=   r   r   )ro   r)   r*   r   r   r   r   to_dict   s   zModel.to_dictc                 C   s   |   }|| |}|S r	   )rb   marshal_object)ro   docre   r   r   r   to_xml  s   zModel.to_xmlc                 C   s8   || j kr| S | jD ]}||}|dur|  S q
dS )z!Find a subclass with a given nameN)r   r   find_subclass)r"   r   scrr   r   r   r     s   


zModel.find_subclassr	   )NN)T)'r   r,   r-   r   __metaclass____consistent__r=   classmethodr9   r;   r?   rD   
get_by_idsrI   rR   rS   rV   r   r]   rb   rf   r   rr   rt   rw   ry   r|   r}   r   saver   r   save_attributesr   r&   r   r   r   r   r   r   r   r   r   <   s`    








r   c                   @   s   e Zd Zdd Zdd ZdS )Expandoc                 C   st   || j v rt| || d S |drt| || d S |dkr)t| || d S | j| || t| || d S )Nr   r=   )r   object__setattr__r   r   set_key_valuero   r   rQ   r   r   r   r     s   

zExpando.__setattr__c                 C   s2   | ds| j| |}|rt| || |S t)Nr   )r   r   get_key_valuer   r   AttributeErrorr   r   r   r   __getattr__"  s   
zExpando.__getattr__N)r   r,   r-   r   r   r   r   r   r   r     s    r   )boto.sdb.db.propertyr   boto.sdb.db.keyr   boto.sdb.db.queryr   rl   boto.compatr   typer   r   r   r   r   r   r   r   <module>   s     Z