o
    mi                     @  s  d dl mZ d dlZd dlmZmZmZ d dlm	Z	 d dl
mZmZ d dlmZ eddG d	d
 d
ZeddG dd dZeddG dd dZeddG dd dZeddG dd dZeddG dd dZeddG dd dZeddG dd dZeddG dd dZeddG dd dZeddG dd dZeddG dd  d ZeddG d!d" d"ZeddG d#d$ d$ZeddG d%d& d&ZeddG d'd( d(ZeddG d)d* d*ZeddG d+d, d,Z eddG d-d. d.Z!eddG d/d0 d0Z"eddG d1d2 d2Z#eddG d3d4 d4Z$eddG d5d6 d6Z%eddG d7d8 d8Z&eddG d9d: d:Z'eddG d;d< d<Z(G d=d> d>e)e	Z*eG d?d@ d@Z+eG dAdB dBZ,eG dCdD dDe,Z-eG dEdF dFe,Z.eG dGdH dHe,Z/eG dIdJ dJe,Z0h dKZ1h dLZ2h dMZ3dtdRdSZ4dudVdWZ5dvdZd[Z6dwd]d^Z7dxdadbZ8dydddeZ9dzdhdiZ:d{dldmZ;d|dpdqZ<d}drdsZ=dS )~    )annotationsN)asdict	dataclassfield)Enum)LiteralURIRef)from_n3T)frozenc                   @  s(   e Zd ZU ded< ded< d
ddZd	S )TopologyStatusstrstatedict[str, t.Any]primaryTagsreturnNonec                 C  s   g }t t j| j}t t j| j}t|ts!|d|t|f t|t	s1|d|t|f n|
 D ]\}}t|tsL|d| d|t|f q5|rTtd|d S )Nr   r   zprimaryTags key ''zInvalid TopologyStatus values: )tcastAnyr   r   
isinstancer   appendtypedictitems
ValueError)selfinvalidr   Zprimary_tagskeyvalue r    W/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/contrib/graphdb/models.py__post_init__   s   



zTopologyStatus.__post_init__Nr   r   __name__
__module____qualname____annotations__r"   r    r    r    r!   r         
 r   c                   @  (   e Zd ZU ded< ded< d	ddZdS )
RecoveryOperationr   namemessager   r   c                 C  sr   g }t t j| j}t t j| j}t|ts!|d|t|f t|ts0|d|t|f |r7t	d|d S )Nr,   r-   z"Invalid RecoveryOperation values: )
r   r   r   r,   r-   r   r   r   r   r   )r   r   r,   r-   r    r    r!   r"   '   s   


zRecoveryOperation.__post_init__Nr#   r$   r    r    r    r!   r+   "   r)   r+   c                   @  sP   e Zd ZU dZded< dZded< eedZded< dddZ	e
dddZdS )RecoveryStatusNzRecoveryOperation | Noner   
str | Noner-   default_factory	list[str]affectedNodesr   r   c                 C  s   g }t t j| j}t t j| j}t t j| j}|d ur-t|ts-|d|t	|f |d ur@t|t
s@|d|t	|f t|tsP|d|t	|f nt|D ]\}}t|t
sk|d| d|t	|f qT|rstd|d S )Nr   r-   r3   zaffectedNodes[]zInvalid RecoveryStatus values: )r   r   r   r   r-   r3   r   r+   r   r   r   list	enumerater   )r   r   r   r-   Zaffected_nodesindexr   r    r    r!   r"   ;   s"   


zRecoveryStatus.__post_init__datar   c                 C  sP   |s|  S d}d|v r|d durt di |d }| ||d|dg dS )a}  Create a RecoveryStatus instance from a dict.

        This is useful for converting JSON response data into the dataclass structure.
        Handles empty dict {} by returning a RecoveryStatus with all None/default values.
        The nested 'state' dict (if present) is automatically converted to
        a RecoveryOperation instance.

        Parameters:
            data: A dict containing the recovery status data, typically
                parsed from a JSON response. Can be an empty dict.

        Returns:
            A RecoveryStatus instance with nested dataclass objects.

        Raises:
            KeyError: If required keys are missing from the input dict.
            TypeError: If nested 'state' cannot be unpacked into RecoveryOperation.
            ValueError: If field validation fails in RecoveryOperation or
                RecoveryStatus (e.g., invalid types).
        Nr   r-   r3   )r   r-   r3   r    )r+   get)clsr8   r   r    r    r!   	from_dictO   s   
zRecoveryStatus.from_dictr#   )r8   r   r   r.   )r%   r&   r'   r   r(   r-   r   r5   r3   r"   classmethodr;   r    r    r    r!   r.   5   s   
 
r.   c                   @  sv   e Zd ZU ded< ded< ded< ded< ded< ded	< ded
< ded< ded< ded< dddZedddZdS )
NodeStatusr   address	nodeStateinttermzdict[str, str]
syncStatuslastLogTermlastLogIndexendpointzRecoveryStatus | NonerecoveryStatuszTopologyStatus | NonetopologyStatuszbool | NoneclusterEnabledr   r   c                 C  sp  g }t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j	}t t j| j
}	t t j| j}
t t j| j}t|tsa|d|t|f t|tsp|d|t|f t|tur|d|t|f t|ts|d|t|f n/| D ]*\}}t|ts|d| d|t|f t|ts|d| d|t|f qt|tur|d	|t|f t|tur|d
|t|f t|ts|d|t|f |	d urt|	ts|d|	t|	f |
d urt|
ts|d|
t|
f |d ur.t|tur.|d|t|f |r6td|d S )Nr>   r?   rA   rB   zsyncStatus key 'r   zsyncStatus['z']rC   rD   rE   rF   rG   rH   zInvalid NodeStatus values: )r   r   r   r>   r?   rA   rB   rC   rD   rE   rF   rG   rH   r   r   r   r   r@   r   r   r.   r   boolr   )r   r   r>   Z
node_staterA   Zsync_statusZlast_log_termZlast_log_indexrE   recovery_statustopology_statusZcluster_enabledr   r   r    r    r!   r"      sX   






