from dataclasses import dataclass, field, fields from typing import List, Optional @dataclass class Env: name: Optional[str] = None value: Optional[str] = None @dataclass class TeamAccess: AccessLevel: Optional[int] = None TeamId: Optional[int] = None @dataclass class UserAccess: AccessLevel: Optional[int] = None UserId: Optional[int] = None @dataclass class ResourceControl: AccessLevel: Optional[int] = None AdministratorsOnly: Optional[bool] = None Id: Optional[int] = None OwnerId: Optional[int] = None Public: Optional[bool] = None ResourceId: Optional[str] = None SubResourceIds: List[str] = field(default_factory=list) System: Optional[bool] = None TeamAccesses: List[TeamAccess] = field(default_factory=list) Type: Optional[int] = None UserAccesses: List[UserAccess] = field(default_factory=list) @dataclass class AutoUpdate: forcePullImage: Optional[bool] = None forceUpdate: Optional[bool] = None interval: Optional[str] = None jobID: Optional[str] = None webhook: Optional[str] = None @dataclass class GitAuthentication: gitCredentialID: Optional[int] = None password: Optional[str] = None username: Optional[str] = None @dataclass class GitConfig: authentication: GitAuthentication = GitAuthentication() configFilePath: Optional[str] = None configHash: Optional[str] = None referenceName: Optional[str] = None tlsskipVerify: Optional[bool] = None url: Optional[str] = None @dataclass class Option: prune: Optional[bool] = None @dataclass class PortainerStack: AdditionalFiles: List[str] = field(default_factory=list) AutoUpdate: AutoUpdate = AutoUpdate() EndpointId: Optional[int] = None EntryPoint: Optional[str] = None Env: List['Env'] = field(default_factory=list) Id: Optional[int] = None Name: Optional[str] = None Option: Option = Option() ResourceControl: ResourceControl = ResourceControl() Status: Optional[int] = None SwarmId: Optional[str] = None Type: Optional[int] = None createdBy: Optional[str] = None creationDate: Optional[int] = None fromAppTemplate: Optional[bool] = None gitConfig: GitConfig = GitConfig() namespace: Optional[str] = None projectPath: Optional[str] = None updateDate: Optional[int] = None updatedBy: Optional[str] = None def classFromArgs(className, argDict): fieldSet = {f.name for f in fields(className) if f.init} filteredArgDict = {k : v for k, v in argDict.items() if k in fieldSet} return className(**filteredArgDict)