Skip to content

Commit

Permalink
Add Black code style formatter (evmos#17)
Browse files Browse the repository at this point in the history
- Adds Black code formatter – https://black.readthedocs.io/en/stable/
- Applied the formatting to the project
- Updated flake8 config to be compatible with Black – https://black.readthedocs.io/en/stable/compatible_configs.html#flake8
- Adds Black check to the CI pipeline – Note that this does not automatically format any code. Code should be formatted on the user side either manually or by running black src/ to apply the suggestions automatically
  • Loading branch information
fmrsabino authored May 3, 2021
1 parent 8637ded commit 1eaeb7d
Show file tree
Hide file tree
Showing 17 changed files with 187 additions and 174 deletions.
2 changes: 1 addition & 1 deletion .flake8
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[flake8]
max-line-length = 119

extend-ignore = E203, W503
exclude = src/safe_apps/migrations
1 change: 1 addition & 0 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
-r requirements.txt
black==21.4b2
factory-boy==3.2.0
flake8==3.9.1
pytest-django==4.2.0
8 changes: 7 additions & 1 deletion run
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ function test {
cmd pytest "${@}"
}

function black {
# Run Black code formatter check
cmd black "${@}"
}

function flake8 {
# Lint Python code with flake8
cmd flake8 "${@}"
Expand All @@ -56,7 +61,8 @@ function ci:test {
. .env

manage check
flake8 "${@}"
black --check .
flake8 .
manage migrate
test
}
Expand Down
2 changes: 1 addition & 1 deletion src/config/asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@

from django.core.asgi import get_asgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

application = get_asgi_application()
82 changes: 41 additions & 41 deletions src/config/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,57 +32,57 @@
# Application definition

INSTALLED_APPS = [
'safe_apps.apps.AppsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
"safe_apps.apps.AppsConfig",
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"rest_framework",
]

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]

ROOT_URLCONF = 'config.urls'
ROOT_URLCONF = "config.urls"

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]

WSGI_APPLICATION = 'config.wsgi.application'
WSGI_APPLICATION = "config.wsgi.application"

# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.getenv("POSTGRES_NAME", "postgres"),
'USER': os.getenv("POSTGRES_USER", "postgres"),
'PASSWORD': os.getenv("POSTGRES_PASSWORD", "postgres"),
'HOST': os.getenv("POSTGRES_HOST", "db"),
'PORT': os.getenv("POSTGRES_PORT", "5432"),
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.getenv("POSTGRES_NAME", "postgres"),
"USER": os.getenv("POSTGRES_USER", "postgres"),
"PASSWORD": os.getenv("POSTGRES_PASSWORD", "postgres"),
"HOST": os.getenv("POSTGRES_HOST", "db"),
"PORT": os.getenv("POSTGRES_PORT", "5432"),
}
}

Expand All @@ -91,25 +91,25 @@

AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
},
]

# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/

LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = "en-us"

TIME_ZONE = 'UTC'
TIME_ZONE = "UTC"

USE_I18N = True

Expand All @@ -120,9 +120,9 @@
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'
STATIC_URL = "/static/"

# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
4 changes: 2 additions & 2 deletions src/config/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
from django.urls import path, include

urlpatterns = [
path('api/v1/', include('safe_apps.urls', namespace='v1')),
path('admin/', admin.site.urls),
path("api/v1/", include("safe_apps.urls", namespace="v1")),
path("admin/", admin.site.urls),
]
2 changes: 1 addition & 1 deletion src/config/wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

application = get_wsgi_application()
4 changes: 2 additions & 2 deletions src/manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
Expand All @@ -18,5 +18,5 @@ def main():
execute_from_command_line(sys.argv)


if __name__ == '__main__':
if __name__ == "__main__":
main()
18 changes: 9 additions & 9 deletions src/safe_apps/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@


class NetworksFilter(admin.SimpleListFilter):
title = 'Networks'
parameter_name = 'networks'
title = "Networks"
parameter_name = "networks"

def lookups(self, request, model_admin):
values = SafeApp.objects.values_list('networks', flat=True)
values = SafeApp.objects.values_list("networks", flat=True)
# lookups requires a tuple to be returned – (value, verbose value)
networks = [(network, network) for networks in values for network in networks]
networks = sorted(set(networks))
Expand All @@ -22,14 +22,14 @@ def queryset(self, request, queryset):

