File tree 3 files changed +89
-0
lines changed
3 files changed +89
-0
lines changed Original file line number Diff line number Diff line change @@ -694,3 +694,16 @@ Availability:
694
694
- def f(x: 'queue.Queue[int]') -> C:
695
695
+ def f(x: queue.Queue[int]) -> C:
696
696
```
697
+
698
+
699
+ ### use ` datetime.UTC ` alias
700
+
701
+ Availability:
702
+ - ` --py311-plus ` is passed on the commandline.
703
+
704
+ ``` diff
705
+ import datetime
706
+
707
+ - datetime.timezone.utc
708
+ + datetime.UTC
709
+ ```
Original file line number Diff line number Diff line change
1
+ from __future__ import annotations
2
+
3
+ import ast
4
+ import functools
5
+ from typing import Iterable
6
+
7
+ from tokenize_rt import Offset
8
+
9
+ from pyupgrade ._ast_helpers import ast_to_offset
10
+ from pyupgrade ._data import register
11
+ from pyupgrade ._data import State
12
+ from pyupgrade ._data import TokenFunc
13
+ from pyupgrade ._token_helpers import replace_name
14
+
15
+
16
+ @register (ast .Attribute )
17
+ def visit_Attribute (
18
+ state : State ,
19
+ node : ast .Attribute ,
20
+ parent : ast .AST ,
21
+ ) -> Iterable [tuple [Offset , TokenFunc ]]:
22
+ if (
23
+ state .settings .min_version >= (3 , 11 ) and
24
+ node .attr == 'utc' and
25
+ isinstance (node .value , ast .Attribute ) and
26
+ node .value .attr == 'timezone' and
27
+ isinstance (node .value .value , ast .Name ) and
28
+ node .value .value .id == 'datetime'
29
+ ):
30
+ func = functools .partial (
31
+ replace_name ,
32
+ name = 'utc' ,
33
+ new = 'datetime.UTC' ,
34
+ )
35
+ yield ast_to_offset (node ), func
Original file line number Diff line number Diff line change
1
+ from __future__ import annotations
2
+
3
+ import pytest
4
+
5
+ from pyupgrade ._data import Settings
6
+ from pyupgrade ._main import _fix_plugins
7
+
8
+
9
+ @pytest .mark .parametrize (
10
+ ('s' ,),
11
+ (
12
+ pytest .param (
13
+ 'import datetime\n '
14
+ 'print(datetime.timezone(-1))' ,
15
+
16
+ id = 'not rewriting timezone object to alias' ,
17
+ ),
18
+ ),
19
+ )
20
+ def test_fix_datetime_utc_alias_noop (s ):
21
+ assert _fix_plugins (s , settings = Settings (min_version = (3 ,))) == s
22
+ assert _fix_plugins (s , settings = Settings (min_version = (3 , 11 ))) == s
23
+
24
+
25
+ @pytest .mark .parametrize (
26
+ ('s' , 'expected' ),
27
+ (
28
+ pytest .param (
29
+ 'import datetime\n '
30
+ 'print(datetime.timezone.utc)' ,
31
+
32
+ 'import datetime\n '
33
+ 'print(datetime.UTC)' ,
34
+
35
+ id = 'rewriting to alias' ,
36
+ ),
37
+ ),
38
+ )
39
+ def test_fix_datetime_utc_alias (s , expected ):
40
+ assert _fix_plugins (s , settings = Settings (min_version = (3 ,))) == s
41
+ assert _fix_plugins (s , settings = Settings (min_version = (3 , 11 ))) == expected
You can’t perform that action at this time.
0 commit comments