)]}'
{"climate/db/sqlalchemy/api.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"14058e3339a9c57d3efeda1f998d0d27622d1729","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        yield lease"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"def get_free_periods(resource_id, start_date, end_date, duration):"},{"line_number":404,"context_line":"    \"\"\"Returns a list of free periods.\"\"\""},{"line_number":405,"context_line":"    full_periods \u003d get_full_periods(resource_id,"},{"line_number":406,"context_line":"                                    start_date,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2FtqE%3D","line":403,"updated":"2014-01-09 10:07:43.000000000","message":"This method should be placed in some utils file, I suppose. Nothing connected to db has been done here - that\u0027s not DB API really.","commit_id":"d62719e5f84a227b474d6f77c4a9ecf40b738f94"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"14058e3339a9c57d3efeda1f998d0d27622d1729","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    return events"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"def _find_full_periods(events, quantity, capacity):"},{"line_number":449,"context_line":"    \"\"\"Find the full periods.\"\"\""},{"line_number":450,"context_line":"    full_periods \u003d []"},{"line_number":451,"context_line":"    used \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2FtqA%3D","line":448,"updated":"2014-01-09 10:07:43.000000000","message":"the same","commit_id":"d62719e5f84a227b474d6f77c4a9ecf40b738f94"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"14058e3339a9c57d3efeda1f998d0d27622d1729","unresolved":false,"context_lines":[{"line_number":460,"context_line":"    return full_periods"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"def _merge_periods(full_periods, start_date, end_date, duration):"},{"line_number":464,"context_line":"    \"\"\"Merge periods if the interval is too narrow.\"\"\""},{"line_number":465,"context_line":"    full_start \u003d None"},{"line_number":466,"context_line":"    full_end \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2Ftp8%3D","line":463,"updated":"2014-01-09 10:07:43.000000000","message":"the same","commit_id":"d62719e5f84a227b474d6f77c4a9ecf40b738f94"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"14058e3339a9c57d3efeda1f998d0d27622d1729","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    return _merge_periods(full_periods, start_date, end_date, duration)"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"def reservation_ratio(host_id, start_date, end_date):"},{"line_number":501,"context_line":"    res_time \u003d reservation_time(host_id, start_date, end_date).seconds"},{"line_number":502,"context_line":"    return float(res_time) / (end_date - start_date).seconds"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2Ftp0%3D","line":500,"updated":"2014-01-09 10:07:43.000000000","message":"the same","commit_id":"d62719e5f84a227b474d6f77c4a9ecf40b738f94"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"14058e3339a9c57d3efeda1f998d0d27622d1729","unresolved":false,"context_lines":[{"line_number":502,"context_line":"    return float(res_time) / (end_date - start_date).seconds"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"def availability_time(host_id, start_date, end_date):"},{"line_number":506,"context_line":"    res_time \u003d reservation_time(host_id, start_date, end_date)"},{"line_number":507,"context_line":"    return end_date - start_date - res_time"},{"line_number":508,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2Ftps%3D","line":505,"updated":"2014-01-09 10:07:43.000000000","message":"the same","commit_id":"d62719e5f84a227b474d6f77c4a9ecf40b738f94"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"14058e3339a9c57d3efeda1f998d0d27622d1729","unresolved":false,"context_lines":[{"line_number":507,"context_line":"    return end_date - start_date - res_time"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"def reservation_time(host_id, start_date, end_date):"},{"line_number":511,"context_line":"    res_time \u003d datetime.timedelta(0)"},{"line_number":512,"context_line":"    for lease in _get_leases_from_host_id(host_id, start_date, end_date):"},{"line_number":513,"context_line":"        res_time +\u003d lease.end_date - lease.start_date"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2Ftpg%3D","line":510,"updated":"2014-01-09 10:07:43.000000000","message":"i think this one too","commit_id":"d62719e5f84a227b474d6f77c4a9ecf40b738f94"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"449d831b2f08ea4b95ceaafadfc8d994af6d7c02","unresolved":false,"context_lines":[{"line_number":573,"context_line":"            key_not_found.append(key)"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    hosts \u003d []"},{"line_number":576,"context_line":"    for query in queries:"},{"line_number":577,"context_line":"        try:"},{"line_number":578,"context_line":"            key, op, value \u003d query.split(\u0027 \u0027, 3)"},{"line_number":579,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2B8Hw%3D","line":576,"updated":"2014-01-20 16:06:43.000000000","message":"Is it possible to merge this \u0027for\u0027 with previous one? First one is about creating hosts_query, second about hosts list, they seem not to intersect each other.","commit_id":"6d32cd6872f0e3c4f9511b6bcdc38f35a6d584ed"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"957bcb5a6b454c288c8dbe56ef0f87884def2d7e","unresolved":false,"context_lines":[{"line_number":573,"context_line":"            key_not_found.append(key)"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    hosts \u003d []"},{"line_number":576,"context_line":"    for query in queries:"},{"line_number":577,"context_line":"        try:"},{"line_number":578,"context_line":"            key, op, value \u003d query.split(\u0027 \u0027, 3)"},{"line_number":579,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2B2Yc%3D","line":576,"in_reply_to":"AAAAUH%2F%2B8Hw%3D","updated":"2014-01-21 14:14:07.000000000","message":"Done","commit_id":"6d32cd6872f0e3c4f9511b6bcdc38f35a6d584ed"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"449d831b2f08ea4b95ceaafadfc8d994af6d7c02","unresolved":false,"context_lines":[{"line_number":585,"context_line":"            all()"},{"line_number":586,"context_line":"        if not extra_filter and key in key_not_found:"},{"line_number":587,"context_line":"            raise RuntimeError(\u0027Invalid filter column: %s\u0027 % key)"},{"line_number":588,"context_line":"        for line in extra_filter:"},{"line_number":589,"context_line":"            if line.capability_value \u003e\u003d value and op \u003d\u003d \u0027\u003c\u0027:"},{"line_number":590,"context_line":"                hosts.append(line.computehost_id)"},{"line_number":591,"context_line":"            elif line.capability_value \u003c\u003d value and op \u003d\u003d \u0027\u003e\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2B77E%3D","line":588,"updated":"2014-01-20 16:06:43.000000000","message":"I suppose you may use smth like following dict here:\n\ndict \u003d {\u0027\u003c\u0027: lambda a,b: a\u003e\u003db,\n        \u0027\u003e\u0027: lambda a,b: a\u003c\u003db,\n        \u0027\u003c\u003d\u0027: lambda a,b: a\u003eb,\n        ...}\n\nso all these ifs will look like:\n\nif op in dict and dict[op](line.capability_value, value):\n    hosts.append(line.computehost_id)\n\nI suppose that will look a little bit better here...","commit_id":"6d32cd6872f0e3c4f9511b6bcdc38f35a6d584ed"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"957bcb5a6b454c288c8dbe56ef0f87884def2d7e","unresolved":false,"context_lines":[{"line_number":585,"context_line":"            all()"},{"line_number":586,"context_line":"        if not extra_filter and key in key_not_found:"},{"line_number":587,"context_line":"            raise RuntimeError(\u0027Invalid filter column: %s\u0027 % key)"},{"line_number":588,"context_line":"        for line in extra_filter:"},{"line_number":589,"context_line":"            if line.capability_value \u003e\u003d value and op \u003d\u003d \u0027\u003c\u0027:"},{"line_number":590,"context_line":"                hosts.append(line.computehost_id)"},{"line_number":591,"context_line":"            elif line.capability_value \u003c\u003d value and op \u003d\u003d \u0027\u003e\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2B2YY%3D","line":588,"in_reply_to":"AAAAUH%2F%2B77E%3D","updated":"2014-01-21 14:14:07.000000000","message":"Done","commit_id":"6d32cd6872f0e3c4f9511b6bcdc38f35a6d584ed"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"ce770a536209b83b8fed07d2dd8be9ffde936c0c","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                filt \u003d getattr(column, attr)(value)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"            hosts_query \u003d hosts_query.filter(filt)"},{"line_number":584,"context_line":"        else:"},{"line_number":585,"context_line":"            #looking for extra capabilities matches"},{"line_number":586,"context_line":"            extra_filter \u003d model_query("},{"line_number":587,"context_line":"                models.ComputeHostExtraCapability, get_session()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2B1n0%3D","line":584,"updated":"2014-01-21 15:26:52.000000000","message":"I may be wrong, but in previous patch set there where no \u0027else\u0027 logic. I supposed this PS will look like:\n\nif column:\n    ....\n\nextra_filter \u003d ....\n\nAre you sure you need this \u0027else\u0027 logic here?","commit_id":"9bcc544b5bf1ab03641b8bea6aaa7844baa59b12"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"ea76a1c1dd17123154bb3f556f6d84b67c63b994","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                filt \u003d getattr(column, attr)(value)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"            hosts_query \u003d hosts_query.filter(filt)"},{"line_number":584,"context_line":"        else:"},{"line_number":585,"context_line":"            #looking for extra capabilities matches"},{"line_number":586,"context_line":"            extra_filter \u003d model_query("},{"line_number":587,"context_line":"                models.ComputeHostExtraCapability, get_session()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2B1UM%3D","line":584,"in_reply_to":"AAAAUH%2F%2B1VY%3D","updated":"2014-01-21 16:16:47.000000000","message":"Cool :)","commit_id":"9bcc544b5bf1ab03641b8bea6aaa7844baa59b12"},{"author":{"_account_id":7535,"name":"Nikolay Starodubtsev","email":"starodubcevna@gmail.com","username":"Kezar"},"change_message_id":"8127e94e48699e430d91ecb89954d6361122e31a","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                filt \u003d getattr(column, attr)(value)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"            hosts_query \u003d hosts_query.filter(filt)"},{"line_number":584,"context_line":"        else:"},{"line_number":585,"context_line":"            #looking for extra capabilities matches"},{"line_number":586,"context_line":"            extra_filter \u003d model_query("},{"line_number":587,"context_line":"                models.ComputeHostExtraCapability, get_session()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2B1VY%3D","line":584,"in_reply_to":"AAAAUH%2F%2B1ZE%3D","updated":"2014-01-21 16:12:23.000000000","message":"Yeap, she\u0027s ok :D","commit_id":"9bcc544b5bf1ab03641b8bea6aaa7844baa59b12"},{"author":{"_account_id":7075,"name":"Swann Croiset","email":"scroiset@mirantis.com","username":"swann"},"change_message_id":"47efbeb8c1c77a96d220b27a07b1854a5f731e10","unresolved":false,"context_lines":[{"line_number":581,"context_line":"                filt \u003d getattr(column, attr)(value)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"            hosts_query \u003d hosts_query.filter(filt)"},{"line_number":584,"context_line":"        else:"},{"line_number":585,"context_line":"            #looking for extra capabilities matches"},{"line_number":586,"context_line":"            extra_filter \u003d model_query("},{"line_number":587,"context_line":"                models.ComputeHostExtraCapability, get_session()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2B1ZE%3D","line":584,"in_reply_to":"AAAAUH%2F%2B1n0%3D","updated":"2014-01-21 16:11:14.000000000","message":"The logic was different indeed but un-useful because one capability is either in host table or in host extra_capabilities table, never in the 2.\n\nare you ok with this?","commit_id":"9bcc544b5bf1ab03641b8bea6aaa7844baa59b12"}],"climate/db/sqlalchemy/models.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"14058e3339a9c57d3efeda1f998d0d27622d1729","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    \"\"\"Mapping between ComputeHost, ComputeHostReservation and Reservation."},{"line_number":130,"context_line":"    \"\"\""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    __tablename__ \u003d \u0027computehostallocations\u0027"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    id \u003d _id_column()"},{"line_number":135,"context_line":"    compute_host_id \u003d sa.Column(sa.String(36),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2Ftqk%3D","line":132,"updated":"2014-01-09 10:07:43.000000000","message":"computehost_allocations?","commit_id":"d62719e5f84a227b474d6f77c4a9ecf40b738f94"}],"climate/db/sqlalchemy/utils.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"97ad44f08fbfa822a4b078358433fa6ae112c729","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        merged_full_periods.append((full_start, end_date))"},{"line_number":140,"context_line":"    elif previous:"},{"line_number":141,"context_line":"        merged_full_periods.append((full_start, previous[1]))"},{"line_number":142,"context_line":"    if len(merged_full_periods) \u003e\u003d 1 and \\"},{"line_number":143,"context_line":"            merged_full_periods[0][0] - start_date \u003c duration:"},{"line_number":144,"context_line":"        merged_full_periods[0] \u003d (start_date, merged_full_periods[0][1])"},{"line_number":145,"context_line":"    return merged_full_periods"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2B%2B2I%3D","line":142,"updated":"2014-01-20 05:50:45.000000000","message":"remove that \u0027\\\u0027, use ()","commit_id":"01bc0aec58426050453061a7ef1a52cb69f505af"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"74306d00b7d7ed894a86f91e15481836ba3b48eb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Author: François Rossigneux \u003cfrancois.rossigneux@inria.fr\u003e"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2B1LM%3D","line":1,"updated":"2014-01-21 16:38:58.000000000","message":"I should notice I don\u0027t like whole code style of this file, but I think we may done nicer refactoring later when we\u0027ll have enough time for that.","commit_id":"9bcc544b5bf1ab03641b8bea6aaa7844baa59b12"}]}
