U a@stdZddlmZddlmZddlmZddlmZm Z m Z m Z m Z ddl mZmZddlmZe edd d Zd S) z.Utilities for union (sum type) disambiguation.) OrderedDict)reduce)or_)CallableDictMappingOptionalType)fieldsNOTHING) get_origin)classesreturnc st|dkrtddd|D}tdd|Ddkr@tdt|jdd d d t|D]\}\}}||dd }|rttd d |D}||}|sd|}t|tt |p|} |D]} t | | j t krqqt|d|| <qb|qbfdd} | S)zdGiven attr classes, generate a disambiguation function. The function is based on unique fields.zAt least two classes required.cSs.g|]&}|tddtt|p|DfqS)css|] }|jVqdS)N)name).0atr/Users/jalaguru/Documents/Proserv/artifacts/aws_dms_cdk_automation/aws-dms-cdk-automation/venv/lib/python3.8/site-packages/cattr/disambiguators.py sz8create_uniq_field_dis_func...)setr r )rclrrr sz.create_uniq_field_dis_func..cSs g|]\}}t|dkr|qS)rlen)r_attrsrrrrs z(At least two classes have no attributes.cSst|d S)Nrr)c_arrr!z,create_uniq_field_dis_func..)keyNcss|]}|dVqdS)rNr)rrrrrr(sz-create_uniq_field_dis_func..z#{} has no usable unique attributes.z& has no usable non-default attributes.cs8t|tstdD]\}}||kr|SqS)Nz"Only input mappings are supported.) isinstancer ValueErroritems)datakvfallbackZuniq_attrs_dictrrdis_func8s   z,create_uniq_field_dis_func..dis_func) rr#rsort enumeraterrformatr r getattrdefaultr ) r Z cls_and_attrsirZcl_reqsZ other_classesZ other_reqsZuniqmZ cl_fields attr_namer*rr(rcreate_uniq_field_dis_funcs6    r3N)__doc__ collectionsr functoolsroperatorrtypingrrrrr attrr r Z cattr._compatr r3rrrrs