Skip to main content

A plugin to show lint errors for IW

Project description

flake8_iw

IW01: Use of patch

Lint check to prevent the use of patch directly. Recommendation: Use PatchingTestCase / PatchingTransactionTestCase instead

Correct

from instawork.tests import PatchingTestCase


class SignUpUpdatedTests(PatchingTestCase):
    def setUp(self):
        self.mock_call = self.patch("apps.auth.signals.task_send_email.delay")

    def test_email(self):
        expect(self.mock_call).to(have_been_called_once)

    def test_sms(self):
        mock_sms = self.patch("apps.auth.signals.task_send_sms.delay")
        expect(mock_sms).to(have_been_called_once)

Wrong

from unittest.mock import patch


class SignUpUpdatedTests(TestCase):
    def setUp(self):
        self.patcher = patch("apps.auth.signals.task_send_email.delay")
        self.mock_email = self.patcher.start()

    def tearDown(self):
        self.patcher.stop()

    def test_email(self):
        ...
        expect(self.mock_email).to(have_been_called_once)

    @patch("apps.auth.signals.task_send_sms.delay")
    def test_sms(self, mock_sms):
        ...
        expect(mock_sms).to(have_been_called_once)

IW02: Use of patch for time freeze

Lint check to prevent the use of patch to freeze time. Recommendation: Use freeze_time from PatchingTestCase / PatchingTransactionTestCase or use freeze_time decorator or context manager from freezegun package.

Correct

from django.utils import timezone
from instawork.tests import PatchingTestCase


class UserFeatureViewTests(PatchingTestCase):
    def setUp(self):
        self.now = timezone.now()

    def test_feature_view(self):
        ufv = None

        # Option 1
        with freeze_time(self.now):
            ufv = UserFeatureView.objects.get_or_create(
                user=self.shift.worker, feature=UserFeatureView.FEATURE_1
            )

        # Option 2
        self.freeze_time(self.now)
        ufv = UserFeatureView.objects.get_or_create(
            user=self.shift.worker, feature=UserFeatureView.FEATURE_1
        )

        ...

        expect(ufv.date_created).to(equal(self.now))

Wrong

from django.utils import timezone
from instawork.tests import PatchingTestCase


class UserFeatureViewTests(PatchingTestCase):
    def setUp(self):
        self.now = timezone.now()
        self.mock_call = self.patch("django.utils.timezone.now", return_value=self.now)

    def test_feature_view(self):
        ufv = UserFeatureView.objects.get_or_create(
            user=self.shift.worker, feature=UserFeatureView.FEATURE_1
        )

        ...

        expect(ufv.date_created).to(equal(self.now))

IW03: Error logging without exception info (exc_info)

Lint check to prevent error logging without exception info. Recommendation: Add exc_info=True keyword argument in logger.error()

Correct

import logging

custom_logger = logging.getLogger("module.logger")

class UserFeatureView(Model):
    def save(self):
        try:
            ...
        except ValueError as e:
            custom_logger.error(e, exc_info=True)
            return name

Wrong

import logging

custom_logger = logging.getLogger("module.logger")

class UserFeatureView(Model):
    def save(self):
        try:
            ...
        except ValueError as e:
            custom_logger.error(e)
            return name

IW04: Do not use datetime.now (use timezoen.now)

Lint to avoid usage of datetime.now() which does not contain timezone information and causes various warnings in tests.

Correct

from django.utils import timezone

now = timezone.now()

Wrong

from datetime import datetime

now = datetime.now()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flake8_iw-0.0.12.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

flake8_iw-0.0.12-py2.py3-none-any.whl (6.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file flake8_iw-0.0.12.tar.gz.

File metadata

  • Download URL: flake8_iw-0.0.12.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.12

File hashes

Hashes for flake8_iw-0.0.12.tar.gz
Algorithm Hash digest
SHA256 3e9b5b2502930542519a26475c2d36cf868e8f1d3638cb3b3f7e8e7f99c476d0
MD5 6b419dee8d4f1cecee10fdef304176cf
BLAKE2b-256 31af9a2ac63cb3ee12acfe3e9eb6b46ddbc18c9ddf5dd83063bd246e0c45e52e

See more details on using hashes here.

File details

Details for the file flake8_iw-0.0.12-py2.py3-none-any.whl.

File metadata

  • Download URL: flake8_iw-0.0.12-py2.py3-none-any.whl
  • Upload date:
  • Size: 6.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.12

File hashes

Hashes for flake8_iw-0.0.12-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 9a8a99b21f0f070d5d61cbbe432dd7b15b22ea99d928ac0e6b90509279b35a80
MD5 eb6ef4a95b50ebd01190f8b5de0c0cc7
BLAKE2b-256 ead7fab765a13a35893217d004097a0df7dc5f3a1980d29dad6bb4ed7ab530e8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page