o
    
i                     @  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   primary_tagskeyvalue r!   Q/home/ubuntu/.local/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.   r4   zaffectedNodes[]zInvalid RecoveryStatus values: )r   r   r   r   r.   r4   r   r,   r   r   r   list	enumerater   )r   r   r   r.   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.   r4   )r   r.   r4   r!   )r,   get)clsr:   r   r!   r!   r"   	from_dictO   s   
zRecoveryStatus.from_dictr$   )r:   r   r   r/   )r&   r'   r(   r   r)   r.   r   r6   r4   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@   rA   rC   rD   zsyncStatus key 'r   zsyncStatus['z']rE   rF   rG   rH   rI   rJ   zInvalid NodeStatus values: )r   r   r   r@   rA   rC   rD   rE   rF   rG   rH   rI   rJ   r   r   r   r   rB   r   r   r/   r   boolr   )r   r   r@   
node_staterC   sync_statuslast_log_termlast_log_indexrG   recovery_statustopology_statuscluster_enabledr   r    r!   r!   r"   r#      sX   






zNodeStatus.__post_init__r:   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).
        NrH   rI   r@   rA   rC   rD   rE   rF   rG   rJ   )
r@   rA   rC   rD   rE   rF   rG   rH   rI   rJ   r!   )r/   r=   r   r;   )r<   r:   rP   rQ   r!   r!   r"   r=      s(   
zNodeStatus.from_dictNr$   )r:   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 )ClusterRequestrB   electionMinTimeoutelectionRangeTimeoutheartbeatIntervalmessageSizeKBverificationTimeouttransactionLogMaximumSizeGBbatchUpdateIntervalr3   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 )NrU   rV   rW   rX   rY   rZ   r[   r\   znodes[r5   zInvalid ClusterRequest values: )r   r   r   rU   rV   rW   rX   rY   rZ   r[   r\   r   rB   r   r   r6   r7   r   r   )r   r   election_min_timeoutelection_range_timeoutheartbeat_intervalmessage_size_kbverification_timeouttransaction_log_maximum_size_gbbatch_update_intervalr\   r9   r    r!   r!   r"   r#      st   


zClusterRequest.__post_init__r:   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).
        rU   rV   rW   rX   rY   rZ   r[   r\   )rU   rV   rW   rX   rY   rZ   r[   r\   r!   )r<   r:   r!   r!   r"   r=   .  s   zClusterRequest.from_dictNr$   )r:   r   r   rT   rS   r!   r!   r!   r"   rT      s   
 
BrT   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 )SnapshotOptionsBeanrK   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 )Nre   rf   rg   rh   zrepositories[r5   z$Invalid SnapshotOptionsBean values: )r   r   r   re   rf   rg   rh   r   rK   r   r   r6   r7   r   r   )r   r   with_repository_datawith_system_dataclean_data_dirrh   r9   r    r!   r!   r"   r#   T  s.   


z!SnapshotOptionsBean.__post_init__r$   )r&   r'   r(   r)   rh   r#   r!   r!   r!   r"   rd   M  s   
 rd   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']	operationr3   affectedRepositoriesrB   msSinceCreatedrd   snapshotOptionsNr0   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>   CREATE_BACKUP_IN_PROGRESSRESTORE_BACKUP_IN_PROGRESSCREATE_CLOUD_BACKUP_IN_PROGRESS RESTORE_CLOUD_BACKUP_IN_PROGRESSrm   rn   ro   rp   zaffectedRepositories[r5   rq   rr   rs   z$Invalid BackupOperationBean values: )r   r   r   rm   rn   ro   rp   rq   rr   rs   r   r   r   r   r6   r7   rB   rd   r   )r   _allowed_operationsr   id_rn   ro   affected_repositoriesms_since_createdsnapshot_optionsnode_performing_cluster_backupr9   r    r!   r!   r"   r#     s\   






z!BackupOperationBean.__post_init__r:   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).
        rr   rm   rn   ro   rp   rq   rs   )rm   rn   ro   rp   rq   rr   rs   Nr!   )rd   r;   )r<   r:   r|   r!   r!   r"   r=     s   zBackupOperationBean.from_dictr$   )r:   r   r   rl   )r&   r'   r(   r)   rs   r#   r>   r=   r!   r!   r!   r"   rl   p  s   
 
