def __repr__(self):
args = []<EOL>for prop in self._properties.itervalues():<EOL><INDENT>if prop._has_value(self):<EOL><INDENT>val = prop._retrieve_value(self)<EOL>if val is None:<EOL><INDENT>rep = '<STR_LIT:None>'<EOL><DEDENT>elif prop._repeated:<EOL><INDENT>reprs = [prop._value_to_repr(v) for v in val]<EOL>if reprs:<EOL><INDENT>reprs[<NUM_LIT:0>] = '<STR_LIT:[>' + reprs[<NUM_LIT:0>]<EOL>reprs[-<NUM_LIT:1>] = reprs[-<NUM_LIT:1>] + '<STR_LIT:]>'<EOL>rep = '<STR_LIT:U+002CU+0020>'.join(reprs)<EOL><DEDENT>else:<EOL><INDENT>rep = '<STR_LIT>'<EOL><DEDENT><DEDENT>else:<EOL><INDENT>rep = prop._value_to_repr(val)<EOL><DEDENT>args.append('<STR_LIT>' % (prop._code_name, rep))<EOL><DEDENT><DEDENT>args.sort()<EOL>if self._key is not None:<EOL><INDENT>args.insert(<NUM_LIT:0>, '<STR_LIT>' % self._key)<EOL><DEDENT>if self._projection:<EOL><INDENT>args.append('<STR_LIT>' % (self._projection,))<EOL><DEDENT>s = '<STR_LIT>' % (self.__class__.__name__, '<STR_LIT:U+002CU+0020>'.join(args))<EOL>return s<EOL>
Return an unambiguous string representation of an entity.