edit.py 文件源码

python
阅读 32 收藏 0 点赞 0 评论 0

项目:ghutil 作者: jwodder 项目源码 文件源码
def edit_as_mail(obj: dict, fields=None, bodyfield=None):
    # Returns only the fields that changed
    # Fields that the user deletes are considered unchanged
    if fields is None:
        fields = sorted(obj.keys())
        if bodyfield is not None:
            fields.remove(bodyfield)
    elif isinstance(fields, str):
        fields = fields.split()
    parser = HeaderParser(body=False if bodyfield is None else None)
    msg = ''
    for f in fields:
        dispname = f.replace('_', '-').title()
        val = obj[f]
        if val is None:
            msg += '{}: \n'.format(dispname, val)
            parser.add_field(dispname, dest=f)
        elif isinstance(val, bool):
            msg += '{}: {}\n'.format(dispname, 'yes' if val else 'no')
            parser.add_field(dispname, type=BOOL, dest=f)
        elif isinstance(val, str):
            msg += '{}: {}\n'.format(dispname, val)
            parser.add_field(dispname, dest=f)
        elif isinstance(val, (list, tuple)):
            msg += '{}: {}\n'.format(dispname, ', '.join(map(str, val)))
            parser.add_field(dispname, type=LIST, dest=f)
        else:
            raise TypeError('only string, boolean, and list fields supported')
    if bodyfield is not None:
        msg += '\n' + (obj[bodyfield] or '')
    msg = click.edit(msg, require_save=True)
    if msg is None:
        return None
    data = parser.parse_string(msg)
    newobj = dict(data)
    if data.body is not None:
        newobj[bodyfield] = data.body
    for k,v in list(newobj.items()):
        if (list(obj[k]) if isinstance(obj[k], tuple) else obj[k]) == v or \
                obj[k] is None and v == '':
            del newobj[k]
    return newobj
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号