
    #HJj                       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       G d	 d
             Z ed       G d d             Z ed       G d d             Z ed       G d d             Z ed       G d d             Z ed       G d d             Z ed       G d d             Z ed       G d d             Z ed       G d d             Z ed       G d d             Z ed       G d d             Z ed       G d d              Z ed       G d! d"             Z ed       G d# d$             Z ed       G d% d&             Z ed       G d' d(             Z ed       G d) d*             Z ed       G d+ d,             Z  ed       G d- d.             Z! ed       G d/ d0             Z" ed       G d1 d2             Z# ed       G d3 d4             Z$ ed       G d5 d6             Z% ed       G d7 d8             Z& ed       G d9 d:             Z' ed       G d; d<             Z( G d= d>e)e	      Z*e G d? d@             Z+e G dA dB             Z,e G dC dDe,             Z-e G dE dFe,             Z.e G dG dHe,             Z/e G dI dJe,             Z0h dKZ1h dLZ2h dMZ3dXdNZ4dYdOZ5dZdPZ6d[dQZ7d\dRZ8d]dSZ9d^dTZ:d_dUZ;d`dVZ<dadWZ=y)b    )annotationsN)asdict	dataclassfield)Enum)LiteralURIRef)from_n3T)frozenc                  *    e Zd ZU ded<   ded<   ddZy)TopologyStatusstrstatedict[str, t.Any]primaryTagsc                &   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       nJ|j                         D ]7  \  }}t        |t              r|j                  d| d|t        |      f       9 |rt        d|      y )Nr   r   zprimaryTags key ''zInvalid TopologyStatus values: )tcastAnyr   r   
