def verify_object_versions_integrity(client, bucket, key, from_version_id, to_version_id): def raise_exception(msg): raise IntegrityCheckFailedError(msg, client, bucket, key, to_version_id) conflict_error_template = "A {} ({}) was detected for the given object between read and write operations ({} and {})." not_found_error_template = "Previous version ({}) has been deleted." object_versions = retry_wrapper(client.list_object_versions)( Bucket=bucket, Prefix=key, VersionIdMarker=to_version_id, KeyMarker=key, MaxKeys=1) versions = object_versions.get('Versions', []) delete_markers = object_versions.get('DeleteMarkers', []) all_versions = versions + delete_markers if not len(all_versions): return raise_exception(not_found_error_template.format(from_version_id)) prev_version = all_versions[0] prev_version_id = prev_version['VersionId'] if prev_version_id != from_version_id: conflicting_version_type = 'delete marker' if 'ETag' not in prev_version else 'version' return raise_exception(conflict_error_template.format( conflicting_version_type, prev_version_id, from_version_id, to_version_id)) return True
project_path = os.path.dirname(__file__) logger = logging.getLogger("roc_oct") file_handler = handlers.RotatingFileHandler(os.path.join( project_path, "roc_oct.log"), maxBytes=1024 * 1024 * 10, backupCount=5) logger.addHandler(file_handler) logger.setLevel(logging.DEBUG) get = retry_wrapper(5, error_handler=lambda *args, **kwargs: logger.debug( "error in requests.get: %s" % str(args)))(get) oct_adr = "http://octopus.app.jinanlongen.com/store_tasks/tb_new_arrival_search" oct_params = dict( tuple(line.strip().split(":", 1)) for line in """utf8:✓ upload_date:计划上新时间 planned_upload_step_end_at: store_id: status:请选择 cycle_grade:请选择 store_task_id:""".split("\n")) oct_headers = {"Cookie": "_session_id=47d56eeb9d0b817e0a9766cae411d81b"}