)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"864f1f0c23f89876cf4c5d2ab80297d9268f5c47","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"09073d9b_421204cd","updated":"2022-07-07 22:24:32.000000000","message":"Had an idea for an alternate approach: https://review.opendev.org/c/openstack/python-swiftclient/+/849049","commit_id":"2ce6614d503b4d1cfababfc50f814a10e6bfae24"}],"swiftclient/shell.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"be505a3c149ce82570de2109a11f5b574a703db4","unresolved":false,"context_lines":[{"line_number":628,"context_line":"        if int(options[\u0027filter_size\u0027]) \u003e 0:"},{"line_number":629,"context_line":"            options[\u0027size_gt\u0027] \u003d True"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        options[\u0027size\u0027] \u003d abs(int(options[\u0027filter_size\u0027]))"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":634,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_228c4539","line":631,"updated":"2020-02-18 17:39:42.000000000","message":"using int to parse the +/- sign is pretty clever!","commit_id":"12e9244b0cc046a14c6a76ebeb85f043b949a688"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e90ea18c0a8d3c2e40309cb8c298e48b049b9aee","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                        date, xtime \u003d item.get(\u0027last_modified\u0027).split(\u0027T\u0027)"},{"line_number":562,"context_line":"                        xtime \u003d xtime.split(\u0027.\u0027)[0]"},{"line_number":563,"context_line":"                    else:"},{"line_number":564,"context_line":"                        item_bytes \u003d 0"},{"line_number":565,"context_line":"                        byte_str \u003d prt_bytes(item_bytes, human)"},{"line_number":566,"context_line":"                        date \u003d xtime \u003d \u0027\u0027"},{"line_number":567,"context_line":"                        item_name \u003d subdir"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_0eda8149","line":564,"updated":"2020-02-19 16:58:50.000000000","message":"Interesting, so subdirs are always shown.","commit_id":"a565688767473aa754e5fd73d55a4b56e48d9bc9"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"adddfcb820eabeec67fac0e14c7bde38365b016d","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                        date, xtime \u003d item.get(\u0027last_modified\u0027).split(\u0027T\u0027)"},{"line_number":562,"context_line":"                        xtime \u003d xtime.split(\u0027.\u0027)[0]"},{"line_number":563,"context_line":"                    else:"},{"line_number":564,"context_line":"                        item_bytes \u003d 0"},{"line_number":565,"context_line":"                        byte_str \u003d prt_bytes(item_bytes, human)"},{"line_number":566,"context_line":"                        date \u003d xtime \u003d \u0027\u0027"},{"line_number":567,"context_line":"                        item_name \u003d subdir"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_10b053df","line":564,"in_reply_to":"3fa7e38b_0eda8149","updated":"2020-02-20 04:05:18.000000000","message":"What\u0027s case that I\u0027ll see these? Can you give some examples?","commit_id":"a565688767473aa754e5fd73d55a4b56e48d9bc9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a572f7239acf991a2164bb72c9115ea9f683961e","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                        date, xtime \u003d item.get(\u0027last_modified\u0027).split(\u0027T\u0027)"},{"line_number":562,"context_line":"                        xtime \u003d xtime.split(\u0027.\u0027)[0]"},{"line_number":563,"context_line":"                    else:"},{"line_number":564,"context_line":"                        item_bytes \u003d 0"},{"line_number":565,"context_line":"                        byte_str \u003d prt_bytes(item_bytes, human)"},{"line_number":566,"context_line":"                        date \u003d xtime \u003d \u0027\u0027"},{"line_number":567,"context_line":"                        item_name \u003d subdir"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_49785e8e","line":564,"in_reply_to":"3fa7e38b_10b053df","updated":"2020-04-08 00:28:00.000000000","message":"Upload a tree, like\n\n $ swift upload c swiftclient/\n\nthen do some listings with both --long (or --lh) and --delimiter\u003d/\n\n$ swift list c --long --delimiter\u003d/ \n           0                                         None swiftclient/\n           0\n$ swift list c --long --delimiter\u003d/ --prefix\u003dswiftclient/\n        1068 2020-04-08 00:14:59            text/x-python swiftclient/__init__.py\n         363 2020-04-08 00:14:59 application/x-python-code swiftclient/__init__.pyc\n           0                                         None swiftclient/__pycache__/\n       12706 2020-04-08 00:14:59            text/x-python swiftclient/authv1.py\n       11846 2020-04-08 00:14:58 application/x-python-code swiftclient/authv1.pyc\n       79598 2020-04-08 00:14:58            text/x-python swiftclient/client.py\n       63762 2020-04-08 00:14:59 application/x-python-code swiftclient/client.pyc\n        6903 2020-04-08 00:14:59            text/x-python swiftclient/command_helpers.py\n        6402 2020-04-08 00:14:58 application/x-python-code swiftclient/command_helpers.pyc\n        3056 2020-04-08 00:14:59            text/x-python swiftclient/exceptions.py\n        2262 2020-04-08 00:14:58 application/x-python-code swiftclient/exceptions.pyc\n        8125 2020-04-08 00:14:59            text/x-python swiftclient/multithreading.py\n        8677 2020-04-08 00:14:59 application/x-python-code swiftclient/multithreading.pyc\n      115089 2020-04-08 00:14:58            text/x-python swiftclient/service.py\n       75962 2020-04-08 00:14:58 application/x-python-code swiftclient/service.pyc\n       86254 2020-04-08 00:14:58            text/x-python swiftclient/shell.py\n       65017 2020-04-08 00:14:58 application/x-python-code swiftclient/shell.pyc\n       13782 2020-04-08 00:14:58            text/x-python swiftclient/utils.py\n       14511 2020-04-08 00:14:59 application/x-python-code swiftclient/utils.pyc\n        1289 2020-04-08 00:14:59            text/x-python swiftclient/version.py\n         419 2020-04-08 00:14:58 application/x-python-code swiftclient/version.pyc\n      577091\n\nTo be clear, I think showing subdirs is probably the right way to go -- we don\u0027t know (and can\u0027t, from the single request) whether there are objects that match the filter under that prefix, so it seems safest to err on the side of showing it.","commit_id":"a565688767473aa754e5fd73d55a4b56e48d9bc9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e90ea18c0a8d3c2e40309cb8c298e48b049b9aee","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        help\u003d\u0027Used with -l or --lh, only show container/object that size \u0027"},{"line_number":590,"context_line":"             \u0027bigger(+)/smaller(-) than the size (bytes).\u0027"},{"line_number":591,"context_line":"             \u0027-S +1024, show container/object size \u003e 1024 bytes\u0027"},{"line_number":592,"context_line":"             \u0027-S -2048, show container/object size \u003c 2048 bytes\u0027)"},{"line_number":593,"context_line":"    parser.add_argument("},{"line_number":594,"context_line":"        \u0027--lh\u0027, dest\u003d\u0027human\u0027, action\u003d\u0027store_true\u0027,"},{"line_number":595,"context_line":"        default\u003dFalse, help\u003d\u0027Report sizes in human readable format, \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_ee192576","line":592,"updated":"2020-02-19 16:58:50.000000000","message":"I wonder if it would be useful to be able to say something like\n\n swift list -l -S 1024 -S -10240\n\nto list all objects between 1k and 10k -- at the moment it just uses the last value. I feel like we should maybe error instead... OTOH, delimiter behaves the same way.\n\nAlternatively, maybe accept something like\n\n swift list -l -S 1024-10240\n\n?","commit_id":"a565688767473aa754e5fd73d55a4b56e48d9bc9"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"adddfcb820eabeec67fac0e14c7bde38365b016d","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        help\u003d\u0027Used with -l or --lh, only show container/object that size \u0027"},{"line_number":590,"context_line":"             \u0027bigger(+)/smaller(-) than the size (bytes).\u0027"},{"line_number":591,"context_line":"             \u0027-S +1024, show container/object size \u003e 1024 bytes\u0027"},{"line_number":592,"context_line":"             \u0027-S -2048, show container/object size \u003c 2048 bytes\u0027)"},{"line_number":593,"context_line":"    parser.add_argument("},{"line_number":594,"context_line":"        \u0027--lh\u0027, dest\u003d\u0027human\u0027, action\u003d\u0027store_true\u0027,"},{"line_number":595,"context_line":"        default\u003dFalse, help\u003d\u0027Report sizes in human readable format, \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_70bae7ba","line":592,"in_reply_to":"3fa7e38b_ee192576","updated":"2020-02-20 04:05:18.000000000","message":"That\u0027s a good idea, let me update my patchset.","commit_id":"a565688767473aa754e5fd73d55a4b56e48d9bc9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e90ea18c0a8d3c2e40309cb8c298e48b049b9aee","unresolved":false,"context_lines":[{"line_number":634,"context_line":"    if options[\u0027filter_size\u0027]:"},{"line_number":635,"context_line":"        if not options[\u0027long\u0027]:"},{"line_number":636,"context_line":"            output_manager.error("},{"line_number":637,"context_line":"                \"Listing by size only works with -l or --lh.\")"},{"line_number":638,"context_line":"            return"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"        options[\u0027size_gt\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_e3337e5e","line":637,"range":{"start_line":637,"start_character":17,"end_line":637,"end_character":24},"updated":"2020-02-19 16:58:50.000000000","message":"\"Filtering\", maybe?","commit_id":"a565688767473aa754e5fd73d55a4b56e48d9bc9"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"adddfcb820eabeec67fac0e14c7bde38365b016d","unresolved":false,"context_lines":[{"line_number":634,"context_line":"    if options[\u0027filter_size\u0027]:"},{"line_number":635,"context_line":"        if not options[\u0027long\u0027]:"},{"line_number":636,"context_line":"            output_manager.error("},{"line_number":637,"context_line":"                \"Listing by size only works with -l or --lh.\")"},{"line_number":638,"context_line":"            return"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"        options[\u0027size_gt\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_b0c5bf37","line":637,"range":{"start_line":637,"start_character":17,"end_line":637,"end_character":24},"in_reply_to":"3fa7e38b_e3337e5e","updated":"2020-02-20 04:05:18.000000000","message":"kk","commit_id":"a565688767473aa754e5fd73d55a4b56e48d9bc9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e90ea18c0a8d3c2e40309cb8c298e48b049b9aee","unresolved":false,"context_lines":[{"line_number":646,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":647,"context_line":"        try:"},{"line_number":648,"context_line":"            if not args:"},{"line_number":649,"context_line":"                stats_parts_gen \u003d swift.list()"},{"line_number":650,"context_line":"            else:"},{"line_number":651,"context_line":"                container \u003d args[0]"},{"line_number":652,"context_line":"                args \u003d args[1:]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_0e6da1ca","line":649,"updated":"2020-02-19 16:58:50.000000000","message":"Now I kinda want list() to take a filter option... have it be a function with a signature like\n\n Callable[[dict], bool]\n\nEh, definitely can be future work.","commit_id":"a565688767473aa754e5fd73d55a4b56e48d9bc9"},{"author":{"_account_id":12050,"name":"Charles Hsu","email":"charles0126@gmail.com","username":"charz"},"change_message_id":"adddfcb820eabeec67fac0e14c7bde38365b016d","unresolved":false,"context_lines":[{"line_number":646,"context_line":"    with SwiftService(options\u003doptions) as swift:"},{"line_number":647,"context_line":"        try:"},{"line_number":648,"context_line":"            if not args:"},{"line_number":649,"context_line":"                stats_parts_gen \u003d swift.list()"},{"line_number":650,"context_line":"            else:"},{"line_number":651,"context_line":"                container \u003d args[0]"},{"line_number":652,"context_line":"                args \u003d args[1:]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_30030f78","line":649,"in_reply_to":"3fa7e38b_0e6da1ca","updated":"2020-02-20 04:05:18.000000000","message":"yeah! That\u0027ll help! I also want to do another patch to filter last modified time for object.","commit_id":"a565688767473aa754e5fd73d55a4b56e48d9bc9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a572f7239acf991a2164bb72c9115ea9f683961e","unresolved":false,"context_lines":[{"line_number":652,"context_line":"            return"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"        re_range \u003d re.search(r\"^(\\d+)-(\\d+)\", options[\u0027filter_size\u0027])"},{"line_number":655,"context_line":"        re_actual \u003d re.search(r\"^([+-]\\d+)\", options[\u0027filter_size\u0027])"},{"line_number":656,"context_line":"        if re_range:"},{"line_number":657,"context_line":"            options[\u0027size_range\u0027] \u003d sorted("},{"line_number":658,"context_line":"                [float(x) for x in re_range.groups()]"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_c9446e1c","line":655,"updated":"2020-04-08 00:28:00.000000000","message":"These need a trailing $; I expected something like\n\n $ swift list c --long --size +1asdf\n\nto error.","commit_id":"c0ff966b179a80bd995d4fae069af31ec467fe8d"}]}
