{"action":"closed","issue":{"url":"https://api.github.com/repos/evennia/evennia/issues/965","repository_url":"https://api.github.com/repos/evennia/evennia","labels_url":"https://api.github.com/repos/evennia/evennia/issues/965/labels{/name}","comments_url":"https://api.github.com/repos/evennia/evennia/issues/965/comments","events_url":"https://api.github.com/repos/evennia/evennia/issues/965/events","html_url":"https://github.com/evennia/evennia/issues/965","id":150672707,"number":965,"title":"`@lock <partial name match>` yields untrapped error","user":{"login":"BlauFeuer","id":17095832,"avatar_url":"https://avatars.githubusercontent.com/u/17095832?v=3","gravatar_id":"","url":"https://api.github.com/users/BlauFeuer","html_url":"https://github.com/BlauFeuer","followers_url":"https://api.github.com/users/BlauFeuer/followers","following_url":"https://api.github.com/users/BlauFeuer/following{/other_user}","gists_url":"https://api.github.com/users/BlauFeuer/gists{/gist_id}","starred_url":"https://api.github.com/users/BlauFeuer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BlauFeuer/subscriptions","organizations_url":"https://api.github.com/users/BlauFeuer/orgs","repos_url":"https://api.github.com/users/BlauFeuer/repos","events_url":"https://api.github.com/users/BlauFeuer/events{/privacy}","received_events_url":"https://api.github.com/users/BlauFeuer/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/evennia/evennia/labels/bug","name":"bug","color":"fc2929"}],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2016-04-24T15:26:36Z","updated_at":"2016-04-25T20:55:49Z","closed_at":"2016-04-25T20:55:48Z","body":"#### Brief summary of issue / Description of requested feature:\r\n\r\nAttributeError: 'function' object has no attribute '__qualname__'\r\n\r\nwhen `@lock <partial name match>` and no control access, but player has examine access to lock.\r\n\r\nRequest allowing partial match or trapping error\r\n\r\n#### Steps to reproduce the issue / Reasons for adding feature:\r\n\r\n1. `@lock <partial name match>`\r\nor\r\n`@lock <partial name match>=`\r\nor\r\nuse reference by database #\r\n\r\nPartial matching is useful if full name match fails - finding local object to display its locks.\r\n\r\n#### Error output / Expected result of feature\r\n\r\nAttributeError: 'function' object has no attribute '__qualname__'\r\n```\r\n\r\n\r\n Traceback (most recent call last):\r\n   File \"/evennia/evennia/commands/cmdhandler.py\", line 464, in _run_command\r\n     ret = yield cmd.func()\r\n   File \"/evennia/evennia/commands/default/building.py\", line 1807, in func\r\n     caller.msg(obj.locks)\r\n   File \"/evennia/evennia/objects/objects.py\", line 509, in msg\r\n     session.data_out(text=text, **kwargs)\r\n   File \"/evennia/evennia/server/serversession.py\", line 362, in data_out\r\n     self.sessionhandler.data_out(self, **kwargs)\r\n   File \"/evennia/evennia/server/sessionhandler.py\", line 621, in data_out\r\n     **kwargs)\r\n   File \"/evennia/evennia/server/amp.py\", line 467, in send_MsgServer2Portal\r\n     return self.send_data(MsgServer2Portal, session.sessid, **kwargs)\r\n   File \"/evennia/evennia/server/amp.py\", line 406, in send_data\r\n     packed_data=dumps((sessid, kwargs))\r\n   File \"/evennia/evennia/server/amp.py\", line 319, in <lambda>\r\n     dumps = lambda data: to_str(pickle.dumps(to_str(data), pickle.HIGHEST_PROTOCOL))\r\n   File \"/pyenv/local/lib/python2.7/site-packages/twisted/persisted/styles.py\", line 119, in _pickleFunction\r\n     tuple([\".\".join([f.__module__, f.__qualname__])]))\r\n AttributeError: 'function' object has no attribute '__qualname__'\r\n\r\n```\r\n\r\nExpected viewing of locks output:\r\nLocks:call:true(); control:perm(Immortals); delete:perm(Wizards);\r\n      edit:perm(Wizards); examine:perm(Builders); get:all();\r\n      puppet:pperm(Immortals); tell:perm(Wizards); view:all()\r\n\r\n#### Extra information, such as Evennia revision/repo/branch, operating system and ideas for how to solve / implement:\r\n\r\nLocks:call:true(); control:perm(Immortals); delete:perm(Wizards);\r\n      edit:perm(Wizards); examine:perm(Builders); get:all();\r\n      puppet:pperm(Immortals); tell:perm(Wizards); view:all()\r\n\r\nPermission Hierarchy (climbing):\r\n Guests, Players, PlayerHelpers, Builders, Wizards, Immortals\r\nYour access:\r\nCharacter SuperTester: <Superuser>\r\nPlayer SuperTester: <Superuser>\r\n\r\nMost recent wclient branch, any OS, clean install + tutorial\r\n\r\n"}}