From 218864dfbc169c445d6ba9ee600fe25e2b1dbf1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sat, 18 Nov 2023 23:22:56 -0400 Subject: [PATCH 01/17] Make the type of the `sprites` column in pokemon_v2_pokemonsprites `jsonb` This is so Hasura automatically transforms the field into an array instead of a JSON encoded in a string. Migration was generated by the `makemigrations` command. --- .../migrations/0014_auto_20231119_0303.py | 19 +++++++++++++++++++ pokemon_v2/models.py | 3 ++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 pokemon_v2/migrations/0014_auto_20231119_0303.py diff --git a/pokemon_v2/migrations/0014_auto_20231119_0303.py b/pokemon_v2/migrations/0014_auto_20231119_0303.py new file mode 100644 index 000000000..048146c06 --- /dev/null +++ b/pokemon_v2/migrations/0014_auto_20231119_0303.py @@ -0,0 +1,19 @@ +# Generated by Django 2.1.15 on 2023-11-19 03:03 + +import django.contrib.postgres.fields.jsonb +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pokemon_v2', '0013_pokemonabilitypast'), + ] + + operations = [ + migrations.AlterField( + model_name='pokemonsprites', + name='sprites', + field=django.contrib.postgres.fields.jsonb.JSONField(), + ), + ] diff --git a/pokemon_v2/models.py b/pokemon_v2/models.py index 4bd349c88..f70e9f3a7 100644 --- a/pokemon_v2/models.py +++ b/pokemon_v2/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.contrib.postgres.fields import JSONField ##################### # ABSTRACT MODELS # @@ -1795,4 +1796,4 @@ class PokemonTypePast(HasPokemon, HasType, HasGeneration): class PokemonSprites(HasPokemon): - sprites = models.CharField(max_length=20000) + sprites = JSONField() From fa143365165c5b7f14618408dcf20a901f5b2fd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sat, 18 Nov 2023 23:24:02 -0400 Subject: [PATCH 02/17] Stop encoding sprites when inserting them on the database Since the column is now jsonb, we need to stop encoding it or it gets inserted as a string rather than a JSON object. --- data/v2/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/v2/build.py b/data/v2/build.py index 586e701c3..bf6ff4be0 100644 --- a/data/v2/build.py +++ b/data/v2/build.py @@ -1901,7 +1901,7 @@ def csv_record_to_objects(info): yield PokemonSprites( id=int(info[0]), pokemon=Pokemon.objects.get(pk=int(info[0])), - sprites=json.dumps(sprites), + sprites=sprites, ) build_generic((PokemonSprites,), "pokemon.csv", csv_record_to_objects) From 6ff2c0c217ad598cfdb9980418a4cd2bd8ee900f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sat, 18 Nov 2023 23:51:02 -0400 Subject: [PATCH 03/17] Fix serialization of pokemon sprites --- pokemon_v2/serializers.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pokemon_v2/serializers.py b/pokemon_v2/serializers.py index 40821c323..b5670abcf 100644 --- a/pokemon_v2/serializers.py +++ b/pokemon_v2/serializers.py @@ -2763,11 +2763,7 @@ class Meta: def get_pokemon_sprites(self, obj): sprites_object = PokemonSprites.objects.get(pokemon_id=obj) - sprites_data = PokemonSpritesSerializer( - sprites_object, context=self.context - ).data - - return json.loads(sprites_data["sprites"]) + return sprites_object.sprites def get_pokemon_moves(self, obj): version_objects = VersionGroup.objects.all() From 49d970f0ed2cb858fe4a012feded1d9b18235477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sun, 19 Nov 2023 00:12:35 -0400 Subject: [PATCH 04/17] Remove unused serializer class PokemonSpritesSerializer --- pokemon_v2/serializers.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pokemon_v2/serializers.py b/pokemon_v2/serializers.py index b5670abcf..282b179ef 100644 --- a/pokemon_v2/serializers.py +++ b/pokemon_v2/serializers.py @@ -2713,12 +2713,6 @@ class Meta: fields = ("game_index", "version") -class PokemonSpritesSerializer(serializers.ModelSerializer): - class Meta: - model = PokemonSprites - fields = ("sprites",) - - class PokemonDetailSerializer(serializers.ModelSerializer): abilities = serializers.SerializerMethodField("get_pokemon_abilities") past_abilities = serializers.SerializerMethodField("get_past_pokemon_abilities") From 30e8a012531fe40a3a1664bb0c908663a35327d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sun, 19 Nov 2023 00:21:01 -0400 Subject: [PATCH 05/17] Format migration 0014_auto_20231119_0303.py --- pokemon_v2/migrations/0014_auto_20231119_0303.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pokemon_v2/migrations/0014_auto_20231119_0303.py b/pokemon_v2/migrations/0014_auto_20231119_0303.py index 048146c06..323cae244 100644 --- a/pokemon_v2/migrations/0014_auto_20231119_0303.py +++ b/pokemon_v2/migrations/0014_auto_20231119_0303.py @@ -5,15 +5,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('pokemon_v2', '0013_pokemonabilitypast'), + ("pokemon_v2", "0013_pokemonabilitypast"), ] operations = [ migrations.AlterField( - model_name='pokemonsprites', - name='sprites', + model_name="pokemonsprites", + name="sprites", field=django.contrib.postgres.fields.jsonb.JSONField(), ), ] From 8f716cdbf05964c04b8adb3327cf15a8d24afd4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Wed, 22 Nov 2023 07:29:16 -0400 Subject: [PATCH 06/17] Update Django to version 3.1 Some third-party packages had to be updated and some new settings were added due to `manage.py` not running. --- config/settings.py | 22 ++++++++++++++++++++-- requirements.txt | 8 ++++---- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/config/settings.py b/config/settings.py index 64cd60be8..d824202dd 100755 --- a/config/settings.py +++ b/config/settings.py @@ -97,6 +97,7 @@ "django.contrib.sessions", "django.contrib.sites", "django.contrib.admin", + 'django.contrib.messages', "django.contrib.humanize", "corsheaders", "rest_framework", @@ -115,9 +116,26 @@ CORS_URLS_REGEX = r"^/api/.*$" REST_FRAMEWORK = { - "DEFAULT_RENDERER_CLASSES": ("drf_ujson.renderers.UJSONRenderer",), - "DEFAULT_PARSER_CLASSES": ("drf_ujson.renderers.UJSONRenderer",), + "DEFAULT_RENDERER_CLASSES": ("rest_framework.renderers.JSONRenderer",), + "DEFAULT_PARSER_CLASSES": ("rest_framework.renderers.JSONRenderer",), "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination", "PAGE_SIZE": 20, "PAGINATE_BY": 20, } + + +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', + ], + }, + }, +] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 78ab0f703..202d954df 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,13 +1,13 @@ -Django==2.1.15 +Django==3.1.14 Unipath==1.1 coverage==4.5.1 django-appconf==1.0.4 -django-cors-headers==2.5.3 +django-cors-headers==3.11.0 django-discover-runner==1.0 -django-redis==4.10.0 +django-redis==4.12.1 django-cachalot==2.3.5 django-tastypie==0.14.3 -djangorestframework==3.9.4 +djangorestframework==3.14.0 drf-ujson==1.2.0 gunicorn==20.1.0 mimeparse==0.1.3 From d1e2d9c5b48096e6b6c4188ccce00e02d7d94543 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Thu, 23 Nov 2023 06:59:12 -0400 Subject: [PATCH 07/17] Use new JSON field in Django instead of Postgres custom one --- .../migrations/0015_auto_20231121_1209.py | 18 ++++++++++++++++++ pokemon_v2/models.py | 3 +-- pokemon_v2/tests.py | 7 +++++-- 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 pokemon_v2/migrations/0015_auto_20231121_1209.py diff --git a/pokemon_v2/migrations/0015_auto_20231121_1209.py b/pokemon_v2/migrations/0015_auto_20231121_1209.py new file mode 100644 index 000000000..3ca21b8d8 --- /dev/null +++ b/pokemon_v2/migrations/0015_auto_20231121_1209.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.14 on 2023-11-21 12:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pokemon_v2', '0014_auto_20231119_0303'), + ] + + operations = [ + migrations.AlterField( + model_name='pokemonsprites', + name='sprites', + field=models.JSONField(), + ), + ] diff --git a/pokemon_v2/models.py b/pokemon_v2/models.py index f70e9f3a7..dc9e55c37 100644 --- a/pokemon_v2/models.py +++ b/pokemon_v2/models.py @@ -1,5 +1,4 @@ from django.db import models -from django.contrib.postgres.fields import JSONField ##################### # ABSTRACT MODELS # @@ -1796,4 +1795,4 @@ class PokemonTypePast(HasPokemon, HasType, HasGeneration): class PokemonSprites(HasPokemon): - sprites = JSONField() + sprites = models.JSONField() diff --git a/pokemon_v2/tests.py b/pokemon_v2/tests.py index 994a51f48..7acf4c527 100644 --- a/pokemon_v2/tests.py +++ b/pokemon_v2/tests.py @@ -5024,12 +5024,15 @@ def test_pokemon_api(self): response.data["forms"][0]["url"], "{}{}/pokemon-form/{}/".format(TEST_HOST, API_V2, pokemon_form.pk), ) + + sprite_response = json.loads(response.data["sprites"]) + # sprite params self.assertEqual( - response.data["sprites"]["front_default"], + sprite_response["front_default"], "{}".format(sprites_data["front_default"]), ) - self.assertEqual(response.data["sprites"]["back_default"], None) + self.assertEqual(sprite_response["back_default"], None) def test_pokemon_form_api(self): pokemon_species = self.setup_pokemon_species_data() From db33cfc1a4f2c7d755f527cda9b2805fc61c4f1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Thu, 23 Nov 2023 07:05:30 -0400 Subject: [PATCH 08/17] Format missing files --- config/settings.py | 22 +++++++++---------- .../migrations/0015_auto_20231121_1209.py | 7 +++--- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/config/settings.py b/config/settings.py index d824202dd..caa795a12 100755 --- a/config/settings.py +++ b/config/settings.py @@ -97,7 +97,7 @@ "django.contrib.sessions", "django.contrib.sites", "django.contrib.admin", - 'django.contrib.messages', + "django.contrib.messages", "django.contrib.humanize", "corsheaders", "rest_framework", @@ -126,16 +126,16 @@ 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", ], }, }, -] \ No newline at end of file +] diff --git a/pokemon_v2/migrations/0015_auto_20231121_1209.py b/pokemon_v2/migrations/0015_auto_20231121_1209.py index 3ca21b8d8..98a25e085 100644 --- a/pokemon_v2/migrations/0015_auto_20231121_1209.py +++ b/pokemon_v2/migrations/0015_auto_20231121_1209.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('pokemon_v2', '0014_auto_20231119_0303'), + ("pokemon_v2", "0014_auto_20231119_0303"), ] operations = [ migrations.AlterField( - model_name='pokemonsprites', - name='sprites', + model_name="pokemonsprites", + name="sprites", field=models.JSONField(), ), ] From 45efd0702c32c53d3c78f75f6aa240f8e62cd268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sat, 25 Nov 2023 08:20:47 -0400 Subject: [PATCH 09/17] Remove root __init__.py file This was preventing the tests from running. --- __init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 __init__.py diff --git a/__init__.py b/__init__.py deleted file mode 100644 index e69de29bb..000000000 From d57fd5ab019e9229ecc0eed08aaaf9b72859e095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sat, 25 Nov 2023 08:21:14 -0400 Subject: [PATCH 10/17] Add a Makefile rule for running the tests inside the docker container --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index d5e03209e..61964bc99 100755 --- a/Makefile +++ b/Makefile @@ -70,6 +70,9 @@ docker-stop: # (Docker) Stop containers docker-down: # (Docker) Stop and removes containers and networks docker-compose down +docker-test: # (Docker) Run tests + docker-compose exec -T app python manage.py test ${local_config} + docker-prod: docker-compose -f docker-compose.yml -f docker-compose.override.yml -f Resources/compose/docker-compose-prod-graphql.yml up -d From 0dcaf0d0a0b65d1129260a63c8e5f5102ec63edd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sat, 25 Nov 2023 08:33:36 -0400 Subject: [PATCH 11/17] Remove unused packages in requirements.txt --- config/docker-compose.py | 1 - config/docker.py | 1 - config/local.py | 1 - config/settings.py | 7 +------ requirements.txt | 5 ----- 5 files changed, 1 insertion(+), 14 deletions(-) diff --git a/config/docker-compose.py b/config/docker-compose.py index e13860050..896854be6 100644 --- a/config/docker-compose.py +++ b/config/docker-compose.py @@ -24,6 +24,5 @@ } DEBUG = False -TASTYPIE_FULL_DEBUG = False ALLOWED_HOSTS = ["*"] diff --git a/config/docker.py b/config/docker.py index 707510deb..663974929 100755 --- a/config/docker.py +++ b/config/docker.py @@ -24,4 +24,3 @@ } DEBUG = True -TASTYPIE_FULL_DEBUG = True diff --git a/config/local.py b/config/local.py index 4f1f3c221..42f070e38 100755 --- a/config/local.py +++ b/config/local.py @@ -14,4 +14,3 @@ } DEBUG = True -TASTYPIE_FULL_DEBUG = True diff --git a/config/settings.py b/config/settings.py index caa795a12..5a1e7f2bb 100755 --- a/config/settings.py +++ b/config/settings.py @@ -86,10 +86,7 @@ "SECRET_KEY", "ubx+22!jbo(^x2_scm-o$*py3e@-awu-n^hipkm%2l$sw$&2l#" ) -CUSTOM_APPS = ( - "tastypie", - "pokemon_v2", -) +CUSTOM_APPS = ("pokemon_v2",) INSTALLED_APPS = ( "django.contrib.auth", @@ -107,8 +104,6 @@ API_LIMIT_PER_PAGE = 1 -TASTYPIE_DEFAULT_FORMATS = ["json"] - CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_METHODS = "GET" diff --git a/requirements.txt b/requirements.txt index 202d954df..ad52ef4de 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,18 +1,13 @@ Django==3.1.14 Unipath==1.1 coverage==4.5.1 -django-appconf==1.0.4 django-cors-headers==3.11.0 django-discover-runner==1.0 django-redis==4.12.1 django-cachalot==2.3.5 -django-tastypie==0.14.3 djangorestframework==3.14.0 -drf-ujson==1.2.0 gunicorn==20.1.0 mimeparse==0.1.3 psycopg2-binary==2.9.5 python-dateutil==2.8.1 python-mimeparse==1.6.0 -simplejson==3.17.2 -six==1.15.0 From 76f7a340e6b31cf64517f696f4e72ab24421201a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sun, 26 Nov 2023 09:18:58 -0400 Subject: [PATCH 12/17] Use JSONField instead of CharField for sprites The models affected were PokemonFormSprites and ItemSprites. This was done to ensure they are properly returned when querying those tables with Hasura. --- data/v2/build.py | 6 ++--- .../migrations/0016_auto_20231126_1258.py | 22 +++++++++++++++++++ pokemon_v2/models.py | 4 ++-- 3 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 pokemon_v2/migrations/0016_auto_20231126_1258.py diff --git a/data/v2/build.py b/data/v2/build.py index bf6ff4be0..a9b7e5e17 100644 --- a/data/v2/build.py +++ b/data/v2/build.py @@ -499,9 +499,7 @@ def csv_record_to_objects(info): item_sprites = "items/{0}" sprites = {"default": file_path_or_none(item_sprites.format(file_name))} - yield ItemSprites( - id=int(info[0]), item_id=int(info[0]), sprites=json.dumps(sprites) - ) + yield ItemSprites(id=int(info[0]), item_id=int(info[0]), sprites=sprites) build_generic((ItemSprites,), "items.csv", csv_record_to_objects) @@ -2024,7 +2022,7 @@ def csv_record_to_objects(info): ), } yield PokemonFormSprites( - id=int(info[0]), pokemon_form_id=int(info[0]), sprites=json.dumps(sprites) + id=int(info[0]), pokemon_form_id=int(info[0]), sprites=sprites ) build_generic((PokemonFormSprites,), "pokemon_forms.csv", csv_record_to_objects) diff --git a/pokemon_v2/migrations/0016_auto_20231126_1258.py b/pokemon_v2/migrations/0016_auto_20231126_1258.py new file mode 100644 index 000000000..efc34b8b7 --- /dev/null +++ b/pokemon_v2/migrations/0016_auto_20231126_1258.py @@ -0,0 +1,22 @@ +# Generated by Django 3.1.14 on 2023-11-26 12:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("pokemon_v2", "0015_auto_20231121_1209"), + ] + + operations = [ + migrations.AlterField( + model_name="itemsprites", + name="sprites", + field=models.JSONField(), + ), + migrations.AlterField( + model_name="pokemonformsprites", + name="sprites", + field=models.JSONField(), + ), + ] diff --git a/pokemon_v2/models.py b/pokemon_v2/models.py index dc9e55c37..ed6622dc3 100644 --- a/pokemon_v2/models.py +++ b/pokemon_v2/models.py @@ -882,7 +882,7 @@ class ItemGameIndex(HasItem, HasGeneration, HasGameIndex): class ItemSprites(HasItem): - sprites = models.CharField(max_length=1000) + sprites = models.JSONField() #################### @@ -1716,7 +1716,7 @@ class PokemonFormName(HasPokemonForm, IsName): class PokemonFormSprites(HasPokemonForm): - sprites = models.CharField(max_length=1000) + sprites = models.JSONField() class PokemonGameIndex(HasPokemon, HasGameIndex, HasVersion): From 61c21853efc8537c6f558630b7c5e16a2f38a185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sun, 26 Nov 2023 09:37:31 -0400 Subject: [PATCH 13/17] Fix serializers for ItemSprites and PokemonFormSprites --- pokemon_v2/serializers.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/pokemon_v2/serializers.py b/pokemon_v2/serializers.py index 282b179ef..b1acff77c 100644 --- a/pokemon_v2/serializers.py +++ b/pokemon_v2/serializers.py @@ -1417,10 +1417,7 @@ def get_item_machines(self, obj): def get_item_sprites(self, obj): sprites_object = ItemSprites.objects.get(item_id=obj) - sprites_data = ItemSpritesSerializer(sprites_object, context=self.context).data - sprites_data = json.loads(sprites_data["sprites"]) - - return sprites_data + return sprites_object.sprites def get_item_attributes(self, obj): item_attribute_maps = ItemAttributeMap.objects.filter(item=obj) @@ -2518,12 +2515,7 @@ def get_pokemon_form_pokemon_names(self, obj): def get_pokemon_form_sprites(self, obj): sprites_object = PokemonFormSprites.objects.get(pokemon_form_id=obj) - sprites_data = PokemonFormSpritesSerializer( - sprites_object, context=self.context - ).data - sprites_data = json.loads(sprites_data["sprites"]) - - return sprites_data + return sprites_object.sprites def get_pokemon_form_types(self, obj): form_type_objects = PokemonFormType.objects.filter(pokemon_form=obj) From b3d6608283f035bca36b260224a780e0423f25ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3n=20Oro=C3=B1o?= Date: Sun, 26 Nov 2023 09:51:08 -0400 Subject: [PATCH 14/17] Fix tests for sprites Moved the declaration of sprite_data variables closer to their actual usage. --- pokemon_v2/tests.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pokemon_v2/tests.py b/pokemon_v2/tests.py index 7acf4c527..32d406d2c 100644 --- a/pokemon_v2/tests.py +++ b/pokemon_v2/tests.py @@ -2588,8 +2588,6 @@ def test_item_api(self): item_attribute_map = ItemAttributeMap(item=item, item_attribute=item_attribute) item_attribute_map.save() - sprites_data = json.loads(item_sprites.sprites) - response = self.client.get( "{}/item/{}/".format(API_V2, item.pk), HTTP_HOST="testserver" ) @@ -2708,9 +2706,12 @@ def test_item_api(self): response.data["baby_trigger_for"]["url"], "{}{}/evolution-chain/{}/".format(TEST_HOST, API_V2, evolution_chain.pk), ) + + sprites_data = json.loads(response.data["sprites"]) + # sprites self.assertEqual( - response.data["sprites"]["default"], + sprites_data["default"], "{}".format(sprites_data["default"]), ) @@ -4837,8 +4838,6 @@ def test_pokemon_api(self): "{}/pokemon/{}/".format(API_V2, pokemon.pk), HTTP_HOST="testserver" ) - sprites_data = json.loads(pokemon_sprites.sprites) - self.assertEqual(response.status_code, status.HTTP_200_OK) # base params @@ -5025,14 +5024,14 @@ def test_pokemon_api(self): "{}{}/pokemon-form/{}/".format(TEST_HOST, API_V2, pokemon_form.pk), ) - sprite_response = json.loads(response.data["sprites"]) + sprites_data = json.loads(pokemon_sprites.sprites) # sprite params self.assertEqual( - sprite_response["front_default"], + sprites_data["front_default"], "{}".format(sprites_data["front_default"]), ) - self.assertEqual(sprite_response["back_default"], None) + self.assertEqual(sprites_data["back_default"], None) def test_pokemon_form_api(self): pokemon_species = self.setup_pokemon_species_data() @@ -5043,8 +5042,6 @@ def test_pokemon_form_api(self): pokemon_form_sprites = self.setup_pokemon_form_sprites_data(pokemon_form) pokemon_form_type = self.setup_pokemon_form_type_data(pokemon_form) - sprites_data = json.loads(pokemon_form_sprites.sprites) - response = self.client.get( "{}/pokemon-form/{}/".format(API_V2, pokemon_form.pk), HTTP_HOST="testserver", @@ -5077,12 +5074,15 @@ def test_pokemon_form_api(self): TEST_HOST, API_V2, pokemon_form.version_group.pk ), ) + + sprites_data = json.loads(pokemon_form_sprites.sprites) + # sprite params self.assertEqual( - response.data["sprites"]["front_default"], + sprites_data["front_default"], "{}".format(sprites_data["front_default"]), ) - self.assertEqual(response.data["sprites"]["back_default"], None) + self.assertEqual(sprites_data["back_default"], None) # type params self.assertEqual(response.data["types"][0]["slot"], pokemon_form_type.slot) self.assertEqual( From b348e60d2c0d7f1ae0074b4e289d9fecd1ce86cc Mon Sep 17 00:00:00 2001 From: Naramsim Date: Thu, 30 Nov 2023 04:09:39 +0100 Subject: [PATCH 15/17] refactor: merge migrations --- .../migrations/0014_auto_20231119_0303.py | 18 ------------------ ...1126_1258.py => 0014_auto_20231121_1209.py} | 9 +++++++-- .../migrations/0015_auto_20231121_1209.py | 17 ----------------- 3 files changed, 7 insertions(+), 37 deletions(-) delete mode 100644 pokemon_v2/migrations/0014_auto_20231119_0303.py rename pokemon_v2/migrations/{0016_auto_20231126_1258.py => 0014_auto_20231121_1209.py} (63%) delete mode 100644 pokemon_v2/migrations/0015_auto_20231121_1209.py diff --git a/pokemon_v2/migrations/0014_auto_20231119_0303.py b/pokemon_v2/migrations/0014_auto_20231119_0303.py deleted file mode 100644 index 323cae244..000000000 --- a/pokemon_v2/migrations/0014_auto_20231119_0303.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 2.1.15 on 2023-11-19 03:03 - -import django.contrib.postgres.fields.jsonb -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ("pokemon_v2", "0013_pokemonabilitypast"), - ] - - operations = [ - migrations.AlterField( - model_name="pokemonsprites", - name="sprites", - field=django.contrib.postgres.fields.jsonb.JSONField(), - ), - ] diff --git a/pokemon_v2/migrations/0016_auto_20231126_1258.py b/pokemon_v2/migrations/0014_auto_20231121_1209.py similarity index 63% rename from pokemon_v2/migrations/0016_auto_20231126_1258.py rename to pokemon_v2/migrations/0014_auto_20231121_1209.py index efc34b8b7..ffdb93ba1 100644 --- a/pokemon_v2/migrations/0016_auto_20231126_1258.py +++ b/pokemon_v2/migrations/0014_auto_20231121_1209.py @@ -1,11 +1,11 @@ -# Generated by Django 3.1.14 on 2023-11-26 12:58 +# Generated by Django 3.1.14 on 2023-11-21 12:09 from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ("pokemon_v2", "0015_auto_20231121_1209"), + ("pokemon_v2", "0013_pokemonabilitypast"), ] operations = [ @@ -14,6 +14,11 @@ class Migration(migrations.Migration): name="sprites", field=models.JSONField(), ), + migrations.AlterField( + model_name="pokemonsprites", + name="sprites", + field=models.JSONField(), + ), migrations.AlterField( model_name="pokemonformsprites", name="sprites", diff --git a/pokemon_v2/migrations/0015_auto_20231121_1209.py b/pokemon_v2/migrations/0015_auto_20231121_1209.py deleted file mode 100644 index 98a25e085..000000000 --- a/pokemon_v2/migrations/0015_auto_20231121_1209.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.1.14 on 2023-11-21 12:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("pokemon_v2", "0014_auto_20231119_0303"), - ] - - operations = [ - migrations.AlterField( - model_name="pokemonsprites", - name="sprites", - field=models.JSONField(), - ), - ] From f7f2be7c1b3d8c71b946a9c765d5245fff092d5d Mon Sep 17 00:00:00 2001 From: Naramsim Date: Thu, 30 Nov 2023 09:14:49 +0100 Subject: [PATCH 16/17] cicd: try add build image action --- .github/workflows/docker-build.yml | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 .github/workflows/docker-build.yml diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 000000000..7543049ec --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,48 @@ +name: Build Docker image + +on: + push: + branches: + - 'master' + - 'staging' + tags: + - '*.*.*' + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + # list of Docker images to use as base name for tags + images: pokeapi/pokeapi + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v3 + - name: Inspect builder + run: | + echo "Name: ${{ steps.buildx.outputs.name }}" + echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}" + echo "Status: ${{ steps.buildx.outputs.status }}" + echo "Flags: ${{ steps.buildx.outputs.flags }}" + echo "Platforms: ${{ steps.buildx.outputs.platforms }}" + - name: Build + id: docker_build + uses: docker/build-push-action@v5 + with: + context: . + file: ./Resources/docker/app/Dockerfile + push: false + platforms: local + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} From 35f4712ed3a46e004f7b0f70247d5e860dedde8c Mon Sep 17 00:00:00 2001 From: Naramsim Date: Thu, 30 Nov 2023 15:03:43 +0100 Subject: [PATCH 17/17] cicd: run on PRs --- .github/workflows/docker-build.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 7543049ec..cfdf18885 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -1,12 +1,7 @@ name: Build Docker image on: - push: - branches: - - 'master' - - 'staging' - tags: - - '*.*.*' + pull_request: jobs: docker: @@ -20,7 +15,6 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - # list of Docker images to use as base name for tags images: pokeapi/pokeapi - name: Set up QEMU uses: docker/setup-qemu-action@v3