Skip to content

TypeError: Unicode-objects must be encoded before hashing in s3cmd sync --cf-invalidate #1006

@benkuhn

Description

@benkuhn

Thanks for making s3cmd, it's super useful!

I recently tried to use it with python3 and got the following traceback when using the --cf-invalidate flag:

Traceback (most recent call last):
  File "/Users/ben/.virtualenvs/bknet/bin/s3cmd", line 3092, in <module>
    rc = main()
  File "/Users/ben/.virtualenvs/bknet/bin/s3cmd", line 3001, in main
    rc = cmd_func(args)
  File "/Users/ben/.virtualenvs/bknet/bin/s3cmd", line 1885, in cmd_sync
    return cmd_sync_local2remote(args)
  File "/Users/ben/.virtualenvs/bknet/bin/s3cmd", line 1864, in cmd_sync_local2remote
    _invalidate_on_cf(destination_base_uri)
  File "/Users/ben/.virtualenvs/bknet/bin/s3cmd", line 1834, in _invalidate_on_cf
    results = cf.InvalidateObjects(destination_base_uri, uploaded_objects_list, default_index_file, cfg.invalidate_default_index_on_cf, cfg.invalidate_default_index_root_on_cf)
  File "/Users/ben/.virtualenvs/bknet/lib/python3.5/site-packages/S3/CloudFront.py", line 452, in InvalidateObjects
    cfuris = self.get_dist_name_for_bucket(uri)
  File "/Users/ben/.virtualenvs/bknet/lib/python3.5/site-packages/S3/CloudFront.py", line 587, in get_dist_name_for_bucket
    response = self.GetList()
  File "/Users/ben/.virtualenvs/bknet/lib/python3.5/site-packages/S3/CloudFront.py", line 323, in GetList
    response = self.send_request("GetList")
  File "/Users/ben/.virtualenvs/bknet/lib/python3.5/site-packages/S3/CloudFront.py", line 506, in send_request
    request = self.create_request(operation, dist_id, request_id, headers)
  File "/Users/ben/.virtualenvs/bknet/lib/python3.5/site-packages/S3/CloudFront.py", line 555, in create_request
    signature = self.sign_request(headers)
  File "/Users/ben/.virtualenvs/bknet/lib/python3.5/site-packages/S3/CloudFront.py", line 567, in sign_request
    signature = sign_string_v2(string_to_sign)
  File "/Users/ben/.virtualenvs/bknet/lib/python3.5/site-packages/S3/Crypto.py", line 68, in sign_string_v2
    signature = base64.encodestring(hmac.new(encode_to_s3(secret_key), string_to_sign, sha1).digest()).strip()
  File "/Users/ben/.virtualenvs/bknet/lib/python3.5/hmac.py", line 144, in new
    return HMAC(key, msg, digestmod)
  File "/Users/ben/.virtualenvs/bknet/lib/python3.5/hmac.py", line 84, in __init__
    self.update(msg)
  File "/Users/ben/.virtualenvs/bknet/lib/python3.5/hmac.py", line 93, in update
    self.inner.update(msg)
TypeError: Unicode-objects must be encoded before hashing

Tried on both python3.5.1 and python3.7.0.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions