[Python-Dev] Refactor __get_builtin_constructor on hasklib.py

Steve Holden steve at holdenweb.com
Tue Aug 7 14:04:28 EDT 2018


Hi there,

Good to see you on python-dev. It's always good to see people getting
excited about helping with Python's development.

The changes you suggest are, unless I've missed something, purely cosmetic
- affecting readability only. This implies that you feel the code as it
stands isn't as readable as it could be. You must admit that "it looks
messy" is a matter of opinion, and alone isn't much of a justification for
making changes to a project that will reach its end of life in less than
eighteen months.

The code in the standard library is mostly fairly well-scrutinised, and as
PEP 8 reminds us, change made for purely stylistic reasons threatens to
introduce new bugs.

It's not obvious how much of the developer documentation you've seen, so it
might be worth mentioning https://devguide.python.org/ as a good starting
point for anyone wanting to contribute.

regards
 Steve

Steve Holden

On Tue, Aug 7, 2018 at 8:00 AM, 蔡銘峯 <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
>         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 !!
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: https://mail.python.org/mailman/options/python-dev/
> steve%40holdenweb.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180807/92bbd68a/attachment.html>


More information about the Python-Dev mailing list