8rl   c                   @  r+   )
StructuresStatisticsrB   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 )Nr   r   z%Invalid StructuresStatistics values: )	r   r   r   r   r   r   rB   r   r   )r   r   	cache_hit
cache_missr!   r!   r"   r#        
z"StructuresStatistics.__post_init__Nr$   r%   r!   r!   r!   r"   r~     r*   r~   c                   @  r+   )
RepositoryStatisticsQueriesrB   slow
suboptimalr   r   c                 C  r   )Nr   r   z,Invalid RepositoryStatisticsQueries values: )	r   r   r   r   r   r   rB   r   r   )r   r   r   r   r!   r!   r"   r#     r   z)RepositoryStatisticsQueries.__post_init__Nr$   r%   r!   r!   r!   r"   r     r*   r   c                   @  s0   e Zd ZU ded< ded< ded< d
ddZd	S )RepositoryStatisticsEntityPoolrB   
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 )Nr   r   r   z/Invalid RepositoryStatisticsEntityPool values: )
r   r   r   r   r   r   r   rB   r   r   )r   r   epool_readsepool_writes
epool_sizer!   r!   r"   r#     s   
z,RepositoryStatisticsEntityPool.__post_init__Nr$   r%   r!   r!   r!   r"   r     s
   
 r   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 )RepositoryStatisticsr   queriesr   
entityPoolrB   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 )Nr   r   r   r   z%Invalid RepositoryStatistics values: )r   r   r   r   r   r   r   r   r   r   r   r   rB   r   )r   r   r   entity_poolactive_transactionsopen_connectionsr!   r!   r"   r#     s(   


z"RepositoryStatistics.__post_init__r:   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).
        r   r   r   r   )r   r   r   r   Nr!   )r   r   )r<   r:   r   r   r!   r!   r"   r=   4  s   zRepositoryStatistics.from_dictNr$   )r:   r   r   r   rS   r!   r!   r!   r"   r     s   
 
r   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 )InfrastructureMemoryUsagerB   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 )Nr   r   r   r   z*Invalid InfrastructureMemoryUsage values: )r   r   r   r   r   r   r   r   rB   r   r   )r   r   max_valr   r   r   r!   r!   r"   r#   \  s    
z'InfrastructureMemoryUsage.__post_init__Nr$   r%   r!   r!   r!   r"   r   U  s   
 r   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 )InfrastructureStorageMemoryrB   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   rB   r   r   )r   r   data_dir_usedwork_dir_usedlogs_dir_useddata_dir_freework_dir_free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 )InfrastructureStatisticsr   heapMemoryUsagenonHeapMemoryUsager   storageMemoryrB   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   r   r   r   r   rB   r   r   )r   r   heap_memory_usagenon_heap_memory_usagestorage_memorythread_countcpu_loadclass_countgc_countopen_file_descriptorsmax_file_descriptorsr!   r!   r"   r#     sZ   



