Skip to content

Commit

Permalink
Create rule S6886 (#3572)
Browse files Browse the repository at this point in the history
* Create rule S6886

* Specify rule

* CR fixes

* CR fixes

* Modify rule classification and impacts

* Invert two words

---------

Co-authored-by: maksim-grebeniuk-sonarsource <[email protected]>
Co-authored-by: Maksim Grebeniuk <[email protected]>
Co-authored-by: Ghislain Piot <[email protected]>
  • Loading branch information
4 people authored Apr 11, 2024
1 parent 3c5fedc commit 6ab887f
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 0 deletions.
2 changes: 2 additions & 0 deletions rules/S6886/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}
23 changes: 23 additions & 0 deletions rules/S6886/python/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"title": "offset-naive datetime.time and datetime.datetime objects should not be compared with offset-aware ones",
"type": "BUG",
"status": "ready",
"remediation": {
"func": "Constant\/Issue",
"constantCost": "5min"
},
"tags": [
],
"defaultSeverity": "Major",
"ruleSpecification": "RSPEC-6886",
"sqKey": "S6886",
"scope": "All",
"defaultQualityProfiles": ["Sonar way"],
"quickfix": "unknown",
"code": {
"impacts": {
"RELIABILITY": "HIGH"
},
"attribute": "LOGICAL"
}
}
46 changes: 46 additions & 0 deletions rules/S6886/python/rule.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
This rule raises an issue when trying to perform comparison or arithmetic operations between `offset-naive` and `offset-aware` Datetimes.

== Why is this an issue?

`datetime.datetime` and `datetime.time` objects may be categorized as "aware" or "naive" depending on whether or not they include timezone information.

Comparison or arithmetic operations between `offset-naive` and `offset-aware` datetimes raise a `TypeError`.

== How to fix it
Perform comparison or arithmetic operations only between offset-naive or only between offset-aware Datetimes.

=== Code examples

==== Noncompliant code example

[source,python,diff-id=1,diff-type=noncompliant]
----
import datetime
from pytz import timezone
tz = timezone('America/New_York')
dt1 = datetime.datetime(2023, 5, 23, tzinfo=tz)
dt2 = datetime.datetime(2023, 5, 24)
if dt1 < dt2: # Noncompliant: TypeError: can't compare offset-naive and offset-aware datetimes
...
----

==== Compliant solution

[source,python,diff-id=1,diff-type=compliant]
----
import datetime
from pytz import timezone
tz = timezone('America/New_York')
dt1 = datetime.datetime(2023, 5, 23, tzinfo=tz)
dt2 = datetime.datetime(2023, 5, 24, timezone.utc)
if dt1 < dt2: # OK
...
----

== Resources
=== Documentation
* Python documentation - https://docs.python.org/3/library/datetime.html#aware-and-naive-objects[Aware and Naive Objects]

0 comments on commit 6ab887f

Please sign in to comment.