)]}'
{"freezer/arguments.py":[{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"fb64e6d9ca232368826fc34ad0fa119fe73895aa","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    arg_parser.add_argument("},{"line_number":141,"context_line":"        \u0027-T\u0027, \u0027--backup-type\u0027, choices\u003d[\u0027tar\u0027, \u0027rsync\u0027],"},{"line_number":142,"context_line":"        help\u003d(\u0027This feature is still BETA. It still does not support \u0027"},{"line_number":143,"context_line":"              \u0027Any incremental feature. It only produce a level 0 backup\u0027"},{"line_number":144,"context_line":"              \u0027and metadata. Description: \u0027"},{"line_number":145,"context_line":"              \u0027Execute the backup and restore using tar/libarchive \u0027"},{"line_number":146,"context_line":"              \u0027or block based incremental (rsync algorithm). \u0027"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_76d594b7","line":143,"updated":"2015-07-06 13:12:47.000000000","message":"should be any not Any","commit_id":"b4128a07bab73056c7be6f1073b2fe39dc260013"}],"freezer/backup.py":[{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"fb64e6d9ca232368826fc34ad0fa119fe73895aa","unresolved":false,"context_lines":[{"line_number":309,"context_line":"    :param time_stamp:"},{"line_number":310,"context_line":"    :param manifest_meta_dict:"},{"line_number":311,"context_line":"    :return: None"},{"line_number":312,"context_line":"    \"\"\""},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    meta_data_backup_file \u003d u\u0027metadata_{0}\u0027.format(file_name_f)"},{"line_number":315,"context_line":"    tar_backup_queue \u003d multiprocessing.Queue(maxsize\u003d2)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_91fe2204","line":312,"updated":"2015-07-06 13:12:47.000000000","message":"No parameter description","commit_id":"b4128a07bab73056c7be6f1073b2fe39dc260013"},{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"fb64e6d9ca232368826fc34ad0fa119fe73895aa","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                backup_opt_dict.windows_volume)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    path_to_backup \u003d backup_opt_dict.path_to_backup"},{"line_number":325,"context_line":"    # Change che current working directory to op_dict.path_to_backup"},{"line_number":326,"context_line":"    os.chdir(os.path.normpath(path_to_backup.strip()))"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    logging.info(\u0027[*] Changing current working directory to: {0} \\"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_f6a68452","line":325,"updated":"2015-07-06 13:12:47.000000000","message":"Comment has:\n1) one spelling error \n2) does not look in sync with code \nI suggest to delete it.","commit_id":"b4128a07bab73056c7be6f1073b2fe39dc260013"},{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"fb64e6d9ca232368826fc34ad0fa119fe73895aa","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    :param time_stamp:"},{"line_number":445,"context_line":"    :param remote_manifest_meta:"},{"line_number":446,"context_line":"    :return:"},{"line_number":447,"context_line":"    \"\"\""},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    new_rsync_meta_file_name \u003d u\u0027metadata_{0}\u0027.format("},{"line_number":450,"context_line":"        rsync_backup_obj_name)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_3110764e","line":447,"updated":"2015-07-06 13:12:47.000000000","message":"No parameter/return description","commit_id":"b4128a07bab73056c7be6f1073b2fe39dc260013"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from freezer import swift"},{"line_number":37,"context_line":"from freezer.utils import ("},{"line_number":38,"context_line":"    gen_manifest_meta, rsync_gen_manifest_meta, create_dir)"},{"line_number":39,"context_line":"from freezer import rsync, tar"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"home \u003d expanduser(\"~\")"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_ffbe7bd3","line":39,"updated":"2015-07-21 10:03:27.000000000","message":"You really should start importing modules only and only one module per line:\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"freezer/lib/pyrsync.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":3,"context_line":"\"\"\""},{"line_number":4,"context_line":"This is a pure Python implementation of the [rsync algorithm] [TM96]."},{"line_number":5,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_3fc5c35a","line":2,"updated":"2015-07-21 10:03:27.000000000","message":"drop the coding line","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":32,"context_line":"\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"import collections"},{"line_number":35,"context_line":"import hashlib"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"if not(hasattr(__builtins__, \"bytes\")) or str is bytes:"},{"line_number":38,"context_line":"    # Python 2.x compatibility"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_db9b3dc8","line":35,"updated":"2015-07-21 10:03:27.000000000","message":"if you add six to requirements you could do here:\nfrom six.moves import range (this is the iterator based range function that works same way on both py2 and py3)\n\nMight improve the performance of your weakchecksum function quite a bit.","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"freezer/main.py":[{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"fb64e6d9ca232368826fc34ad0fa119fe73895aa","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    :param e:"},{"line_number":142,"context_line":"    :param do_log:"},{"line_number":143,"context_line":"    :return:"},{"line_number":144,"context_line":"    \"\"\""},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    msg \u003d \u0027[*] Critical Error: {0}\\n\u0027.format(e)"},{"line_number":147,"context_line":"    if not backup_args.quiet:"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_31acf6ec","line":144,"updated":"2015-07-06 13:12:47.000000000","message":"Please add description and think about changing e variable with something more clear","commit_id":"b4128a07bab73056c7be6f1073b2fe39dc260013"}],"freezer/restore.py":[{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"fb64e6d9ca232368826fc34ad0fa119fe73895aa","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        else:"},{"line_number":173,"context_line":"            raise Exception("},{"line_number":174,"context_line":"                \u0027[*] Backup object not supported: {0}\u0027.format(backup))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    logging.info("},{"line_number":177,"context_line":"        \u0027[*] Restore execution successfully executed for backup name {0},\\"},{"line_number":178,"context_line":"            from container {1}, into directory {2}\u0027.format("}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_b109e6df","line":175,"updated":"2015-07-06 13:12:47.000000000","message":"If this is caught by fail in main it will result in a poorly formatted output.","commit_id":"b4128a07bab73056c7be6f1073b2fe39dc260013"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            raise Exception("},{"line_number":174,"context_line":"                \u0027[*] Backup object not supported: {0}\u0027.format(backup))"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    logging.info(("},{"line_number":177,"context_line":"        \u0027[*] Restore execution successfully executed for backup name {0} \u0027"},{"line_number":178,"context_line":"        \u0027from container {1} into directory {2}\u0027.format("},{"line_number":179,"context_line":"            backup_opt_dict.backup_name,"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_606ef830","line":176,"updated":"2015-07-21 10:03:27.000000000","message":"no need for the extra parentheses.","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"freezer/rsync.py":[{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"fb64e6d9ca232368826fc34ad0fa119fe73895aa","unresolved":false,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    # Dry ryn still not implemented"},{"line_number":254,"context_line":"    if dry_run:"},{"line_number":255,"context_line":"        return \u0027\u0027"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    (header_len, file_path, data_ver, file_mode, uid, gid, size,"},{"line_number":258,"context_line":"     mtime, ctime, uname, gname, file_type, link_name, inumber, nlink,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_b1d7a622","line":255,"updated":"2015-07-06 13:12:47.000000000","message":"why don\u0027t you exit with an exception writing: \"Not implemented\"?","commit_id":"b4128a07bab73056c7be6f1073b2fe39dc260013"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"Freezer rsync backup mode related functions"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Copyright 2014 Hewlett-Packard"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_9b261567","line":1,"updated":"2015-07-21 10:03:27.000000000","message":"Your copyright \u0026 license info should be at top and docstring under it. Copyrights should also be block comments rather than docstrings.","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from freezer.lib import pyrsync"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import logging"},{"line_number":26,"context_line":"import json"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_9bb4d5f2","line":23,"updated":"2015-07-21 10:03:27.000000000","message":"Import ordering:\nhttp://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":30,"context_line":"import sys"},{"line_number":31,"context_line":"import zlib"},{"line_number":32,"context_line":"import re"},{"line_number":33,"context_line":"import getpass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# Data block size of used by rsync to generate signature"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_5b0ded3c","line":33,"updated":"2015-07-21 10:03:27.000000000","message":"import i18n and use translate functions around the exception and log messages.\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    # File is created. If size is 0, no content is written and the"},{"line_number":62,"context_line":"    # function return"},{"line_number":63,"context_line":"    fd_curr_file \u003d open(file_path, \u0027wb\u0027)"},{"line_number":64,"context_line":"    while size:"},{"line_number":65,"context_line":"        written_data \u003d min(len(data_chunk), size)"},{"line_number":66,"context_line":"        fd_curr_file.write(data_chunk[:written_data])"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_edf680f8","line":63,"updated":"2015-07-21 10:03:27.000000000","message":"rather use:\n\nwith open(file_path, \u0027wb\u0027) as fd_curr_file:\n\nblock and won\u0027t be leaking file descriptors even if something goes wrong in middle of your loop.","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    if not os.path.exists(restore_abs_path):"},{"line_number":155,"context_line":"        raise ValueError("},{"line_number":156,"context_line":"            \u0027[*] Error: provided restore path does not exist: {0}\u0027.format("},{"line_number":157,"context_line":"                restore_abs_path))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    # How do we do dry run for rsync backup type?"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_9b0cd595","line":156,"updated":"2015-07-21 10:03:27.000000000","message":"drop the [*]s from the log lines also \u0027... %s\u0027 % restore_abs_path is better for future than .format()","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":556,"context_line":""},{"line_number":557,"context_line":"                    files_meta[\u0027files\u0027][rel_path][\u0027file_data_len\u0027] \u003d file_size"},{"line_number":558,"context_line":"                    if inode_dict_struct[\u0027inode\u0027][\u0027ftype\u0027] in REG_FILE:"},{"line_number":559,"context_line":"                        file_path_fd.close()"},{"line_number":560,"context_line":"                except (IOError, OSError) as error:"},{"line_number":561,"context_line":"                    logging.warning(\u0027[*] IO or OS Error: {}\u0027.format(error))"},{"line_number":562,"context_line":"                    if os.path.lexists(rel_path):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_adc63847","line":559,"updated":"2015-07-21 10:03:27.000000000","message":"Above has huge amount of room to leak the fd, again with block would be way safer. Same applies to the fs_path_fd below.","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":588,"context_line":"            yield compressed_block"},{"line_number":589,"context_line":"            fs_path_fd.seek(0)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"            if inode_dict_struct[\u0027inode\u0027][\u0027ftype\u0027] in REG_FILE:"},{"line_number":592,"context_line":"                # Iterate over the file content, compress yield"},{"line_number":593,"context_line":"                # the compressed data chunk"},{"line_number":594,"context_line":"                while True:"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_8ddc9ce5","line":591,"updated":"2015-07-21 10:03:27.000000000","message":"How about putting this block into separate function rather than repeating it. Would clean the code quite a bit as the get_sign_delta is already really long to keep track of.","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":633,"context_line":"    # Write meta data to disk as JSON"},{"line_number":634,"context_line":"    compressed_json_meta \u003d zlib.compress(json.dumps(files_meta))"},{"line_number":635,"context_line":"    new_meta_fd \u003d open(new_meta_out, \u0027wb\u0027)"},{"line_number":636,"context_line":"    new_meta_fd.write(compressed_json_meta)"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"def rsync_backup(backup_opt, backup_queue, new_rsync_meta_file_name):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_2d678826","line":636,"updated":"2015-07-21 10:03:27.000000000","message":"this leaks fd every single run, while block again would be safer.","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"freezer/swift.py":[{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"fb64e6d9ca232368826fc34ad0fa119fe73895aa","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        headers \u003d {}"},{"line_number":222,"context_line":"    headers[\u0027X-Object-Manifest\u0027] \u003d u\u0027{0}/{1}/\u0027.format("},{"line_number":223,"context_line":"        container_segments, package_name)"},{"line_number":224,"context_line":"    headers[\u0027x-object-meta-length\u0027] \u003d len(stream)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    swift \u003d client_manager.get_swift()"},{"line_number":227,"context_line":"    swift.put_object(container, package_name, \"\", headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_313cf62e","line":224,"updated":"2015-07-06 13:12:47.000000000","message":"Are header case insensitive?","commit_id":"b4128a07bab73056c7be6f1073b2fe39dc260013"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"Freezer functions to interact with OpenStack Swift client and server"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Copyright 2014 Hewlett-Packard"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_ffa51bb5","line":1,"updated":"2015-07-21 10:03:27.000000000","message":"Copyright should be topmost block","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"def add_stream("},{"line_number":211,"context_line":"        client_manager, container, stream, package_name, headers\u003dNone):"},{"line_number":212,"context_line":"    i \u003d 0"},{"line_number":213,"context_line":"    container_segments \u003d segments_name(container)"},{"line_number":214,"context_line":"    swift_storage \u003d SwiftStorage(client_manager, container)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_5f952f3e","line":211,"updated":"2015-07-21 10:03:27.000000000","message":"Why? The previous was actually more correct style wise.","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"freezer/tar.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from freezer.utils import ("},{"line_number":25,"context_line":"    validate_all_args, restore_args_valid)"},{"line_number":26,"context_line":"from freezer.winutils import is_windows"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_bf86b311","line":25,"updated":"2015-07-21 10:03:27.000000000","message":"again really, not like this.\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"tests/commons.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from freezer.utils import OpenstackOptions"},{"line_number":19,"context_line":"import zlib"},{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":"import socket"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"os.environ[\u0027OS_REGION_NAME\u0027] \u003d \u0027testregion\u0027"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_b03d2bbd","line":21,"updated":"2015-07-21 10:03:27.000000000","message":"Ditto:\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            file_size \u003d random.randint(65536, 1048576)"},{"line_number":120,"context_line":"            fd \u003d open(\u0027{}/{}\u0027.format(test_dir, file_name), \u0027wb\u0027)"},{"line_number":121,"context_line":"            fd.write(compress_obj.compress(os.urandom(file_size)))"},{"line_number":122,"context_line":"            fd.close()"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"def rm_backup_files(timestamp):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_d0a55704","line":122,"updated":"2015-07-21 10:03:27.000000000","message":"ditto: with","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"tests/test_backup.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import pymongo"},{"line_number":15,"context_line":"import re"},{"line_number":16,"context_line":"import pytest"},{"line_number":17,"context_line":"from commons import *"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class TestBackUP:"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_3086fb65","line":17,"updated":"2015-07-21 10:03:27.000000000","message":"ditto:\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"tests/test_main.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    monkeypatch.setattr(sys, \u0027exit\u0027, fake_sys.fake_sys_exit)"},{"line_number":38,"context_line":"    with pytest.raises(SystemExit):"},{"line_number":39,"context_line":"        freezer_main()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    monkeypatch.setattr(job, \u0027create_job\u0027, fake_create_job)"},{"line_number":42,"context_line":"    monkeypatch.setattr(sys, \u0027argv\u0027, FakeSys.fake_sys_argv())"},{"line_number":43,"context_line":"    assert freezer_main() is not None"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_30ed9b25","line":40,"updated":"2015-07-21 10:03:27.000000000","message":"I think this is unrelated to the overall change ;)","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"tests/test_restore.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        backup_opt \u003d BackupOpt1()"},{"line_number":77,"context_line":"        fakemultiprocessing \u003d FakeMultiProcessing1()"},{"line_number":78,"context_line":"        monkeypatch.setattr(multiprocessing, \u0027Process\u0027, fakemultiprocessing.Process)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        pytest.raises(Exception, restore_fs_sort_obj, backup_opt)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_restore_cinder_by_glance(self):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_90deef6b","line":79,"updated":"2015-07-21 10:03:27.000000000","message":"ditto","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"tests/test_rsync.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from commons import *"},{"line_number":20,"context_line":"from freezer import rsync"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import os"},{"line_number":23,"context_line":"import logging"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_10389f9f","line":20,"updated":"2015-07-21 10:03:27.000000000","message":"ditto:\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}],"tests/test_tar.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"57258fc93f05d740acc4230ff624e122db47b945","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from commons import *"},{"line_number":25,"context_line":"from freezer.tar import (tar_restore, tar_backup,"},{"line_number":26,"context_line":"    restore_args_valid)"},{"line_number":27,"context_line":"from freezer import winutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import os"},{"line_number":30,"context_line":"import logging"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a50d1a3_30091bde","line":27,"updated":"2015-07-21 10:03:27.000000000","message":"ditto:\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"2550ac13bd6559cba6708c3523c024929f519714"}]}
