)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"c8715937f47c601bf324363e57500e93292964f7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Introduce a base yaml parser for all openstack components"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A lot of openstack components like:"},{"line_number":10,"context_line":"- solum"},{"line_number":11,"context_line":"- tosca-parser"},{"line_number":12,"context_line":"- heat"},{"line_number":13,"context_line":"- murano"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f79a3b5_17343ddf","line":10,"updated":"2018-12-07 16:58:15.000000000","message":"Glancing at some of these uses of yaml.load it\u0027s not clear to me that this could even replace them. solum and heat at least are using the Loader parameter, which this doesn\u0027t expose. In addition, while they are calling yaml.load, they are doing so with the SafeLoader so I\u0027m not sure their calls are actually incorrect. Heat also does some yaml.loads in its unit tests, but in that case the input data should be trustworthy.","commit_id":"533811e7cfba1ea6aa623a03cddb02d8ea9effef"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"c8715937f47c601bf324363e57500e93292964f7","unresolved":false,"context_lines":[{"line_number":19,"context_line":"or safe dumper, our implementation use safe by default."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"You can deactive safe by passing the argument is_safe to false when"},{"line_number":22,"context_line":"you call oslo_config.utils.yaml.load or oslo_config.utils.yaml.dump."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I63e85a2b4fc999e6acac12ae51c2ab8c64bddbc6"},{"line_number":25,"context_line":"Co-Authored-By: Natal Ngétal \u003chobbestigrou@erakis.eu\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f79a3b5_b74a2957","line":22,"updated":"2018-12-07 16:58:15.000000000","message":"This part of the commit message is out of date.","commit_id":"533811e7cfba1ea6aa623a03cddb02d8ea9effef"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73b35a6e7a3161336835db82ed0afc6dc03d77c0","unresolved":false,"context_lines":[{"line_number":13,"context_line":"- murano"},{"line_number":14,"context_line":"- etc..."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"reimplement theirs own yaml parser for loading and dumping."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"These implementations sometimes forgot to use a safe loader"},{"line_number":19,"context_line":"or safe dumper, our implementation use safe by default."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9fdfeff1_815dc67a","line":16,"range":{"start_line":16,"start_character":12,"end_line":16,"end_character":18},"updated":"2019-02-21 10:41:00.000000000","message":"their","commit_id":"f0bbb5fabed63529f37ddfc170855f5a0f15e578"}],"oslo_serialization/tests/test_utils_yaml.py":[{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"c8715937f47c601bf324363e57500e93292964f7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo_serialization import utils_yaml as yaml"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class ExceptionsLoadTestCase(base.BaseTestCase):"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def test_constructor_error(self):"},{"line_number":23,"context_line":"        payload \u003d \u0027\u0027\u0027!!python/object/apply:os.system [\u0027echo \"hello\"\u0027]\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_378db97c","line":20,"updated":"2018-12-07 16:58:15.000000000","message":"This is essentially testing pyyaml, not the code in this library. I would prefer not to do that. If pyyaml changes their exceptions that\u0027s something they need to deal with, not us.","commit_id":"533811e7cfba1ea6aa623a03cddb02d8ea9effef"}],"oslo_serialization/utils_yaml.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"31361ec4d8118010976a3e39dce72d0884e6c863","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from yaml.parser import ParserError as BaseParserError"},{"line_number":24,"context_line":"from yaml.representer import RepresenterError as BaseRepresenterError"},{"line_number":25,"context_line":"from yaml.scanner import ScannerError as BaseScannerError"},{"line_number":26,"context_line":"from yaml.serializer import SerializerError as BaseSerializerError"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class ConstructorError(BaseConstructorError):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_9b39a1d1","line":26,"updated":"2018-11-20 17:04:20.000000000","message":"Our style guide calls for us to only import modules and the use the module name explicitly to reference the class/function. So for example these should be something like\n\n  from yaml import constructor\n\nand then later refer to constructor.ConstructorError instead of renaming the class BaseConstructorError\n\nThat said, I\u0027m really not sure what the benefit of having the classes defined here is meant to be. Is it just so the consumer of utils_yaml.py doesn\u0027t have to know about the exception classes in the yaml package? Do we follow that pattern elsewhere?","commit_id":"a65bae7132f3231d54b98011bb804e69f4821e35"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"31361ec4d8118010976a3e39dce72d0884e6c863","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    \"\"\"Converts a YAML document to a Python object."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    :param stream: YAML stream is a collection of zero or more documents."},{"line_number":79,"context_line":"    :param is_safe: Turn off safe loading."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    An empty stream contains no documents."},{"line_number":82,"context_line":"    Documents are separated with ---."}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_5b5c6919","line":79,"updated":"2018-11-20 17:04:20.000000000","message":"Why is that option needed? What downside is there of only offering safe loading?","commit_id":"a65bae7132f3231d54b98011bb804e69f4821e35"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"31361ec4d8118010976a3e39dce72d0884e6c863","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    :param stream: YAML stream is a collection of zero or more documents."},{"line_number":79,"context_line":"    :param is_safe: Turn off safe loading."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    An empty stream contains no documents."},{"line_number":82,"context_line":"    Documents are separated with ---."},{"line_number":83,"context_line":"    Documents may optionally end with ...."},{"line_number":84,"context_line":"    A single document may or may not be marked with ---."}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_fba0d5f4","line":81,"updated":"2018-11-20 17:04:20.000000000","message":"This block of text looks like it is meant to be a list of things, but it will be rendered as a paragraph. The literal bits need to be escaped (turn --- to ``---`` for example) and if we want it to be a list each line should be prefixed with a *","commit_id":"a65bae7132f3231d54b98011bb804e69f4821e35"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"31361ec4d8118010976a3e39dce72d0884e6c863","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    except BaseScannerError:"},{"line_number":97,"context_line":"        raise ScannerError()"},{"line_number":98,"context_line":"    except BaseConstructorError:"},{"line_number":99,"context_line":"        raise ConstructorError()"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"def dump(stream, is_safe\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_bb8b3d68","line":99,"updated":"2018-11-20 17:04:20.000000000","message":"This style of catching and re-raising exceptions is going to discard the traceback and error message under Python 2, which we still have to support for now. What benefit does doing it provide the caller?","commit_id":"a65bae7132f3231d54b98011bb804e69f4821e35"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9f60734fa6e6db09d5d0d85a05802b494c720222","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3f79a3b5_01e2bfff","updated":"2018-12-07 15:48:46.000000000","message":"Can we call this yamlutils, given that we already have jsonutils","commit_id":"533811e7cfba1ea6aa623a03cddb02d8ea9effef"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"c8715937f47c601bf324363e57500e93292964f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3f79a3b5_7b3b6535","updated":"2018-12-07 16:58:15.000000000","message":"Is there a reason to call this utils_yaml instead of yamlutils to match the existing jsonutils module?","commit_id":"533811e7cfba1ea6aa623a03cddb02d8ea9effef"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"fe726856705edf7b02842c09690096cecbb79ed6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3f79a3b5_37c5b95d","in_reply_to":"3f79a3b5_7b3b6535","updated":"2018-12-07 16:59:16.000000000","message":"Oops, I had written this comment before Stephen replied and forgot to remove it. In any case, +1 to calling this yamlutils.","commit_id":"533811e7cfba1ea6aa623a03cddb02d8ea9effef"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"c8715937f47c601bf324363e57500e93292964f7","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The main goal of this module is to standardize yaml management inside"},{"line_number":16,"context_line":"openstack. This module reduce technical debt by avoiding re-implementations"},{"line_number":17,"context_line":"of yaml manager in all the openstack bricks."},{"line_number":18,"context_line":"Use this module inside openstack bricks to handle yaml securly and properly."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_3b740d03","line":17,"range":{"start_line":17,"start_character":37,"end_line":17,"end_character":43},"updated":"2018-12-07 16:58:15.000000000","message":"Nit: bricks? Maybe just \"projects\"?","commit_id":"533811e7cfba1ea6aa623a03cddb02d8ea9effef"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"c8715937f47c601bf324363e57500e93292964f7","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def dump(stream, is_safe\u003dTrue):"},{"line_number":49,"context_line":"    \"\"\"Converts aPython object to a YAML document."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    :param stream: python object to convert into YAML representation."},{"line_number":52,"context_line":"    :param is_safe: Turn off safe dumping."}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_bb5fbd76","line":49,"range":{"start_line":49,"start_character":16,"end_line":49,"end_character":23},"updated":"2018-12-07 16:58:15.000000000","message":"Nit: *a Python","commit_id":"533811e7cfba1ea6aa623a03cddb02d8ea9effef"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9f60734fa6e6db09d5d0d85a05802b494c720222","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":"    if is_safe:"},{"line_number":58,"context_line":"        return yaml.safe_dump(stream)"},{"line_number":59,"context_line":"    return yaml.dump(stream)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_61aa938d","line":59,"range":{"start_line":59,"start_character":4,"end_line":59,"end_character":28},"updated":"2018-12-07 15:48:46.000000000","message":"weird that this isn\u0027t picked up by bandit","commit_id":"533811e7cfba1ea6aa623a03cddb02d8ea9effef"}],"oslo_serialization/yamlutils.py":[{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"972bf6fb221d28404228ac7944869cac54a59cea","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The main goal of this module is to standardize yaml management inside"},{"line_number":16,"context_line":"openstack. This module reduce technical debt by avoiding re-implementations"},{"line_number":17,"context_line":"of yaml manager in all the openstack bricks."},{"line_number":18,"context_line":"Use this module inside openstack projects to handle yaml securly and properly."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dfd5e7cf_57623640","line":17,"range":{"start_line":17,"start_character":37,"end_line":17,"end_character":43},"updated":"2019-01-09 21:49:55.000000000","message":"Would still prefer \"projects\" here.","commit_id":"f6f7d1a791de2e70d776f54392de67ecfa32c4be"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"972bf6fb221d28404228ac7944869cac54a59cea","unresolved":false,"context_lines":[{"line_number":15,"context_line":"The main goal of this module is to standardize yaml management inside"},{"line_number":16,"context_line":"openstack. This module reduce technical debt by avoiding re-implementations"},{"line_number":17,"context_line":"of yaml manager in all the openstack bricks."},{"line_number":18,"context_line":"Use this module inside openstack projects to handle yaml securly and properly."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import yaml"}],"source_content_type":"text/x-python","patch_set":5,"id":"dfd5e7cf_175cae7c","line":18,"range":{"start_line":18,"start_character":57,"end_line":18,"end_character":64},"updated":"2019-01-09 21:49:55.000000000","message":"Nit: *securely","commit_id":"f6f7d1a791de2e70d776f54392de67ecfa32c4be"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"972bf6fb221d28404228ac7944869cac54a59cea","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param stream: YAML stream is a collection of zero or more documents."},{"line_number":28,"context_line":"    :param is_safe: Turn off safe loading. True by default and only load"},{"line_number":29,"context_line":"    standard YAML. This option can be turn off by passing ``is_safe\u003dFalse``"},{"line_number":30,"context_line":"    if you need to load not only standard YAML tags or if you need to"},{"line_number":31,"context_line":"    construct an arbitrary python object."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dfd5e7cf_77cada1a","line":29,"range":{"start_line":29,"start_character":38,"end_line":29,"end_character":42},"updated":"2019-01-09 21:49:55.000000000","message":"Nit: *turned","commit_id":"f6f7d1a791de2e70d776f54392de67ecfa32c4be"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"972bf6fb221d28404228ac7944869cac54a59cea","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    * A single document may or may not be marked with ``---``."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    Parses the given stream and returns a Python object constructed"},{"line_number":40,"context_line":"    from for the first document in the stream. If there are no documents"},{"line_number":41,"context_line":"    in the stream, it returns None."},{"line_number":42,"context_line":"    \"\"\""},{"line_number":43,"context_line":"    yaml_loader \u003d yaml.Loader"}],"source_content_type":"text/x-python","patch_set":5,"id":"dfd5e7cf_57f0f667","line":40,"range":{"start_line":40,"start_character":4,"end_line":40,"end_character":12},"updated":"2019-01-09 21:49:55.000000000","message":"Not sure these should both be here. \"constructed from the first document\" sounds right to me.","commit_id":"f6f7d1a791de2e70d776f54392de67ecfa32c4be"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"972bf6fb221d28404228ac7944869cac54a59cea","unresolved":false,"context_lines":[{"line_number":52,"context_line":"def dump(stream, is_safe\u003dTrue):"},{"line_number":53,"context_line":"    \"\"\"Converts a Python object to a YAML document."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    :param stream: python object to convert into YAML representation."},{"line_number":56,"context_line":"    :param is_safe: Turn off safe dumping."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    Serializes the given Python object into the stream."}],"source_content_type":"text/x-python","patch_set":5,"id":"dfd5e7cf_17ea6e74","line":55,"range":{"start_line":55,"start_character":11,"end_line":55,"end_character":17},"updated":"2019-01-09 21:49:55.000000000","message":"This isn\u0027t really a stream then. Can we call it \u0027obj\u0027 or something like that?","commit_id":"f6f7d1a791de2e70d776f54392de67ecfa32c4be"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"972bf6fb221d28404228ac7944869cac54a59cea","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    :param stream: python object to convert into YAML representation."},{"line_number":56,"context_line":"    :param is_safe: Turn off safe dumping."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    Serializes the given Python object into the stream."},{"line_number":59,"context_line":"    If stream is None, it returns the produced stream."},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":"    yaml_dumper \u003d yaml.Dumper"}],"source_content_type":"text/x-python","patch_set":5,"id":"dfd5e7cf_d78866c7","line":58,"updated":"2019-01-09 21:49:55.000000000","message":"This doesn\u0027t seem to describe the current api. It\u0027s supposed to serialize an object onto a stream, but there\u0027s only one parameter. I think it should take both stream and object? Or do we just dump to a string and return it (which I think is what it\u0027s actually doing)?","commit_id":"f6f7d1a791de2e70d776f54392de67ecfa32c4be"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"b14ee8bfb6bec89d44173a661c3ca75b1e0c9464","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    :param is_safe: Turn off safe dumping."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    Serializes the given Python object to a string."},{"line_number":59,"context_line":"    If string is None, it returns the produced string."},{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":"    yaml_dumper \u003d yaml.Dumper"},{"line_number":62,"context_line":"    if is_safe:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_43164658","line":59,"range":{"start_line":59,"start_character":4,"end_line":59,"end_character":21},"updated":"2019-02-18 18:13:19.000000000","message":"Not sure what this is referring to. Maybe this and the previous line should just be combined to something like: \"Serializes the given Python object to a string and returns that string.\"","commit_id":"fe1fbfe9bc97fc641e44fc410dc7aeec2264e3e3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73b35a6e7a3161336835db82ed0afc6dc03d77c0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"\"\"\"Yaml manager"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The main goal of this module is to standardize yaml management inside"},{"line_number":16,"context_line":"openstack. This module reduce technical debt by avoiding re-implementations"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_017a36b9","line":13,"range":{"start_line":13,"start_character":8,"end_line":13,"end_character":15},"updated":"2019-02-21 10:41:00.000000000","message":"manager? What is it managing? Perhaps:\n\n  YAML related utilities.\n\nwould be better (taken from the JSON module)","commit_id":"f0bbb5fabed63529f37ddfc170855f5a0f15e578"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73b35a6e7a3161336835db82ed0afc6dc03d77c0","unresolved":false,"context_lines":[{"line_number":24,"context_line":"def load(stream, is_safe\u003dTrue):"},{"line_number":25,"context_line":"    \"\"\"Converts a YAML document to a Python object."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param stream: YAML stream is a collection of zero or more documents."},{"line_number":28,"context_line":"    :param is_safe: Turn off safe loading. True by default and only load"},{"line_number":29,"context_line":"    standard YAML. This option can be turned off by passing ``is_safe\u003dFalse``"},{"line_number":30,"context_line":"    if you need to load not only standard YAML tags or if you need to"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_816e26fe","line":27,"range":{"start_line":27,"start_character":19,"end_line":27,"end_character":30},"updated":"2019-02-21 10:41:00.000000000","message":"What is a \"YAML stream\"? Is it a string? Is it a file pointer? I have no idea. Can you clarify. Perhaps call this \u0027fp\u0027 or \u0027s\u0027, like we do for the \u0027load\u0027 function in \u0027jsonutils\u0027. Also, if it\u0027s a string, this should ideally be called \u0027loads\u0027 to present a uniform YAML/JSON API","commit_id":"f0bbb5fabed63529f37ddfc170855f5a0f15e578"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c0703efc9df8a6aa8f3b017a575fc0054d59cc86","unresolved":false,"context_lines":[{"line_number":24,"context_line":"def load(stream, is_safe\u003dTrue):"},{"line_number":25,"context_line":"    \"\"\"Converts a YAML document to a Python object."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param stream: YAML stream is a collection of zero or more documents."},{"line_number":28,"context_line":"    :param is_safe: Turn off safe loading. True by default and only load"},{"line_number":29,"context_line":"    standard YAML. This option can be turned off by passing ``is_safe\u003dFalse``"},{"line_number":30,"context_line":"    if you need to load not only standard YAML tags or if you need to"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_154907b6","line":27,"range":{"start_line":27,"start_character":19,"end_line":27,"end_character":30},"in_reply_to":"9fdfeff1_750df3e6","updated":"2019-02-21 16:52:16.000000000","message":"That\u0027s fair. No point introducing an artificial abstraction here","commit_id":"f0bbb5fabed63529f37ddfc170855f5a0f15e578"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"84b4509eaa08a6de2146d1e913dfb209555dcb9b","unresolved":false,"context_lines":[{"line_number":24,"context_line":"def load(stream, is_safe\u003dTrue):"},{"line_number":25,"context_line":"    \"\"\"Converts a YAML document to a Python object."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param stream: YAML stream is a collection of zero or more documents."},{"line_number":28,"context_line":"    :param is_safe: Turn off safe loading. True by default and only load"},{"line_number":29,"context_line":"    standard YAML. This option can be turned off by passing ``is_safe\u003dFalse``"},{"line_number":30,"context_line":"    if you need to load not only standard YAML tags or if you need to"}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_750df3e6","line":27,"range":{"start_line":27,"start_character":19,"end_line":27,"end_character":30},"in_reply_to":"9fdfeff1_816e26fe","updated":"2019-02-21 16:40:33.000000000","message":"I\u0027m not convinced by introduce a method called `loads` since the behavior change between json and yaml and where `load` in json is to load from an fp and `loads` is to load from string.\n\nYaml load can deal with many formats like:\n- string\n- byte string\n- file descriptor\n- etc...\n\nSo, for these reasons I guess we need to keep closer from the original PyYAML implementation.\n\nThoughts?","commit_id":"f0bbb5fabed63529f37ddfc170855f5a0f15e578"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73b35a6e7a3161336835db82ed0afc6dc03d77c0","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    :param stream: YAML stream is a collection of zero or more documents."},{"line_number":28,"context_line":"    :param is_safe: Turn off safe loading. True by default and only load"},{"line_number":29,"context_line":"    standard YAML. This option can be turned off by passing ``is_safe\u003dFalse``"},{"line_number":30,"context_line":"    if you need to load not only standard YAML tags or if you need to"},{"line_number":31,"context_line":"    construct an arbitrary python object."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    Stream specifications:"},{"line_number":34,"context_line":"    * An empty stream contains no documents."}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_81a06644","line":31,"range":{"start_line":29,"start_character":4,"end_line":31,"end_character":41},"updated":"2019-02-21 10:41:00.000000000","message":"This needs to be indented to render properly","commit_id":"f0bbb5fabed63529f37ddfc170855f5a0f15e578"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73b35a6e7a3161336835db82ed0afc6dc03d77c0","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    if you need to load not only standard YAML tags or if you need to"},{"line_number":31,"context_line":"    construct an arbitrary python object."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    Stream specifications:"},{"line_number":34,"context_line":"    * An empty stream contains no documents."},{"line_number":35,"context_line":"    * Documents are separated with ``---``."},{"line_number":36,"context_line":"    * Documents may optionally end with ``...``."}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_41827ea7","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":26},"updated":"2019-02-21 10:41:00.000000000","message":"Think you need a newline after this","commit_id":"f0bbb5fabed63529f37ddfc170855f5a0f15e578"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73b35a6e7a3161336835db82ed0afc6dc03d77c0","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    return yaml.load(stream, yaml_loader)  # nosec B506"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def dump(obj, is_safe\u003dTrue):"},{"line_number":53,"context_line":"    \"\"\"Converts a Python object to a YAML document."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    :param obj: python object to convert into YAML representation."}],"source_content_type":"text/x-python","patch_set":7,"id":"9fdfeff1_e1fb7244","line":52,"range":{"start_line":52,"start_character":4,"end_line":52,"end_character":8},"updated":"2019-02-21 10:41:00.000000000","message":"For jsonutils, \u0027dumps\u0027 returns a string while \u0027dump\u0027 expects a file handle to write to. It does seem like we should present a uniform API when we\u0027re abstracting these things like we do","commit_id":"f0bbb5fabed63529f37ddfc170855f5a0f15e578"}]}
