3 ^ @sddlmZmZddlmZddlmZddlmZm Z ddl m Z m Z ddl mZed d d d d dddgZeeZddZGdddeZdS)) defaultdict namedtuple) MLSDisabled)DiffResultDescriptor) Difference SymbolWrapper) LevelWrapper RangeWrapper)role_wrapper_factoryZ modified_user added_roles removed_roles matched_roles added_level removed_level added_range removed_rangec Cs>yt|j|Stk r8t|}|t|j|<|SXdS)z| Wrap users from the specified policy. This caches results to prevent duplicate wrapper objects in memory. N) _users_cacheZpolicyKeyErrorr )userrr/usr/lib64/python3.6/users.pyuser_wrapper_factory)s rc@s8eZdZdZedZedZedZddZddZ dS)UsersDifferencez7Determine the difference in users between two policies. diff_userscCs|jjdj||jdd|jjDdd|jjD\|_|_}t |_ x:|D]0\}}|jdd|j Ddd|j D\}}}y$t |j }t|j}|j } |j} Wn$tk rd}d}d} d} YnXy$t |j } t|j} |j } |j}Wn&tk r d} d} d} d}YnX|| kr6| }| }nd}d}|| krR|}| }nd}d}|sp|sp|sp|rXt||||||||j |<qXWdS) z6Generate the difference in users between the policies.zDGenerating user differences from {0.left_policy} to {0.right_policy}css|]}t|VqdS)N)r).0rrrr Gsz-UsersDifference.diff_users..css|]}t|VqdS)N)r)rrrrrrHscss|]}t|VqdS)N)r )rrrrrrRscss|]}t|VqdS)N)r )rrrrrrSsNzNone (MLS Disabled))loginfoformatZ _set_diffZ left_policyZusersZ right_policy added_users removed_usersdictmodified_usersrolesr Z mls_levelr Z mls_rangermodified_users_record)selfZ matched_usersZ left_userZ right_userr rrZleft_level_wrapZleft_range_wrapZ left_levelZ left_rangeZright_level_wrapZright_range_wrapZ right_levelZ right_rangerrrrrrrr@s`            zUsersDifference.diff_userscCs"|jjdd|_d|_d|_dS)z%Reset diff results on policy changes.zResetting user differencesN)rdebugr"r#r%)r(rrr _reset_diffs zUsersDifference._reset_diffN) __name__ __module__ __qualname____doc__rr"r#r%rr*rrrrr8s GrN) collectionsrrZ exceptionrZ descriptorsr differencerr Zmlsr r r&r r'r$rrrrrrrs