isinstancer   appendtypedictitems
ValueError)selfinvalidr   primary_tagskeyvalues         g/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/rdflib/contrib/graphdb/models.py__post_init__zTopologyStatus.__post_init__   s    13quudjj)vvaeeT%5%56%%NNGUDK89,-NNM<l9KLM*002
U!#s+NN&7uA$>T#Y#OP 3 >HH     NreturnNone__name__
__module____qualname____annotations__r#    r$   r"   r   r      s    J!!Ir$   r   c                  *    e Zd ZU ded<   ded<   ddZy)RecoveryOperationr   namemessagec                   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       |rt        d|      y )Nr0   r1   z"Invalid RecoveryOperation values: )
r   r   r   r0   r1   r   r   r   r   r   )r   r   r0   r1   s       r"   r#   zRecoveryOperation.__post_init__'   s    13vvaeeTYY'&&-$$NNFD$t*56'3'NNIwW>?A7KK r$   Nr%   r(   r-   r$   r"   r/   r/   "   s    
ILLr$   r/   c                  `    e Zd ZU dZded<   dZded<    ee      Zded<   dd	Z	e
dd
       Zy)RecoveryStatusNzRecoveryOperation | Noner   
str | Noner1   default_factory	list[str]affectedNodesc                   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }|-t        |t              s|j                  d|t        |      f       |-t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       nEt        |      D ]7  \  }}t        |t              r|j                  d| d|t        |      f       9 |rt        d|      y )Nr   r1   r9   zaffectedNodes[]zInvalid RecoveryStatus values: )r   r   r   r   r1   r9   r   r/   r   r   r   list	enumerater   )r   r   r   r1   affected_nodesindexr!   s          r"   r#   zRecoveryStatus.__post_init__;   s   13quudjj)&&-t'9'9:Z7H%INNGUDK89z'3'?NNIwW>?.$/NNO^T.=QRS ). 9u!%-NNnUG1$=ud5k#RS !: >HH r$   c                    |s |        S d}d|v r|d   t        di |d   } | ||j                  d      |j                  dg             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   r1   r9   )r   r1   r9   r-   )r/   get)clsdatar   s      r"   	from_dictzRecoveryStatus.from_dictO   s^    . 5Ld?tG}8%6W6EHHY'((?B7
 	
r$   r%   )rC   r   r&   r4   )r)   r*   r+   r   r,   r1   r   r<   r9   r#   classmethodrD   r-   r$   r"   r4   r4   5   s@    &*E#*GZ$T:M9:I( !
 !
r$   r4   c                      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Zedd       Zy)
NodeStatusr   address	nodeStateinttermzdict[str, str]
syncStatuslastLogTermlastLogIndexendpointzRecoveryStatus | NonerecoveryStatuszTopologyStatus | NonetopologyStatuszbool | NoneclusterEnabledc                L   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }	t        j                  t         j                  | j                        }
t        j                  t         j                  | j                        }t        |t              s|j                  d|t!        |      f       t        |t              s|j                  d|t!        |      f       t!        |      t"        ur|j                  d|t!        |      f       t        |t$              s|j                  d|t!        |      f       n{|j'                         D ]h  \  }}t        |t              s!|j                  d| d|t!        |      f       t        |t              rH|j                  d| d|t!        |      f       j t!        |      t"        ur|j                  d	|t!        |      f       t!        |      t"        ur|j                  d
|t!        |      f       t        |t              s|j                  d|t!        |      f       |	-t        |	t(              s|j                  d|	t!        |	      f       |
-t        |
t*              s|j                  d|
t!        |
      f       |.t!        |      t,        ur|j                  d|t!        |      f       |rt/        d|      y )NrH   rI   rK   rL   zsyncStatus key 'r   zsyncStatus['z']rM   rN   rO   rP   rQ   rR   zInvalid NodeStatus values: )r   r   r   rH   rI   rK   rL   rM   rN   rO   rP   rQ   rR   r   r   r   r   rJ   r   r   r4   r   boolr   )r   r   rH   
node_staterK   sync_statuslast_log_termlast_log_indexrO   recovery_statustopology_statuscluster_enabledr    r!   s                 r"   r#   zNodeStatus.__post_init__   s   13&&-VVAEE4>>2
vvaeeTYY'ffQUUDOO4quud&6&67t'8'8966!%%/&&(;(;<&&(;(;<&&(;(;<'3'NNIwW>?*c*NNKT*5EFG:S NNFD$t*56+t,NNL+tK7HIJ)//1
U!#s+NN&6se1$=sDI#NO!%-NNl3%r$:E4;#OP	 2
 c)NNM=$}:MNOs*NNNND<PQR(C(NNJ$x.AB&z^0
 NN,otO?TUV&z^0
 NN,otO?TUV&4+@+LNN,otO?TUV:GDD r$   c                   d}d|v r|d   rt         j                  |d         }nd|v rt         j                  i       }d}d|v r|d   rt        di |d   } | |d   |d   |d   |d   |d   |d	   |d
   |||j                  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).
        NrP   rQ   rH   rI   rK   rL   rM   rN   rO   rR   )
rH   rI   rK   rL   rM   rN   rO   rP   rQ   rR   r-   )r4   rD   r   rA   )rB   rC   rY   rZ   s       r"   rD   zNodeStatus.from_dict   s    . t#-=(>,66t<L7MNO%,66r:O t#-=(>,Ft4D/EFOO;'fL)]+n-*%**88$45
 	
r$   Nr%   )rC   r   r&   rG   r)   r*   r+   r,   r#   rE   rD   r-   r$   r"   rG   rG   t   sU    LN
IM))))-E^ -
 -
r$   rG   c                  x    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Zedd       Zy)ClusterRequestrJ   electionMinTimeoutelectionRangeTimeoutheartbeatIntervalmessageSizeKBverificationTimeouttransactionLogMaximumSizeGBbatchUpdateIntervalr8   nodesc                n   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }	t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |	t              s|j                  d|	t        |	      f       nEt!        |	      D ]7  \  }
}t        |t"              r|j                  d	|
 d
|t        |      f       9 |rt%        d|      y )Nr`   ra   rb   rc   rd   re   rf   rg   znodes[r;   zInvalid ClusterRequest values: )r   r   r   r`   ra   rb   rc   rd   re   rf   rg   r   rJ   r   r   r<   r=   r   r   )r   r   election_min_timeoutelection_range_timeoutheartbeat_intervalmessage_size_kbverification_timeouttransaction_log_maximum_size_gbbatch_update_intervalrg   r?   r!   s               r"   r#   zClusterRequest.__post_init__   s   13 vvaeeT-D-DE!"t/H/H!IVVAEE4+A+AB&&(:(:; vvaeeT-E-EF*+&&EE433+
' !"quud.F.F Gquudjj)$%S0NN%';TBV=WX &'s2NN**/0 "#3.NN$&8$?Q:RS  +NNO_d?>STU$%S0NN)(-. /0;NN1389 %&c1NN))./ %&NNGUDK89 )% 0u!%-NNfUG1$5ud5k#JK !1 >HH r$   c                R     | |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).
        r`   ra   rb   rc   rd   re   rf   rg   )r`   ra   rb   rc   rd   re   rf   rg   r-   )rB   rC   s     r"   rD   zClusterRequest.from_dict.  sV    & #$89!%&<!="#67/ $%: ;(,-J(K $%: ;w-	
 		
r$   Nr%   )rC   r   r&   r_   r]   r-   r$   r"   r_   r_      sN    !$$@ID 
 
r$   r_   c                  B    e Zd ZU ded<   ded<   ded<   dZded<   d	dZy)
SnapshotOptionsBeanrT   withRepositoryDatawithSystemDatacleanDataDirNzlist[str] | Nonerepositoriesc                   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       |st        |t              s|j                  d|t        |      f       nEt        |      D ]7  \  }}t        |t              r|j                  d| d|t        |      f       9 |rt        d|      y )Nrs   rt   ru   rv   zrepositories[r;   z$Invalid SnapshotOptionsBean values: )r   r   r   rs   rt   ru   rv   r   rT   r   r   r<   r=   r   r   )r   r   with_repository_datawith_system_dataclean_data_dirrv   r?   r!   s           r"   r#   z!SnapshotOptionsBean.__post_init__T  si   13 vvaeeT-D-DE66!%%)<)<=t'8'89vvaeeT%6%67$%T1NN%';TBV=WX  !-NN,.>EU@VWXt+NNNND<PQR#lD1d<>PQR$-l$;LE5%eS1-wa(@%e'UV %< CWMM r$   r%   )r)   r*   r+   r,   rv   r#   r-   r$   r"   rr   rr   M  s%    %)L")Nr$   rr   c                  r    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Zedd       Zy)BackupOperationBeanr   idusernamezt.Literal['CREATE_BACKUP_IN_PROGRESS', 'RESTORE_BACKUP_IN_PROGRESS', 'CREATE_CLOUD_BACKUP_IN_PROGRESS', 'RESTORE_CLOUD_BACKUP_IN_PROGRESS']	operationr8   affectedRepositoriesrJ   msSinceCreatedrr   snapshotOptionsNr5   nodePerformingClusterBackupc                   h d}g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }	t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       t        |t              r||vr|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       nEt        |      D ]7  \  }
}t        |t              r|j                  d|
 d|t        |      f       9 t        |      t         ur|j                  d|t        |      f       t        |t"              s|j                  d	|t        |      f       |	-t        |	t              s|j                  d
|	t        |	      f       |rt%        d|      y )N>   CREATE_BACKUP_IN_PROGRESSRESTORE_BACKUP_IN_PROGRESSCREATE_CLOUD_BACKUP_IN_PROGRESS RESTORE_CLOUD_BACKUP_IN_PROGRESSr}   r~   r   r   zaffectedRepositories[r;   r   r   r   z$Invalid BackupOperationBean values: )r   r   r   r}   r~   r   r   r   r   r   r   r   r   r   r<   r=   rJ   rr   r   )r   _allowed_operationsr   id_r~   r   affected_repositoriesms_since_createdsnapshot_optionsnode_performing_cluster_backupr?   r!   s               r"   r#   z!BackupOperationBean.__post_init__  sA   
 24ffQUUDGG$66!%%/FF155$..1	 !quud.G.G H66!%%)<)<=66!%%)=)=>)*t7W7W)X&#s#NND#tCy12(C(NNJ$x.AB)S)Y>Q-QNNKDODE/6NN*)./ !**? @u!%-NN0q95$u+N !A
  !,NN,.>EU@VWX*,?@NN"$4d;K6LM *5j*C?
 NN1278 CWMM r$   c                x    t        d	i |d   } | |d   |d   |d   |d   |d   ||j                  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).
        r   r}   r~   r   r   r   r   )r}   r~   r   r   r   r   r   r-   )rr   rA   )rB   rC   r   s      r"   rD   zBackupOperationBean.from_dict  s^    , /I6G1HIDz*%;'!%&<!= 01,(,1N(O
 	
r$   r%   )rC   r   r&   r|   )r)   r*   r+   r,   r   r#   rE   rD   r-   r$   r"   r|   r|   p  sP    GM  $#((.226Np 
 
r$   r|   c                  *    e Zd ZU ded<   ded<   ddZy)StructuresStatisticsrJ   cacheHit	cacheMissc                   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       |rt        d|      y )Nr   r   z%Invalid StructuresStatistics values: )	r   r   r   r   r   r   rJ   r   r   )r   r   	cache_hit
cache_misss       r"   r#   z"StructuresStatistics.__post_init__  s    13FF155$--0	VVAEE4>>2
	?#%NNJ	4	?CD
3&NNKT*5EFGDgNN r$   Nr%   r(   r-   r$   r"   r   r     s    MNOr$   r   c                  *    e Zd ZU ded<   ded<   ddZy)RepositoryStatisticsQueriesrJ   slow
suboptimalc                   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       |rt        d|      y )Nr   r   z,Invalid RepositoryStatisticsQueries values: )	r   r   r   r   r   r   rJ   r   r   )r   r   r   r   s       r"   r#   z)RepositoryStatisticsQueries.__post_init__  s    13vvaeeTYY'VVAEE4??3
:S NNFD$t*56
3&NNL*d:6FGHKWUU r$   Nr%   r(   r-   r$   r"   r   r     s    
IOVr$   r   c                  4    e Zd ZU ded<   ded<   ded<   ddZy)RepositoryStatisticsEntityPoolrJ   
epoolReadsepoolWrites	epoolSizec                L   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       |rt        d|      y )Nr   r   r   z/Invalid RepositoryStatisticsEntityPool values: )
r   r   r   r   r   r   r   rJ   r   r   )r   r   epool_readsepool_writes
epool_sizes        r"   r#   z,RepositoryStatisticsEntityPool.__post_init__  s    13ffQUUDOO4vvaeeT%5%56VVAEE4>>2
C'NNL+tK7HIJS(NNM<l9KLM
3&NNKT*5EFGNPWXX r$   Nr%   r(   r-   r$   r"   r   r     s    ONYr$   r   c                  P    e Zd ZU ded<   ded<   ded<   ded<   ddZedd	       Zy
)RepositoryStatisticsr   queriesr   
entityPoolrJ   activeTransactionsopenConnectionsc                    g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       |rt        d|      y )Nr   r   r   r   z%Invalid RepositoryStatistics values: )r   r   r   r   r   r   r   r   r   r   r   r   rJ   r   )r   r   r   entity_poolactive_transactionsopen_connectionss         r"   r#   z"RepositoryStatistics.__post_init__  s"   13&&-ffQUUDOO4ffQUUD,C,CD66!%%)=)=>'#>?NNIwW>?+'EFNNL+tK7HIJ#$C/NN%':DAT<UV  !,NN"$4d;K6LM DgNN r$   c                ^    t        di |d   }t        di |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   r-   )r   r   )rB   rC   r   r   s       r"   rD   zRepositoryStatistics.from_dict4  sL    . .@Y@4JtL7IJ"#$89 !23	
 	
r$   Nr%   )rC   r   r&   r   r]   r-   r$   r"   r   r     s4    ((..O. 
 
r$   r   c                  >    e Zd ZU ded<   ded<   ded<   ded<   ddZy)	InfrastructureMemoryUsagerJ   max	committedinitusedc                   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       |rt        d|      y )Nr   r   r   r   z*Invalid InfrastructureMemoryUsage values: )r   r   r   r   r   r   r   r   rJ   r   r   )r   r   max_valr   r   r   s         r"   r#   z'InfrastructureMemoryUsage.__post_init__\  s	   13&&)FF155$..1	vvaeeTYY'vvaeeTYY'=#NNE7DM:;	?#%NNKDODE:S NNFD$t*56:S NNFD$t*56I7SS r$   Nr%   r(   r-   r$   r"   r   r   U  s    	HN
I
ITr$   r   c                  R    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Zy	)InfrastructureStorageMemoryrJ   dataDirUsedworkDirUsedlogsDirUseddataDirFreeworkDirFreelogsDirFreec                t   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       |rt        d|      y )Nr   r   r   r   r   r   z,Invalid InfrastructureStorageMemory values: )r   r   r   r   r   r   r   r   r   r   rJ   r   r   )r   r   data_dir_usedwork_dir_usedlogs_dir_useddata_dir_freework_dir_freelogs_dir_frees           r"   r#   z)InfrastructureStorageMemory.__post_init__y  s   13quud&6&67quud&6&67quud&6&67quud&6&67quud&6&67quud&6&67c)NNM=$}:MNOc)NNM=$}:MNOc)NNM=$}:MNOc)NNM=$}:MNOc)NNM=$}:MNOc)NNM=$}:MNOKWUU r$   Nr%   r(   r-   r$   r"   r   r   p  s,    Vr$   r   c                      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Zedd       Zy)InfrastructureStatisticsr   heapMemoryUsagenonHeapMemoryUsager   storageMemoryrJ   threadCountfloatcpuLoad
classCountgcCountopenFileDescriptorsmaxFileDescriptorsc                   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }	t        j                  t         j                  | j                        }
t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       t        |t               s|j                  d|t        |      f       t        |      t"        ur|j                  d|t        |      f       t        |      t$        ur.t        |      t"        ur|j                  d|t        |      f       t        |      t"        ur|j                  d|t        |      f       t        |      t"        ur|j                  d|t        |      f       t        |	      t"        ur|j                  d|	t        |	      f       t        |
      t"        ur|j                  d	|
t        |
      f       |rt'        d
|      y )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   rJ   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_descriptorss              r"   r#   z&InfrastructureStatistics.__post_init__  sy   13FF155$*>*>? !quud.E.E Ft'9'9:vvaeeT%5%5666!%%.ffQUUDOO466!%%. !quud.F.F G vvaeeT-D-DE+-FGNN"$5t<M7NO /1JKNN()./ .*EFNNO^T.=QRSS(NNM<l9KLM>&4>+DNNIxh@AC'NNL+tK7HIJ>$NNIxh@A%&c1NN))./ $%S0NN%';TBV=WX H'RR r$   c                    t        di |d   }t        di |d   }t        di |d   } | ||||d   t        |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   r-   )r   r   r   )rB   rC   r   r   r   s        r"   rD   z"InfrastructureStatistics.from_dict  s    . 6P=N8OP 9 WDAU<V W4MtO7LM-4(]+$y/*L)O $%: ;#$89

 
	
r$   Nr%   )rC   r   r&   r   r]   r-   r$   r"   r   r     sP    ..11..NOL0Sd #
 #
r$   r   c                      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ZddZy)ParserSettingsFrT   preserveBNodeIdsfailOnUnknownDataTypesverifyDataTypeValuesnormalizeDataTypeValuesfailOnUnknownLanguageTagsTverifyLanguageTagsnormalizeLanguageTagsstopOnErrorNt.Any | NonecontextLinkc                   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }	t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |      t        ur|j                  d|t        |      f       t        |	      t        ur|j                  d|	t        |	      f       |rt        d	|      y )
Nr   r   r   r   r   r   r   r   zInvalid ParserSettings values: )r   r   r   r   r   r   r   r   r   r   r   r   rT   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_errors
             r"   r#   zParserSettings.__post_init__  se   13VVAEE4+@+@A%&VVAEE43N3N%O""#&&0I0I"J%&VVAEE43O3O%P"()quud6T6T(U% vvaeeT-D-DE"#&&0J0J"Kquud&6&67"#4/NN#%7>P9QR *+47NN,.34 '(4NN*+01 *+47NN-.34 -.d:NN/167 $%T1NN%';TBV=WX '(4NN++01 d*NNM=$}:MNO >HH r$   c                    t        |       S Nr   r   s    r"   as_dictzParserSettings.as_dictG      d|r$   r%   r&   r   )r)   r*   r+   r   r,   r   r   r   r   r   r   r   r   r#   r   r-   r$   r"   r   r     sp    "d"#(D(!&$&$)T)&+t+##"'4'K $K$AIFr$   r   c                     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      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      Zded<   d dZd!dZy)"ImportSettingsr   r0   zJt.Literal['PENDING', 'IMPORTING', 'DONE', 'ERROR', 'NONE', 'INTERRUPTING']statussizerJ   lastModifiedimportedaddedStatementsremovedStatementsnumReplacedGraphs r1   Nr   contextr6   zt.ListreplaceGraphsbaseURIFrT   forceSerialfiler   formatrC   r   parserSettingsc                ^	   h d}g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }	t        j                  t         j                  | j                        }
t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t!        |t"              s|j%                  d|t        |      f       ||vr|j%                  d|t        |      f       t!        |t"              s|j%                  d|t        |      f       t!        |t&              s|j%                  d|t        |      f       t        |      t(        ur|j%                  d|t        |      f       t!        |t"              s|j%                  d|t        |      f       t!        |	t*              s|j%                  d|	t        |	      f       t!        |
t"              s|j%                  d	|
t        |
      f       t        |      t,        ur|j%                  d
|t        |      f       t        |      t,        ur|j%                  d|t        |      f       t        |      t,        ur|j%                  d|t        |      f       t        |      t,        ur|j%                  d|t        |      f       t        |      t,        ur|j%                  d|t        |      f       |rt/        d|      y )N>   DONENONEERRORPENDING	IMPORTINGINTERRUPTINGr0   r   r1   r  r  r   r
  r   r   r   r   r  r  zInvalid ImportSettings values: )r   r   r   r0   r   r1   r  r  r   r
  r   r   r   r   r  r  r   r   r   r<   rT   r   rJ   r   )r   _allowed_statusr   r0   r   r1   replace_graphsforce_serialtype_parser_settingsr   last_modifiedr   added_statementsremoved_statementsnum_replaced_graphss                   r"   r#   zImportSettings.__post_init___  sK   
 24vvaeeTYY't{{+&&-t'9'9:vvaeeT%5%56quudii(&&(;(;<vvaeeTYY'quud&7&7866!%%/66!%%)=)=>VVAEE4+A+ABffQUUD,B,BC$$NNFD$t*56(NNHfd6l;<'3'NNIwW>?.$/NNO^T.=QRST)NNM<l9KLM%%NNFE4;78/>:NN,otO?TUV$$NNFD$t*56c)NNNM4;NOP>$NNJ$x.AB !,NN"$4d;K6LM "#3.NN$&8$?Q:RS #$C/NN$&94@S;TU >HH r$   c                    t        |       S r   r   r   s    r"   r   zImportSettings.as_dict  r   r$   r%   r   )r)   r*   r+   r,   r1   r  r   r<   r  r  r  r   r	  rC   r   r
  r#   r   r-   r$   r"   r   r   K  s    
IVV
IMGS G\ !$7M67 G\ KD#FLD,%*>%JNNJ=I~r$   r   c                  6    e Zd ZU ded<   dZded<   ddZd	dZy)
ServerImportBodyr8   	fileNamesNzImportSettings | NoneimportSettingsc                    g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }|-t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       nEt        |      D ]7  \  }}t        |t              r|j                  d| d|t        |      f       9 |rt        d|      y )Nr  r  z
fileNames[r;   z!Invalid ServerImportBody values: )r   r   r   r  r  r   r   r   r   r<   r=   r   r   )r   r   import_settings
file_namesr?   r!   s         r"   r#   zServerImportBody.__post_init__  s    13&&(;(;<VVAEE4>>2
&z^0
 NN,otO?TUV*d+NNKT*5EFG )* 5u!%-NNjq$95$u+#NO !6 @'JJ r$   c                X    t        |       }| j                  |j                  dd        |S )Nr  )r   r  pop)r   results     r"   r   zServerImportBody.as_dict  s+    &JJ'.r$   r%   r   )r)   r*   r+   r,   r  r#   r   r-   r$   r"   r  r    s    ,0N)0K&r$   r  c                  j    e Zd ZU  ed      Zded<    ee      Zded<    ee      Z	ded	<   dd
Z
y)
UserUpdater  )defaultr   passwordr6   r   appSettingslist[t.Any]
gptThreadsc                    t        |       S r   r   r   s    r"   r   zUserUpdate.as_dict  r   r$   Nr   )r)   r*   r+   r   r)  r,   r   r*  r<   r,  r   r-   r$   r"   r'  r'    s5    "%Hc%$)$$?K!?#D9J9r$   r'  c                      e Zd ZU dZded<   ded<    ee      Zded<    ee      Z	ded	<    ee      Z
d
ed<   ddZddZy)
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)  r6   r8   grantedAuthoritiesr   r*  r+  r,  c                   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       nEt        |      D ]7  \  }}t        |t              r|j                  d| d|t        |      f       9 t        |t              s|j                  d|t        |      f       nD|j                         D ]1  }	t        |	t              r|j                  d|	t        |	      f        n t        |t              s|j                  d|t        |      f       |rt!        d	|      y )
Nr~   r)  r0  grantedAuthorities[r;   r*  appSettings keyr,  zInvalid UserCreate values: )r   r   r   r~   r)  r0  r*  r,  r   r   r   r   r<   r=   r   keysr   )
r   r   r~   r)  granted_authoritiesapp_settingsgpt_threadsr?   r!   r    s
             r"   r#   zUserCreate.__post_init__  s   1366!%%/66!%%/ffQUUD,C,CDvvaeeT%5%56ffQUUDOO4(C(NNJ$x.AB(C(NNJ$x.AB-t4NN%':DAT<UV !**= >u!%-NN&9%$BE4PU;#WX !? ,-NNM<l9KLM#((*!#s+NN$5sDI#FG +
 +t,NNL+tK7HIJ:GDD r$   c                    t        |       S r   r   r   s    r"   r   zUserCreate.as_dict  r   r$   Nr%   r   )r)   r*   r+   __doc__r,   r   r<   r0  r   r*  r,  r#   r   r-   r$   r"   r/  r/    sN     MM$)$$?	?$)$$?K!?#D9J9"EHr$   r/  c                      e Zd ZU ded<   ded<   ded<    ee      Zded<    ee      Zd	ed
<    ee      Z	ded<   ddZ
d Zy)Userr   r~   r)  rJ   dateCreatedr6   r8   r0  r   r*  r+  r,  c                P   | j                   t        j                  | dg        | j                  t        j                  | di        | j                  t        j                  | dg        g }t        j                  t
        j                  | j                        }t        j                  t
        j                  | j                        }t        j                  t
        j                  | j                        }t        j                  t
        j                  | j                         }t        j                  t
        j                  | j                        }t        j                  t
        j                  | j                        }t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       t        |t               s|j                  d|t        |      f       nEt#        |      D ]7  \  }}	t        |	t              r|j                  d| d|	t        |	      f       9 t        |t$              s|j                  d|t        |      f       nD|j'                         D ]1  }
t        |
t              r|j                  d	|
t        |
      f        n t        |t               s|j                  d|t        |      f       |rt)        d
|      y )Nr0  r*  r,  r~   r)  r<  r2  r;   r3  zInvalid User values: )r0  object__setattr__r*  r,  r   r   r   r~   r)  r<  r   r   r   r   rJ   r<   r=   r   r4  r   )r   r   r~   r)  date_createdr5  r6  r7  r?   r!   r    s              r"   r#   zUser.__post_init__
  s[   ""*t%92>#t]B7??"t\261366!%%/66!%%/vvaeeT%5%56ffQUUD,C,CDvvaeeT%5%56ffQUUDOO4(C(NNJ$x.AB(C(NNJ$x.AB,,NNM<l9KLM-t4NN%':DAT<UV !**= >u!%-NN&9%$BE4PU;#WX !? ,-NNM<l9KLM#((*!#s+NN$5sDI#FG +
 +t,NNL+tK7HIJ4g>> r$   c                    t        |       S r   r   r   s    r"   r   zUser.as_dict9  r   r$   Nr%   )r)   r*   r+   r,   r   r<   r0  r   r*  r,  r#   r   r-   r$   r"   r;  r;    sL    MM$)$$?	?$)$$?K!?#D9J9-?^r$   r;  c                      e Zd ZU dZded<    ee      Zded<    ee      Z	ded<   d	Z
d
ed<   dZded<   ddZedd       Zy)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~   r6   r8   authoritiesr   r*  FrT   externalr  tokenc                V   | j                   t        j                  | dg        | j                  t        j                  | di        g }t	        j
                  t        j                  | j                        }t	        j
                  t        j                  | j                         }t	        j
                  t        j                  | j                        }t	        j
                  t        j                  | j                        }t	        j
                  t        j                  | j                        }t        |t              s|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       nEt        |      D ]7  \  }}t        |t              r|j                  d| d|t        |      f       9 t        |t               s|j                  d|t        |      f       nD|j#                         D ]1  }	t        |	t              r|j                  d|	t        |	      f        n t        |      t$        ur|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       |rt'        d	|      y )
NrD  r*  r~   authorities[r;   r3  rE  rF  z"Invalid AuthenticatedUser values: )rD  r>  r?  r*  r   r   r   r~   rE  rF  r   r   r   r   r<   r=   r   r4  rT   r   )
r   r   r~   rD  r6  rE  rF  r?   r!   r    s
             r"   r#   zAuthenticatedUser.__post_init__P  s   #t]B7#t]B71366!%%/ffQUUD$4$45vvaeeT%5%5666!%%/quudjj)(C(NNJ$x.AB+t,NNM;[8IJK )+ 6u!%-NNl5'$;UDK#PQ !7 ,-NNM<l9KLM#((*!#s+NN$5sDI#FG + >%NNJ$x.AB%%NNGUDK89A7KK r$   c           	         t        |t              st        d      d|vrt        d       | |d   |j	                  dg       |j	                  di       |j	                  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'rD  r*  rE  F)r~   rD  r*  rE  rF  )r   r   	TypeErrorr   rA   )rB   rC   rF  s      r"   from_responsezAuthenticatedUser.from_responseu  sp     $%:;;T!DEE*%33XXj%0
 	
r$   Nr%   )rC   r   rF  r   r&   rC  )r)   r*   r+   r9  r,   r   r<   rD  r   r*  rE  rF  r#   rE   rK  r-   r$   r"   rC  rC  =  s[    	 M"48K8$)$$?K!?HdE3O#LJ 
 
r$   rC  c                  ^    e Zd ZU ded<    ee      Zded<    ee      Zded<   ddZ	d	 Z
y
)FreeAccessSettingsrT   enabledr6   r8   rD  r   r*  c                ^   g }t        j                  t         j                  | j                        }t        j                  t         j                  | j                        }t        j                  t         j                  | j
                        }t        |      t        ur|j                  d|t        |      f       t        |t              s|j                  d|t        |      f       nEt        |      D ]7  \  }}t        |t              r|j                  d| d|t        |      f       9 t        |t              s|j                  d|t        |      f       nD|j                         D ]1  }t        |t              r|j                  d|t        |      f        n |rt        d|      y )NrN  rD  rH  r;   r*  r3  z#Invalid FreeAccessSettings values: )r   r   r   rN  rD  r*  r   rT   r   r   r<   r=   r   r   r4  r   )r   r   rN  rD  r6  r?   r!   r    s           r"   r#   z FreeAccessSettings.__post_init__  sI   13&&-ffQUUD$4$45vvaeeT%5%56=$NNIwW>?+t,NNM;[8IJK )+ 6u!%-NNl5'$;UDK#PQ !7 ,-NNM<l9KLM#((*!#s+NN$5sDI#FG +
 BGLL r$   c                    t        |       S r   r   r   s    r"   r   zFreeAccessSettings.as_dict  r   r$   Nr%   )r)   r*   r+   r,   r   r<   rD  r   r*  r#   r   r-   r$   r"   rM  rM    s1    M"48K8$)$$?K!?M0r$   rM  c                  2    e Zd ZU ded<   ded<   ded<   d Zy)RepositorySizeInforJ   inferredtotalexplicitc                   g }t        | j                        t        ur|j                  d       t        | j                        t        ur|j                  d       t        | j
                        t        ur|j                  d       |r@t        d|D cg c]*  }|| j                  |   t        | j                  |         f, c}      y c c}w )NrS  rT  rU  z#Invalid RepositorySizeInfo values: )r   rS  rJ   r   rT  rU  r   __dict__)r   r   xs      r"   r#   z RepositorySizeInfo.__post_init__  s    c)NN:&

3&NN7#c)NN:&5HOP1!T]]1%tDMM!,<'=>P   Qs   /C

Nr(   r-   r$   r"   rR  rR    s    MJMr$   rR  c                  ,    e Zd ZU ded<   ded<   ded<   y)OWLimParameterr   r0   labelr!   N)r)   r*   r+   r,   r-   r$   r"   rZ  rZ    s    
IJJr$   rZ  c                  \    e Zd ZU ded<   ded<   ded<   ded<   ded<    ee      Zded	<   y
)RepositoryConfigBeanr   r}   titler   
sesameTypelocationr6   dict[str, OWLimParameter]paramsN)r)   r*   r+   r,   r   r   rb  r-   r$   r"   r]  r]    s+    GJ
IOM(-d(CF%Cr$   r]  c                      e Zd ZU ded<   ded<   ded<   ded<   ded<    ee      Zded	<    ee      Zded
<   ddZy)RepositoryConfigBeanCreater   r}   r^  r   r_  r`  r6   ra  rb  missingDefaultsc                    t        |       S )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   s    r"   r   z"RepositoryConfigBeanCreate.as_dict  s    & d|r$   N)r&   r   )	r)   r*   r+   r,   r   r   rb  re  r   r-   r$   r"   rd  rd    sE    GJ
IOM(-d(CF%C162O. r$   rd  c                  $    e Zd ZdZdZdZdZdZdZy)RepositoryStatez(Enumeration for repository state values.INACTIVESTARTINGRUNNING
RESTARTINGSTOPPINGN)	r)   r*   r+   r9  ri  rj  rk  rl  rm  r-   r$   r"   rh  rh    s    2HHGJHr$   rh  c                      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       Zy)GraphDBRepositoryNzt.Optional[str]r}   r^  uriexternalUrlzt.Optional[bool]localr   r_  r`  readablewritableunsupportedzt.Optional[RepositoryState]r   c                \    t        |      }d|v r|d   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   r-   )r   rh  )rB   rC   	data_copys      r"   rD   zGraphDBRepository.from_dict  sA      J	iIg$6$B!071C!DIgYr$   )rC   r   r&   ro  )r)   r*   r+   r}   r,   r^  rp  rq  rr  r   r_  r`  rs  rt  ru  r   rE   rD   r-   r$   r"   ro  ro    s    B!E?!C#'K'"E" D/ "&J& $Ho$!%H%!%H%$(K!()-E&-   r$   ro  c                  N    e Zd ZU ded<   ded<   ded<   d
dZe	 	 	 	 dd       Zy	)AccessControlEntryz9t.Literal['statement', 'clear_graph', 'plugin', 'system']scope%t.Literal['allow', 'deny', 'abstain']policyr   rolec                    t        d      )Nz+Use a concrete AccessControlEntry subclass.)NotImplementedErrorr   s    r"   r   zAccessControlEntry.as_dict2  s    !"OPPr$   c           
        t        |t              st        d      |j                  d      }|dk(  r]t	        |j                  d            }t        |j                  d            }t        |j                  d            }t        d|||      S |dk(  rt	        |j                  d            }t        |j                  d            }t        |j                  d            }t        |j                  d	            }t        |j                  d
            }t        |j                  d            }t        |j                  d            }	t        d|||||||	      S |dk(  rxt	        |j                  d            }t        |j                  d            }t        |j                  d            }t        |j                  d            }
t        d||||
      S |dk(  r]t	        |j                  d            }t        |j                  d            }t        |j                  d            }	t        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.rz  systemr|  r}  r   rz  r|  r}  r   	statementsubject	predicater>  r  )rz  r|  r}  r   r  r  r>  graphpluginrz  r|  r}  r   r  clear_graph)rz  r|  r}  r  zUnsupported FGAC scope: )r   r   rJ  rA   _parse_policy_parse_role_parse_operationSystemAccessControlEntry_parse_subject_parse_predicate_parse_object_parse_graphStatementAccessControlEntry_parse_pluginPluginAccessControlEntryClearGraphAccessControlEntryr   )rB   rC   rz  r|  r}  r   r  r  objr  r  s              r"   rD   zAccessControlEntry.from_dict5  s   < $%:;;!H"488H#56Ftxx/0D(+)>?I+#	  K"488H#56Ftxx/0D(+)>?I$TXXi%89G(+)>?I 23C )!45E.!##	 	 H"488H#56Ftxx/0D(+)>?I"488H#56F+#  M!"488H#56Ftxx/0D )!45E/#	  3E9=>>r$   Nr   )rC   r   r&   zpSystemAccessControlEntry | StatementAccessControlEntry | PluginAccessControlEntry | ClearGraphAccessControlEntry)r)   r*   r+   r,   r   rE   rD   r-   r$   r"   ry  ry  ,  sC    DD11
IQ T?T?	'T? T?r$   ry  c                  F    e Zd ZU ded<   ded<   ded<   ded<   dd	Zdd
Zy)r  zt.Literal['system']rz  r{  r|  r   r}  t.Literal['read', 'write', '*']r   c                    t        | j                        | _        t        | j                        | _        t	        | j
                        | _        y r   )r  r|  r  r}  r  r   r   s    r"   r#   z&SystemAccessControlEntry.__post_init__  s2    #DKK0		*	)$..9r$   c                `    | j                   | j                  | j                  | j                  dS )Nr  r  r   s    r"   r   z SystemAccessControlEntry.as_dict  s(    ZZkkII	
 	
