Rewrite encrypt_file() to handle unicode/str, fn/files, and multi recipients.

testing/mmn/mktime_takes_localtime_not_gmtime
Isis Lovecruft 2013-05-27 09:01:48 +00:00
parent 8b355d5541
commit 7c9c00a957
No known key found for this signature in database
GPG Key ID: A3ADB67A2CDB8B35
1 changed files with 60 additions and 32 deletions

View File

@ -1436,49 +1436,77 @@ generate keys. Please see
encrypted output is returned, and thus should be encrypted output is returned, and thus should be
stored as an object in Python. For example: stored as an object in Python. For example:
""" """
args = list() args = []
## both can be used at the same time for an encrypted file which if output:
## is decryptable with a passphrase or secretkey.
if encrypt:
args.append('--encrypt')
if symmetric:
args.append('--symmetric')
if not _util._is_list_or_tuple(recipients):
if isinstance(recipients, str):
recipients = [rec for rec in recipients.split(' ')]
else:
recipients = (recipients,)
if len(recipients) > 1:
args.append('--multifile')
for recipient in recipients:
args.append('--recipient %s' % recipient)
if output is not None:
if getattr(output, 'fileno', None) is not None: if getattr(output, 'fileno', None) is not None:
if os.path.exists(output): ## avoid overwrite confirmation message
os.remove(output) # to avoid overwrite confirmation message if getattr(output, 'name', None) is None:
args.append('--output "%s"' % output) if os.path.exists(output):
os.remove(output)
args.append('--output %s' % output)
else:
if os.path.exists(output.name):
os.remove(output.name)
args.append('--output %s' % output.name)
if armor: args.append('--armor')
if always_trust: args.append('--always-trust')
if cipher_algo: args.append('--cipher-algo %s' % cipher_algo)
if compress_algo: args.append('--compress-algo %s' % compress_algo)
if armor:
args.append('--armor')
if default_key: if default_key:
args.append('--sign') args.append('--sign')
args.append('--default-key %s' % default_key) args.append('--default-key %s' % default_key)
if digest_algo: if digest_algo:
args.append('--digest-algo %s' % digest_algo) args.append('--digest-algo %s' % digest_algo)
if always_trust:
args.append('--always-trust')
if cipher_algo: ## both can be used at the same time for an encrypted file which
args.append('--cipher-algo %s' % cipher_algo) ## is decryptable with a passphrase or secretkey.
if compress_algo: if symmetric: args.append('--symmetric')
args.append('--compress-algo %s' % compress_algo) if encrypt: args.append('--encrypt')
if len(recipients) >= 1:
log.debug("GPG.encrypt() called for recipients '%s' with type '%s'"
% (recipients, type(recipients)))
if isinstance(recipients, (list, tuple)):
for recp in recipients:
if not _util._py3k:
if isinstance(recp, unicode):
try:
assert _parsers._is_hex(str(recp))
except AssertionError:
log.info("Can't accept recipient string: %s"
% recp)
else:
args.append('--recipient %s' % str(recp))
continue
## will give unicode in 2.x as '\uXXXX\uXXXX'
args.append('--recipient %r' % recp)
continue
if isinstance(recp, str):
args.append('--recipient %s' % recp)
elif (not _util._py3k) and isinstance(recp, basestring):
for recp in recipients.split('\x20'):
args.append('--recipient %s' % recp)
elif _util._py3k and isinstance(recp, str):
for recp in recipients.split(' '):
args.append('--recipient %s' % recp)
## ...and now that we've proven py3k is better...
else:
log.debug("Don't know what to do with recipients: '%s'"
% recipients)
result = self._result_map['crypt'](self) result = self._result_map['crypt'](self)
self._handle_io(args, file, result, passphrase=passphrase, binary=True) log.debug("Got filename '%s' with type '%s'."
log.debug('GPG.encrypt(): Result: %r', result.data) % (filename, type(filename)))
self._handle_io(args, filename, result,
passphrase=passphrase, binary=True)
log.debug('GPG.encrypt_file(): Result: %r', result.data)
return result return result
def encrypt(self, data, recipients, **kwargs): def encrypt(self, data, recipients, **kwargs):