一个用于检查类属性顺序的flake8扩展
项目描述
flake8-class-attributes-order
一个用于flake8的报告,用于报告错误的类属性顺序和类级别逻辑。
验证器可以提取类属性类型:文档字符串、属性、嵌套类、GLOBAL_VAR
等。如果检测到Django模型字段,验证器可以检测字段是否链接到另一个表(外键、通用键等)。
解决每个属性类型后,验证器检查属性顺序。
默认配置检查以下属性顺序
__new__
__init__
__post_init__
- 其他魔术方法
@property
@staticmethod
@classmethod
- 其他方法
- 私有方法
如果顺序被破坏,验证器将报告。
除了方法之外,验证器还会检查其他属性方法:文档字符串、嵌套类、常量、属性等。
此外,验证器还会检查类是否有类级别逻辑,如果有则报告。以下是一个例子
class PhoneForm(forms.Form):
phone = forms.CharField(17, label='Телефон'.upper())
# this should happen in __init__!
phone.widget.attrs.update({'class': 'form-control phone'})
安装
pip install flake8-class-attributes-order
配置
严格模式
还有一个预先配置的顺序,对私有子类型更加严格
__new__
__init__
__post_init__
- 其他魔术方法
@property
@staticmethod
@classmethod
- 其他方法
- 私有
@property
- 私有
@staticmethod
- 私有
@classmethod
- 其他私有方法
要启用严格验证,请设置您的配置文件中的标志
[flake8]
use_class_attributes_order_strict_mode = True
手动顺序配置
可以通过 class_attributes_order
配置设置手动配置顺序。
例如,如果您希望将 class Meta
放在常量和字段之后
[flake8]
class_attributes_order =
field,
meta_class,
nested_class,
magic_method,
property_method,
static_method,
class_method,
method,
private_method
可配置选项
选项 | 描述 | 回退到* |
---|---|---|
meta_class | class Meta: (例如,在Django项目中) | nested_class |
nested_class | 其他嵌套类 | None* |
常量 | SOME_CONSTANTS | 字段 |
outer_field | some = models.ForeignKey等。 | 字段 |
字段 | 其他字段 | None |
__new__ |
__new__ |
魔术方法 |
__init__ |
__init__ |
魔术方法 |
__post_init__ |
__post_init__ |
魔术方法 |
__str__ |
__str__ |
魔术方法 |
魔术方法 | 其他魔术方法 | 方法 |
保存 | def save(...) | 方法 |
删除 | def delete(...) | 方法 |
属性方法 | @property/@cached_property等。 | 方法 |
私有属性方法 | @property/@cached_property带有_ | 属性方法 |
静态方法 | @staticmethod | 方法 |
私有静态方法 | @staticmethod以_开头 | 静态方法 |
类方法 | @classmethod | 方法 |
私有类方法 | @classmethod以_开头 | 类方法 |
私有方法 | 其他以_开头的方法 | 方法 |
方法 | 其他方法 | None |
* 如果未提供,将使用其超类型顺序
** 如果未定义,则将在验证期间忽略这些基类型及其所有子类型(除非已定义)。建议至少设置 nested_class
、field
和 method
您可以选择配置的详细程度。例如,您可以定义每个受支持的魔术方法的顺序(如__new__
、__str__
等),或将magic_method
设置为允许它们之间的任何顺序,甚至只需使用method
示例
DEBUG = True
class User:
def fetch_info_from_crm(self):
pass
LOGIN_FIELD = 'email' # wtf? this should be on top of class definition!
class UserNode:
class Meta:
model = User
if DEBUG: # not great idea at all
def is_synced_with_crm(self):
pass
用法
$ flake8 test.py
test.py:5:5: CCE001 User.fetch_info_from_crm should be after User.LOGIN_FIELD
test.py:15:5: CCE002 Class level expression detected model UserNode, line 15
在Python 3.7.x和flake8 3.7.5上进行了测试。
错误代码
错误代码 | 描述 |
---|---|
CCE001 | 类属性顺序错误(XXX应在YYY之后 ) |
CCE002 | 检测到类级别表达式 |
贡献
我们非常希望您为我们的项目做出贡献。这很简单
- 创建一个问题,报告您发现的错误或您拥有的建议。等待维护者的批准。
- 创建一个pull请求。确保所有检查都是绿色的。
- 如果有任何审查评论,请修复它们。
- 保持优秀。
以下是一些有用的提示
- 您可以使用
make check
运行所有检查和测试。请在TravisCI之前这样做。 - 我们使用BestDoctor python styleguide。
- 我们尊重Django CoC。做得好,不要胡说。
项目详情
关闭
flake8_class_attributes_order-0.1.3.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9dde5581832d278ce247d4c47777f980cd86df2232bc0c50275144857d56e91d |
|
MD5 | 1474bdbfaa3058d7c977d7e91a78aaa8 |
|
BLAKE2b-256 | 48864d6eb75d7108ea84a72d5100da5bdb23165938cc0daae83e291f5fc51dd3 |
关闭
flake8_class_attributes_order-0.1.3-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6398368da4511cdda1a7c0e25934bcaac49d9df89aa2842729353b4a20f7ed13 |
|
MD5 | 95e3d010ca3ded23582c3e69643054a9 |
|
BLAKE2b-256 | 0e057cecfad1708692d618eea8570804b86ec89a9e8570898b5a2637851bdf02 |