diff --git a/rules/S6899/metadata.json b/rules/S6899/metadata.json new file mode 100644 index 0000000000..2c63c08510 --- /dev/null +++ b/rules/S6899/metadata.json @@ -0,0 +1,2 @@ +{ +} diff --git a/rules/S6899/python/metadata.json b/rules/S6899/python/metadata.json new file mode 100644 index 0000000000..ed4a09d60f --- /dev/null +++ b/rules/S6899/python/metadata.json @@ -0,0 +1,23 @@ +{ + "title": "datetime.datetime objects should not be compared with datetime.date objects", + "type": "BUG", + "status": "ready", + "remediation": { + "func": "Constant\/Issue", + "constantCost": "5min" + }, + "tags": [ + ], + "defaultSeverity": "Major", + "ruleSpecification": "RSPEC-6899", + "sqKey": "S6899", + "scope": "All", + "defaultQualityProfiles": ["Sonar way"], + "quickfix": "unknown", + "code": { + "impacts": { + "RELIABILITY": "HIGH" + }, + "attribute": "LOGICAL" + } +} diff --git a/rules/S6899/python/rule.adoc b/rules/S6899/python/rule.adoc new file mode 100644 index 0000000000..a30f241ccf --- /dev/null +++ b/rules/S6899/python/rule.adoc @@ -0,0 +1,53 @@ +This rule raises an issue when trying to perform comparison or arithmetic operations between `datetime.date` and `datetime.datetime` objects. + +== Why is this an issue? +Despite the fact that the `datetime.datetime` is inherited from the `datetime.date` they are not compatible from comparison and arithmetical operations perspective. +Trying to compare a `datetime.datetime` with a `datetime.date` objects leads to a `TypeError`. + +== How to fix it +Make sure that comparison or arithmetic operations are performed between compatible types e.g. convert `datetime.datetime` to `datetime.date` or vice versa. + +=== Code examples + +==== Noncompliant code example + +[source,python,diff-id=1,diff-type=noncompliant] +---- +from datetime import datetime, date + +dt = datetime.now() +d = date.today() + +if dt < d: # Noncompliant: TypeError: can't compare datetime.datetime to datetime.date + ... +---- + +==== Compliant solution + +[source,python,diff-id=1,diff-type=compliant] +---- +from datetime import datetime, date + +dt = datetime.now() +d = date.today() + +if dt.date() < d: # OK + ... +---- + +//=== How does this work? + +//=== Pitfalls + +//=== Going the extra mile + + +== Resources +=== Documentation +* Python documentation - https://docs.python.org/3/library/datetime.html#datetime-objects[Datetime Objects] +* Python documentation - https://docs.python.org/3/library/datetime.html#date-objects[Date Objects] +//=== Articles & blog posts +//=== Conference presentations +//=== Standards +//=== External coding guidelines +//=== Benchmarks