z&InfrastructureStatistics.__post_init__r:   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!   )r   r   r   )r<   r:   r   r   r   r!   r!   r"   r=     s   
z"InfrastructureStatistics.from_dictNr$   )r:   r   r   r   rS   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 )ParserSettingsFrK   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   rK   r   r   )
r   r   preserve_bnode_idsfail_on_unknown_data_typesverify_data_type_valuesnormalize_data_type_valuesfail_on_unknown_language_tagsverify_language_tagsnormalize_language_tags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sizerB   lastModifiedimportedaddedStatementsremovedStatementsnumReplacedGraphs r.   Nr   contextr1   zt.ListreplaceGraphsbaseURIFrK   forceSerialfiler   formatr:   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>   DONENONEERRORPENDING	IMPORTINGINTERRUPTINGr-   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   r6   rK   r   rB   r   )r   _allowed_statusr   r-   r   r.   replace_graphsforce_serialtype_parser_settingsr   last_modifiedr   added_statementsremoved_statements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   r6   r   r   r   r   r   r:   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 )ServerImportBodyr3   	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[r5   z!Invalid ServerImportBody values: )r   r   r   r   r   r   r   r   r   r6   r7   r   r   )r   r   import_settings
file_namesr9   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   passwordr1   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  r6   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   rn   r   r1   r3   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 )
Nrn   r   r  grantedAuthorities[r5   r  appSettings keyr  zInvalid UserCreate values: )r   r   r   rn   r   r  r  r  r   r   r   r   r6   r7   r   keysr   )
r   r   rn   r   granted_authoritiesapp_settingsgpt_threadsr9   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   r6   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   rn   r   rB   dateCreatedr1   r3   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  rn   r   r  r  r5   r  zInvalid User values: )r  object__setattr__r  r  r   r   r   rn   r   r  r   r   r   r   rB   r6   r7   r   r  r   )r   r   rn   r   date_createdr	  r
  r  r9   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   r6   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   rn   r1   r3   authoritiesr   r  FrK   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  rn   authorities[r5   r  r  r  z"Invalid AuthenticatedUser values: )r  r  r  r  r   r   r   rn   r  r  r   r   r   r   r6   r7   r   r  rK   r   )
r   r   rn   r  r
  r  r  r9   r    r   r!   r!   r"   r#   P  s@   








zAuthenticatedUser.__post_init__r:   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 dictrn   z%Response data must contain 'username'r  r  r  F)rn   r  r  r  r  )r   r   	TypeErrorr   r;   )r<   r:   r  r!   r!   r"   from_responseu  s   



zAuthenticatedUser.from_responseNr$   )r:   r   r  r   r   r  )r&   r'   r(   r  r)   r   r6   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 )FreeAccessSettingsrK   enabledr1   r3   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  r5   r  r  z#Invalid FreeAccessSettings values: )r   r   r   r  r  r  r   rK   r   r   r6   r7   r   r   r  r   )r   r   r  r  r
  r9   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   r6   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 )RepositorySizeInforB   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  rB   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   rm   titler   
sesameTypelocationr1   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   rm   r&  r   r'  r(  r1   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/  r0  r1  r2  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]rm   r&  uriexternalUrlzt.Optional[bool]localr   r'  r(  readablewritableunsupportedzt.Optional[RepositoryState]r   r:   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<   r:   	data_copyr!   r!   r"   r=     s   zGraphDBRepository.from_dict)r:   r   r   r3  )r&   r'   r(   rm   r)   r&  r4  r5  r6  r   r'  r(  r7  r8  r9  r   r>   r=   r!   r!   r!   r"   r3    s   
 r3  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_dictr:   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?  ro   r<  r>  r?  ro   	statementsubject	predicater  r   )r<  r>  r?  ro   rE  rF  r  graphpluginr<  r>  r?  ro   rH  clear_graph)r<  r>  r?  rG  zUnsupported FGAC scope: )r   r   r  r;   _parse_policy_parse_role_parse_operationSystemAccessControlEntry_parse_subject_parse_predicate_parse_object_parse_graphStatementAccessControlEntry_parse_pluginPluginAccessControlEntryClearGraphAccessControlEntryr   )r<   r:   r<  r>  r?  ro   rE  rF  objrG  rH  r!   r!   r"   r=   5  sl   


zAccessControlEntry.from_dictNr   )r:   r   r   rA  )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 )rN  zt.Literal['system']r<  r=  r>  r   r?  t.Literal['read', 'write', '*']ro   r   r   c                 C  (   t | j| _t| j| _t| j| _d S r   )rK  r>  rL  r?  rM  ro   r   r!   r!   r"   r#        z&SystemAccessControlEntry.__post_init__r   c                 C  s   | j | j| j| jdS )NrC  rC  r   r!   r!   r"   r     s
   z SystemAccessControlEntry.as_dictNr$   r   r&   r'   r(   r)   r#   r   r!   r!   r!   r"   rN       
 
