)]}'
{"specs/liberty/graduate-oslo-io.rst":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"a4a0710899d534e09cfd495d73ed7003e45b23e8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  will also allow inline feedback on the diagram itself."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":26,"context_line":" Graduating oslo.io"},{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"blueprint: https://blueprints.launchpad.net/oslo-incubator/+spec/graduate-oslo-io"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9aa53dc9_138e6e78","line":26,"updated":"2015-04-07 13:42:11.000000000","message":"\"io\" is maybe too generic. Another proposition: \"oslo_fs\" (file system utilities).","commit_id":"1713bd0d643547b1499b58e569e9a58ce83e0d89"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8c33c48e84252ca70d5e240252070d9d67e5c963","unresolved":false,"context_lines":[{"line_number":23,"context_line":"  will also allow inline feedback on the diagram itself."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":26,"context_line":" Graduating oslo.io"},{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"blueprint: https://blueprints.launchpad.net/oslo-incubator/+spec/graduate-oslo-io"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9aa53dc9_932b9e30","line":26,"in_reply_to":"9aa53dc9_138e6e78","updated":"2015-04-07 16:51:16.000000000","message":"i\u0027m down with either","commit_id":"1713bd0d643547b1499b58e569e9a58ce83e0d89"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"6f2a101345d8e8064e775e2ee5f8fe0d17bc436e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Library Name"},{"line_number":34,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"oslo.io"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Contents"},{"line_number":39,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9aa53dc9_7cf799f5","line":36,"updated":"2015-04-08 12:54:58.000000000","message":"We should also consider the impact of just putting this library in oslo.utils. I apparently didn\u0027t write down my reasoning for creating a separate library, but it may have been due to only having a few consumers of the code. It\u0027s worth thinking about that again.\n\nIt doesn\u0027t look like there are any dependencies, so we would be OK from that perspective. The module is small, so it wouldn\u0027t add a lot of code to the library.\n\nWith about 50 changesets to import, we would want to get some help bringing them into a branch without having to manually review them all until the merge. We can talk to infra about ways to do that.","commit_id":"1713bd0d643547b1499b58e569e9a58ce83e0d89"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"a4a0710899d534e09cfd495d73ed7003e45b23e8","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The public API will be fairly simple. As with the oslo.serialization library,"},{"line_number":55,"context_line":"the proposed library (oslo.io) will initially have only helper functions."},{"line_number":56,"context_line":"There are no classes or private functions.  "},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Implementation"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9aa53dc9_b357c201","line":56,"updated":"2015-04-07 13:42:11.000000000","message":"I reviewed fileutils.py. Random notes.\n\nIMO read_cached_file() has an issue on Python 3: it should specify the encoding. For example, use utf-8 by default.\n\nwrite_to_tempfile() has a similar issue with the encoding, but I don\u0027t remember if the content is supposed to be a bytes or text (unicode) string. If it\u0027s text, again, it would be better to specify the encoding (ex: use utf-8 by default, maybe also make the error handler configurable? i\u0027m not sure that it\u0027s useful).\n\nI don\u0027t like write_to_tempfile() API, it doesn\u0027t ensure that the temporary file is removed. A context manager using tempfile.NamedTemporaryFile would be better.\n\nTo me, it\u0027s still strange to have a file_open() function while Python has a builtin open() function.\n\nDEFAULT_MODE: you may rename the constant to DEFAULT_DIR_MODE or DEFAULT_DIRECTORY_MODE, or make it private?\n\nremove_path_on_error(): usually \"path\" means \"directory\", whereas the function uses os.unlink() which can only remove a file, not a directory. Renaming the function to remove_on_error() or remove_file_on_error() would avoid confusion.\n\nread_cached_file() can use a tuple to (mtime, data) instead of using a dictionary. A tuple is cheaper in term of memory footprint. Or use a namedtuple if you want to access tuple items as attributes.\n\ndelete_cached_file() can use try: del ... except KeyError: pass to be atomic (avoid a race condition if called from two different threads).\n\nI don\u0027t think that read_cached_file() is thread-safe, does it matter?","commit_id":"1713bd0d643547b1499b58e569e9a58ce83e0d89"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"aa483481a8b06d2afcd2edb92384b1cce5ac0d40","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The public API will be fairly simple. As with the oslo.serialization library,"},{"line_number":55,"context_line":"the proposed library (oslo.io) will initially have only helper functions."},{"line_number":56,"context_line":"There are no classes or private functions.  "},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Implementation"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9aa53dc9_2789d0c9","line":56,"in_reply_to":"9aa53dc9_66b49fd0","updated":"2015-04-09 12:28:46.000000000","message":"We\u0027ve been updating APIs in the graduated library, so I think it\u0027s ok to wait. I just don\u0027t want to lose the comments and forget to make a change.","commit_id":"1713bd0d643547b1499b58e569e9a58ce83e0d89"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"2b01c501cb7167d484b75fbf0c71cc715b29d6f3","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The public API will be fairly simple. As with the oslo.serialization library,"},{"line_number":55,"context_line":"the proposed library (oslo.io) will initially have only helper functions."},{"line_number":56,"context_line":"There are no classes or private functions.  "},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Implementation"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9aa53dc9_66b49fd0","line":56,"in_reply_to":"9aa53dc9_9c593d01","updated":"2015-04-08 16:12:18.000000000","message":"\u003e All of the proposed API changes should be added to the body of the spec so we don\u0027t lose them as new drafts are proposed.\n\nDo you think that the API *must* be changed before the code it moved into a library (an existing library or a new library)? Or can it be done later?\n\n(I would prefer to change the API before moving the code.)","commit_id":"1713bd0d643547b1499b58e569e9a58ce83e0d89"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8c33c48e84252ca70d5e240252070d9d67e5c963","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The public API will be fairly simple. As with the oslo.serialization library,"},{"line_number":55,"context_line":"the proposed library (oslo.io) will initially have only helper functions."},{"line_number":56,"context_line":"There are no classes or private functions.  "},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Implementation"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9aa53dc9_e031e5ed","line":56,"in_reply_to":"9aa53dc9_b357c201","updated":"2015-04-07 16:51:16.000000000","message":"thanks for your random notes! they will definitely come in handy for when we evaluate the library during the graduation phase.I\u0027ll add in a few of my own random thoughts.\n\nwrite_to_tempfile should definitely be improved to handle removing the file as well.\n\nfile_open can probably be dropped, it seems pointless.\n\n++ on your comment about DEFAULT_MODE, and yeah, make it private.\n\ns/delete_if_exists/remove_file_safely\n\nremove_path_on_error should be renamed too, let\u0027s try to make it similar to the delete_if_exists function.\n\nwe should also remove the global _FILE_CACHE too. i think jharlow had objections to that.\n\nthe caching bits definitely need to be written better, but we also must keep in mind that oslo.policy uses these bits, and a bunch of projects use oslo.policy. so not breaking things is paramount.","commit_id":"1713bd0d643547b1499b58e569e9a58ce83e0d89"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"6f2a101345d8e8064e775e2ee5f8fe0d17bc436e","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"The public API will be fairly simple. As with the oslo.serialization library,"},{"line_number":55,"context_line":"the proposed library (oslo.io) will initially have only helper functions."},{"line_number":56,"context_line":"There are no classes or private functions.  "},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Implementation"},{"line_number":59,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9aa53dc9_9c593d01","line":56,"in_reply_to":"9aa53dc9_e031e5ed","updated":"2015-04-08 12:54:58.000000000","message":"We need to be careful about dropping functions. Is anyone using file_open()? It was probably created as a wrapper to make mocking out open() easier. Is anyone using it like that?\n\nAll of the proposed API changes should be added to the body of the spec so we don\u0027t lose them as new drafts are proposed.","commit_id":"1713bd0d643547b1499b58e569e9a58ce83e0d89"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"c76cd3433f56478aa3af5457625684423855c2aa","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Library Name"},{"line_number":34,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"oslo.io"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Contents"},{"line_number":39,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_070b3b2b","line":36,"updated":"2015-05-22 16:49:01.000000000","message":"So, maybe its just me, but oslo.io really doesn\u0027t make sense for a (just) file handling library. io is /so/ much broader. Networking, databases, RPC, memory mapped datastores are all IO. It just doesn\u0027t gel. I haven\u0027t researched its use within servers yet to be able to comment sensibly about the other issues - but the global state does concern me.","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"c0fe28c56188973291e453224adf50d7cceef22d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Library Name"},{"line_number":34,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"oslo.io"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Contents"},{"line_number":39,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_7887dfd7","line":36,"updated":"2015-05-26 23:12:52.000000000","message":"oslo.files? Alternatively, is there a reason these things aren\u0027t graduated into oslo.utils instead?","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"b782d928af87c3fc368d836188be87916479be71","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Library Name"},{"line_number":34,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"oslo.io"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Contents"},{"line_number":39,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_52e850e2","line":36,"in_reply_to":"7a016987_3265fee0","updated":"2015-05-27 22:46:06.000000000","message":"Yeah I was in too many sessions to remember properly what the conclusion was at the graduation session. Perhaps dims or Doug could clarify that? I think Ihar and Flavio were there too.","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"70a9b3a955cbda6edc3c7f0c81ab6552cac63176","unresolved":false,"context_lines":[{"line_number":33,"context_line":"Library Name"},{"line_number":34,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"oslo.io"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Contents"},{"line_number":39,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a016987_3265fee0","line":36,"in_reply_to":"7a016987_7887dfd7","updated":"2015-05-27 03:36:33.000000000","message":"i missed the part of the summit where this spec was discussed, i think we wanted to pull this into fileutils now?","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7e1b94800e059b0878eae8014a9c99c5b9195404","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"The final version of oslo.io may include all or some of the following changes:"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"1. read_cached_file()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"  * Should specify the encoding and use utf-8 by default."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_f5818990","line":60,"updated":"2015-06-30 05:11:46.000000000","message":"used by nova and oslo.policy","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"de7e21cab262d9feffa8722b57fc1ba20883f34d","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"1. read_cached_file()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"  * Should specify the encoding and use utf-8 by default."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"2. write_to_tempfile()"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9aa53dc9_148a661b","line":62,"updated":"2015-04-09 18:36:24.000000000","message":"This thing is inherently not very thread safe, it\u0027d be nice to fix it...\n\nGlobal state inside libraries is usually totally sucky. In fact I\u0027m not really sure whats the point of it as most operating systems already do the caching of files for a process/all processes already...","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"df923d3dcf48596def26f86de670ad35e6e7716b","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"1. read_cached_file()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"  * Should specify the encoding and use utf-8 by default."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"2. write_to_tempfile()"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9aa53dc9_527b4cf5","line":62,"in_reply_to":"9aa53dc9_148a661b","updated":"2015-04-10 09:22:32.000000000","message":"There is a remark on thread-safety below. (1) and (6) should be merged.\n\nI agree that the function should be fixed to be thread-safe, maybe using a thread or a decorator.","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"0f499c8f590a7030f298e5ab49504a5b87dbc14b","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"1. read_cached_file()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"  * Should specify the encoding and use utf-8 by default."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"2. write_to_tempfile()"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_e59ec506","line":62,"in_reply_to":"9aa53dc9_148a661b","updated":"2015-04-10 21:10:08.000000000","message":"Worth noting that if we do decide to drop this, we need another solution to avoid excessive logging in oslo.policy because IIRC that is relying on the cached file behavior for that right now.","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7e1b94800e059b0878eae8014a9c99c5b9195404","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"  * Should specify the encoding and use utf-8 by default."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"2. write_to_tempfile()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"  * Is the content supposed to be bytes or text (unicode) string?"},{"line_number":67,"context_line":"  * If it\u0027s text, again, it would be better to specify the encoding."}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_95491d8e","line":64,"updated":"2015-06-30 05:11:46.000000000","message":"used by keystone and ceilometer (only 3 hits)","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"0f499c8f590a7030f298e5ab49504a5b87dbc14b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  * If it\u0027s text, again, it would be better to specify the encoding."},{"line_number":68,"context_line":"  * Maybe also make the error handler configurable?"},{"line_number":69,"context_line":"  * Doesn\u0027t ensure that the temporary file is removed."},{"line_number":70,"context_line":"  * A context manager using tempfile.NamedTemporaryFile would be better."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"3. file_open()"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_88acb8ee","line":70,"updated":"2015-04-10 21:10:08.000000000","message":"This originally started life as a convenience function in the base test class, where cleanups don\u0027t matter because we use NestedTempFile.  It\u0027s unfortunate that it got moved without any docstrings about the intended use.\n\nI\u0027m wondering if this should either just move back to oslotest or a separate fileutils.test module to clearly denote that it\u0027s only for test use.","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"c0423b9f95be13af191567ce194513f62d1ada0e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  * If it\u0027s text, again, it would be better to specify the encoding."},{"line_number":68,"context_line":"  * Maybe also make the error handler configurable?"},{"line_number":69,"context_line":"  * Doesn\u0027t ensure that the temporary file is removed."},{"line_number":70,"context_line":"  * A context manager using tempfile.NamedTemporaryFile would be better."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"3. file_open()"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_623bb2ec","line":70,"in_reply_to":"7aaa499b_88acb8ee","updated":"2015-04-13 08:22:55.000000000","message":"\u003e I\u0027m wondering if this should either just move back to oslotest or a separate fileutils.test module to clearly denote that it\u0027s only for test use.\n\nIf the function was written for oslotest, it must be moved there. Should the function be used directly, or only the NestedTempFile? If it should not be used, why not making the function private?","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7e1b94800e059b0878eae8014a9c99c5b9195404","unresolved":false,"context_lines":[{"line_number":69,"context_line":"  * Doesn\u0027t ensure that the temporary file is removed."},{"line_number":70,"context_line":"  * A context manager using tempfile.NamedTemporaryFile would be better."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"3. file_open()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  * Still necessary? Check to see if tests are using it."},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_355ff142","line":72,"updated":"2015-06-30 05:11:46.000000000","message":"used extensively in cinder, if we\u0027re changing this up, we should make it so they have a migration plan","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"0f499c8f590a7030f298e5ab49504a5b87dbc14b","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"3. file_open()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  * Still necessary? Check to see if tests are using it."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"4. DEFAULT_MODE"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_45033910","line":74,"updated":"2015-04-10 21:10:08.000000000","message":"Looks to me like it is used, and it\u0027s not a particularly large burden to keep it.","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"c0423b9f95be13af191567ce194513f62d1ada0e","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"3. file_open()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  * Still necessary? Check to see if tests are using it."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"4. DEFAULT_MODE"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_a2189a85","line":74,"in_reply_to":"7aaa499b_45033910","updated":"2015-04-13 08:22:55.000000000","message":"What is the purpose of this function? Why not using open() and mock open() when needed?","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"0f499c8f590a7030f298e5ab49504a5b87dbc14b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"4. DEFAULT_MODE"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"  * Rename to DEFAULT_DIR_MODE or DEFAULT_DIRECTORY_MODE"},{"line_number":79,"context_line":"  * Make it private?"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"5. remove_path_on_error()"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_28e9241b","line":79,"updated":"2015-04-10 21:10:08.000000000","message":"Looks like it should be, although we should probably verify that nobody is referencing it.","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7e1b94800e059b0878eae8014a9c99c5b9195404","unresolved":false,"context_lines":[{"line_number":76,"context_line":"4. DEFAULT_MODE"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"  * Rename to DEFAULT_DIR_MODE or DEFAULT_DIRECTORY_MODE"},{"line_number":79,"context_line":"  * Make it private?"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"5. remove_path_on_error()"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_d57ec5e3","line":79,"in_reply_to":"7aaa499b_28e9241b","updated":"2015-06-30 05:11:46.000000000","message":"should be able to make this private, a quick search in the /openstack/ namespace results in no hits","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7e1b94800e059b0878eae8014a9c99c5b9195404","unresolved":false,"context_lines":[{"line_number":78,"context_line":"  * Rename to DEFAULT_DIR_MODE or DEFAULT_DIRECTORY_MODE"},{"line_number":79,"context_line":"  * Make it private?"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"5. remove_path_on_error()"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"  * Rename to remove_file_on_error() since it can only remove files."},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_753b39ec","line":81,"updated":"2015-06-30 05:11:46.000000000","message":"used in nova/ironic/cinder","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"0f499c8f590a7030f298e5ab49504a5b87dbc14b","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"6. read_cached_file()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * Can use a tuple (mtime, data) instead of using a dictionary."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"7. delete_cached_file()"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7aaa499b_a5779dd3","line":87,"updated":"2015-04-10 21:10:08.000000000","message":"FWIW, this is an implementation detail that doesn\u0027t need to block graduation IMHO.","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7e1b94800e059b0878eae8014a9c99c5b9195404","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * Can use a tuple (mtime, data) instead of using a dictionary."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"7. delete_cached_file()"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"  * Can use try: del ... except KeyError: pass to be atomic (avoid a race"},{"line_number":92,"context_line":"    condition if called from two different threads)."}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_5552b568","line":89,"updated":"2015-06-30 05:11:46.000000000","message":"this is only used by nova and oslo.policy","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7e1b94800e059b0878eae8014a9c99c5b9195404","unresolved":false,"context_lines":[{"line_number":91,"context_line":"  * Can use try: del ... except KeyError: pass to be atomic (avoid a race"},{"line_number":92,"context_line":"    condition if called from two different threads)."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"8. read_cached_file()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"  * Is it thread-safe, does it matter?"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_f5e509a8","line":94,"updated":"2015-06-30 05:11:46.000000000","message":"used by nova and oslo.policy\n\nnote - if nova does end up using oslo.policy, then the delete/read_cached_file functions can be pushed into oslo.policy. maybe we should push them into oslo.policy now?","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7e1b94800e059b0878eae8014a9c99c5b9195404","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"  * Is it thread-safe, does it matter?"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"9. delete_if_exists()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"  * Rename to remove_file_safely, sine it only removed files."},{"line_number":101,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba3cc151_d5f32572","line":98,"updated":"2015-06-30 05:11:46.000000000","message":"used extensively in nova and cinder and a bit in neutron","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"df923d3dcf48596def26f86de670ad35e6e7716b","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"9. delete_if_exists()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"  * Rename to remove_file_safely, sine it only removed files."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"10. _FILE_CACHE"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9aa53dc9_b26cd835","line":100,"updated":"2015-04-10 09:22:32.000000000","message":"typo? sin*c*e","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"de7e21cab262d9feffa8722b57fc1ba20883f34d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"10. _FILE_CACHE"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  * Stop using it as a global."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Implementation"},{"line_number":107,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9aa53dc9_3471ea44","line":105,"updated":"2015-04-09 18:36:24.000000000","message":"+1 I\u0027d almost rather remove moves of these functions that do caching and stop doing that.","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"df923d3dcf48596def26f86de670ad35e6e7716b","unresolved":false,"context_lines":[{"line_number":102,"context_line":"10. _FILE_CACHE"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  * Stop using it as a global."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Implementation"},{"line_number":107,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9aa53dc9_12426468","line":105,"in_reply_to":"9aa53dc9_3471ea44","updated":"2015-04-10 09:22:32.000000000","message":"I agree with Joshua. fileutils somehow looks like junk code. There are serious issues with Python 3, thread-safety, and correctness (ex: write_to_tempfile() doesn\u0027t remove the temporay file).\n\nIMO we have 2 options:\n\n- completly stop using fileutils\n- first fix fileutils and reconsider later its graduation","commit_id":"7429578a7590887e3598cf21afbd1c68b0ff0490"}]}