r$   Nr%   r   r)   r*   r+   r,   r#   r   r-   r$   r"   r  r    s#    11
I..:

r$   r  c                  n    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ZddZy)r  zt.Literal['statement']rz  r{  r|  r   r}  r  r   t.Literal['*'] | URIRefr  r  !t.Literal['*'] | URIRef | Literalr>  +t.Literal['*', 'named', 'default'] | URIRefr  c                p   t        | j                        | _        t        | j                        | _        t	        | j
                        | _        t        | j                        | _        t        | j                        | _	        t        | j                        | _        t        | j                        | _        y r   )r  r|  r  r}  r  r   r  r  r  r  r  r>  r  r  r   s    r"   r#   z)StatementAccessControlEntry.__post_init__  sr    #DKK0		*	)$..9%dll3)$..9#DKK0!$**-
r$   c           
         | j                   | j                  | j                  | j                  t	        | j
                        t	        | j                        t	        | j                        t	        | j                        dS )N)rz  r|  r}  r   r  r  r>  r  )	rz  r|  r}  r   _format_termr  r  r>  r  r   s    r"   r   z#StatementAccessControlEntry.as_dict  sX    ZZkkII#DLL1%dnn5"4;;/#DJJ/	
 		
r$   Nr%   r   r  r-   r$   r"   r  r    s;    !!11
I..$$&&--66.

