[Python-Dev] Refactor __get_builtin_constructor on hasklib.py

蔡銘峯 parktasi at gmail.com
Tue Aug 7 03:00:19 EDT 2018


Hello everybody,
I am Park Tsai. I want to refactor __get_builtin_constructor on hasklib.py
of python 2.7 (https://github.com/python/cpython/blob/2.7/Lib/hashlib.py#L72).

This is the first time that I try to refactor code of CPython on GitHub, so
I am very excited.

This is __get_builtin_constructor code on hasklib.py ,as follows.

def __get_builtin_constructor(name):
    try:
        if name in ('SHA1', 'sha1'):
            import _sha
            return _sha.new
        elif name in ('MD5', 'md5'):
            import _md5
            return _md5.new
        elif name in ('SHA256', 'sha256', 'SHA224', 'sha224'):
            import _sha256
            bs = name[3:]
            if bs == '256':
                return _sha256.sha256
            elif bs == '224':
                return _sha256.sha224
        elif name in ('SHA512', 'sha512', 'SHA384', 'sha384'):
            import _sha512
            bs = name[3:]
            if bs == '512':
                return _sha512.sha512
            elif bs == '384':
                return _sha512.sha384
    except ImportError:
        pass  # no extension module, this hash is unsupported.

    raise ValueError('unsupported hash type ' + name)


When I read this code, it looks messy, so I want to refactor it and make it
become more clearly .

Then, it will be like this

def get_builtin_constructor(name):
    try:
        if name[:3] in ('SHA','sha'):
           if(name[3:]=='1'):
               import _sha
               return _sha.new

           elif (name[3:] == '224'):
               import _sha256
               return _sha256.sha224

           elif (name[3:] == '256'):
               import _sha256
               return _sha256.sha256

           elif (name[3:] == '384'):
               import _sha512
               return _sha512.sha384

           elif (name[3:] == '512'):
               import _sha512
               return _sha512.sha512
        elif name in ('MD5', 'md5'):
            import _md5
            return _md5.new

    except ImportError:
        pass # no extension module, this hash is unsupported.

    raise ValueError('unsupported hash type ' + name)

I will be grateful for any help you can provide. I really appreciate any
feedback you can offer!

Best regards,
Park Tsai !!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180807/a5a5df41/attachment.html>


More information about the Python-Dev mailing list