@admin.register(SafeApp)
class SafeAppAdmin(admin.ModelAdmin):
list_display = ('name', 'url', 'networks')
list_display = ("name", "url", "networks")
list_filter = (NetworksFilter,)
search_fields = ('name', 'url')
ordering = ('name',)
search_fields = ("name", "url")
ordering = ("name",)


@admin.register(Provider)
class ProviderAdmin(admin.ModelAdmin):
list_display = ('name', 'url')
search_fields = ('name',)
ordering = ('name',)
list_display = ("name", "url")
search_fields = ("name",)
ordering = ("name",)
4 changes: 2 additions & 2 deletions src/safe_apps/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@


class AppsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'safe_apps'
default_auto_field = "django.db.models.BigAutoField"
name = "safe_apps"
35 changes: 23 additions & 12 deletions src/safe_apps/migrations/0001_initial.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,37 @@ class Migration(migrations.Migration):

initial = True

dependencies = [
]
dependencies = []

operations = [
migrations.CreateModel(
name='Provider',
name="Provider",
fields=[
('url', models.URLField(primary_key=True, serialize=False)),
('name', models.CharField(max_length=200)),
("url", models.URLField(primary_key=True, serialize=False)),
("name", models.CharField(max_length=200)),
],
),
migrations.CreateModel(
name='SafeApp',
name="SafeApp",
fields=[
('url', models.URLField(primary_key=True, serialize=False)),
('name', models.CharField(max_length=200)),
('icon_url', models.URLField()),
('description', models.CharField(max_length=200)),
('networks', django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), size=None)),
('provider', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='safe_apps.provider')),
("url", models.URLField(primary_key=True, serialize=False)),
("name", models.CharField(max_length=200)),
("icon_url", models.URLField()),
("description", models.CharField(max_length=200)),
(
"networks",
django.contrib.postgres.fields.ArrayField(
base_field=models.IntegerField(), size=None
),
),
(
"provider",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="safe_apps.provider",
),
),
],
),
]
4 changes: 2 additions & 2 deletions src/safe_apps/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class Provider(models.Model):
name = models.CharField(max_length=200)

def __str__(self):
return f'{self.name} | {self.url}'
return f"{self.name} | {self.url}"


class SafeApp(models.Model):
Expand All @@ -19,4 +19,4 @@ class SafeApp(models.Model):
provider = models.ForeignKey(Provider, null=True, on_delete=models.SET_NULL)

def __str__(self):
return f'{self.name} | {self.url} | networks={self.networks}'
return f"{self.name} | {self.url} | networks={self.networks}"
4 changes: 2 additions & 2 deletions src/safe_apps/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
class ProviderSerializer(serializers.ModelSerializer):
class Meta:
model = Provider
fields = ['url', 'name']
fields = ["url", "name"]


class SafeAppsResponseSerializer(serializers.ModelSerializer):
provider = ProviderSerializer()

class Meta:
model = SafeApp
fields = ['url', 'name', 'icon_url', 'description', 'networks', 'provider']
fields = ["url", "name", "icon_url", "description", "networks", "provider"]
14 changes: 7 additions & 7 deletions src/safe_apps/tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ class ProviderFactory(DjangoModelFactory):
class Meta:
model = Provider

name = factory.Faker('company')
url = factory.Faker('url')
name = factory.Faker("company")
url = factory.Faker("url")


class SafeAppFactory(DjangoModelFactory):
class Meta:
model = SafeApp

url = factory.Faker('url')
name = factory.Faker('company')
icon_url = factory.Faker('image_url')
description = factory.Faker('catch_phrase')
networks = factory.Faker('pylist', nb_elements=2, value_types=(int,))
url = factory.Faker("url")
name = factory.Faker("company")
icon_url = factory.Faker("image_url")
description = factory.Faker("catch_phrase")
networks = factory.Faker("pylist", nb_elements=2, value_types=(int,))
provider = None
Loading

0 comments on commit 1eaeb7d

Please sign in to comment.