)]}'
{"savanna/conductor/api.py":[{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"df62097a71614f5d8e1aa1176eb0da9b75d849f0","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    def job_binary_destroy(self, context, job_binary):"},{"line_number":294,"context_line":"        \"\"\"Destroy the JobBinary or raise if it does not exist.\"\"\""},{"line_number":295,"context_line":"        self._manager.job_binary_destroy(context, _get_id(job_binary))"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"class RemoteApi(LocalApi):"},{"line_number":299,"context_line":"    \"\"\"Conductor API that does updates via RPC to the ConductorManager.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAARn%2F%2Fz%2Bc%3D","line":296,"updated":"2013-08-21 16:12:26.000000000","message":"Missing the interface to job_binary_get_raw_data()","commit_id":"959a3ecc63e9c0c7481c273863574f71fec679c1"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"17064fd58b85d7394cd20821e2e1d469f11cf26e","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    def job_binary_destroy(self, context, job_binary):"},{"line_number":294,"context_line":"        \"\"\"Destroy the JobBinary or raise if it does not exist.\"\"\""},{"line_number":295,"context_line":"        self._manager.job_binary_destroy(context, _get_id(job_binary))"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"class RemoteApi(LocalApi):"},{"line_number":299,"context_line":"    \"\"\"Conductor API that does updates via RPC to the ConductorManager.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAARn%2F%2FzH4%3D","line":296,"in_reply_to":"AAAARn%2F%2Fz%2Bc%3D","updated":"2013-08-21 20:34:32.000000000","message":"Done","commit_id":"959a3ecc63e9c0c7481c273863574f71fec679c1"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"da9019bd00215c860d9133db77c22d16c7e69232","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        return self._manager.job_binary_get_all(context)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    @r.wrap(r.JobBinary)"},{"line_number":289,"context_line":"    def job_binary_get(self, context, job_binary):"},{"line_number":290,"context_line":"        \"\"\"Return the JobOrigin or None if it does not exist.\"\"\""},{"line_number":291,"context_line":"        return self._manager.job_binary_get(context, _get_id(job_binary))"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F8vI%3D","line":289,"updated":"2013-08-23 10:40:30.000000000","message":"JobOrigin \u003d\u003e JobBinary","commit_id":"df7e020c8fc81fedda58b7d42d83070fec1d44df"}],"savanna/conductor/manager.py":[{"author":{"_account_id":6786,"name":"Sergey Lukjanov","email":"me@slukjanov.name","username":"slukjanov"},"change_message_id":"b4bda83b1dd438fcb933e48bc6356561ba5e2787","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    def job_binary_create(self, context, values):"},{"line_number":336,"context_line":"        \"\"\"Create a JobBinary from the values dictionary.\"\"\""},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        # I am a little afraid of this deepcopy here, since"},{"line_number":339,"context_line":"        # the binary file data is part of values.  For a very"},{"line_number":340,"context_line":"        # big file being uploaded, this will double the memory"},{"line_number":341,"context_line":"        # size temporarily.  Should we skip the copy?"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2Fw%2FM%3D","line":338,"updated":"2013-08-22 05:18:42.000000000","message":"I think we can use the following solution:\n\npassed_values \u003d values\ndata \u003d values.pop(\"data\")\nvalues \u003d copy.deepcopy(values)\npassed_values[\"data\"] \u003d data\n…\n\nBTW in case of using remote conductor it\u0027ll be already transferred over the network with several buffers.","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"20919396e74770c4476bc05b6cdba6cd2425b0fc","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    def job_binary_create(self, context, values):"},{"line_number":336,"context_line":"        \"\"\"Create a JobBinary from the values dictionary.\"\"\""},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        # I am a little afraid of this deepcopy here, since"},{"line_number":339,"context_line":"        # the binary file data is part of values.  For a very"},{"line_number":340,"context_line":"        # big file being uploaded, this will double the memory"},{"line_number":341,"context_line":"        # size temporarily.  Should we skip the copy?"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F%2Fi8%3D","line":338,"in_reply_to":"AAAARn%2F%2Fw%2FM%3D","updated":"2013-08-22 20:04:49.000000000","message":"It turns out that since data is encoded as a string, the copy does not matter.  I confirmed with sys.getrefcount() and id().  Only the reference count is incremented.","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"}],"savanna/conductor/objects.py":[{"author":{"_account_id":6786,"name":"Sergey Lukjanov","email":"me@slukjanov.name","username":"slukjanov"},"change_message_id":"b4bda83b1dd438fcb933e48bc6356561ba5e2787","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    id"},{"line_number":233,"context_line":"    tenant_id"},{"line_number":234,"context_line":"    name"},{"line_number":235,"context_line":"    data"},{"line_number":236,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2Fw%2FA%3D","line":235,"updated":"2013-08-22 05:18:42.000000000","message":"It looks like data will be unavailable here, isn\u0027t it?","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"20919396e74770c4476bc05b6cdba6cd2425b0fc","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    id"},{"line_number":233,"context_line":"    tenant_id"},{"line_number":234,"context_line":"    name"},{"line_number":235,"context_line":"    data"},{"line_number":236,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F%2Fi4%3D","line":235,"in_reply_to":"AAAARn%2F%2Fw%2FA%3D","updated":"2013-08-22 20:04:49.000000000","message":"Done","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"},{"author":{"_account_id":6786,"name":"Sergey Lukjanov","email":"me@slukjanov.name","username":"slukjanov"},"change_message_id":"b4bda83b1dd438fcb933e48bc6356561ba5e2787","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    tenant_id"},{"line_number":234,"context_line":"    name"},{"line_number":235,"context_line":"    data"},{"line_number":236,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2Fw98%3D","line":236,"updated":"2013-08-22 05:18:42.000000000","message":"\u0027datasize\" field missed.","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"20919396e74770c4476bc05b6cdba6cd2425b0fc","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    tenant_id"},{"line_number":234,"context_line":"    name"},{"line_number":235,"context_line":"    data"},{"line_number":236,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F%2Fi0%3D","line":236,"in_reply_to":"AAAARn%2F%2Fw98%3D","updated":"2013-08-22 20:04:49.000000000","message":"Done","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"}],"savanna/db/sqlalchemy/api.py":[{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"694408a6c4b460b4ee40e3821a9be8a3366c1499","unresolved":false,"context_lines":[{"line_number":567,"context_line":"# the LargeBinary data column"},{"line_number":568,"context_line":"JOB_BINARY_NAMES, JOB_BINARY_COLS \u003d m.JobBinary.pruned_cols()"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"def job_binary_get_all(context, **kwargs):"},{"line_number":572,"context_line":"    query \u003d column_query(context, *JOB_BINARY_COLS).filter_by(**kwargs)"},{"line_number":573,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F3FM%3D","line":570,"updated":"2013-08-21 02:17:30.000000000","message":"column_query and JobBinaryDecoy are used in get and create methods so that the LargeBinary \"data\" is never loaded or returned.  Sqlalchemy deferred column loading is an option, but savanna currently makes assumptions about objects which break it.  I think this is safer.","commit_id":"c9528061f604da85bb2f2a324073bfeb90367204"},{"author":{"_account_id":6786,"name":"Sergey Lukjanov","email":"me@slukjanov.name","username":"slukjanov"},"change_message_id":"b4bda83b1dd438fcb933e48bc6356561ba5e2787","unresolved":false,"context_lines":[{"line_number":565,"context_line":"# Returns names and columns for all columns but \"data\""},{"line_number":566,"context_line":"# This is so that we can handle binary objects without loading"},{"line_number":567,"context_line":"# the LargeBinary data column"},{"line_number":568,"context_line":"JOB_BINARY_NAMES, JOB_BINARY_COLS \u003d m.JobBinary.pruned_cols()"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"def job_binary_get_all(context):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2Fw%2BY%3D","line":568,"updated":"2013-08-22 05:18:42.000000000","message":"I prefer to keep models.py as much simple as possible, because it\u0027s main goal is to show database schema. The right way for implementing deferred columns load is \u0027defer\u0027 functionality usage - http://docs.sqlalchemy.org/en/rel_0_8/orm/mapper_config.html#deferred-column-loading\n\nYou can mark data column deferred in the models.py (data \u003d deferred(Column(Binary))) and than undefer it in the query (query.options(undefer_group(\u0027photos\u0027))).","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"20919396e74770c4476bc05b6cdba6cd2425b0fc","unresolved":false,"context_lines":[{"line_number":565,"context_line":"# Returns names and columns for all columns but \"data\""},{"line_number":566,"context_line":"# This is so that we can handle binary objects without loading"},{"line_number":567,"context_line":"# the LargeBinary data column"},{"line_number":568,"context_line":"JOB_BINARY_NAMES, JOB_BINARY_COLS \u003d m.JobBinary.pruned_cols()"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"def job_binary_get_all(context):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F%2Fiw%3D","line":568,"in_reply_to":"AAAARn%2F%2Fw%2BY%3D","updated":"2013-08-22 20:04:49.000000000","message":"Done","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"},{"author":{"_account_id":6786,"name":"Sergey Lukjanov","email":"me@slukjanov.name","username":"slukjanov"},"change_message_id":"0e79d5bedd39ee749a2181b78d1987026e9c7b7d","unresolved":false,"context_lines":[{"line_number":585,"context_line":"    \"\"\"Returns only the data field for the specified JobBinary.\"\"\""},{"line_number":586,"context_line":"    query \u003d model_query(m.JobBinary, context).options(sa.orm.undefer(\"data\"))"},{"line_number":587,"context_line":"    res \u003d query.filter_by(id\u003djob_binary_id).first()"},{"line_number":588,"context_line":"    if res:"},{"line_number":589,"context_line":"        res \u003d res.data"},{"line_number":590,"context_line":"    return res"},{"line_number":591,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASX%2F%2F%2Fdw%3D","line":588,"updated":"2013-08-22 20:21:17.000000000","message":"Looks like it\u0027ll be better to compare res with None here, because theoretically we can return non-None object that was implicitly casted to False:\n\nif res is not None:","commit_id":"869e858f994ef92170fa683451a4c5fdcb2e1dea"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"1b88ed931193fa94ebd5770ae249d08978ca5ddd","unresolved":false,"context_lines":[{"line_number":585,"context_line":"    \"\"\"Returns only the data field for the specified JobBinary.\"\"\""},{"line_number":586,"context_line":"    query \u003d model_query(m.JobBinary, context).options(sa.orm.undefer(\"data\"))"},{"line_number":587,"context_line":"    res \u003d query.filter_by(id\u003djob_binary_id).first()"},{"line_number":588,"context_line":"    if res:"},{"line_number":589,"context_line":"        res \u003d res.data"},{"line_number":590,"context_line":"    return res"},{"line_number":591,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASX%2F%2F%2FbI%3D","line":588,"in_reply_to":"AAAASX%2F%2F%2Fdw%3D","updated":"2013-08-22 20:47:06.000000000","message":"Done","commit_id":"869e858f994ef92170fa683451a4c5fdcb2e1dea"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"31038c1f18b5c93e81a60f7ffff1a93b657c42a8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    return query"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def column_query(context, *columns, **kwargs):"},{"line_number":58,"context_line":"    session \u003d kwargs.get(\"session\") or get_session()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    query \u003d session.query(*columns)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F8tg%3D","line":57,"updated":"2013-08-23 11:45:01.000000000","message":"Column_query is not actually being used now, I should probably remove it.","commit_id":"df7e020c8fc81fedda58b7d42d83070fec1d44df"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"31038c1f18b5c93e81a60f7ffff1a93b657c42a8","unresolved":false,"context_lines":[{"line_number":563,"context_line":"## JobBinary ops"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def job_binary_get_all(context):"},{"line_number":567,"context_line":"    \"\"\"Returns JobBinary objects that do not contain a data field"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    The data column uses deferred loading."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F8tI%3D","line":566,"updated":"2013-08-23 11:45:01.000000000","message":"Now that deferred column loading is being used with a regular model query, get_raw_data could be removed and a \"undefer\" boolean flag defaulted to False could be added here...","commit_id":"df7e020c8fc81fedda58b7d42d83070fec1d44df"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"6fd4971ef5d7d183e344490e59dd6cc5dc187e70","unresolved":false,"context_lines":[{"line_number":563,"context_line":"## JobBinary ops"},{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def job_binary_get_all(context):"},{"line_number":567,"context_line":"    \"\"\"Returns JobBinary objects that do not contain a data field"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    The data column uses deferred loading."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F8dE%3D","line":566,"in_reply_to":"AAAASX%2F%2F8tI%3D","updated":"2013-08-23 12:08:02.000000000","message":"Actually, we would probably never want data on get_all.  But it could be reasonable on \"get\".","commit_id":"df7e020c8fc81fedda58b7d42d83070fec1d44df"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"f661a733c31a6bfc8006e4b11f66d078a98cc518","unresolved":false,"context_lines":[{"line_number":573,"context_line":""},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"def job_binary_get(context, job_binary_id):"},{"line_number":576,"context_line":"    \"\"\"Returns a JobBinary object that does not contain a data field"},{"line_number":577,"context_line":""},{"line_number":578,"context_line":"    The data column uses deferred loadling."},{"line_number":579,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F8go%3D","line":576,"updated":"2013-08-23 11:46:27.000000000","message":"ditto on a \"undefer\" flag","commit_id":"df7e020c8fc81fedda58b7d42d83070fec1d44df"}],"savanna/db/sqlalchemy/models.py":[{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"694408a6c4b460b4ee40e3821a9be8a3366c1499","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        pruned_names, pruned_cols \u003d zip(*res)"},{"line_number":318,"context_line":"        return pruned_names, pruned_cols"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"class JobBinaryDecoy(object):"},{"line_number":322,"context_line":"    \"\"\"JobBinaryDecoy - a pseudo JobBinary object"},{"line_number":323,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F3E4%3D","line":320,"updated":"2013-08-21 02:17:30.000000000","message":"This object could be expanded, but it works well enough for the return value of \"get\" and \"create\" at present","commit_id":"c9528061f604da85bb2f2a324073bfeb90367204"},{"author":{"_account_id":6786,"name":"Sergey Lukjanov","email":"me@slukjanov.name","username":"slukjanov"},"change_message_id":"b4bda83b1dd438fcb933e48bc6356561ba5e2787","unresolved":false,"context_lines":[{"line_number":311,"context_line":"    datasize \u003d sa.Column(sa.BIGINT)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    @classmethod"},{"line_number":314,"context_line":"    def pruned_cols(cls):"},{"line_number":315,"context_line":"        res \u003d [(col.name, getattr(cls, col.name))"},{"line_number":316,"context_line":"               for col in cls.__table__.columns if col.name !\u003d \"data\"]"},{"line_number":317,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2Fw%2BI%3D","line":314,"updated":"2013-08-22 05:18:42.000000000","message":"Please take a look on comments in db/sqla/api.py","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"20919396e74770c4476bc05b6cdba6cd2425b0fc","unresolved":false,"context_lines":[{"line_number":311,"context_line":"    datasize \u003d sa.Column(sa.BIGINT)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    @classmethod"},{"line_number":314,"context_line":"    def pruned_cols(cls):"},{"line_number":315,"context_line":"        res \u003d [(col.name, getattr(cls, col.name))"},{"line_number":316,"context_line":"               for col in cls.__table__.columns if col.name !\u003d \"data\"]"},{"line_number":317,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F%2Fik%3D","line":314,"in_reply_to":"AAAARn%2F%2Fw%2BI%3D","updated":"2013-08-22 20:04:49.000000000","message":"Done","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"},{"author":{"_account_id":6786,"name":"Sergey Lukjanov","email":"me@slukjanov.name","username":"slukjanov"},"change_message_id":"b4bda83b1dd438fcb933e48bc6356561ba5e2787","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        return pruned_names, pruned_cols"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"class JobBinaryDecoy(object):"},{"line_number":323,"context_line":"    \"\"\"JobBinaryDecoy - a pseudo JobBinary object"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    This class holds partial JobBinary objects and can be"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2Fw%2BQ%3D","line":322,"updated":"2013-08-22 05:18:42.000000000","message":"I think there is no need to add such class in case of deferred columns usage.","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"20919396e74770c4476bc05b6cdba6cd2425b0fc","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        return pruned_names, pruned_cols"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"class JobBinaryDecoy(object):"},{"line_number":323,"context_line":"    \"\"\"JobBinaryDecoy - a pseudo JobBinary object"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    This class holds partial JobBinary objects and can be"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASX%2F%2F%2Fig%3D","line":322,"in_reply_to":"AAAARn%2F%2Fw%2BQ%3D","updated":"2013-08-22 20:04:49.000000000","message":"Done","commit_id":"43c630cf974b6a314fc8d95de2f7acb2de499d1d"}],"savanna/tests/unit/conductor/manager/test_edp.py":[{"author":{"_account_id":6823,"name":"Alexander Kuznetsov","email":"akuznetsov@mirantis.com","username":"akuznetsov"},"change_message_id":"f461aa4436cee883aa78366f5254dfc0a56e1adb","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.assertEqual(len(lst), 0)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"class JobBinaryTest(test_base.ConductorManagerTestCase):"},{"line_number":225,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":226,"context_line":"        super(JobBinaryTest, self).__init__("},{"line_number":227,"context_line":"            checks\u003d["}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F1mE%3D","line":224,"updated":"2013-08-21 10:51:40.000000000","message":"You should add test for fields equality, especial for binary data. See e.g. test_job_fields","commit_id":"c9528061f604da85bb2f2a324073bfeb90367204"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"cf92b027d98d8752b2ce4b78e47f45e7bd3228a8","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.assertEqual(len(lst), 0)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"class JobBinaryTest(test_base.ConductorManagerTestCase):"},{"line_number":225,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":226,"context_line":"        super(JobBinaryTest, self).__init__("},{"line_number":227,"context_line":"            checks\u003d["}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F0A8%3D","line":224,"in_reply_to":"AAAARn%2F%2F1mE%3D","updated":"2013-08-21 16:07:37.000000000","message":"Done","commit_id":"c9528061f604da85bb2f2a324073bfeb90367204"}]}
