|
| 1 | +from typing import Union, Optional, List, Dict |
| 2 | +from dataclasses import dataclass, field, fields |
| 3 | + |
| 4 | +from nats.contrib.signingkeys import SigningKeys |
| 5 | +from nats.contrib.types import Info, Permissions, Types |
| 6 | +from nats.contrib.flatten_model import FlatteningModel |
| 7 | + |
| 8 | +from nats.contrib.claims.generic import GenericFields |
| 9 | +from nats.contrib.imports import Imports |
| 10 | +from nats.contrib.exports import Exports |
| 11 | +from nats.contrib.accounts.limits import OperatorLimits |
| 12 | + |
| 13 | +@dataclass |
| 14 | +class WeightedMapping: |
| 15 | + subject: str |
| 16 | + weight: Optional[int] = None # uint8 is mapped to int, with Optional for omitempty |
| 17 | + cluster: Optional[str] = None |
| 18 | + |
| 19 | + |
| 20 | +@dataclass |
| 21 | +class ExternalAuthorization: |
| 22 | + auth_users: Optional[List[str]] |
| 23 | + allowed_accounts: Optional[List[str]] |
| 24 | + xkey: Optional[str] |
| 25 | + |
| 26 | +@dataclass |
| 27 | +class MsgTrace: |
| 28 | + # Destination is the subject the server will send message traces to |
| 29 | + # if the inbound message contains the "traceparent" header and has |
| 30 | + # its sampled field indicating that the trace should be triggered. |
| 31 | + dest: Optional[str] # `json:"dest,omitempty"` |
| 32 | + |
| 33 | + # Sampling is used to set the probability sampling, that is, the |
| 34 | + # server will get a random number between 1 and 100 and trigger |
| 35 | + # the trace if the number is lower than this Sampling value. |
| 36 | + # The valid range is [1..100]. If the value is not set Validate() |
| 37 | + # will set the value to 100. |
| 38 | + sampling: Optional[int] # `json:"sampling,omitempty"` |
| 39 | + |
| 40 | + |
| 41 | +class Account(FlatteningModel): |
| 42 | + imports: Optional[Imports] # `json:"imports,omitempty"` |
| 43 | + exports: Optional[Exports] # `json:"exports,omitempty"` |
| 44 | + limits: Optional[OperatorLimits] # `json:"limits,omitempty"` |
| 45 | + signing_keys: Optional[SigningKeys] # `json:"signing_keys,omitempty"` |
| 46 | + revocations: Optional[Dict[str, int]] # `json:"revocations,omitempty"` |
| 47 | + default_permissions: Optional[Permissions] # `json:"default_permissions,omitempty"` |
| 48 | + mappings: Optional[Dict[str, WeightedMapping]] # `json:"mappings,omitempty"` |
| 49 | + authorization: Optional[ExternalAuthorization] # `json:"authorization,omitempty"` |
| 50 | + trace: Optional[MsgTrace] # `json:"trace,omitempty"` |
| 51 | + cluster_traffic: Optional[str] # `json:"cluster_traffic,omitempty"` |
| 52 | + |
| 53 | + info: Info = field(default_factory=Info) |
| 54 | + generic_fields: GenericFields = field(default_factory=GenericFields) |
| 55 | + |
| 56 | + def __init__(self, |
| 57 | + imports: Optional[Imports] = None, |
| 58 | + exports: Optional[Exports] = None, |
| 59 | + limits: Optional[OperatorLimits] = None, |
| 60 | + signing_keys: Optional[SigningKeys] = None, |
| 61 | + revocations: Optional[Dict[str, int]] = None, |
| 62 | + default_permissions: Optional[Permissions] = None, |
| 63 | + mappings: Optional[Dict[str, WeightedMapping]] = None, |
| 64 | + authorization: Optional[ExternalAuthorization] = None, |
| 65 | + trace: Optional[MsgTrace] = None, |
| 66 | + cluster_traffic: Optional[str] = None, |
| 67 | + info: Info = None, |
| 68 | + generic_fields: GenericFields = None |
| 69 | + ): |
| 70 | + self.imports = imports |
| 71 | + self.exports = exports |
| 72 | + self.limits = limits |
| 73 | + self.signing_keys = signing_keys |
| 74 | + self.revocations = revocations |
| 75 | + self.default_permissions = default_permissions |
| 76 | + self.mappings = mappings |
| 77 | + self.authorization = authorization |
| 78 | + self.trace = trace |
| 79 | + self.cluster_traffic = cluster_traffic |
| 80 | + |
| 81 | + self.info = info if info else Info() |
| 82 | + self.generic_fields = generic_fields if generic_fields else GenericFields() |
| 83 | + |
| 84 | + class Meta: |
| 85 | + unflatten_fields = [ |
| 86 | + ("imports", "imports"), ("exports", "exports"), ("limits", "limits"), |
| 87 | + ("signing_keys", "signing_keys"), ("revocations", "revocations"), |
| 88 | + ("default_permissions", "default_permissions"), |
| 89 | + ("mappings", "mappings"), ("authorization", "authorization"), |
| 90 | + ("trace", "trace"), ("cluster_traffic", "cluster_traffic"), |
| 91 | + ] |
0 commit comments