Module Expr Str ImportFrom alias Import alias Import alias Import alias ImportFrom alias alias ImportFrom alias alias Assign NameStore Call AttributeLoad NameLoad attr NameLoad FunctionDef arguments args NameParam NameParam NameParam defaults NameLoad body Expr Str Assign NameStore Call NameLoad NameLoad Assign NameStore Call NameLoad NameLoad If BoolOpOr BoolOpAnd NameLoad CompareNotEq NameLoad NameLoad BoolOpAnd UnaryOpNot NameLoad UnaryOpNot Call AttributeLoad NameLoad attr NameLoad body Return NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad Str Str Str Str NameLoad Num Num Num Num Num NameLoad NameLoad NameLoad NameLoad NameLoad body Expr Str If CompareIn Str NameLoad body Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If UnaryOpNot NameLoad body Return NameLoad Assign NameStore Dict If CompareIs NameLoad NameLoad body Assign NameStore SubscriptLoad NameLoad Index Str Assign NameStore Call NameLoad Call NameLoad BinOpAdd BoolOpOr NameLoad ListLoad BoolOpOr NameLoad ListLoad If BoolOpAnd NameLoad CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd CompareIsNot NameLoad NameLoad CompareNotIn SubscriptLoad NameLoad Index Str TupleLoad NameLoad Call SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str IfExp CompareIsNot NameLoad NameLoad NameLoad SubscriptLoad NameLoad Index Str If CompareIn NameLoad SubscriptLoad NameLoad Index Str body Expr Call AttributeLoad SubscriptLoad NameLoad Index Str attr NameLoad If BoolOpAnd CompareIn NameLoad SubscriptLoad NameLoad Index Str CompareNotIn NameLoad NameLoad body Expr Call AttributeLoad SubscriptLoad NameLoad Index Str attr NameLoad If CompareIn NameLoad NameLoad body Expr Call AttributeLoad NameLoad attr NameLoad If Call NameLoad SubscriptLoad NameLoad Index Str NameLoad NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If NameLoad body Assign NameStore IfExp NameLoad NameLoad SubscriptLoad NameLoad Index Str If BoolOpAnd CompareIsNot NameLoad NameLoad UnaryOpNot Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd CompareIn Str NameLoad CompareIn Str NameLoad body If NameLoad body Assign NameStore Call SubscriptLoad NameLoad Index Str If BoolOpOr CompareEq SubscriptLoad NameLoad Index Str NameLoad BoolOpAnd CompareNotEq SubscriptLoad NameLoad Index Str NameLoad NameLoad body If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareIsNot NameLoad Num CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareIsNot NameLoad Num CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareIsNot NameLoad Num CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareIsNot NameLoad Num CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareIsNot NameLoad Num CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad orelse If BoolOpAnd CompareIn Str NameLoad Call AttributeLoad AttributeLoad NameLoad attr attr body If BoolOpAnd NameLoad CompareIsNot NameLoad Num CompareNotEq Call AttributeLoad AttributeLoad NameLoad attr attr SubscriptLoad NameLoad Index Str Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad Assign NameStore Call NameLoad NameLoad Assign SubscriptStore NameLoad Index Str Call NameLoad SubscriptLoad NameLoad Index Str If BoolOpAnd CompareIsNot NameLoad NameLoad CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd NameLoad CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd CompareIn Str NameLoad CompareIsNot NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad Assign SubscriptStore NameLoad Index Str Call NameLoad SubscriptLoad NameLoad Index Str If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd CompareIn Str NameLoad CompareIsNot NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad Assign SubscriptStore NameLoad Index Str Call NameLoad SubscriptLoad NameLoad Index Str If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If BoolOpAnd CompareIn Str NameLoad CompareIsNot NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad Assign SubscriptStore NameLoad Index Str Call NameLoad SubscriptLoad NameLoad Index Str If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad If CompareIn SubscriptLoad NameLoad Index Str TupleLoad Str Str body If NameLoad body If CompareNotEq Call SubscriptLoad NameLoad Index Str NameLoad NameLoad body Assign SubscriptStore NameLoad Index Str NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam NameParam defaults NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad body Expr Str If BoolOpAnd NameLoad NameLoad body Expr Call AttributeLoad NameLoad attr Str Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareIsNot NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad If CompareIsNot NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad If CompareIsNot NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad If CompareIsNot NameLoad NameLoad body Assign NameStore Call NameLoad NameLoad Assign NameStore Dict Str Str Str Str NameLoad Dict NameLoad Call AttributeLoad Str attr NameLoad For NameStore ListLoad Str Str Str Str body If BoolOpAnd Call NameLoad NameLoad NameLoad CompareIn Str NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Return NameLoad If NameLoad body Assign NameStore ListComp NameLoad comprehension NameStore NameLoad UnaryOpNot Call SubscriptLoad NameLoad Index Str NameLoad If NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr Call AttributeLoad Str attr NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Return NameLoad If NameLoad body Assign NameStore ListComp NameLoad comprehension NameStore NameLoad Call SubscriptLoad NameLoad Index Str NameLoad For NameStore ListComp NameLoad comprehension NameStore NameLoad CompareNotIn NameLoad NameLoad body Expr Call AttributeLoad NameLoad attr Call AttributeLoad Str attr NameLoad NameLoad orelse Assign NameStore NameLoad If BoolOpAnd NameLoad NameLoad body For NameStore Call AttributeLoad Call NameLoad NameLoad attr NameLoad body Expr Call AttributeLoad NameLoad attr Call AttributeLoad Str attr NameLoad NameLoad If NameLoad body Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad If NameLoad body If SubscriptLoad NameLoad Index Str body Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore NameLoad Index Str Str For TupleStore NameStore NameStore Call NameLoad NameLoad body If CompareEq NameLoad Str body Assign NameStore Str AugAssignAdd SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad NameLoad Return NameLoad If CompareIn Str NameLoad body Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareIn SubscriptLoad NameLoad Index Str TupleLoad Str Str body Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad For TupleStore NameStore NameStore Call NameLoad NameLoad body If BoolOpAnd CompareEq NameLoad Str UnaryOpNot NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Continue If BoolOpAnd CompareEq NameLoad Str CompareNotIn Str NameLoad body If CompareEq SubscriptLoad NameLoad Index Str Str body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad orelse Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad NameLoad Continue If CompareEq NameLoad Str body If CompareEq SubscriptLoad NameLoad Index Str Str body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad orelse Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad NameLoad If UnaryOpNot Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad SubscriptLoad NameLoad Index Str SubscriptLoad NameLoad Index Str Num Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Str keyword NameLoad keyword NameLoad Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Str keyword NameLoad keyword NameLoad Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Str keyword NameLoad keyword NameLoad Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Str keyword NameLoad keyword NameLoad Continue If CompareEq NameLoad Str body Expr Call SubscriptLoad NameLoad Index Call AttributeLoad Str attr NameLoad NameLoad NameLoad UnaryOpNot NameLoad orelse Expr Call SubscriptLoad NameLoad Index Call AttributeLoad Str attr NameLoad NameLoad NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad Assign NameStore Dict If BoolOpAnd CompareIn Str NameLoad CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareIn SubscriptLoad NameLoad Index Str TupleLoad Str Str body Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad For NameStore NameLoad body If CompareNotEq SubscriptLoad NameLoad Index NameLoad SubscriptLoad NameLoad Index NameLoad body Assign SubscriptStore SubscriptLoad NameLoad Index Str Index NameLoad SubscriptLoad NameLoad Index NameLoad If CompareIn Str NameLoad body For NameStore NameLoad body If CompareNotEq SubscriptLoad NameLoad Index NameLoad SubscriptLoad NameLoad Index NameLoad body If CompareEq NameLoad Str body Assign SubscriptStore SubscriptLoad NameLoad Index Str Index NameLoad Str orelse Assign SubscriptStore SubscriptLoad NameLoad Index Str Index NameLoad SubscriptLoad NameLoad Index NameLoad If BoolOpAnd CompareIn SubscriptLoad NameLoad Index Str TupleLoad Str Str CompareNotEq NameLoad NameLoad body Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str NameLoad If SubscriptLoad NameLoad Index Str body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Assign NameStore Call NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad If NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Return NameLoad If CompareIs NameLoad NameLoad body If SubscriptLoad NameLoad Index Str body Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Return NameLoad If BoolOpAnd NameLoad NameLoad body Expr Call AttributeLoad NameLoad attr NameLoad orelse If NameLoad body Assign NameStore SubscriptLoad NameLoad Slice If UnaryOpNot Call AttributeLoad AttributeLoad NameLoad attr attr body Assign NameStore Dict Str Str Str Str Str Str Str Str Str Str Str Str Str Str NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad orelse Assign NameStore Dict Str Str Str Str Str Str Str Str Str NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad NameLoad If Call SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Assign SubscriptStore NameLoad Index Str Call SubscriptLoad NameLoad Index Str NameLoad If UnaryOpNot NameLoad body Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str Str If BoolOpAnd CompareIn Str NameLoad UnaryOpNot Call AttributeLoad AttributeLoad NameLoad attr attr UnaryOpNot Call AttributeLoad AttributeLoad NameLoad attr attr body If BoolOpAnd NameLoad UnaryOpNot NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Str Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str Str If NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str NameLoad If NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str NameLoad If NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str NameLoad If NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str NameLoad If NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str NameLoad If NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareNotEq SubscriptLoad NameLoad Index Str NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str NameLoad orelse If Call AttributeLoad AttributeLoad NameLoad attr attr body If BoolOpAnd NameLoad UnaryOpNot NameLoad body If UnaryOpNot Call SubscriptLoad NameLoad Index Str NameLoad NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Str Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str Str If NameLoad body Expr Call SubscriptLoad NameLoad Index Str NameLoad NameLoad Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If CompareNotEq Call AttributeLoad AttributeLoad NameLoad attr attr SubscriptLoad NameLoad Index Str Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str SubscriptLoad NameLoad Index Str orelse If BoolOpAnd Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad UnaryOpNot NameLoad body If UnaryOpNot Call SubscriptLoad NameLoad Index Str NameLoad NameLoad body Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Str Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Str Str orelse Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Assign SubscriptStore NameLoad Index Str NameLoad Return NameLoad decorator_list FunctionDef arguments args NameParam NameParam NameParam defaults NameLoad NameLoad body Expr Str Assign NameStore Dict Str Str Str Str NameLoad Dict NameLoad Str Assign NameStore Call SubscriptLoad NameLoad Index Str NameLoad If NameLoad body If SubscriptLoad NameLoad Index Str body Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Return NameLoad Assign NameStore Call NameLoad Call AttributeLoad AttributeLoad NameLoad attr attr NameLoad Assign SubscriptStore NameLoad Index Str Call SubscriptLoad NameLoad Index Str NameLoad NameLoad NameLoad Assign NameStore Call NameLoad ListComp NameLoad comprehension NameStore NameLoad Call SubscriptLoad NameLoad Index Str NameLoad If SubscriptLoad NameLoad Index Str body Assign SubscriptStore NameLoad Index Str Dict For NameStore BinOpSub NameLoad NameLoad body Assign SubscriptStore SubscriptLoad NameLoad Index Str Index Call AttributeLoad Str attr NameLoad Str Assign SubscriptStore SubscriptLoad NameLoad Index Str Index NameLoad Str Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad orelse Assign SubscriptStore NameLoad Index Str NameLoad Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Return NameLoad Assign SubscriptStore NameLoad Index Str Call AttributeLoad Str attr NameLoad Return NameLoad decorator_list
N/A N/A 
Management of user accounts
===========================