zNodeStatus.__post_init__r8   r   c                 C  s   d}d|v r|d rt |d }n	d|v rt i }d}d|v r.|d r.tdi |d }| |d |d |d |d |d |d	 |d
 |||dd
S )aZ  Create a NodeStatus instance from a dict.

        This is useful for converting JSON response data into the dataclass structure.
        The nested 'recoveryStatus' and 'topologyStatus' dicts are automatically
        converted to their respective dataclass instances.

        Parameters:
            data: A dict containing the node status data, typically
                parsed from a JSON response.

        Returns:
            A NodeStatus instance with nested dataclass objects.

        Raises:
            KeyError: If required keys are missing from the input dict.
            TypeError: If nested dicts cannot be unpacked into their respective
                dataclass instances.
            ValueError: If field validation fails in TopologyStatus, RecoveryOperation,
                RecoveryStatus, or NodeStatus (e.g., invalid types).
        NrF   rG   r>   r?   rA   rB   rC   rD   rE   rH   )
r>   r?   rA   rB   rC   rD   rE   rF   rG   rH   r    )r.   r;   r   r9   )r:   r8   rJ   rK   r    r    r!   r;      s(   
zNodeStatus.from_dictNr#   )r8   r   r   r=   r%   r&   r'   r(   r"   r<   r;   r    r    r    r!   r=   t   s   
 
/r=   c                   @  sf   e Zd ZU ded< ded< ded< ded< ded< ded< ded< d	ed
< dddZedddZdS )ClusterRequestr@   electionMinTimeoutelectionRangeTimeoutheartbeatIntervalmessageSizeKBverificationTimeouttransactionLogMaximumSizeGBbatchUpdateIntervalr2   nodesr   r   c                 C  s  g }t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j	}t t j| j
}	t|turR|d|t|f t|turb|d|t|f t|turr|d|t|f t|tur|d|t|f t|tur|d|t|f t|tur|d|t|f t|tur|d|t|f t|	ts|d|	t|	f nt|	D ]\}
}t|ts|d	|
 d
|t|f q|rtd|d S )NrN   rO   rP   rQ   rR   rS   rT   rU   znodes[r4   zInvalid ClusterRequest values: )r   r   r   rN   rO   rP   rQ   rR   rS   rT   rU   r   r@   r   r   r5   r6   r   r   )r   r   Zelection_min_timeoutZelection_range_timeoutZheartbeat_intervalZmessage_size_kbZverification_timeoutZtransaction_log_maximum_size_gbZbatch_update_intervalrU   r7   r   r    r    r!   r"      st   


zClusterRequest.__post_init__r8   r   c              
   C  s8   | |d |d |d |d |d |d |d |d d	S )
a|  Create a ClusterRequest instance from a dict.

        This is useful for converting JSON response data into the dataclass structure.

        Parameters:
            data: A dict containing the cluster request data, typically
                parsed from a JSON response.

        Returns:
            A ClusterRequest instance.

        Raises:
            KeyError: If required keys are missing from the input dict.
            TypeError: If the dict cannot be unpacked into ClusterRequest.
            ValueError: If field validation fails in ClusterRequest
                (e.g., invalid types for integer fields or nodes).
        rN   rO   rP   rQ   rR   rS   rT   rU   )rN   rO   rP   rQ   rR   rS   rT   rU   r    )r:   r8   r    r    r!   r;   .  s   zClusterRequest.from_dictNr#   )r8   r   r   rM   rL   r    r    r    r!   rM      s   
 
BrM   c                   @  s<   e Zd ZU ded< ded< ded< dZded< dd
dZdS )SnapshotOptionsBeanrI   withRepositoryDatawithSystemDatacleanDataDirNzlist[str] | Nonerepositoriesr   r   c                 C  s  g }t t j| j}t t j| j}t t j| j}t t j| j}t|tur2|	d|t|f t|turB|	d|t|f t|turR|	d|t|f |d urt
|tsf|	d|t|f nt|D ]\}}t
|ts|	d| d|t|f qj|rtd|d S )NrW   rX   rY   rZ   zrepositories[r4   z$Invalid SnapshotOptionsBean values: )r   r   r   rW   rX   rY   rZ   r   rI   r   r   r5   r6   r   r   )r   r   Zwith_repository_dataZwith_system_dataZclean_data_dirrZ   r7   r   r    r    r!   r"   T  s.   


z!SnapshotOptionsBean.__post_init__r#   )r%   r&   r'   r(   rZ   r"   r    r    r    r!   rV   M  s   
 rV   c                   @  sb   e Zd ZU ded< ded< ded< ded< ded	< d