r$   r  c                  P    e Zd ZU ded<   ded<   ded<   ded<   ded	<   dd
ZddZy)r  zt.Literal['plugin']rz  r{  r|  r   r}  r  r   r  c                    t        | j                        | _        t        | j                        | _        t	        | j
                        | _        t        | j                        | _        y r   )r  r|  r  r}  r  r   r  r  r   s    r"   r#   z&PluginAccessControlEntry.__post_init__  sB    #DKK0		*	)$..9#DKK0r$   c                v    | j                   | j                  | j                  | j                  | j                  dS )Nr  r  r   s    r"   r   z PluginAccessControlEntry.as_dict  s/    ZZkkIIkk
 	
r$   Nr%   r   r  r-   r$   r"   r  r    s(    11
I..K1
r$   r  c                  F    e Zd ZU ded<   ded<   ded<   ded<   dd	Zdd
Zy)r  zt.Literal['clear_graph']rz  r{  r|  r   r}  r  r  c                    t        | j                        | _        t        | j                        | _        t	        | j
                        | _        y r   )r  r|  r  r}  r  r  r   s    r"   r#   z*ClearGraphAccessControlEntry.__post_init__  s2    #DKK0		*	!$**-
r$   c                r    | j                   | j                  | j                  t        | j                        dS )N)rz  r|  r}  r  )rz  r|  r}  r  r  r   s    r"   r   z$ClearGraphAccessControlEntry.as_dict  s-    ZZkkII#DJJ/	
 	