The user module is used to create and manage user settings, users can be set
as either absent or present

.. code-block:: yaml

    fred:
      user.present:
        - fullname: Fred Jones
        - shell: /bin/zsh
        - home: /home/fred
        - uid: 4000
        - gid: 4000
        - groups:
          - wheel
          - storage
          - games

    testuser:
      user.absent
 __future__ absolute_import N/A os N/A logging N/A salt.utils salt.utils.locales sdecode sdecode_if_string salt.ext.six string_types iteritems N/A log N/A N/A logging getLogger __name__ _group_changes N/A N/A cur wanted remove N/A False N/A N/A 
    Determine if the groups need to be changed
     N/A old N/A set cur N/A new N/A set wanted N/A N/A N/A remove N/A old new N/A N/A remove N/A N/A N/A new issubset old N/A N/A True N/A False N/A _changes N/A N/A name uid gid groups optional_groups remove_groups home createhome password enforce_password empty_password shell fullname roomnumber workphone homephone loginclass date mindays maxdays inactdays warndays expire win_homedrive win_profile win_logonscript win_description N/A None None None None True None True None True False None None 0 0 999999 0 7 None None None None None N/A N/A 
    Return a dict of the changes required for a user if the user is present,
    otherwise return False.

    Updated in 2015.8.0 to include support for windows homedrive, profile,
    logonscript, and description fields.

    Updated in 2014.7.0 to include support for shadow attributes, all
    attributes supported as integers only.
     N/A N/A shadow.info __salt__ N/A N/A lshad N/A N/A __salt__ N/A shadow.info name N/A lusr N/A N/A __salt__ N/A user.info name N/A N/A lusr N/A N/A False N/A change N/A N/A N/A groups None N/A N/A groups N/A lusr N/A groups N/A wanted_groups N/A sorted N/A set N/A N/A groups N/A N/A optional_groups N/A N/A N/A uid N/A N/A lusr N/A uid uid N/A N/A N/A change N/A uid uid N/A N/A N/A gid None N/A N/A lusr N/A gid N/A gid N/A N/A __salt__ N/A file.group_to_gid gid N/A N/A N/A change N/A gid gid N/A default_grp N/A N/A __salt__ N/A file.gid_to_group N/A N/A gid None gid N/A lusr N/A gid N/A N/A default_grp N/A lusr N/A groups N/A N/A N/A N/A N/A lusr N/A groups remove default_grp N/A N/A N/A name N/A lusr N/A groups N/A name wanted_groups N/A N/A N/A N/A N/A lusr N/A groups remove name N/A N/A default_grp wanted_groups N/A N/A N/A N/A wanted_groups remove default_grp N/A N/A _group_changes N/A lusr N/A groups wanted_groups remove_groups N/A N/A N/A change N/A groups wanted_groups N/A N/A home N/A N/A lusr N/A home home N/A N/A N/A change N/A home home N/A createhome N/A N/A newhome N/A home home N/A lusr N/A home N/A N/A N/A newhome None N/A N/A N/A N/A os path isdir newhome N/A N/A N/A change N/A homeDoesNotExist newhome N/A N/A shell N/A N/A lusr N/A shell shell N/A N/A N/A change N/A shell shell N/A N/A N/A shadow.info __salt__ N/A shadow.default_hash __salt__ N/A N/A password N/A N/A default_hash N/A N/A __salt__ N/A shadow.default_hash N/A N/A N/A N/A lshad N/A passwd default_hash N/A N/A N/A lshad N/A passwd default_hash enforce_password N/A N/A N/A N/A lshad N/A passwd password N/A N/A N/A change N/A passwd password N/A N/A date N/A date 0 N/A N/A lshad N/A lstchg date N/A N/A N/A change N/A date date N/A N/A mindays N/A mindays 0 N/A N/A lshad N/A min mindays N/A N/A N/A change N/A mindays mindays N/A N/A maxdays N/A maxdays 999999 N/A N/A lshad N/A max maxdays N/A N/A N/A change N/A maxdays maxdays N/A N/A inactdays N/A inactdays 0 N/A N/A lshad N/A inact inactdays N/A N/A N/A change N/A inactdays inactdays N/A N/A warndays N/A warndays 7 N/A N/A lshad N/A warn warndays N/A N/A N/A change N/A warndays warndays N/A N/A expire N/A N/A lshad N/A expire expire N/A N/A N/A change N/A expire expire N/A N/A N/A N/A shadow.info __salt__ N/A N/A N/A salt utils is_windows N/A N/A N/A expire N/A expire -1 N/A N/A N/A N/A salt utils date_format N/A lshad N/A expire N/A N/A N/A salt utils date_format expire N/A N/A N/A change N/A expire expire N/A fullname N/A sdecode_if_string fullname N/A N/A lusr N/A fullname N/A sdecode_if_string N/A lusr N/A fullname N/A N/A N/A fullname None N/A N/A lusr N/A fullname fullname N/A N/A N/A change N/A fullname fullname N/A N/A win_homedrive N/A N/A lusr N/A homedrive win_homedrive N/A N/A N/A change N/A homedrive win_homedrive N/A N/A win_profile N/A N/A lusr N/A profile win_profile N/A N/A N/A change N/A profile win_profile N/A N/A win_logonscript N/A N/A lusr N/A logonscript win_logonscript N/A N/A N/A change N/A logonscript win_logonscript N/A N/A win_description N/A N/A lusr N/A description win_description N/A N/A N/A change N/A description win_description N/A N/A N/A user.chroomnumber __salt__ N/A roomnumber None N/A N/A roomnumber N/A sdecode_if_string roomnumber N/A N/A lusr N/A roomnumber N/A sdecode_if_string N/A lusr N/A roomnumber N/A N/A N/A lusr N/A roomnumber roomnumber N/A N/A N/A change N/A roomnumber roomnumber N/A N/A N/A user.chworkphone __salt__ N/A workphone None N/A N/A workphone N/A sdecode_if_string workphone N/A N/A lusr N/A workphone N/A sdecode_if_string N/A lusr N/A workphone N/A N/A N/A lusr N/A workphone workphone N/A N/A N/A change N/A workphone workphone N/A N/A N/A user.chhomephone __salt__ N/A homephone None N/A N/A homephone N/A sdecode_if_string homephone N/A N/A lusr N/A homephone N/A sdecode_if_string N/A lusr N/A homephone N/A N/A N/A lusr N/A homephone homephone N/A N/A N/A change N/A homephone homephone N/A N/A N/A __grains__ N/A kernel N/A OpenBSD FreeBSD N/A N/A loginclass N/A N/A N/A N/A N/A __salt__ N/A user.get_loginclass name loginclass N/A N/A N/A change N/A loginclass loginclass N/A change N/A present N/A N/A name uid gid gid_from_name groups optional_groups remove_groups home createhome password hash_password enforce_password empty_password shell unique system fullname roomnumber workphone homephone loginclass date mindays maxdays inactdays warndays expire win_homedrive win_profile win_logonscript win_description N/A None None False None None True None True None False True False None True False None None None None None None None None None None None None None None None N/A N/A 
    Ensure that the named user is present with the specified properties

    name
        The name of the user to manage

    uid
        The user id to assign, if left empty then the next available user id
        will be assigned

    gid
        The default group id. Also accepts group name.

    gid_from_name
        If True, the default group id will be set to the id of the group with
        the same name as the user, Default is ``False``.

    groups
        A list of groups to assign the user to, pass a list object. If a group
        specified here does not exist on the minion, the state will fail.
        If set to the empty list, the user will be removed from all groups
        except the default group. If unset, salt will assume current groups
        are still wanted (see issue #28706).

    optional_groups
        A list of groups to assign the user to, pass a list object. If a group
        specified here does not exist on the minion, the state will silently
        ignore it.

    NOTE: If the same group is specified in both "groups" and
    "optional_groups", then it will be assumed to be required and not optional.

    remove_groups
        Remove groups that the user is a member of that weren't specified in
        the state, Default is ``True``.

    home
        The custom login directory of user. Uses default value of underlying
        system if not set. Notice that this directory does not have to exist.
        This also the location of the home directory to create if createhome is
        set to True.

    createhome
        If False, the home directory will not be created if it doesn't exist.
        Please note that directories leading up to the home directory
        will NOT be created, Default is ``True``.

    password
        A password hash to set for the user. This field is only supported on
        Linux, FreeBSD, NetBSD, OpenBSD, and Solaris. If the ``empty_password``
        argument is set to ``True`` then ``password`` is ignored.
        For Windows this is the plain text password.
        For Linux, the hash can be generated with ``openssl passwd -1``.

    .. versionchanged:: 0.16.0
       BSD support added.

    hash_password
        Set to True to hash the clear text password. Default is ``False``.


    enforce_password
        Set to False to keep the password from being changed if it has already
        been set and the password hash differs from what is specified in the
        "password" field. This option will be ignored if "password" is not
        specified, Default is ``True``.

    empty_password
        Set to True to enable password-less login for user, Default is ``False``.

    shell
        The login shell, defaults to the system default shell

    unique
        Require a unique UID, Default is ``True``.

    system
        Choose UID in the range of FIRST_SYSTEM_UID and LAST_SYSTEM_UID, Default is
        ``False``.

    loginclass
        The login class, defaults to empty
        (BSD only)

    User comment field (GECOS) support (currently Linux, BSD, and MacOS
    only):

    The below values should be specified as strings to avoid ambiguities when
    the values are loaded. (Especially the phone and room number fields which
    are likely to contain numeric data)

    fullname
        The user's full name

    roomnumber
        The user's room number (not supported in MacOS)

    workphone
        The user's work phone number (not supported in MacOS)

    homephone
        The user's home phone number (not supported in MacOS)

    .. versionchanged:: 2014.7.0
       Shadow attribute support added.

    Shadow attributes support (currently Linux only):

    The below values should be specified as integers.

    date
        Date of last change of password, represented in days since epoch
        (January 1, 1970).

    mindays
        The minimum number of days between password changes.

    maxdays
        The maximum number of days between password changes.

    inactdays
        The number of days after a password expires before an account is
        locked.

    warndays
        Number of days prior to maxdays to warn users.

    expire
        Date that account expires, represented in days since epoch (January 1,
        1970).

    The below parameters apply to windows only:

    win_homedrive (Windows Only)
        The drive letter to use for the home directory. If not specified the
        home directory will be a unc path. Otherwise the home directory will be
        mapped to the specified drive. Must be a letter followed by a colon.
        Because of the colon, the value must be surrounded by single quotes. ie:
        - win_homedrive: 'U:

        .. versionchanged:: 2015.8.0

    win_profile (Windows Only)
        The custom profile directory of the user. Uses default value of
        underlying system if not set.

        .. versionchanged:: 2015.8.0

    win_logonscript (Windows Only)
        The full path to the logon script to run when the user logs in.

        .. versionchanged:: 2015.8.0

    win_description (Windows Only)
        A brief description of the purpose of the users account.

        .. versionchanged:: 2015.8.0
     N/A N/A password hash_password N/A N/A N/A N/A log debug Hashing a clear text password N/A password N/A N/A __salt__ N/A shadow.gen_password password N/A N/A fullname None N/A N/A fullname N/A sdecode fullname N/A N/A roomnumber None N/A N/A roomnumber N/A sdecode roomnumber N/A N/A workphone None N/A N/A workphone N/A sdecode workphone N/A N/A homephone None N/A N/A homephone N/A sdecode homephone N/A ret N/A name changes result comment name N/A True N/A N/A User {0} is present and up to date format name N/A gecos_field N/A fullname roomnumber workphone homephone N/A N/A N/A N/A isinstance gecos_field string_types N/A , gecos_field N/A N/A N/A ret N/A comment N/A N/A Unsupported char ',' in {0} format gecos_field N/A N/A ret N/A result False N/A ret N/A groups N/A N/A missing_groups N/A x N/A x groups N/A N/A N/A __salt__ N/A group.info x N/A missing_groups N/A N/A N/A ret N/A comment N/A N/A The following group(s) are not present: {0} format N/A N/A , join missing_groups N/A N/A ret N/A result False N/A ret N/A optional_groups N/A N/A present_optgroups N/A x N/A x optional_groups N/A N/A __salt__ N/A group.info x N/A missing_optgroup N/A x N/A x optional_groups N/A x present_optgroups N/A N/A N/A N/A log debug N/A N/A Optional group "{0}" for user "{1}" is not present format missing_optgroup name N/A N/A present_optgroups None N/A N/A groups optional_groups N/A N/A isected N/A N/A N/A set groups intersection optional_groups N/A N/A N/A N/A log warning N/A N/A Group "{0}" specified in both groups and optional_groups for user {1} format isected name N/A gid_from_name N/A N/A gid N/A N/A __salt__ N/A file.group_to_gid name N/A empty_password N/A N/A N/A N/A __salt__ N/A shadow.del_password name N/A changes N/A _changes name uid gid groups present_optgroups remove_groups home createhome password enforce_password empty_password shell fullname roomnumber workphone homephone loginclass date mindays maxdays inactdays warndays expire win_homedrive win_profile win_logonscript win_description N/A changes N/A N/A N/A __opts__ N/A test N/A N/A N/A ret N/A result None N/A N/A ret N/A comment The following user attributes are set to be changed:
 N/A N/A key val N/A iteritems changes N/A N/A N/A key password N/A N/A val XXX-REDACTED-XXX N/A N/A ret N/A comment N/A N/A {0}: {1}
 format key val N/A ret N/A N/A shadow.info __salt__ N/A N/A lshad N/A N/A __salt__ N/A shadow.info name N/A N/A N/A __grains__ N/A kernel N/A OpenBSD FreeBSD N/A N/A lcpre N/A N/A __salt__ N/A user.get_loginclass name N/A pre N/A N/A __salt__ N/A user.info name N/A N/A key val N/A iteritems changes N/A N/A N/A N/A key passwd N/A empty_password N/A N/A N/A N/A __salt__ N/A shadow.set_password name password N/A N/A N/A key date N/A N/A N/A N/A __salt__ N/A shadow.set_date name date N/A N/A N/A N/A key home N/A homeDoesNotExist changes N/A N/A N/A N/A __grains__ N/A kernel Darwin N/A N/A N/A N/A __salt__ N/A user.chhome name val N/A N/A N/A N/A __salt__ N/A user.chhome name val False N/A N/A N/A key homeDoesNotExist N/A N/A N/A N/A __grains__ N/A kernel Darwin N/A N/A N/A N/A __salt__ N/A user.chhome name val N/A N/A N/A N/A __salt__ N/A user.chhome name val True N/A N/A N/A N/A N/A os path isdir val N/A N/A N/A N/A __salt__ N/A file.mkdir val N/A pre N/A uid N/A pre N/A gid 493 N/A N/A N/A key mindays N/A N/A N/A N/A __salt__ N/A shadow.set_mindays name mindays N/A N/A N/A key maxdays N/A N/A N/A N/A __salt__ N/A shadow.set_maxdays name maxdays N/A N/A N/A key inactdays N/A N/A N/A N/A __salt__ N/A shadow.set_inactdays name inactdays N/A N/A N/A key warndays N/A N/A N/A N/A __salt__ N/A shadow.set_warndays name warndays N/A N/A N/A key expire N/A N/A N/A N/A __salt__ N/A shadow.set_expire name expire N/A N/A N/A key win_homedrive N/A N/A N/A N/A __salt__ N/A user.update name name homedrive val N/A N/A N/A key win_profile N/A N/A N/A N/A __salt__ N/A user.update name name profile val N/A N/A N/A key win_logonscript N/A N/A N/A N/A __salt__ N/A user.update name name logonscript val N/A N/A N/A key win_description N/A N/A N/A N/A __salt__ N/A user.update name name description val N/A N/A N/A key groups N/A N/A N/A N/A __salt__ N/A N/A N/A user.ch{0} format key name val N/A remove_groups N/A N/A N/A N/A __salt__ N/A N/A N/A user.ch{0} format key name val N/A post N/A N/A __salt__ N/A user.info name N/A spost N/A N/A N/A N/A shadow.info __salt__ N/A N/A lshad N/A passwd password N/A N/A spost N/A N/A __salt__ N/A shadow.info name N/A N/A N/A __grains__ N/A kernel N/A OpenBSD FreeBSD N/A N/A lcpost N/A N/A __salt__ N/A user.get_loginclass name N/A key post N/A N/A N/A N/A post N/A key N/A pre N/A key N/A N/A N/A N/A ret N/A changes N/A key N/A post N/A key N/A N/A shadow.info __salt__ N/A N/A key spost N/A N/A N/A N/A lshad N/A key N/A spost N/A key N/A N/A N/A key passwd N/A N/A N/A N/A ret N/A changes N/A key XXX-REDACTED-XXX N/A N/A N/A N/A ret N/A changes N/A key N/A spost N/A key N/A N/A N/A N/A __grains__ N/A kernel N/A OpenBSD FreeBSD N/A lcpost lcpre N/A N/A N/A N/A ret N/A changes N/A loginclass lcpost N/A N/A ret N/A changes N/A N/A N/A ret N/A comment N/A N/A Updated user {0} format name N/A changes N/A _changes name uid gid groups present_optgroups remove_groups home createhome password enforce_password empty_password shell fullname roomnumber workphone homephone loginclass date mindays maxdays inactdays warndays expire win_homedrive win_profile win_logonscript win_description N/A changes N/A N/A N/A ret N/A comment N/A N/A These values could not be changed: {0} format changes N/A N/A ret N/A result False N/A ret N/A N/A changes False N/A N/A N/A __opts__ N/A test N/A N/A N/A ret N/A result None N/A N/A ret N/A comment N/A N/A User {0} set to be added format name N/A ret N/A N/A groups present_optgroups N/A N/A N/A N/A groups extend present_optgroups N/A N/A present_optgroups N/A N/A groups N/A present_optgroups N/A N/A N/A N/A N/A N/A salt utils is_windows N/A N/A params N/A name uid gid groups home shell unique system fullname roomnumber workphone homephone createhome loginclass name uid gid groups home shell unique system fullname roomnumber workphone homephone createhome loginclass N/A N/A params N/A name password fullname description groups home homedrive profile logonscript name password fullname win_description groups home win_homedrive win_profile win_logonscript N/A N/A N/A __salt__ N/A user.add params N/A N/A N/A ret N/A comment N/A N/A New user {0} created format name N/A N/A ret N/A changes N/A N/A __salt__ N/A user.info name N/A N/A createhome N/A N/A N/A N/A ret N/A changes N/A home N/A N/A N/A shadow.info __salt__ N/A N/A N/A N/A salt utils is_windows N/A N/A N/A N/A salt utils is_darwin N/A N/A N/A password N/A empty_password N/A N/A N/A N/A __salt__ N/A shadow.set_password name password N/A spost N/A N/A __salt__ N/A shadow.info name N/A N/A N/A spost N/A passwd password N/A N/A N/A ret N/A comment N/A N/A User {0} created but failed to set password to {1} format name XXX-REDACTED-XXX N/A N/A ret N/A result False N/A N/A N/A ret N/A changes N/A password XXX-REDACTED-XXX N/A date N/A N/A N/A N/A __salt__ N/A shadow.set_date name date N/A spost N/A N/A __salt__ N/A shadow.info name N/A N/A N/A spost N/A lstchg date N/A N/A N/A ret N/A comment N/A N/A User {0} created but failed to set last change date to {1} format name date N/A N/A ret N/A result False N/A N/A N/A ret N/A changes N/A date date N/A mindays N/A N/A N/A N/A __salt__ N/A shadow.set_mindays name mindays N/A spost N/A N/A __salt__ N/A shadow.info name N/A N/A N/A spost N/A min mindays N/A N/A N/A ret N/A comment N/A N/A User {0} created but failed to set minimum days to {1} format name mindays N/A N/A ret N/A result False N/A N/A N/A ret N/A changes N/A mindays mindays N/A maxdays N/A N/A N/A N/A __salt__ N/A shadow.set_maxdays name maxdays N/A spost N/A N/A __salt__ N/A shadow.info name N/A N/A N/A spost N/A max maxdays N/A N/A N/A ret N/A comment N/A N/A User {0} created but failed to set maximum days to {1} format name maxdays N/A N/A ret N/A result False N/A N/A N/A ret N/A changes N/A maxdays maxdays N/A inactdays N/A N/A N/A N/A __salt__ N/A shadow.set_inactdays name inactdays N/A spost N/A N/A __salt__ N/A shadow.info name N/A N/A N/A spost N/A inact inactdays N/A N/A N/A ret N/A comment N/A N/A User {0} created but failed to set inactive days to {1} format name inactdays N/A N/A ret N/A result False N/A N/A N/A ret N/A changes N/A inactdays inactdays N/A warndays N/A N/A N/A N/A __salt__ N/A shadow.set_warndays name warndays N/A spost N/A N/A __salt__ N/A shadow.info name N/A N/A N/A spost N/A warn warndays N/A N/A N/A ret N/A comment N/A N/A User {0} created but failed to set warn days to {1} format name warndays N/A N/A ret N/A result False N/A N/A N/A ret N/A changes N/A warndays warndays N/A expire N/A N/A N/A N/A __salt__ N/A shadow.set_expire name expire N/A spost N/A N/A __salt__ N/A shadow.info name N/A N/A N/A spost N/A expire expire N/A N/A N/A ret N/A comment N/A N/A User {0} created but failed to set expire days to {1} format name expire N/A N/A ret N/A result False N/A N/A N/A ret N/A changes N/A expire expire N/A N/A N/A N/A N/A salt utils is_windows N/A N/A N/A password N/A empty_password N/A N/A N/A N/A N/A __salt__ N/A user.setpassword name password N/A N/A N/A ret N/A comment N/A N/A User {0} created but failed to set password to {1} format name XXX-REDACTED-XXX N/A N/A ret N/A result False N/A N/A N/A ret N/A changes N/A passwd XXX-REDACTED-XXX N/A expire N/A N/A N/A N/A __salt__ N/A shadow.set_expire name expire N/A spost N/A N/A __salt__ N/A shadow.info name N/A N/A N/A N/A N/A salt utils date_format N/A spost N/A expire N/A N/A N/A salt utils date_format expire N/A N/A N/A ret N/A comment N/A N/A User {0} created but failed to set expire days to {1} format name expire N/A N/A ret N/A result False N/A N/A N/A ret N/A changes N/A expiration_date N/A spost N/A expire N/A N/A N/A N/A N/A N/A salt utils is_darwin password N/A empty_password N/A N/A N/A N/A N/A __salt__ N/A shadow.set_password name password N/A N/A N/A ret N/A comment N/A N/A User {0} created but failed to set password to {1} format name XXX-REDACTED-XXX N/A N/A ret N/A result False N/A N/A N/A ret N/A changes N/A passwd XXX-REDACTED-XXX N/A N/A N/A ret N/A comment N/A N/A Failed to create new user {0} format name N/A N/A ret N/A result False N/A ret N/A absent N/A N/A name purge force N/A False False N/A N/A 
    Ensure that the named user is absent

    name
        The name of the user to remove

    purge
        Set purge to True to delete all of the user's files as well as the user,
        Default is ``False``.

    force
        If the user is logged in, the absent state will fail. Set the force
        option to True to remove the user even if they are logged in. Not
        supported in FreeBSD and Solaris, Default is ``False``.
     N/A ret N/A name changes result comment name N/A True N/A lusr N/A N/A __salt__ N/A user.info name N/A lusr N/A N/A N/A __opts__ N/A test N/A N/A N/A ret N/A result None N/A N/A ret N/A comment N/A N/A User {0} set for removal format name N/A ret N/A beforegroups N/A set N/A N/A N/A salt utils get_group_list name N/A N/A ret N/A result N/A N/A __salt__ N/A user.delete name purge force N/A aftergroups N/A set N/A g N/A g beforegroups N/A N/A __salt__ N/A group.info g N/A N/A ret N/A result N/A N/A N/A ret N/A changes N/A N/A g N/A beforegroups aftergroups N/A N/A N/A N/A ret N/A changes N/A N/A N/A {0} group format g removed N/A N/A N/A ret N/A changes N/A name removed N/A N/A ret N/A comment N/A N/A Removed user {0} format name N/A N/A N/A ret N/A result False N/A N/A ret N/A comment N/A N/A Failed to remove user {0} format name N/A ret N/A N/A ret N/A comment N/A N/A User {0} is not present format name N/A ret N/A