用于修复关键字参数的键的命名约定的修饰符使用错误的命名(如保留关键字或Python内置函数)向键添加尾随下划线

cure的Python项目详细描述


cure

pypiMade with PythonType hinted - mypy validatedMIT LicenseCode coverage

Library,用于向来自第三方库的传递的关键字参数添加尾随下划线。如果键与Python保留关键字或Python内置冲突,则在kwarg中的键中添加首选的尾随下划线。方法可以用@cure修饰符修饰。

也可用于将输入关键字参数转换为snake case。总而言之,是一个装饰器,用于安装从依赖于用户输入的第三方库获取输入的函数。根据我的经验,当使用web框架时,可能会发生这种情况,这些框架可能会将查询值应用为kwargs,或者与GraphQL库交互,后者将以kwargs形式发送用户输入参数。在

pep8——Python代码风格指南https://www.python.org/dev/peps/pep-0008/)中所述:

The following special forms using leading or trailing underscores are recognized (these can generally be combined with any case convention):

single_trailing_underscore_: used by convention to avoid conflicts with Python keyword.

使用pip安装

与安装任何其他Python包一样,使用pippoetrypipenv或您选择的武器。在

$ pip install cure

用法和示例

使用@cure.decorator

^{pr2}$

然后可以使用关键字参数idusername和/或type调用此函数。由于idtype要么是保留的Python关键字,要么是Python内置的,不应该用作名称,所以在将它们传递到函数my_function之前,修饰符将在kwargs后面添加一个下划线。在

也将kwargs转换为snake case

importcure@cure.decorator(cure.KEYWORD_TRAILING_UNDERSCORES|cure.KEYWORD_SNAKE_CASE_RECURSIVE)defgraphql_resolver(obj,info,resource_id,type_=None):pass

此函数使用向保留关键字和内置项添加尾随下划线的选项,以及将输入kwargs转换为snake case的选项。假设我们正在处理一个GraphQL框架,它会像这样调用我们的函数,这取决于用户输入my_function(None, info, resourceId=kwargs["resourceId"], type=kwargs["type"]),或者更像是my_function(None, info, **kwargs),其中{}是一个包含键resourceId和{}的dict。因为我们希望我们的代码是python式的并且遵守适当的命名约定,@cure.decorator可以帮助我们消除转换kwargs的障碍,或者跳过其他需要的障碍。在

可用选项

  • cure.KEYWORD_TRAILING_UNDERSCORES:为关键字参数中使用保留关键字或Python内置名称的键添加尾随下划线。在
  • cure.KEYWORD_SNAKE_CASE:将关键字参数中的键转换为snake大小写。在
  • cure.KEYWORD_SNAKE_CASE_RECURSIVE:将关键字参数中的键转换为snake case。如果关键字参数的值是dict或dict列表,它还将把这些dict中的键转换为snake case。在
  • cure.KEYWORD_CAMEL_CASE:将关键字参数中的键转换为驼峰大小写。不建议这样做,但可以将其用作snake case decorator转换的值的反转。在
  • cure.KEYWORD_CAMEL_CASE_RECURSIVE:递归转换为camel case。在

其他功能

该模块还提供以下功能。在

cure.is_keyword(kw)
importcurecure.is_keyword("id")# Truecure.is_keyword("type")# Truecure.is_keyword("api")# False
cure.trail_name(kw)
importcurecure.trail_name("id")# "id_"cure.trail_name("type")# "type_"cure.trail_name("api")# "api"
cure.snake_case_name(kw)和{}
importcurecure.snake_case_name("apiSecret")# "api_secret"cure.snake_case_dict({"user":{"userId":4711,"userLevel":"ADMIN"}},recursive=True)# {'user': {'user_id': 4711, 'user_level': 'ADMIN'}}
cure.camel_case_name(kw)和{}
importcurecure.camel_case_name("api_secret")# "apiSecret"cure.camel_case_dict({"user":{"user_id":4711,"user_level":"ADMIN"}},recursive=True)# {'user': {'userId': 4711, 'userLevel': 'ADMIN'}}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何修改打印板?   java Spring批处理JdbcCursorItemReader还是RepositoryItemReader?   java如何在JTable Swing中增加标题列的字体?   java在数组方面遇到问题,导致表达式非法启动   java如何为maven pom的某些部分关闭Eclipse代码格式化程序。xml   java Dropwizard登录代码   java Jersey 2.22:客户端的默认连接超时是多少?   java无法自动连接字段:javax。sql。数据来源   如何从java中的行列表中获取单词列表?   java JDBC批量更新和处理异常?   计算大根:bigdecimal/java   java如何在JavaCC语法中提到trycatch块   javasocket。getInetAddress()不返回任何内容   oracle SQL开发人员错误无法找到Java虚拟机   java我如何计算和显示未来5年每一年的投资价值   java如何关闭浏览器选项卡?   java如何在showMessageDialog中打印双2D数组?   java从站点抓取播放列表URL?   selenium中的java点击css按钮