PEP8 spacing and using "is" for comparing values against booleans or None
convert key to tuple to allow custom attributes