Skip to content

Commit 09a43fc

Browse files
authored
Merge pull request #302 from jacebrowning/mypy-1.1
Update the plugin to support mypy 1.1+
2 parents 061254c + 51a4cd0 commit 09a43fc

File tree

5 files changed

+84
-57
lines changed

5 files changed

+84
-57
lines changed

.tool-versions

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
python 3.11.2
2-
poetry 1.4.1
2+
poetry 1.4.2

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Release Notes
22

3+
## 2.1.2 (2023-05-27)
4+
5+
- Fixed the `mypy` plugin to support newer versions.
6+
37
## 2.1.1 (2023-05-04)
48

59
- Fixed missing default value for `target_object` in container converters.

datafiles/plugins.py

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from typing import Callable, Optional
44

5-
from mypy.nodes import MDEF, SymbolTableNode, Var
5+
from mypy.nodes import MDEF, DataclassTransformSpec, SymbolTableNode, Var
66
from mypy.plugin import ClassDefContext, Plugin
77
from mypy.plugins.dataclasses import DataclassTransformer
88
from mypy.types import AnyType, TypeOfAny
@@ -13,26 +13,53 @@ def get_class_decorator_hook(
1313
self, fullname: str
1414
) -> Optional[Callable[[ClassDefContext], None]]:
1515
if fullname.endswith(".datafile"):
16-
return datafile_class_maker_callback
16+
return self.datafile_class_maker_callback
1717
return None
1818

19+
def datafile_class_maker_callback(self, ctx: ClassDefContext) -> None:
20+
# Inherit all type definitions from dataclasses
21+
spec = DataclassTransformSpec()
22+
DataclassTransformer(ctx.cls, ctx.reason, spec, ctx.api).transform()
1923

20-
def datafile_class_maker_callback(ctx: ClassDefContext) -> None:
21-
# Inherit all type definitions from dataclasses
22-
DataclassTransformer(ctx).transform()
24+
# Define 'objects' as a class property
25+
var = Var("objects", AnyType(TypeOfAny.unannotated))
26+
var.info = ctx.cls.info
27+
var.is_property = True
28+
ctx.cls.info.names[var.name] = SymbolTableNode(MDEF, var)
2329

24-
# Define 'objects' as a class propery
25-
var = Var("objects", AnyType(TypeOfAny.unannotated))
26-
var.info = ctx.cls.info
27-
var.is_property = True
28-
ctx.cls.info.names[var.name] = SymbolTableNode(MDEF, var)
30+
# Define 'datafile' as an instance property
31+
var = Var("datafile", AnyType(TypeOfAny.unannotated))
32+
var.info = ctx.cls.info
33+
var.is_property = True
34+
ctx.cls.info.names[var.name] = SymbolTableNode(MDEF, var)
2935

30-
# Define 'datafile' as an instance property
31-
var = Var("datafile", AnyType(TypeOfAny.unannotated))
32-
var.info = ctx.cls.info
33-
var.is_property = True
34-
ctx.cls.info.names[var.name] = SymbolTableNode(MDEF, var)
36+
37+
class DatafilesPluginLegacy(Plugin):
38+
def get_class_decorator_hook(
39+
self, fullname: str
40+
) -> Optional[Callable[[ClassDefContext], None]]:
41+
if fullname.endswith(".datafile"):
42+
return self.datafile_class_maker_callback
43+
return None
44+
45+
def datafile_class_maker_callback(self, ctx: ClassDefContext) -> None:
46+
# Inherit all type definitions from dataclasses
47+
DataclassTransformer(ctx).transform() # type: ignore
48+
49+
# Define 'objects' as a class property
50+
var = Var("objects", AnyType(TypeOfAny.unannotated))
51+
var.info = ctx.cls.info
52+
var.is_property = True
53+
ctx.cls.info.names[var.name] = SymbolTableNode(MDEF, var)
54+
55+
# Define 'datafile' as an instance property
56+
var = Var("datafile", AnyType(TypeOfAny.unannotated))
57+
var.info = ctx.cls.info
58+
var.is_property = True
59+
ctx.cls.info.names[var.name] = SymbolTableNode(MDEF, var)
3560

3661

3762
def mypy(version: str):
63+
if version < "1.1":
64+
return DatafilesPluginLegacy
3865
return DatafilesPlugin

poetry.lock

Lines changed: 35 additions & 39 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[tool.poetry]
22

33
name = "datafiles"
4-
version = "2.1.1"
4+
version = "2.1.2"
55
description = "File-based ORM for dataclasses."
66

77
license = "MIT"
@@ -62,7 +62,7 @@ black = "^22.1"
6262
isort = "^5.10"
6363

6464
# Linters
65-
mypy = "~0.991"
65+
mypy = "^1.3"
6666
pylint = "~2.15"
6767
pydocstyle = "*"
6868

0 commit comments

Comments
 (0)