#
# Autogenerated by Thrift Compiler (0.12.0)
#
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
#
#  options string: py
#

from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException
from thrift.protocol.TProtocol import TProtocolException
from thrift.TRecursive import fix_spec

import sys
import custos.commons.model.security.ttypes
import custos.profile.model.workspace.ttypes
import custos.profile.model.User.ttypes
import custos.profile.model.tenant.ttypes
import custos.profile.iam.admin.services.cpi.error.ttypes

from thrift.transport import TTransport
all_structs = []
fix_spec(all_structs)
del all_structs
