)]}'
{"gear/__init__.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"fb153d478db7b7afc44564435e74e4b8e55ea020","unresolved":false,"context_lines":[{"line_number":2303,"context_line":"            ret.append(d)"},{"line_number":2304,"context_line":"        if self._data !\u003d ret:"},{"line_number":2305,"context_line":"            self._data \u003d ret"},{"line_number":2306,"context_line":"        return self._data"},{"line_number":2307,"context_line":""},{"line_number":2308,"context_line":"    @data.setter"},{"line_number":2309,"context_line":"    def data(self, value):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_621f47b7","line":2306,"updated":"2017-05-10 14:30:30.000000000","message":"Aside from the inefficiency of doing this on every access, I worry this may be unexpectedly racy if used by multiple threads (two threads reading \u0027data\u0027 could end up causing different values to be set on _data if something was appended between the two reads).  What if, instead of having the client call job.data.append(data), we added a WorkerJob.appendData(data) method which could then be overridden to decode the data into text.  I think we still won\u0027t need a lock within that method because we don\u0027t expect more than one writer.","commit_id":"41319e4fadd549593eec0b863fafb3ba49574f96"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"3b983cca90713eba9dfb556763fd1558da053076","unresolved":false,"context_lines":[{"line_number":1423,"context_line":"        :raises ConfigurationError: If an invalid precendence value"},{"line_number":1424,"context_line":"            is supplied."},{"line_number":1425,"context_line":"        \"\"\""},{"line_number":1426,"context_line":"        if job.unique is None:"},{"line_number":1427,"context_line":"            unique \u003d b\u0027\u0027"},{"line_number":1428,"context_line":"        else:"},{"line_number":1429,"context_line":"            unique \u003d job.binary_unique"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_48e61d19","line":1426,"updated":"2017-05-17 18:16:08.000000000","message":"I think you\u0027re right, and the reason we didn\u0027t notice is that this conditional is not covered well in tests. Worth investigating for sure.","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"45779dd04ca2191c79a3e65dc004f06628ba866a","unresolved":false,"context_lines":[{"line_number":1423,"context_line":"        :raises ConfigurationError: If an invalid precendence value"},{"line_number":1424,"context_line":"            is supplied."},{"line_number":1425,"context_line":"        \"\"\""},{"line_number":1426,"context_line":"        if job.unique is None:"},{"line_number":1427,"context_line":"            unique \u003d b\u0027\u0027"},{"line_number":1428,"context_line":"        else:"},{"line_number":1429,"context_line":"            unique \u003d job.binary_unique"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_f076fd3e","line":1426,"updated":"2017-05-17 17:13:41.000000000","message":"Shouldn\u0027t this check be against job.binary_unique if we are doing the assignment below to binary_unique?","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"45779dd04ca2191c79a3e65dc004f06628ba866a","unresolved":false,"context_lines":[{"line_number":1710,"context_line":"                not isinstance(arguments, bytearray)):"},{"line_number":1711,"context_line":"            raise TypeError(\"arguments must be of type bytes or bytearray\")"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"    @property"},{"line_number":1714,"context_line":"    def arguments(self):"},{"line_number":1715,"context_line":"        return self._arguments"},{"line_number":1716,"context_line":""},{"line_number":1717,"context_line":"    @arguments.setter"},{"line_number":1718,"context_line":"    def arguments(self, value):"},{"line_number":1719,"context_line":"        self._arguments \u003d value"},{"line_number":1720,"context_line":""},{"line_number":1721,"context_line":"    @property"},{"line_number":1722,"context_line":"    def unique(self):"},{"line_number":1723,"context_line":"        return self._unique"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"    @unique.setter"},{"line_number":1726,"context_line":"    def unique(self, value):"},{"line_number":1727,"context_line":"        self._unique \u003d value"},{"line_number":1728,"context_line":""},{"line_number":1729,"context_line":"    @property"},{"line_number":1730,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_3027d515","line":1727,"range":{"start_line":1713,"start_character":0,"end_line":1727,"end_character":28},"updated":"2017-05-17 17:13:41.000000000","message":"It appears that the expectation for these items is that they will be binary? (they share the same internal values as the binary_ prefixed properties). Perhaps they should be validated with _validate_arguments on setting and for unique too?","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"3b983cca90713eba9dfb556763fd1558da053076","unresolved":false,"context_lines":[{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"    @unique.setter"},{"line_number":1726,"context_line":"    def unique(self, value):"},{"line_number":1727,"context_line":"        self._unique \u003d value"},{"line_number":1728,"context_line":""},{"line_number":1729,"context_line":"    @property"},{"line_number":1730,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_28e3e907","line":1727,"updated":"2017-05-17 18:16:08.000000000","message":"They\u0027re intended to be left alone for the most part. If you do pass in unicode in py27 you\u0027ll get unicode back from the binary_ method. But that\u0027s no change from before. The validation would be a nice added bit to clarify when you\u0027ve done something like this and weird things are happening later.","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"45779dd04ca2191c79a3e65dc004f06628ba866a","unresolved":false,"context_lines":[{"line_number":1774,"context_line":"    **arguments** (bytes)"},{"line_number":1775,"context_line":"        The opaque data blob passed to the worker as arguments."},{"line_number":1776,"context_line":"    **unique** (str or None)"},{"line_number":1777,"context_line":"        The unique ID of the job (if supplied)."},{"line_number":1778,"context_line":"    **handle** (bytes)"},{"line_number":1779,"context_line":"        The Gearman job handle."},{"line_number":1780,"context_line":"    **connection** (:py:class:`Connection` or None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_10697124","line":1777,"updated":"2017-05-17 17:13:41.000000000","message":"Is this str type also assumed to be utf8?","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"3b983cca90713eba9dfb556763fd1558da053076","unresolved":false,"context_lines":[{"line_number":1774,"context_line":"    **arguments** (bytes)"},{"line_number":1775,"context_line":"        The opaque data blob passed to the worker as arguments."},{"line_number":1776,"context_line":"    **unique** (str or None)"},{"line_number":1777,"context_line":"        The unique ID of the job (if supplied)."},{"line_number":1778,"context_line":"    **handle** (bytes)"},{"line_number":1779,"context_line":"        The Gearman job handle."},{"line_number":1780,"context_line":"    **connection** (:py:class:`Connection` or None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_08f025c9","line":1777,"updated":"2017-05-17 18:16:08.000000000","message":"This particular class was moved as-is. I think it\u0027s a relic of str\u003d\u003dbytes in py27 and the docs were always somewhat confusing. Warrants a follow-up to clarify.","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"3b983cca90713eba9dfb556763fd1558da053076","unresolved":false,"context_lines":[{"line_number":2305,"context_line":""},{"line_number":2306,"context_line":"    @property"},{"line_number":2307,"context_line":"    def arguments(self):"},{"line_number":2308,"context_line":"        args \u003d self._arguments"},{"line_number":2309,"context_line":"        if isinstance(args, six.binary_type):"},{"line_number":2310,"context_line":"            return args.decode(\u0027utf-8\u0027)"},{"line_number":2311,"context_line":"        return args"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_e8ecd1f4","line":2308,"updated":"2017-05-17 18:16:08.000000000","message":"It\u0027s intended to be mixed in with Job, which sets self._arguments in __init__.","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"45779dd04ca2191c79a3e65dc004f06628ba866a","unresolved":false,"context_lines":[{"line_number":2305,"context_line":""},{"line_number":2306,"context_line":"    @property"},{"line_number":2307,"context_line":"    def arguments(self):"},{"line_number":2308,"context_line":"        args \u003d self._arguments"},{"line_number":2309,"context_line":"        if isinstance(args, six.binary_type):"},{"line_number":2310,"context_line":"            return args.decode(\u0027utf-8\u0027)"},{"line_number":2311,"context_line":"        return args"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_f0583d57","line":2308,"updated":"2017-05-17 17:13:41.000000000","message":"This will attribute error if not already set which may be confusing to the user.","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"3b983cca90713eba9dfb556763fd1558da053076","unresolved":false,"context_lines":[{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    @property"},{"line_number":2327,"context_line":"    def unique(self):"},{"line_number":2328,"context_line":"        unique \u003d self._unique"},{"line_number":2329,"context_line":"        if isinstance(unique, six.binary_type):"},{"line_number":2330,"context_line":"            return unique.decode(\u0027utf-8\u0027)"},{"line_number":2331,"context_line":"        return unique"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_c8bb4de3","line":2328,"updated":"2017-05-17 18:16:08.000000000","message":"Same as arguments.","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"45779dd04ca2191c79a3e65dc004f06628ba866a","unresolved":false,"context_lines":[{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    @property"},{"line_number":2327,"context_line":"    def unique(self):"},{"line_number":2328,"context_line":"        unique \u003d self._unique"},{"line_number":2329,"context_line":"        if isinstance(unique, six.binary_type):"},{"line_number":2330,"context_line":"            return unique.decode(\u0027utf-8\u0027)"},{"line_number":2331,"context_line":"        return unique"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_f07f1da9","line":2328,"updated":"2017-05-17 17:13:41.000000000","message":"This will attribute error if not already set which may be a confusing error to the user.","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"45779dd04ca2191c79a3e65dc004f06628ba866a","unresolved":false,"context_lines":[{"line_number":2337,"context_line":"        self._unique \u003d value"},{"line_number":2338,"context_line":""},{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"class TextList(list):"},{"line_number":2341,"context_line":"    def append(self, x):"},{"line_number":2342,"context_line":"        if isinstance(x, six.binary_type):"},{"line_number":2343,"context_line":"            x \u003d x.decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_d02ad98e","line":2340,"updated":"2017-05-17 17:13:41.000000000","message":"IIRC subclassing list and dict is bad because they are largely implemented in C and that leads to weirdness in python subclasses? I\u0027m sure someone like dhellmann can explain better than I.\n\nInternets do point at http://pypy.readthedocs.io/en/latest/cpython_differences.html#subclasses-of-built-in-types though.","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"3b983cca90713eba9dfb556763fd1558da053076","unresolved":false,"context_lines":[{"line_number":2337,"context_line":"        self._unique \u003d value"},{"line_number":2338,"context_line":""},{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":"class TextList(list):"},{"line_number":2341,"context_line":"    def append(self, x):"},{"line_number":2342,"context_line":"        if isinstance(x, six.binary_type):"},{"line_number":2343,"context_line":"            x \u003d x.decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff0f0b1f_a8c01952","line":2340,"updated":"2017-05-17 18:16:08.000000000","message":"Indeed, it\u0027s a treacherous thing to do, but not entirely wrong. I think we\u0027re covered by always super\u0027ing and not overriding magic methods.","commit_id":"afb9001c28caa013723344ee5653d193322cfe7e"}]}
