[Python-Dev] Refactor __get_builtin_constructor on hasklib.py

Sanyam Khurana sanyam.khurana01 at gmail.com
Tue Aug 7 11:26:14 EDT 2018


Hello,

Welcome to the mailing list Park!

On Tue, Aug 7, 2018 at 12:30 PM, 蔡銘峯 <parktasi at gmail.com> wrote:
> 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


IMHO, this decreases the readability of the code. Also, we're doing
string slicing at every conditional statement which doesn't make much
sense.

What do you find not interesting with the current code? What is the
motivation behind this change?

Best,
Sanyam


-- 
Mozilla Rep
http://www.SanyamKhurana.com
Github: CuriousLearner


More information about the Python-Dev mailing list