ed< dZded< dddZedddZdS )BackupOperationBeanr   idusernamezt.Literal['CREATE_BACKUP_IN_PROGRESS', 'RESTORE_BACKUP_IN_PROGRESS', 'CREATE_CLOUD_BACKUP_IN_PROGRESS', 'RESTORE_CLOUD_BACKUP_IN_PROGRESS']	operationr2   affectedRepositoriesr@   msSinceCreatedrV   snapshotOptionsNr/   nodePerformingClusterBackupr   r   c                 C  s  h d}g }t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j	}	t
|tsM|d|t|f t
|ts\|d|t|f t
|tre||vro|d|t|f t
|ts|d|t|f nt|D ]\}
}t
|ts|d|
 d|t|f qt|tur|d|t|f t
|ts|d	|t|f |	d urt
|	ts|d
|	t|	f |rtd|d S )N>   Z RESTORE_CLOUD_BACKUP_IN_PROGRESSZCREATE_BACKUP_IN_PROGRESSZRESTORE_BACKUP_IN_PROGRESSZCREATE_CLOUD_BACKUP_IN_PROGRESSr\   r]   r^   r_   zaffectedRepositories[r4   r`   ra   rb   z$Invalid BackupOperationBean values: )r   r   r   r\   r]   r^   r_   r`   ra   rb   r   r   r   r   r5   r6   r@   rV   r   )r   Z_allowed_operationsr   Zid_r]   r^   Zaffected_repositoriesZms_since_createdsnapshot_optionsZnode_performing_cluster_backupr7   r   r    r    r!   r"     s\   






z!BackupOperationBean.__post_init__r8   r   c              
   C  sB   t d
i |d }| |d |d |d |d |d ||ddS )aN  Create a BackupOperationBean instance from a dict.

        This is useful for converting JSON response data into the dataclass structure.
        The nested 'snapshotOptions' dict is automatically converted to
        a SnapshotOptionsBean instance.

        Parameters:
            data: A dict containing the backup operation data, typically
                parsed from a JSON response.

        Returns:
            A BackupOperationBean instance with nested dataclass objects.

        Raises:
            KeyError: If required keys are missing from the input dict.
            TypeError: If nested 'snapshotOptions' cannot be unpacked into
                SnapshotOptionsBean.
            ValueError: If field validation fails in SnapshotOptionsBean or
                BackupOperationBean (e.g., invalid types or operation values).
        ra   r\   r]   r^   r_   r`   rb   )r\   r]   r^   r_   r`   ra   rb   Nr    )rV   r9   )r:   r8   rc   r    r    r!   r;     s   zBackupOperationBean.from_dictr#   )r8   r   r   r[   )r%   r&   r'   r(   rb   r"   r<   r;   r    r    r    r!   r[   p  s   
 
8r[   c                   @  r*   )
StructuresStatisticsr@   cacheHit	cacheMissr   r   c                 C  v   g }t t j| j}t t j| j}t|tur"|d|t|f t|tur2|d|t|f |r9td|d S )Nre   rf   z%Invalid StructuresStatistics values: )	r   r   r   re   rf   r   r@   r   r   )r   r   Z	cache_hitZ
cache_missr    r    r!   r"        
z"StructuresStatistics.__post_init__Nr#   r$   r    r    r    r!   rd     r)   rd   c                   @  r*   )
RepositoryStatisticsQueriesr@   slow
suboptimalr   r   c                 C  rg   )Nrj   rk   z,Invalid RepositoryStatisticsQueries values: )	r   r   r   rj   rk   r   r@   r   r   )r   r   rj   rk   r    r    r!   r"     rh   z)RepositoryStatisticsQueries.__post_init__Nr#   r$   r    r    r    r!   ri     r)   ri   c                   @  s0   e Zd ZU ded< ded< ded< d
ddZd	S )RepositoryStatisticsEntityPoolr@   
epoolReadsepoolWrites	epoolSizer   r   c                 C  s   g }t t j| j}t t j| j}t t j| j}t|tur*|d|t|f t|tur:|d|t|f t|turJ|d|t|f |rQt	d|d S )Nrm   rn   ro   z/Invalid RepositoryStatisticsEntityPool values: )
r   r   r   rm   rn   ro   r   r@   r   r   )r   r   Zepool_readsZepool_writesZ
epool_sizer    r    r!   r"     s   
z,RepositoryStatisticsEntityPool.__post_init__Nr#   r$   r    r    r    r!   rl     s
   
 rl   c                   @  sF   e Zd ZU ded< ded< ded< ded< dd
