)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5808d80b859f6af7babde862f190f960cc36b22b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0e7ef336_7951591f","updated":"2022-12-01 06:27:29.000000000","message":"Not sold on this at all. Just writing it to see how it comes out in the wash.","commit_id":"d0ccbeb2308d4178e2c53d1d99a3cfc40a5edc82"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8a2dc1dd06d996b8a1e1825fcfe97accaf97a921","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c67e9061_a8ffc53e","updated":"2022-12-01 16:03:16.000000000","message":"the name isn\u0027t quite right yet... it\u0027s not just \"names\" - we want to build a \"layer\" between a swift.common.ring.Ring object and \"the filesystem\" used to store/backup/transmit/deploy/lookup-in rings\n\nmaybe \"the RingStore\" is looking/watching /etc/swift and passes out references to rings (and builders), and can even write-back modified rings/builders to disk (or across networks to servers and/or cloud storage depending or whatever the future brings)","commit_id":"d0ccbeb2308d4178e2c53d1d99a3cfc40a5edc82"}],"swift/common/ring/utils.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8a2dc1dd06d996b8a1e1825fcfe97accaf97a921","unresolved":true,"context_lines":[{"line_number":615,"context_line":""},{"line_number":616,"context_line":"def parse_builder_ring_filename_args(argvish):"},{"line_number":617,"context_line":"    ring_name \u003d RingName.from_arg(argvish[1])"},{"line_number":618,"context_line":"    return ring_name.builder, ring_name.ring"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"def build_dev_from_opts(opts):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e7cb009_2b7b7cec","line":618,"updated":"2022-12-01 16:03:16.000000000","message":"creating an object w/i a funciton and throwing it away before you return is a HUGE anti-pattern to me:\n\nhttps://www.youtube.com/watch?v\u003do9pEzgHorH0","commit_id":"d0ccbeb2308d4178e2c53d1d99a3cfc40a5edc82"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8a2dc1dd06d996b8a1e1825fcfe97accaf97a921","unresolved":true,"context_lines":[{"line_number":744,"context_line":"    def __init__(self, dirname\u003d\u0027/etc/swift\u0027, policy\u003d\u0027object\u0027, version\u003d1):"},{"line_number":745,"context_line":"        self.extension \u003d self._version \u003d None"},{"line_number":746,"context_line":"        self.dirname \u003d dirname"},{"line_number":747,"context_line":"        self.version \u003d version"},{"line_number":748,"context_line":"        self.policy \u003d policy"},{"line_number":749,"context_line":"        self.last_mtime \u003d None"},{"line_number":750,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c3238c4c_38af9ecb","line":747,"updated":"2022-12-01 16:03:16.000000000","message":"maybe:\n\n    self._version \u003d version","commit_id":"d0ccbeb2308d4178e2c53d1d99a3cfc40a5edc82"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8a2dc1dd06d996b8a1e1825fcfe97accaf97a921","unresolved":true,"context_lines":[{"line_number":769,"context_line":""},{"line_number":770,"context_line":"    @property"},{"line_number":771,"context_line":"    def ring(self):"},{"line_number":772,"context_line":"        return str(self)"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"    @property"},{"line_number":775,"context_line":"    def builder(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"770a69ae_7dd849ce","line":772,"updated":"2022-12-01 16:03:16.000000000","message":"the asymetry between this and the builder property sticks out\n\nif you really want, maybe __str__ should just return self.ring","commit_id":"d0ccbeb2308d4178e2c53d1d99a3cfc40a5edc82"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8a2dc1dd06d996b8a1e1825fcfe97accaf97a921","unresolved":true,"context_lines":[{"line_number":786,"context_line":"        if ext.lower() \u003d\u003d \u0027gz\u0027:"},{"line_number":787,"context_line":"            return RingName(dirname, policy, 1)"},{"line_number":788,"context_line":"        elif ext.lower() \u003d\u003d \u0027zip\u0027:"},{"line_number":789,"context_line":"            return RingName(dirname, policy, 2)"},{"line_number":790,"context_line":"        raise ValueError(\u0027Could not determine ring name and version\u0027)"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"    def exists(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"46cc5fa8_b6ba7fba","line":789,"updated":"2022-12-01 16:03:16.000000000","message":"this is really the bulk of the function that\u0027s being replaced - and I think it reads better - so using a class here might be a good idea.  The encapsalation might make it easier later if builders become zip\u0027d rings (or at least that\u0027s the direction we should be thinking)\n\nI think this \"method\" reads like a \"constructor\" - but typically you\u0027d expect it to be a @classmethod and return cls()\n\nI think you could leave this arg-parsing logic in the function - or maybe better have the callsites use:\n\n    ring_file_names \u003d RingName.from_args(args)\n    ring_name \u003d ring_file_names.ring\n    builder_name \u003d ring_file_names.builder\n    \nor something, instead of:\n\n    ring_name, builder_name \u003d parse_builder_ring_filename_args()","commit_id":"d0ccbeb2308d4178e2c53d1d99a3cfc40a5edc82"}],"test/unit/common/ring/test_utils.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8a2dc1dd06d996b8a1e1825fcfe97accaf97a921","unresolved":true,"context_lines":[{"line_number":839,"context_line":"        pass"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"    def test_changed(self):"},{"line_number":842,"context_line":"        pass"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"428c7c4c_33ce1140","line":842,"updated":"2022-12-01 16:03:16.000000000","message":"yeah, this interface starts to look kind of interesting at some point... it\u0027s not \"just\" a RingName exactly - it\u0027s like an abstraction across file-system state to support moving from .ring.gz to .ring.zip transparently to the callers...\n\nyou need to push this thing out into builder and the daemons to *really* see how it shakes out.","commit_id":"d0ccbeb2308d4178e2c53d1d99a3cfc40a5edc82"}]}
