)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Utils: fix Namespace and ShardRange attribute encoding in py2."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Ensure name/account/container are always consistent and always encode"},{"line_number":10,"context_line":"utf8 in py2."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: Alistair Coles \u003calistairncoles@gmail.com\u003e"},{"line_number":13,"context_line":"Co-Authored-By: Matthew Oliver \u003cmatt@oliver.net.au\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"615fc11b_3cc7e0b9","line":10,"updated":"2023-11-08 00:01:05.000000000","message":"I don\u0027t think I groked this at frist, the main change of this patch is NOT how it handles native strings, that\u0027s consistent across versions before and after this change:\n\n\tvagrant@saio:~$ python\n\tPython 3.8.10 (default, May 26 2023, 14:05:08) \n\t[GCC 9.4.0] on linux\n\tType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\t\u003e\u003e\u003e from swift.common.utils import Namespace, ShardRange\n\t\u003e\u003e\u003e n \u003d Namespace(\u0027.shards_a/c_🌴\u0027, \u0027\u0027, \u0027\u0027)\n\t\u003e\u003e\u003e \"AUTH_☃/%s\" % n.name\n\t\u0027AUTH_☃/.shards_a/c_🌴\u0027\n\t\u003e\u003e\u003e s \u003d ShardRange(\u0027.shards_a/c_🌴\u0027)\n\t\u003e\u003e\u003e \"AUTH_☃/%s\" % s.name\n\t\u0027AUTH_☃/.shards_a/c_🌴\u0027\n\n\n\n\t(py27) vagrant@saio:~$ python\n\tPython 2.7.18 (default, Jul  1 2022, 12:27:04) \n\t[GCC 9.4.0] on linux2\n\tType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\t\u003e\u003e\u003e from swift.common.utils import Namespace, ShardRange\n\t\u003e\u003e\u003e n \u003d Namespace(\u0027.shards_a/c_🌴\u0027, \u0027\u0027, \u0027\u0027)\n\t\u003e\u003e\u003e \"AUTH_☃/%s\" % n.name\n\t\u0027AUTH_\\xe2\\x98\\x83/.shards_a/c_\\xf0\\x9f\\x8c\\xb4\u0027\n\t\u003e\u003e\u003e s \u003d ShardRange(\u0027.shards_a/c_🌴\u0027)\n\t\u003e\u003e\u003e \"AUTH_☃/%s\" % s.name\n\t\u0027AUTH_\\xe2\\x98\\x83/.shards_a/c_\\xf0\\x9f\\x8c\\xb4\u0027\n\nWhat\u0027s new/significant is that the Namespace object now consistently supports construction from bytes \u0026 unicode strings both!\n\npy2 before:\n\n\t\u003e\u003e\u003e s \u003d ShardRange(\u0027.shards_a/c_🌴\u0027.decode(\u0027utf8\u0027))\n\t\u003e\u003e\u003e s.name\n\t\u0027.shards_a/c_\\xf0\\x9f\\x8c\\xb4\u0027\n\t\u003e\u003e\u003e n \u003d Namespace(\u0027.shards_a/c_🌴\u0027.decode(\u0027utf8\u0027), \u0027\u0027, \u0027\u0027)\n\t\u003e\u003e\u003e n\n\tTraceback (most recent call last):\n\t  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n\t  File \"/vagrant/swift/swift/common/utils/__init__.py\", line 4580, in __repr__\n\t    \u0027%s\u003d%r\u0027 % prop for prop in self))\n\t  File \"/vagrant/swift/swift/common/utils/__init__.py\", line 4580, in \u003cgenexpr\u003e\n\t    \u0027%s\u003d%r\u0027 % prop for prop in self))\n\t  File \"/vagrant/swift/swift/common/utils/__init__.py\", line 4574, in __iter__\n\t    yield \u0027name\u0027, str(self.name)\n\tUnicodeEncodeError: \u0027ascii\u0027 codec can\u0027t encode character u\u0027\\U0001f334\u0027 in position 12: ordinal not in range(128)\n\n\npy2 after:\n\n\t\u003e\u003e\u003e s \u003d ShardRange(\u0027.shards_a/c_🌴\u0027.decode(\u0027utf8\u0027))\n\t\u003e\u003e\u003e s.name\n\t\u0027.shards_a/c_\\xf0\\x9f\\x8c\\xb4\u0027\n\t\u003e\u003e\u003e n \u003d Namespace(\u0027.shards_a/c_🌴\u0027.decode(\u0027utf8\u0027), \u0027\u0027, \u0027\u0027)\n\t\u003e\u003e\u003e n\n\tNamespace(name\u003d\u0027.shards_a/c_\\xf0\\x9f\\x8c\\xb4\u0027, lower\u003d\u0027\u0027, upper\u003d\u0027\u0027)\n\n\n... which brings Namespace in-line with ShardRange (that already supported either bytes or unicode).\n\nInterestingly this change effects py3 as well, there Namespace similarly only supported \"native strings\" - passing bytes would give you the wrong answer!\n\nbefore:\n\n\tvagrant@saio:~$ python\n\tPython 3.8.10 (default, May 26 2023, 14:05:08) \n\t[GCC 9.4.0] on linux\n\tType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\t\u003e\u003e\u003e from swift.common.utils import Namespace, ShardRange\n\t\u003e\u003e\u003e n \u003d Namespace(\u0027.shards_a/c_🌴\u0027.encode(\u0027utf8\u0027), \u0027\u0027, \u0027\u0027)\n\t\u003e\u003e\u003e n\n\tNamespace(name\u003d\"b\u0027.shards_a/c_\\\\xf0\\\\x9f\\\\x8c\\\\xb4\u0027\", lower\u003d\u0027\u0027, upper\u003d\u0027\u0027)\n\nafter:\n\n\tvagrant@saio:~$ python\n\tPython 3.8.10 (default, May 26 2023, 14:05:08) \n\t[GCC 9.4.0] on linux\n\tType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\t\u003e\u003e\u003e from swift.common.utils import Namespace, ShardRange\n\t\u003e\u003e\u003e n \u003d Namespace(\u0027.shards_a/c_🌴\u0027.encode(\u0027utf8\u0027), \u0027\u0027, \u0027\u0027)\n\t\u003e\u003e\u003e n\n\tNamespace(name\u003d\u0027.shards_a/c_🌴\u0027, lower\u003d\u0027\u0027, upper\u003d\u0027\u0027)","commit_id":"d0d5533940146b453e53d003b5f461afef9e00e4"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bc30544869d598833a8320a4daf909ec9bb52272","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"357139bb_d2670527","updated":"2023-11-03 09:49:59.000000000","message":"-1 because of the docstring regression\n\nI would suggest moving this patch to the start of the chain. Then we can merge it and get it out of the way once there\u0027s agreement on the bug fix.\n\nI\u0027m in favour of this solution because I am keen that the strict/brittle path requirements of ShardRange (path must be account/container) are not migrated up to the Namespace base class.\n\nA ShardRange describes a shard container whose name must be of the form account/container. A ShardRange extends the properties of a Namespace.\n\nIMO a Namespace is simply a range delimited by a pair of bounds that has a name. There are use cases for Namespace that do not require the name to be account/container - see https://review.opendev.org/c/openstack/swift/+/898244?usp\u003ddashboard","commit_id":"2248e29bf7a68896e18296c0c8bf9471b39633f0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"baa238e9_9028a4e4","updated":"2023-11-08 00:01:05.000000000","message":"There\u0027s obviously a bug here when you pass a unicode path to the Namespace constructor in py2 that inconsistent with py3 and ShardRange.  The tests fail with the change reverted.  This should merge.\n\nbut OH MAN do native strings encode/decode get my head looping!  And new property setters and class inheritence that overrides the property definitions and freaking __SLOTS__!  For a small patch this change really covers some ground.","commit_id":"d0d5533940146b453e53d003b5f461afef9e00e4"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bc30544869d598833a8320a4daf909ec9bb52272","unresolved":true,"context_lines":[{"line_number":287,"context_line":"    :return: A set. If ``value`` is an instance of a ``list``, ``tuple`` or"},{"line_number":288,"context_line":"        ``set`` then a set containing the items in ``value`` is returned; if"},{"line_number":289,"context_line":"        value is None then None is returned; otherwise a set containing"},{"line_number":290,"context_line":"        the single ``value`` is returned."},{"line_number":291,"context_line":"    \"\"\""},{"line_number":292,"context_line":"    if value is None:"},{"line_number":293,"context_line":"        return set()"}],"source_content_type":"text/x-python","patch_set":3,"id":"b9ba17e8_341942e7","line":290,"updated":"2023-11-03 09:49:59.000000000","message":"oops, this has been reverted w.r.t. the parent patch.","commit_id":"2248e29bf7a68896e18296c0c8bf9471b39633f0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    :return: A set. If ``value`` is an instance of a ``list``, ``tuple`` or"},{"line_number":288,"context_line":"        ``set`` then a set containing the items in ``value`` is returned; if"},{"line_number":289,"context_line":"        value is None then None is returned; otherwise a set containing"},{"line_number":290,"context_line":"        the single ``value`` is returned."},{"line_number":291,"context_line":"    \"\"\""},{"line_number":292,"context_line":"    if value is None:"},{"line_number":293,"context_line":"        return set()"}],"source_content_type":"text/x-python","patch_set":3,"id":"02ce05a0_74ba752c","line":290,"in_reply_to":"5fb2443b_ee378465","updated":"2023-11-08 00:01:05.000000000","message":"Done","commit_id":"2248e29bf7a68896e18296c0c8bf9471b39633f0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b18b53ff67e7e301cad0077c8cc134050aeb5403","unresolved":true,"context_lines":[{"line_number":287,"context_line":"    :return: A set. If ``value`` is an instance of a ``list``, ``tuple`` or"},{"line_number":288,"context_line":"        ``set`` then a set containing the items in ``value`` is returned; if"},{"line_number":289,"context_line":"        value is None then None is returned; otherwise a set containing"},{"line_number":290,"context_line":"        the single ``value`` is returned."},{"line_number":291,"context_line":"    \"\"\""},{"line_number":292,"context_line":"    if value is None:"},{"line_number":293,"context_line":"        return set()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fb2443b_ee378465","line":290,"in_reply_to":"b2015c09_af1cafa7","updated":"2023-11-06 08:57:31.000000000","message":"``value is None then None is returned`` is wrong\n\npatchset 3 of this change was based on https://review.opendev.org/c/openstack/swift/+/890470 and these lines were included - a regression.\n\npatchset 4 of this change is now ahead of https://review.opendev.org/c/openstack/swift/+/890470 in the chain, and these lines are no longer included because transform_to_set is not yet in utils","commit_id":"2248e29bf7a68896e18296c0c8bf9471b39633f0"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"4cc5f157a93a1c9c9f9047bd766377b2bfc4f3c7","unresolved":true,"context_lines":[{"line_number":287,"context_line":"    :return: A set. If ``value`` is an instance of a ``list``, ``tuple`` or"},{"line_number":288,"context_line":"        ``set`` then a set containing the items in ``value`` is returned; if"},{"line_number":289,"context_line":"        value is None then None is returned; otherwise a set containing"},{"line_number":290,"context_line":"        the single ``value`` is returned."},{"line_number":291,"context_line":"    \"\"\""},{"line_number":292,"context_line":"    if value is None:"},{"line_number":293,"context_line":"        return set()"}],"source_content_type":"text/x-python","patch_set":3,"id":"b2015c09_af1cafa7","line":290,"in_reply_to":"b9ba17e8_341942e7","updated":"2023-11-06 01:33:09.000000000","message":"strange I couldn\u0027t find out which line you changed with patchset #4","commit_id":"2248e29bf7a68896e18296c0c8bf9471b39633f0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bc30544869d598833a8320a4daf909ec9bb52272","unresolved":true,"context_lines":[{"line_number":4666,"context_line":""},{"line_number":4667,"context_line":"    @name.setter"},{"line_number":4668,"context_line":"    def name(self, path):"},{"line_number":4669,"context_line":"        self._name \u003d self._encode(path)"},{"line_number":4670,"context_line":""},{"line_number":4671,"context_line":"    @property"},{"line_number":4672,"context_line":"    def lower(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"2efcb1e4_670bab01","line":4669,"updated":"2023-11-03 09:49:59.000000000","message":"this fixes bug: Namespace.name was not encoded. This became apparent when we started to instantiate Namespaces rather than ShardRanges in the proxy.","commit_id":"2248e29bf7a68896e18296c0c8bf9471b39633f0"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"4cc5f157a93a1c9c9f9047bd766377b2bfc4f3c7","unresolved":false,"context_lines":[{"line_number":4666,"context_line":""},{"line_number":4667,"context_line":"    @name.setter"},{"line_number":4668,"context_line":"    def name(self, path):"},{"line_number":4669,"context_line":"        self._name \u003d self._encode(path)"},{"line_number":4670,"context_line":""},{"line_number":4671,"context_line":"    @property"},{"line_number":4672,"context_line":"    def lower(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"88a720d5_3a8f4fac","line":4669,"in_reply_to":"2efcb1e4_670bab01","updated":"2023-11-06 01:33:09.000000000","message":"Ack","commit_id":"2248e29bf7a68896e18296c0c8bf9471b39633f0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"bc30544869d598833a8320a4daf909ec9bb52272","unresolved":true,"context_lines":[{"line_number":5245,"context_line":""},{"line_number":5246,"context_line":"    @container.setter"},{"line_number":5247,"context_line":"    def container(self, value):"},{"line_number":5248,"context_line":"        self._container \u003d self._encode(value)"},{"line_number":5249,"context_line":""},{"line_number":5250,"context_line":"    @property"},{"line_number":5251,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"cd53ca05_374678d5","line":5248,"updated":"2023-11-03 09:49:59.000000000","message":"this fixes bug: account and container wouldn\u0027t be encoded if set directly","commit_id":"2248e29bf7a68896e18296c0c8bf9471b39633f0"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"4cc5f157a93a1c9c9f9047bd766377b2bfc4f3c7","unresolved":false,"context_lines":[{"line_number":5245,"context_line":""},{"line_number":5246,"context_line":"    @container.setter"},{"line_number":5247,"context_line":"    def container(self, value):"},{"line_number":5248,"context_line":"        self._container \u003d self._encode(value)"},{"line_number":5249,"context_line":""},{"line_number":5250,"context_line":"    @property"},{"line_number":5251,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"03e868e6_d7fc4a67","line":5248,"in_reply_to":"cd53ca05_374678d5","updated":"2023-11-06 01:33:09.000000000","message":"Ack","commit_id":"2248e29bf7a68896e18296c0c8bf9471b39633f0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":true,"context_lines":[{"line_number":4630,"context_line":"        if six.PY3 and isinstance(value, six.binary_type):"},{"line_number":4631,"context_line":"            # This should never fail -- the value should always be coming from"},{"line_number":4632,"context_line":"            # valid swift paths, which means UTF-8"},{"line_number":4633,"context_line":"            return value.decode(\u0027utf-8\u0027)"},{"line_number":4634,"context_line":"        return value"},{"line_number":4635,"context_line":""},{"line_number":4636,"context_line":"    def _encode_bound(self, bound):"}],"source_content_type":"text/x-python","patch_set":4,"id":"93615015_d8fb043d","line":4633,"updated":"2023-11-08 00:01:05.000000000","message":"it seems confusing to me that we have a method named _encode that will encode legacy python unicode strings to bytes and DEcode py3 byte-strings to modern-native-unicode-strings\n\nlike the input and output is flipped depending on the version of python?\n\nOTOH, I don\u0027t really understand how a legacy python repl handles \"native\" strings in my terminal:\n\n\n\t(py27) vagrant@saio:~$ python\n\tPython 2.7.18 (default, Jul  1 2022, 12:27:04) \n\t[GCC 9.4.0] on linux2\n\tType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\t\u003e\u003e\u003e \u0027.shards_a/c_🌴\u0027\n\t\u0027.shards_a/c_\\xf0\\x9f\\x8c\\xb4\u0027\n\t\u003e\u003e\u003e \u0027.shards_a/c_🌴\u0027.decode(\u0027utf8\u0027)\n\tu\u0027.shards_a/c_\\U0001f334\u0027\n\nso the problem is probably me and not the function.  Maybe this is one of those cases where the return type is \"native string\" or \"wsgi string\" or some other thing that maybe means different things in py2 and py3 contexts.","commit_id":"d0d5533940146b453e53d003b5f461afef9e00e4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":true,"context_lines":[{"line_number":4647,"context_line":""},{"line_number":4648,"context_line":"    @name.setter"},{"line_number":4649,"context_line":"    def name(self, path):"},{"line_number":4650,"context_line":"        self._name \u003d self._encode(path)"},{"line_number":4651,"context_line":""},{"line_number":4652,"context_line":"    @property"},{"line_number":4653,"context_line":"    def lower(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"4605190e_46b02765","line":4650,"updated":"2023-11-08 00:01:05.000000000","message":"this is definately more consistent with existing handling of lower and upper!","commit_id":"d0d5533940146b453e53d003b5f461afef9e00e4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":true,"context_lines":[{"line_number":5219,"context_line":""},{"line_number":5220,"context_line":"    @container.setter"},{"line_number":5221,"context_line":"    def container(self, value):"},{"line_number":5222,"context_line":"        self._container \u003d self._encode(value)"},{"line_number":5223,"context_line":""},{"line_number":5224,"context_line":"    @property"},{"line_number":5225,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff87d9f_026f37f2","line":5222,"updated":"2023-11-08 00:01:05.000000000","message":"since these setters are new it seems like there\u0027s also a behavior added here where, modifying an existing attribute inplace will enforce encoding:\n\n\t\u003e\u003e\u003e s \u003d ShardRange(\u0027.shards_a/c_🌴\u0027)\n\t\u003e\u003e\u003e s.container\n\t\u0027c_🌴\u0027\n\t\u003e\u003e\u003e s.container \u003d b\u0027c_\\xe2\\x98\\x83\u0027\n\t\u003e\u003e\u003e s.container\n\t\u0027c_☃\u0027\n\nwhere as we used to just set it to whatever we got:\n\n\t\u003e\u003e\u003e s.container \u003d b\u0027c_\\xe2\\x98\\x83\u0027\n\t\u003e\u003e\u003e s.container\n\tb\u0027c_\\xe2\\x98\\x83\u0027\n\t\u003e\u003e\u003e s.name\n\t\".shards_a/b\u0027c_\\\\xe2\\\\x98\\\\x83\u0027\"\n\n... which would get trippy, since name it self is a synthetic propery.\n\nIn practice do we ever update these attributes after we\u0027ve created a ShardRange instance; would that be a reasonable thing to do?","commit_id":"d0d5533940146b453e53d003b5f461afef9e00e4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":true,"context_lines":[{"line_number":5232,"context_line":"            raise ValueError("},{"line_number":5233,"context_line":"                \"Name must be of the form \u0027\u003caccount\u003e/\u003ccontainer\u003e\u0027, got %r\" %"},{"line_number":5234,"context_line":"                name)"},{"line_number":5235,"context_line":"        self._account, self._container \u003d name.split(\u0027/\u0027)"},{"line_number":5236,"context_line":""},{"line_number":5237,"context_line":"    @property"},{"line_number":5238,"context_line":"    def timestamp(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"b8ab9bd0_9a0ebb03","line":5235,"updated":"2023-11-08 00:01:05.000000000","message":"and we can bypass the property setters because we\u0027ve already encoded on L5230","commit_id":"d0d5533940146b453e53d003b5f461afef9e00e4"}],"swift/proxy/controllers/container.py":[{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"65a9396ebfbaba2fb2552789aa6296dc8985ae8a","unresolved":true,"context_lines":[{"line_number":174,"context_line":"                            # json \u0027string\u0027 to \u0027unicode\u0027 with python2, and"},{"line_number":175,"context_line":"                            # Namespace will convert \u0027unicode\u0027 back to \u0027str\u0027."},{"line_number":176,"context_line":"                            cached_namespaces \u003d ["},{"line_number":177,"context_line":"                                [lower, name]"},{"line_number":178,"context_line":"                                for lower, name in cached_namespaces"},{"line_number":179,"context_line":"                            ]"},{"line_number":180,"context_line":"                        ns_bound_list \u003d NamespaceBoundList(cached_namespaces)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9cae7f90_2d94fc01","line":177,"updated":"2023-11-03 01:14:47.000000000","message":"Not sure if we can remove ``name.encode(\u0027utf-8\u0027)`` at here already, since there are other codes (like bisect on cached_namespaces) before Namespace calls encoding utf-8. But pipeline will tell, since this fix mainly used to fix pipeline? prod proxy-servers are running py3.","commit_id":"b181ef980d87403b9215ad550129e29729f76228"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"038540e6340ce6c7372a3a04069e2abba5b663b4","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                            # json \u0027string\u0027 to \u0027unicode\u0027 with python2, and"},{"line_number":175,"context_line":"                            # Namespace will convert \u0027unicode\u0027 back to \u0027str\u0027."},{"line_number":176,"context_line":"                            cached_namespaces \u003d ["},{"line_number":177,"context_line":"                                [lower, name]"},{"line_number":178,"context_line":"                                for lower, name in cached_namespaces"},{"line_number":179,"context_line":"                            ]"},{"line_number":180,"context_line":"                        ns_bound_list \u003d NamespaceBoundList(cached_namespaces)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b820817a_c49b13e9","line":177,"in_reply_to":"9cae7f90_2d94fc01","updated":"2023-11-03 03:22:18.000000000","message":"Nope. Still need them.","commit_id":"b181ef980d87403b9215ad550129e29729f76228"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":true,"context_lines":[{"line_number":7463,"context_line":"                      for lower, upper in bounds]"},{"line_number":7464,"context_line":"        if six.PY2:"},{"line_number":7465,"context_line":"            exp_bounds \u003d [(l.encode(\u0027utf8\u0027), u.encode(\u0027utf8\u0027))"},{"line_number":7466,"context_line":"                          for l, u in bounds]"},{"line_number":7467,"context_line":"        else:"},{"line_number":7468,"context_line":"            exp_bounds \u003d bounds"},{"line_number":7469,"context_line":"        for i in range(len(exp_bounds)):"}],"source_content_type":"text/x-python","patch_set":4,"id":"653b8d49_79ed9c81","line":7466,"updated":"2023-11-08 00:01:05.000000000","message":"(py27) vagrant@saio:~$ pytest swift/test/unit/common/test_utils.py::TestNamespace::test_unicode_name\n\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d test session starts \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\tplatform linux2 -- Python 2.7.18, pytest-4.6.11, py-1.11.0, pluggy-0.13.1 -- /home/vagrant/.tox-swift/py27/bin/python\n\tcachedir: .pytest_cache\n\trootdir: /home/vagrant/swift, inifile: tox.ini\n\tplugins: cov-2.12.1\n\tcollected 1 item                                                                                                                                                                      \n\n\tswift/::TestNamespace::test_unicode_name \n\t\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e PDB set_trace (IO-capturing turned off) \u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\n\t\u003e /vagrant/swift/test/unit/common/test_utils.py(7471)test_unicode_name()\n\t-\u003e for i in range(len(exp_bounds)):\n\t(Pdb) exp_bounds\n\t[(\u0027\u0027, \u0027ham\u0027), (\u0027ham\u0027, \u0027pie\u0027), (\u0027pie\u0027, \u0027\\xe2\\x98\\x83\u0027), (\u0027\\xe2\\x98\\x83\u0027, \u0027\\xf0\\x9f\\x8c\\xb4\u0027), (\u0027\\xf0\\x9f\\x8c\\xb4\u0027, \u0027\u0027)]","commit_id":"d0d5533940146b453e53d003b5f461afef9e00e4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":true,"context_lines":[{"line_number":7465,"context_line":"            exp_bounds \u003d [(l.encode(\u0027utf8\u0027), u.encode(\u0027utf8\u0027))"},{"line_number":7466,"context_line":"                          for l, u in bounds]"},{"line_number":7467,"context_line":"        else:"},{"line_number":7468,"context_line":"            exp_bounds \u003d bounds"},{"line_number":7469,"context_line":"        for i in range(len(exp_bounds)):"},{"line_number":7470,"context_line":"            self.assertEqual(namespaces[i].name,"},{"line_number":7471,"context_line":"                             \u0027.shards_a/c_%s\u0027 % exp_bounds[i][1])"}],"source_content_type":"text/x-python","patch_set":4,"id":"a41a20f1_c766e45b","line":7468,"updated":"2023-11-08 00:01:05.000000000","message":"(py27) vagrant@saio:~$ deactivate \n\tvagrant@saio:~$ pytest swift/test/unit/common/test_utils.py::TestNamespace::test_unicode_name\n\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d test session starts \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\tplatform linux -- Python 3.8.10, pytest-7.4.2, pluggy-1.3.0 -- /usr/bin/python\n\tcachedir: .pytest_cache\n\trootdir: /home/vagrant/swift\n\tconfigfile: tox.ini\n\tplugins: cov-4.1.0\n\tcollected 1 item                                                                                                                                                                      \n\n\tswift/test/unit/common/test_utils.py::TestNamespace::test_unicode_name \n\t\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e PDB set_trace (IO-capturing turned off) \u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\n\t\u003e /home/vagrant/swift/test/unit/common/test_utils.py(7471)test_unicode_name()\n\t-\u003e for i in range(len(exp_bounds)):\n\t(Pdb) exp_bounds\n\t[(\u0027\u0027, \u0027ham\u0027), (\u0027ham\u0027, \u0027pie\u0027), (\u0027pie\u0027, \u0027☃\u0027), (\u0027☃\u0027, \u0027🌴\u0027), (\u0027🌴\u0027, \u0027\u0027)]","commit_id":"d0d5533940146b453e53d003b5f461afef9e00e4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":true,"context_lines":[{"line_number":7468,"context_line":"            exp_bounds \u003d bounds"},{"line_number":7469,"context_line":"        for i in range(len(exp_bounds)):"},{"line_number":7470,"context_line":"            self.assertEqual(namespaces[i].name,"},{"line_number":7471,"context_line":"                             \u0027.shards_a/c_%s\u0027 % exp_bounds[i][1])"},{"line_number":7472,"context_line":"            self.assertEqual(namespaces[i].lower_str, exp_bounds[i][0])"},{"line_number":7473,"context_line":""},{"line_number":7474,"context_line":"            self.assertEqual(namespaces[i].upper_str, exp_bounds[i][1])"}],"source_content_type":"text/x-python","patch_set":4,"id":"a5e9fd95_e0dee0fc","line":7471,"updated":"2023-11-08 00:01:05.000000000","message":"py2 before:\n\n\t(py27) vagrant@saio:~$ pytest swift/test/unit/common/test_utils.py::TestNamespace::test_unicode_name_name\n\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d test session starts \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\tplatform linux2 -- Python 2.7.18, pytest-4.6.11, py-1.11.0, pluggy-0.13.1 -- /home/vagrant/.tox-swift/py27/bin/python\n\tcachedir: .pytest_cache\n\trootdir: /home/vagrant/swift, inifile: tox.ini\n\tplugins: cov-2.12.1\n\tcollected 1 item                                                                                                                                                                      \n\n\tswift/::TestNamespace::test_unicode_name \n\t\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e PDB set_trace (IO-capturing turned off) \u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\n\t\u003e /vagrant/swift/test/unit/common/test_utils.py(7471)test_unicode_name()\n\t-\u003e for i in range(len(exp_bounds)):\n\t(Pdb) ![n.name for n in namespaces]\n\t[\u0027.shards_a/c_ham\u0027, \u0027.shards_a/c_pie\u0027, u\u0027.shards_a/c_\\u2603\u0027, u\u0027.shards_a/c_\\U0001f334\u0027, \u0027.shards_a/c_\u0027]\n\npy3 before (and after)\n\n\t(py27) vagrant@saio:~$ deactivate \n\tvagrant@saio:~$ pytest swift/test/unit/common/test_utils.py::TestNamespace::test_unicode_name\n\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d test session starts \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\tplatform linux -- Python 3.8.10, pytest-7.4.2, pluggy-1.3.0 -- /usr/bin/python\n\tcachedir: .pytest_cache\n\trootdir: /home/vagrant/swift\n\tconfigfile: tox.ini\n\tplugins: cov-4.1.0\n\tcollected 1 item                                                                                                                                                                      \n\n\tswift/test/unit/common/test_utils.py::TestNamespace::test_unicode_name \n\t\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e PDB set_trace (IO-capturing turned off) \u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\n\t\u003e /home/vagrant/swift/test/unit/common/test_utils.py(7471)test_unicode_name()\n\t-\u003e for i in range(len(exp_bounds)):\n\t(Pdb) ![n.name for n in namespaces]\n\t[\u0027.shards_a/c_ham\u0027, \u0027.shards_a/c_pie\u0027, \u0027.shards_a/c_☃\u0027, \u0027.shards_a/c_🌴\u0027, \u0027.shards_a/c_\u0027]\n\npy2 after:\n\n\t(py27) vagrant@saio:~$ pytest swift/test/unit/common/test_utils.py::TestNamespace::test_unicode_name_name\n\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d test session starts \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\tplatform linux2 -- Python 2.7.18, pytest-4.6.11, py-1.11.0, pluggy-0.13.1 -- /home/vagrant/.tox-swift/py27/bin/python\n\tcachedir: .pytest_cache\n\trootdir: /home/vagrant/swift, inifile: tox.ini\n\tplugins: cov-2.12.1\n\tcollected 1 item                                                                                                                                                                      \n\n\tswift/::TestNamespace::test_unicode_name \n\t\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e PDB set_trace (IO-capturing turned off) \u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\n\t\u003e /vagrant/swift/test/unit/common/test_utils.py(7471)test_unicode_name()\n\t-\u003e for i in range(len(exp_bounds)):\n\t(Pdb) ![n.name for n in namespaces]\n\t[\u0027.shards_a/c_ham\u0027, \u0027.shards_a/c_pie\u0027, \u0027.shards_a/c_\\xe2\\x98\\x83\u0027, \u0027.shards_a/c_\\xf0\\x9f\\x8c\\xb4\u0027, \u0027.shards_a/c_\u0027]","commit_id":"d0d5533940146b453e53d003b5f461afef9e00e4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"9dd9cd1dbb56c843d3cdacd9c4a3af235ded04cb","unresolved":true,"context_lines":[{"line_number":8091,"context_line":"        sr.container \u003d \u0027c2\u0027"},{"line_number":8092,"context_line":"        self._check_name_account_container(sr, \u0027a/c2\u0027)"},{"line_number":8093,"context_line":"        sr.container \u003d u\u0027\\n{SNOWMAN}\u0027"},{"line_number":8094,"context_line":"        self._check_name_account_container(sr, u\u0027a/\\n{SNOWMAN}\u0027)"},{"line_number":8095,"context_line":""},{"line_number":8096,"context_line":"    def test_timestamp_setter(self):"},{"line_number":8097,"context_line":"        ts_1 \u003d next(self.ts_iter)"}],"source_content_type":"text/x-python","patch_set":4,"id":"0c836576_08fa1c29","line":8094,"updated":"2023-11-08 00:01:05.000000000","message":"as best I can tell there\u0027s no tests that cover the behavior of building ShardRange/Namespace form bytes under py3 - but maybe we only over build them from native strings or unicode strings.","commit_id":"d0d5533940146b453e53d003b5f461afef9e00e4"}]}