dZedddZdS )RepositoryStatisticsri   queriesrl   
entityPoolr@   activeTransactionsopenConnectionsr   r   c                 C  s   g }t t j| j}t t j| j}t t j| j}t t j| j}t|ts1|	d|t
|f t|ts@|	d|t
|f t
|turP|	d|t
|f t
|tur`|	d|t
|f |rgtd|d S )Nrq   rr   rs   rt   z%Invalid RepositoryStatistics values: )r   r   r   rq   rr   rs   rt   r   ri   r   r   rl   r@   r   )r   r   rq   entity_poolZactive_transactionsZopen_connectionsr    r    r!   r"     s(   


z"RepositoryStatistics.__post_init__r8   r   c                 C  s<   t di |d }tdi |d }| |||d |d dS )a  Create a RepositoryStatistics instance from a dict.

        This is useful for converting JSON response data into the dataclass structure.
        The nested 'queries' and 'entityPool' dicts are automatically converted to
        their respective dataclass instances.

        Parameters:
            data: A dict containing the repository statistics data, typically
                parsed from a JSON response.

        Returns:
            A RepositoryStatistics instance with nested dataclass objects.

        Raises:
            KeyError: If required keys are missing from the input dict.
            TypeError: If nested dicts cannot be unpacked into their respective
                dataclass instances.
            ValueError: If field validation fails in RepositoryStatisticsQueries,
                RepositoryStatisticsEntityPool, or RepositoryStatistics
                (e.g., invalid types).
        rq   rr   rs   rt   )rq   rr   rs   rt   Nr    )ri   rl   )r:   r8   rq   ru   r    r    r!   r;   4  s   zRepositoryStatistics.from_dictNr#   )r8   r   r   rp   rL   r    r    r    r!   rp     s   
 
rp   c                   @  s8   e Zd ZU ded< ded< ded< ded< ddd	Zd
S )InfrastructureMemoryUsager@   max	committedinitusedr   r   c                 C  s   g }t t j| j}t t j| j}t t j| j}t t j| j}t|tur2|	d|t|f t|turB|	d|t|f t|turR|	d|t|f t|turb|	d|t|f |rit
d|d S )Nrw   rx   ry   rz   z*Invalid InfrastructureMemoryUsage values: )r   r   r   rw   rx   ry   rz   r   r@   r   r   )r   r   Zmax_valrx   ry   rz   r    r    r!   r"   \  s    
z'InfrastructureMemoryUsage.__post_init__Nr#   r$   r    r    r    r!   rv   U  s   
 rv   c                   @  sH   e Zd ZU ded< ded< ded< ded< ded< ded< dd
dZdS )InfrastructureStorageMemoryr@   dataDirUsedworkDirUsedlogsDirUseddataDirFreeworkDirFreelogsDirFreer   r   c                 C  s6  g }t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t	|t
urB|d|t	|f t	|t
urR|d|t	|f t	|t
urb|d|t	|f t	|t
urr|d|t	|f t	|t
ur|d|t	|f t	|t
ur|d|t	|f |rtd|d S )Nr|   r}   r~   r   r   r   z,Invalid InfrastructureStorageMemory values: )r   r   r   r|   r}   r~   r   r   r   r   r@   r   r   )r   r   Zdata_dir_usedZwork_dir_usedZlogs_dir_usedZdata_dir_freeZwork_dir_freeZlogs_dir_freer    r    r!   r"   y  s,   
z)InfrastructureStorageMemory.__post_init__Nr#   r$   r    r    r    r!   r{   p  s   
 r{   c                   @  sn   e Zd ZU ded< ded< ded< ded< ded	< ded
< ded< ded< ded< dddZedddZdS )InfrastructureStatisticsrv   heapMemoryUsagenonHeapMemoryUsager{   storageMemoryr@   threadCountfloatcpuLoad
classCountgcCountopenFileDescriptorsmaxFileDescriptorsr   r   c                 C  s  g }t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j	}t t j| j
}	t t j| j}
t|tsY|d|t|f t|tsh|d|t|f t|tsw|d|t|f t|tur|d|t|f t|turt|tur|d|t|f t|tur|d|t|f t|tur|d|t|f t|	tur|d|	t|	f t|
tur|d	|
t|
f |rtd
|d S )Nr   r   r   r   r   r   r   r   r   z)Invalid InfrastructureStatistics values: )r   r   r   r   r   r   r   r   r   r   r   r   r   rv   r   r   r{   r@   r   r   )r   r   heap_memory_usagenon_heap_memory_usagestorage_memoryZthread_countZcpu_loadZclass_countZgc_countZopen_file_descriptorsZmax_file_descriptorsr    r    r!   r"     sZ   



z&InfrastructureStatistics.__post_init__r8   r   c                 C  sl   t di |d }t di |d }tdi |d }| ||||d t|d |d |d |d |d	 d
	S )a  Create an InfrastructureStatistics instance from a dict.

        This is useful for converting JSON response data into the dataclass structure.
        The nested memory and storage dicts are automatically converted to their
        respective dataclass instances.

        Parameters:
            data: A dict containing the infrastructure statistics data, typically
                parsed from a JSON response.

        Returns:
            An InfrastructureStatistics instance with nested dataclass objects.

        Raises:
            KeyError: If required keys are missing from the input dict.
            TypeError: If nested dicts cannot be unpacked into their respective
                dataclass instances.
            ValueError: If field validation fails in InfrastructureMemoryUsage,
                InfrastructureStorageMemory, or InfrastructureStatistics
                (e.g., invalid types).
        r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   Nr    )rv   r{   r   )r:   r8   r   r   r   r    r    r!   r;     s   
z"InfrastructureStatistics.from_dictNr#   )r8   r   r   r   rL   r    r    r    r!   r     s   
 
2r   c                   @  s   e Zd ZU dZded< dZded< dZded< dZded< dZded< dZ	ded	< dZ
ded
< dZded< dZded< dddZdddZdS )ParserSettingsFrI   preserveBNodeIdsfailOnUnknownDataTypesverifyDataTypeValuesnormalizeDataTypeValuesfailOnUnknownLanguageTagsTverifyLanguageTagsnormalizeLanguageTagsstopOnErrorNt.Any | NonecontextLinkr   r   c           
      C  s  g }t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j	}t t j| j
}	t|turR|d|t|f t|turb|d|t|f t|turr|d|t|f t|tur|d|t|f t|tur|d|t|f t|tur|d|t|f t|tur|d|t|f t|	tur|d|	t|	f |rtd	|d S )
Nr   r   r   r   r   r   r   r   zInvalid ParserSettings values: )r   r   r   r   r   r   r   r   r   r   r   r   rI   r   r   )
r   r   Zpreserve_bnode_idsZfail_on_unknown_data_typesZverify_data_type_valuesZnormalize_data_type_valuesZfail_on_unknown_language_tagsZverify_language_tagsZnormalize_language_tagsZstop_on_errorr    r    r!   r"     sr   
zParserSettings.__post_init__r   c                 C     t | S Nr   r   r    r    r!   as_dictG     zParserSettings.as_dictr#   r   r   )r%   r&   r'   r   r(   r   r   r   r   r   r   r   r   r"   r   r    r    r    r!   r     s   
 
Cr   c                   @  s   e Zd ZU ded< ded< ded< ded< ded< ded	< ded
< ded< dZded< dZded< eedZded< dZ	ded< dZ
ded< dZded< dZded< dZded< eedZded< d%d d!Zd&d#d$ZdS )'ImportSettingsr   r,   zJt.Literal['PENDING', 'IMPORTING', 'DONE', 'ERROR', 'NONE', 'INTERRUPTING']statussizer@   lastModifiedimportedaddedStatementsremovedStatementsnumReplacedGraphs r-   Nr   contextr0   zt.ListreplaceGraphsbaseURIFrI   forceSerialfiler   formatr8   r   parserSettingsr   r   c                 C  s  h d}g }t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t t j| j	}	t t j| j
}
t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t|ts}|d|t|f ||vr|d|t|f t|ts|d|t|f t|ts|d|t|f t|tur|d|t|f t|ts|d|t|f t|	ts|d|	t|	f t|
ts|d	|
t|
f t|tur|d
|t|f t|tur|d|t|f t|tur|d|t|f t|tur)|d|t|f t|tur:|d|t|f |rBtd|d S )N>   ZINTERRUPTINGZ	IMPORTINGERRORZDONEZPENDINGNONEr,   r   r-   r   r   r   r   r   r   r   r   r   r   zInvalid ImportSettings values: )r   r   r   r,   r   r-   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   rI   r   r@   r   )r   Z_allowed_statusr   r,   r   r-   Zreplace_graphsZforce_serialtype_Zparser_settingsr   Zlast_modifiedr   Zadded_statementsZremoved_statementsZnum_replaced_graphsr    r    r!   r"   _  sd   






zImportSettings.__post_init__r   c                 C  r   r   r   r   r    r    r!   r     r   zImportSettings.as_dictr#   r   )r%   r&   r'   r(   r-   r   r   r5   r   r   r   r   r   r8   r   r   r"   r   r    r    r    r!   r   K  s(   
 
?r   c                   @  s6   e Zd ZU ded< dZded< ddd	ZdddZdS )ServerImportBodyr2   	fileNamesNzImportSettings | NoneimportSettingsr   r   c                 C  s   g }t t j| j}t t j| j}|d ur%t|ts%|d|t|f t|t	s5|d|t|f nt
|D ]\}}t|tsP|d| d|t|f q9|rXtd|d S )Nr   r   z
fileNames[r4   z!Invalid ServerImportBody values: )r   r   r   r   r   r   r   r   r   r5   r6   r   r   )r   r   Zimport_settingsZ
file_namesr7   r   r    r    r!   r"     s    



zServerImportBody.__post_init__r   c                 C  s"   t | }| jd u r|dd  |S )Nr   )r   r   pop)r   resultr    r    r!   r     s   
zServerImportBody.as_dictr#   r   )r%   r&   r'   r(   r   r"   r   r    r    r    r!   r     s
   
 
r   c                   @  sN   e Zd ZU eddZded< eedZded< eedZ	ded	< dddZ
dS )
UserUpdater   )defaultr   passwordr0   r   appSettingslist[t.Any]
gptThreadsr   c                 C  r   r   r   r   r    r    r!   r     r   zUserUpdate.as_dictNr   )r%   r&   r'   r   r   r(   r   r   r5   r   r   r    r    r    r!   r     s
   
 r   c                   @  sl   e Zd ZU dZded< ded< eedZded< eedZ	ded	< eedZ
d
ed< dddZdddZdS )
UserCreatezDataclass for creating a new user in GraphDB.

    Unlike `User`, this class does not include `dateCreated` since
    GraphDB automatically assigns this value when the user is created.
    r   r]   r   r0   r2   grantedAuthoritiesr   r   r   r   r   r   c           
      C  sh  g }t t j| j}t t j| j}t t j| j}t t j| j}t t j| j}t|t	s9|
d|t|f t|t	sH|
d|t|f t|tsX|
d|t|f nt|D ]\}}t|t	ss|
d| d|t|f q\t|ts|
d|t|f n| D ]}	t|	t	s|
d|	t|	f  nqt|ts|
d|t|f |rtd	|d S )
Nr]   r   r   grantedAuthorities[r4   r   appSettings keyr   zInvalid UserCreate values: )r   r   r   r]   r   r   r   r   r   r   r   r   r5   r6   r   keysr   )
r   r   r]   r   granted_authoritiesapp_settingsgpt_threadsr7   r   r   r    r    r!   r"     s<   







zUserCreate.__post_init__c                 C  r   r   r   r   r    r    r!   r     r   zUserCreate.as_dictNr#   r   )r%   r&   r'   __doc__r(   r   r5   r   r   r   r   r"   r   r    r    r    r!   r     s   
 
$r   c                   @  sn   e Zd ZU ded< ded< ded< eedZded< eedZd	ed
< eedZ	ded< dddZ
dd ZdS )Userr   r]   r   r@   dateCreatedr0   r2   r   r   r   r   r   r   r   c                 C  s  | j d u rt| dg  | jd u rt| di  | jd u r$t| dg  g }ttj| j}ttj| j	}ttj| j
}ttj| j }ttj| j}ttj| j}t|tse|d|t|f t|tst|d|t|f t|ts|d|t|f t|ts|d|t|f nt|D ]\}}	t|	ts|d| d|	t|	f qt|ts|d|t|f n| D ]}
t|
ts|d	|
t|
f  nqt|ts|d|t|f |rtd
|d S )Nr   r   r   r]   r   r   r   r4   r   zInvalid User values: )r   object__setattr__r   r   r   r   r   r]   r   r   r   r   r   r   r@   r5   r6   r   r   r   )r   r   r]   r   Zdate_createdr   r   r   r7   r   r   r    r    r!   r"   
  sN   











zUser.__post_init__c                 C  r   r   r   r   r    r    r!   r   9  r   zUser.as_dictNr#   )r%   r&   r'   r(   r   r5   r   r   r   r   r"   r   r    r    r    r!   r     s   
 
/r   c                   @  sn   e Zd ZU dZded< eedZded< eedZ	ded< d	Z
d
ed< dZded< dddZedddZdS )AuthenticatedUsera  Represents an authenticated user returned from POST /rest/login.

    Attributes:
        username: The username of the authenticated user.
        authorities: List of granted authorities/roles (e.g., ["ROLE_USER", "ROLE_ADMIN"]).
        appSettings: Application settings for the user.
        external: Whether the user is external (e.g., from LDAP/OAuth).
        token: The full Authorization header value (e.g., "GDB <token>").
            Can be passed directly to GraphDBClient's auth parameter.
    r   r]   r0   r2   authoritiesr   r   FrI   externalr   tokenr   r   c           
      C  s  | j d u rt| dg  | jd u rt| di  g }ttj| j}ttj| j }ttj| j}ttj| j}ttj| j	}t
|tsQ|d|t|f t
|tsa|d|t|f nt|D ]\}}t
|ts||d| d|t|f qet
|ts|d|t|f n| D ]}	t
|	ts|d|	t|	f  nqt|tur|d|t|f t
|ts|d|t|f |rtd	|d S )
Nr   r   r]   authorities[r4   r   r   r   z"Invalid AuthenticatedUser values: )r   r   r   r   r   r   r   r]   r   r   r   r   r   r   r5   r6   r   r   rI   r   )
r   r   r]   r   r   r   r   r7   r   r   r    r    r!   r"   P  s@   








zAuthenticatedUser.__post_init__r8   c                 C  sP   t |ts	tdd|vrtd| |d |dg |di |dd|dS )	a  Create an AuthenticatedUser from API response data and token.

        Parameters:
            data: The JSON response body from POST /rest/login.
            token: The GDB token extracted from the Authorization header.

        Returns:
            An AuthenticatedUser instance.

        Raises:
            ValueError: If required fields are missing or invalid.
            TypeError: If data is not a dict.
        zResponse data must be a dictr]   z%Response data must contain 'username'r   r   r   F)r]   r   r   r   r   )r   r   	TypeErrorr   r9   )r:   r8   r   r    r    r!   from_responseu  s   



zAuthenticatedUser.from_responseNr#   )r8   r   r   r   r   r   )r%   r&   r'   r   r(   r   r5   r   r   r   r   r   r"   r<   r   r    r    r    r!   r   =  s   
 
%r   c                   @  sL   e Zd ZU ded< eedZded< eedZded< dd
dZ	dd Z
dS )FreeAccessSettingsrI   enabledr0   r2   r   r   r   r   r   c                 C  s  g }t t j| j}t t j| j}t t j| j}t|tur*|d|t|f t	|t
s:|d|t|f nt|D ]\}}t	|tsU|d| d|t|f q>t	|tsf|d|t|f n| D ]}t	|ts}|d|t|f  nqj|rtd|d S )Nr   r   r   r4   r   r   z#Invalid FreeAccessSettings values: )r   r   r   r   r   r   r   rI   r   r   r5   r6   r   r   r   r   )r   r   r   r   r   r7   r   r   r    r    r!   r"     s,   




z FreeAccessSettings.__post_init__c                 C  r   r   r   r   r    r    r!   r     r   zFreeAccessSettings.as_dictNr#   )r%   r&   r'   r(   r   r5   r   r   r   r"   r   r    r    r    r!   r     s   
 
r   c                   @  s.   e Zd ZU ded< ded< ded< dd ZdS )RepositorySizeInfor@   inferredtotalexplicitc                   sl   g }t  jtur|d t  jtur|d t  jtur&|d |r4td fdd|D d S )Nr   r   r   z#Invalid RepositorySizeInfo values: c                   s&   g | ]}| j | t j | fqS r    )__dict__r   ).0xr   r    r!   
<listcomp>  s   & z4RepositorySizeInfo.__post_init__.<locals>.<listcomp>)r   r   r@   r   r   r   r   )r   r   r    r   r!   r"     s   


z RepositorySizeInfo.__post_init__Nr$   r    r    r    r!   r     s
   
 r   c                   @  s&   e Zd ZU ded< ded< ded< dS )OWLimParameterr   r,   labelr   N)r%   r&   r'   r(   r    r    r    r!   r     s   
 r   c                   @  sH   e Zd ZU ded< ded< ded< ded< ded< eedZded	< d
S )RepositoryConfigBeanr   r\   titler   
sesameTypelocationr0   dict[str, OWLimParameter]paramsN)r%   r&   r'   r(   r   r   r   r    r    r    r!   r     s   
 r   c                   @  sd   e Zd ZU ded< ded< ded< ded< ded< eedZded	< eedZded
< dddZdS )RepositoryConfigBeanCreater   r\   r   r   r   r   r0   r   r   missingDefaultsr   r   c                 C  r   )a  Serialize the dataclass to a Python dict.

        Returns:
            dict: A dictionary representation of the dataclass suitable for use
                with httpx POST requests (e.g., via the `json` parameter).

        Examples:
            >>> config = RepositoryConfigBeanCreate(
            ...     id="test-repo",
            ...     title="Test Repository",
            ...     type="graphdb:FreeSailRepository",
            ...     sesameType="graphdb:FreeSailRepository",
            ...     location="",
            ... )
            >>> config_dict = config.as_dict()
            >>> isinstance(config_dict, dict)
            True
        r   r   r    r    r!   r     s   z"RepositoryConfigBeanCreate.as_dictN)r   r   )	r%   r&   r'   r(   r   r   r   r   r   r    r    r    r!   r     s   
 r   c                   @  s$   e Zd ZdZdZdZdZdZdZdS )RepositoryStatez(Enumeration for repository state values.INACTIVESTARTINGRUNNING
RESTARTINGSTOPPINGN)	r%   r&   r'   r   r   r   r   r   r   r    r    r    r!   r     s    r   c                   @  s   e Zd ZU dZded< dZded< dZded< dZded< dZded< dZ	ded	< dZ
ded
< dZded< dZded< dZded< dZded< dZded< edddZdS )GraphDBRepositoryNzt.Optional[str]r\   r   uriexternalUrlzt.Optional[bool]localr   r   r   readablewritableunsupportedzt.Optional[RepositoryState]r   r8   r   r   c                 C  s:   t |}d|v r|d durt|d |d< | di |S )a  Create a GraphDBRepository instance from a dict.

        Parameters:
            data: A dict containing the repository data, typically
                parsed from a JSON response.

        Returns:
            A GraphDBRepository instance.

        Raises:
            TypeError: If the dict contains keys that do not match
                GraphDBRepository fields.
            ValueError: If the 'state' value is not a valid RepositoryState.
        r   Nr    )r   r   )r:   r8   Z	data_copyr    r    r!   r;     s   zGraphDBRepository.from_dict)r8   r   r   r   )r%   r&   r'   r\   r(   r   r   r   r   r   r   r   r   r   r   r   r<   r;   r    r    r    r!   r     s   
 r   c                   @  s>   e Zd ZU ded< ded< ded< dd	d
ZedddZdS )AccessControlEntryz9t.Literal['statement', 'clear_graph', 'plugin', 'system']scope%t.Literal['allow', 'deny', 'abstain']policyr   roler   r   c                 C  s   t d)Nz+Use a concrete AccessControlEntry subclass.)NotImplementedErrorr   r    r    r!   r   2  r   zAccessControlEntry.as_dictr8   r   pSystemAccessControlEntry | StatementAccessControlEntry | PluginAccessControlEntry | ClearGraphAccessControlEntryc              
   C  s  t |ts	td|d}|dkr/t|d}t|d}t|d}td|||dS |dkrpt|d}t|d}t|d}t|d	}t	|d
}t
|d}t|d}	td|||||||	dS |dkrt|d}t|d}t|d}t|d}
td||||
dS |dkrt|d}t|d}t|d}	td|||	dS td|)a  Create an AccessControlEntry subclass instance from raw GraphDB data.

        Note: we perform parse validation essentially twice (here and in the
        subclass's __post_init__) to ensure mypy is satisfied with the value's type.

        Parameters:
            data: A dict containing the access control entry data, typically
                parsed from a JSON response.

        Returns:
            An AccessControlEntry subclass instance (SystemAccessControlEntry,
            StatementAccessControlEntry, PluginAccessControlEntry, or
            ClearGraphAccessControlEntry) depending on the 'scope' field.

        Raises:
            TypeError: If data is not a dict.
            ValueError: If 'scope' is not a supported value ('system', 'statement',
                'plugin', 'clear_graph'), or if any field fails validation
                (e.g., invalid policy, operation, role, plugin, subject,
                predicate, object, or graph values).
        zACL entry must be a mapping.r   systemr   r   r^   r   r   r   r^   Z	statementsubject	predicater   r   )r   r   r   r^   r   r   r   graphpluginr   r   r   r^   r  Zclear_graph)r   r   r   r   zUnsupported FGAC scope: )r   r   r   r9   _parse_policy_parse_role_parse_operationSystemAccessControlEntry_parse_subject_parse_predicate_parse_object_parse_graphStatementAccessControlEntry_parse_pluginPluginAccessControlEntryClearGraphAccessControlEntryr   )r:   r8   r   r   r   r^   r   r   objr   r  r    r    r!   r;   5  sl   


zAccessControlEntry.from_dictNr   )r8   r   r   r   )r%   r&   r'   r(   r   r<   r;   r    r    r    r!   r   ,  s   
 
r   c                   @  B   e Zd ZU ded< ded< ded< ded< dddZdddZdS )r  zt.Literal['system']r   r   r   r   r   t.Literal['read', 'write', '*']r^   r   r   c                 C  (   t | j| _t| j| _t| j| _d S r   )r  r   r  r   r  r^   r   r    r    r!   r"        z&SystemAccessControlEntry.__post_init__r   c                 C  s   | j | j| j| jdS )Nr   r   r   r    r    r!   r     s
   z SystemAccessControlEntry.as_dictNr#   r   r%   r&   r'   r(   r"   r   r    r    r    r!   r       
 
r  c                   @  sb   e Zd ZU ded< ded< ded< ded< d	ed
< d	ed< ded< ded< dddZdddZdS )r  zt.Literal['statement']r   r   r   r   r   r  r^   t.Literal['*'] | URIRefr   r   !t.Literal['*'] | URIRef | Literalr   +t.Literal['*', 'named', 'default'] | URIRefr   r   r   c                 C  sX   t | j| _t| j| _t| j| _t| j| _t| j	| _	t
| j| _t| j| _d S r   )r  r   r  r   r  r^   r  r   r  r   r	  r   r
  r   r   r    r    r!   r"     s   z)StatementAccessControlEntry.__post_init__r   c              	   C  s6   | j | j| j| jt| jt| jt| jt| jdS )N)r   r   r   r^   r   r   r   r   )	r   r   r   r^   _format_termr   r   r   r   r   r    r    r!   r     s   z#StatementAccessControlEntry.as_dictNr#   r   r  r    r    r    r!   r    s   
 
	r  c                   @  sJ   e Zd ZU ded< ded< ded< ded< ded	< dddZdddZdS )r  zt.Literal['plugin']r   r   r   r   r   r  r^   r  r   r   c                 C  s4   t | j| _t| j| _t| j| _t| j| _d S r   )r  r   r  r   r  r^   r  r  r   r    r    r!   r"     s   z&PluginAccessControlEntry.__post_init__r   c                 C  s   | j | j| j| j| jdS )Nr  r  r   r    r    r!   r     s   z PluginAccessControlEntry.as_dictNr#   r   r  r    r    r    r!   r    s   
 
r  c                   @  r  )r  zt.Literal['clear_graph']r   r   r   r   r   r  r   r   r   c                 C  r  r   )r  r   r  r   r
  r   r   r    r    r!   r"     r  z*ClearGraphAccessControlEntry.__post_init__r   c                 C  s   | j | j| jt| jdS )N)r   r   r   r   )r   r   r   r  r   r   r    r    r!   r     s
   z$ClearGraphAccessControlEntry.as_dictNr#   r   r  r    r    r    r!   r    r  r  >   denyallowabstain>   *writeread>   namedr   r  r   t.Anyr   r   c                 C  (   | t vrtd| ttjd | S )NzInvalid FGAC policy: )r  r  r  )_ALLOWED_POLICIESr   r   r   r   )r   r    r    r!   r       r  r^   r  c                 C  r"  )NzInvalid FGAC operation: )r  r  r  )_ALLOWED_OPERATIONSr   r   r   r   )r^   r    r    r!   r    r$  r  r   r   c                 C     t | tstd| | S )NzInvalid FGAC role: r   r   r   )r   r    r    r!   r       
r  r  c                 C  r&  )NzInvalid FGAC plugin: r'  )r  r    r    r!   r    r(  r  r   r  c                 C  H   | dkrdS t | tr| S t | trt| }t |tr|S td| )Nr  zInvalid FGAC subject: r   r   r   _parse_with_n3r   )r   parsedr    r    r!   r       


r  r   c                 C  r)  )Nr  zInvalid FGAC predicate: r*  )r   r,  r    r    r!   r    r-  r  r  r  c                 C  sP   | dkrdS t | ttfr| S t | tr!t| }t |ttfr!|S td| )Nr  zInvalid FGAC object: )r   r   r   r   r+  r   )r  r,  r    r    r!   r	  %  s   
r	  r   r  c                 C  sV   | t v rttjd | S t| tr| S t| tr$t| }t|tr$|S td| )N)r  r   r   zInvalid FGAC graph: )	_ALLOWED_GRAPHSr   r   r   r   r   r   r+  r   )r   r,  r    r    r!   r
  1  s   


r
  r   URIRef | Literalc              
   C  sl   zt | }W n ty   d }Y nw t|ttfr|S zt| W S  ty5 } z	td| d|d }~ww )NzUnable to parse value z into an RDF term.)r	   	Exceptionr   r   r   r   )r   r,  errr    r    r!   r+  =  s   
r+  c                 C  s"   t | ttfr|  S tt| S r   )r   r   r   Zn3r   r   r   )r   r    r    r!   r  J  s   r  )r   r!  r   r   )r^   r!  r   r  )r   r!  r   r   )r  r!  r   r   )r   r!  r   r  )r   r!  r   r  )r  r!  r   r  )r   r!  r   r  )r   r   r   r/  )r   r!  r   r   )>
__future__r   typingr   dataclassesr   r   r   enumr   Zrdflibr   r   Zrdflib.utilr	   r   r+   r.   r=   rM   rV   r[   rd   ri   rl   rp   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r#  r%  r.  r  r  r  r  r  r  r	  r
  r+  r  r    r    r    r!   <module>   s    >lk"h>"dRV	5;T!	!
$` 