r$   Nr%   r   r  r-   r$   r"   r  r    s#    ##11
I66.

r$   r  >   denyallowabstain>   *readwrite>   r  namedr(  c                |    | t         vrt        d|       t        j                  t        j                  d   |       S )NzInvalid FGAC policy: )r  r  r  )_ALLOWED_POLICIESr   r   r   r   )r|  s    r"   r  r    s9    &&0
;<<66!))67@@r$   c                |    | t         vrt        d|       t        j                  t        j                  d   |       S )NzInvalid FGAC operation: )r  r  r  )_ALLOWED_OPERATIONSr   r   r   r   )r   s    r"   r  r    s9    ++3I=ABB66!))019==r$   c                B    t        | t              st        d|       | S )NzInvalid FGAC role: r   r   r   )r}  s    r"   r  r    s$    dC .th788Kr$   c                B    t        | t              st        d|       | S )NzInvalid FGAC plugin: r  )r  s    r"   r  r    s$    fc"0
;<<Mr$   c                    | dk(  ry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  parseds     r"   r  r    sQ    #~'6"'3(ff%M
-g[9
::r$   c                    | dk(  ryt        | t              r| S t        | t              rt        |       }t        |t              r|S t	        d|       )Nr  zInvalid FGAC predicate: r  )r  r  s     r"   r  r    sS    C)V$)S!	*ff%M
/	}=
>>r$   c                    | dk(  ry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  s     r"   r  r  %  s[    
cz#()
#s$fvw/0M
,SG4
55r$   c                    | t         v r't        j                  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  s     r"   r  r  1  sj    vvaii 78%@@% %&ff%M
+E95
66r$   c                    	 t        |       }t        |t        t        f      r|S 	 t        |       S # t        $ r d }Y 1w xY w# t        $ r}t        d| d      |d }~ww xY w)NzUnable to parse value z into an RDF term.)r
   	Exceptionr   r	   r   r   )r!   r  errs      r"   r  r  =  sx     &67+,Xe}    X1%:LMNTWWXs#   1 