rN  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 )rS  zt.Literal['statement']r<  r=  r>  r   r?  rY  ro   t.Literal['*'] | URIRefrE  rF  !t.Literal['*'] | URIRef | Literalr  +t.Literal['*', 'named', 'default'] | URIRefrG  r   r   c                 C  sX   t | j| _t| j| _t| j| _t| j| _t| j	| _	t
| j| _t| j| _d S r   )rK  r>  rL  r?  rM  ro   rO  rE  rP  rF  rQ  r  rR  rG  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?  ro   rE  rF  r  r   )	r<  r>  r?  ro   _format_termrE  rF  r  rG  r   r!   r!   r"   r     s   z#StatementAccessControlEntry.as_dictNr$   r   r\  r!   r!   r!   r"   rS    s   
 
	rS  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 )rU  zt.Literal['plugin']r<  r=  r>  r   r?  rY  ro   rH  r   r   c                 C  s4   t | j| _t| j| _t| j| _t| j| _d S r   )rK  r>  rL  r?  rM  ro   rT  rH  r   r!   r!   r"   r#     s   z&PluginAccessControlEntry.__post_init__r   c                 C  s   | j | j| j| j| jdS )NrI  rI  r   r!   r!   r"   r     s   z PluginAccessControlEntry.as_dictNr$   r   r\  r!   r!   r!   r"   rU    s   
 
rU  c                   @  rX  )rV  zt.Literal['clear_graph']r<  r=  r>  r   r?  r`  rG  r   r   c                 C  rZ  r   )rK  r>  rL  r?  rR  rG  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?  ra  rG  r   r!   r!   r"   r     s
   z$ClearGraphAccessControlEntry.as_dictNr$   r   r\  r!   r!   r!   r"   rV    r]  rV  >   denyallowabstain>   *readwrite>   re  namedr   r>  t.Anyr   r=  c                 C  (   | t vrtd| ttjd | S )NzInvalid FGAC policy: )rc  rb  rd  )_ALLOWED_POLICIESr   r   r   r   )r>  r!   r!   r"   rK       rK  ro   rY  c                 C  rj  )NzInvalid FGAC operation: )rf  rg  re  )_ALLOWED_OPERATIONSr   r   r   r   )ro   r!   r!   r"   rM    rl  rM  r?  r   c                 C     t | tstd| | S )NzInvalid FGAC role: r   r   r   )r?  r!   r!   r"   rL       
rL  rH  c                 C  rn  )NzInvalid FGAC plugin: ro  )rH  r!   r!   r"   rT    rp  rT  rE  r^  c                 C  H   | dkrdS t | tr| S t | trt| }t |tr|S td| )Nre  zInvalid FGAC subject: r   r   r   _parse_with_n3r   )rE  parsedr!   r!   r"   rO       


rO  rF  c                 C  rq  )Nre  zInvalid FGAC predicate: rr  )rF  rt  r!   r!   r"   rP    ru  rP  rW  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| )Nre  zInvalid FGAC object: )r   r   r   r   rs  r   )rW  rt  r!   r!   r"   rQ  %  s   
rQ  rG  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)re  rh  r   zInvalid FGAC graph: )	_ALLOWED_GRAPHSr   r   r   r   r   r   rs  r   )rG  rt  r!   r!   r"   rR  1  s   


rR  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    rt  errr!   r!   r"   rs  =  s   
rs  c                 C  s"   t | ttfr|  S tt| S r   )r   r   r   n3r   r   r   )r    r!   r!   r"   ra  J  s   ra  )r>  ri  r   r=  )ro   ri  r   rY  )r?  ri  r   r   )rH  ri  r   r   )rE  ri  r   r^  )rF  ri  r   r^  )rW  ri  r   r_  )rG  ri  r   r`  )r    r   r   rw  )r    ri  r   r   )>
__future__r   typingr   dataclassesr   r   r   enumr   rdflibr   r   rdflib.utilr	   r   r,   r/   r?   rT   rd   rl   r~   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r#  r%  r+  r   r-  r3  r;  rN  rS  rU  rV  rk  rm  rv  rK  rM  rL  rT  rO  rP  rQ  rR  rs  ra  r!   r!   r!   r"   <module>   s    >lk"h>"dRV	5;T!	!
$` 