A ??	A AA c                    t        | t        t        f      r| j                         S t	        j
                  t        |       S r   )r   r	   r   n3r   r   r   )r!   s    r"   r  r  J  s.    %&'*+xxz66#ur$   )r|  t.Anyr&   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&   zURIRef | Literal)r!   r  r&   r   )>
__future__r   typingr   dataclassesr   r   r   enumr   rdflibr   r	   rdflib.utilr
   r   r/   r4   rG   r_   rr   r|   r   r   r   r   r   r   r   r   r   r  r'  r/  r;  rC  rM  rR  rZ  r]  rd  r   rh  ro  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r-   r$   r"   <module>r     sb   "  0 0  "  $I I I, $L L L$ $;
 ;
 ;
| $i
 i
 i
X $h
 h
 h
V $N N ND $e
 e
 e
P $O O O$ $V V V$ $Y Y Y, $;
 ;
 ;
| $T T T4 $V V VD $a
 a
 a
H $O O Od $S S Sl $  < $   $2 2 2j $8 8 8v $Q
 Q
 Q
h $  B $  * $   $D D D $  Bc4  !  !  ! H ]? ]? ]?@ 
1 
 
( 
"4 
 
@ 
1 
 
. 
#5 
 
( 1 , +A>	;	?	6	7
Xr$   