Skip to content

Commit

Permalink
#938 Rework user > org > [group, event] factories with texts
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewtavis committed Sep 21, 2024
1 parent 5e021af commit 6bfe0de
Show file tree
Hide file tree
Showing 14 changed files with 97 additions and 72 deletions.
2 changes: 1 addition & 1 deletion backend/authentication/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,10 @@ class UserAdmin(BaseUserAdmin):
{
"fields": [
"username",
"name",
"description",
"is_private",
"is_high_risk",
"verfied",
]
},
),
Expand Down
91 changes: 73 additions & 18 deletions backend/backend/management/commands/populate_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,14 @@

from authentication.factories import UserFactory
from authentication.models import UserModel
from entities.factories import GroupFactory, OrganizationFactory
from entities.factories import (
GroupFactory,
GroupTextFactory,
OrganizationFactory,
OrganizationTextFactory,
)
from entities.models import Group, Organization
from events.factories import EventFactory
from events.factories import EventFactory, EventTextFactory
from events.models import Event


Expand All @@ -18,21 +23,20 @@ class Options(TypedDict):
events: int


# ATTN: We're not actually putting texts into the DB.
class Command(BaseCommand):
help = "Populate the database with dummy data"

def add_arguments(self, parser: ArgumentParser) -> None:
parser.add_argument("--users", type=int, default=10)
parser.add_argument("--orgs", type=int, default=10)
parser.add_argument("--groups", type=int, default=10)
parser.add_argument("--events", type=int, default=10)
parser.add_argument("--opu", type=int, default=1) # orgs per user
parser.add_argument("--gpo", type=int, default=1) # groups per org
parser.add_argument("--epo", type=int, default=1) # events per org

def handle(self, *args: str, **options: Unpack[Options]) -> None:
number_of_users = options.get("users")
number_of_orgs = options.get("orgs")
number_of_groups = options.get("groups")
number_of_events = options.get("events")
n_users = options.get("users")
n_orgs_per_user = options.get("opu")
n_groups_per_org = options.get("gpo")
n_events_per_org = options.get("epo")

# Clear all tables before creating new data.
UserModel.objects.exclude(username="admin").delete()
Expand All @@ -41,18 +45,69 @@ def handle(self, *args: str, **options: Unpack[Options]) -> None:
Event.objects.all().delete()

try:
UserFactory.create_batch(size=number_of_users)
OrganizationFactory.create_batch(size=number_of_orgs)
GroupFactory.create_batch(size=number_of_groups)
EventFactory.create_batch(size=number_of_events)
users = [
UserFactory(username=f"activist_{i}", name=f"Activist {i}")
for i in range(n_users)
]

for i, user in enumerate(users):
user_location = "Berlin"
user_topic = "Climate"

for _ in range(n_orgs_per_user):
user_org = OrganizationFactory(
name=f"{user_location} {user_topic} Organization {i}",
created_by=user,
)

OrganizationTextFactory(
org_id=user_org,
iso="en",
primary=True,
description="This is an org",
get_involved="Get involved!",
donate_prompt="Donate!",
)

for g in range(n_groups_per_org):
user_org_group = GroupFactory(
org_id=user_org,
name=f"{user_location} {user_topic} Group {i}-{g}",
created_by=user,
)

GroupTextFactory(
group_id=user_org_group,
iso="en",
primary=True,
description="This is a group",
get_involved="Get involved!",
donate_prompt="Donate!",
)

for e in range(n_events_per_org):
user_org_event = EventFactory(
name=f"{user_location} {user_topic} Event {i}-{e}",
created_by=user,
)

EventTextFactory(
event_id=user_org_event,
iso="en",
primary=True,
description="This is a group",
get_involved="Get involved!",
)

self.stdout.write(
self.style.ERROR(
f"Number of users created: {number_of_users}\n"
f"Number of organizations created: {number_of_orgs}\n"
f"Number of groups created: {number_of_groups}\n"
f"Number of events created: {number_of_events}\n"
f"Number of users created: {n_users}\n"
f"Number of organizations created: {n_users * n_orgs_per_user}\n"
f"Number of groups created: {n_users * n_orgs_per_user * n_groups_per_org}\n"
f"Number of events created: {n_users * n_orgs_per_user * n_events_per_org}\n"
)
)

except Exception as error:
self.stdout.write(
self.style.ERROR(
Expand Down
2 changes: 0 additions & 2 deletions backend/content/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from .models import (
Faq,
Image,
IsoCodeMap,
Resource,
ResourceTopic,
Task,
Expand All @@ -15,7 +14,6 @@

admin.site.register(Faq)
admin.site.register(Image)
admin.site.register(IsoCodeMap)
admin.site.register(Resource)
admin.site.register(Task)
admin.site.register(Topic)
Expand Down
4 changes: 0 additions & 4 deletions backend/content/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,6 @@ def __str__(self) -> str:
return f"{self.id}"


class IsoCodeMap(models.Model):
code = models.CharField(max_length=2)


class Resource(models.Model):
id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
name = models.CharField(max_length=255)
Expand Down
7 changes: 0 additions & 7 deletions backend/content/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
DiscussionTag,
Faq,
Image,
IsoCodeMap,
Resource,
ResourceTag,
ResourceTopic,
Expand Down Expand Up @@ -80,12 +79,6 @@ def validate(self, data: Dict[str, Union[str, int]]) -> Dict[str, Union[str, int
return data


class IsoCodeMapSerializer(serializers.ModelSerializer[IsoCodeMap]):
class Meta:
model = IsoCodeMap
fields = "__all__"


class ResourceSerializer(serializers.ModelSerializer[Resource]):
class Meta:
model = Resource
Expand Down
1 change: 0 additions & 1 deletion backend/content/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,4 @@

urlpatterns = [
path("", include(router.urls)),
path("iso_code_map/", views.IsoCodeMapListAPIView.as_view(), name="iso_code_map"),
]
13 changes: 0 additions & 13 deletions backend/content/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# mypy: disable-error-code="override"
from django.db.models import Q
from rest_framework import status, viewsets
from rest_framework.generics import ListAPIView
from rest_framework.permissions import IsAuthenticatedOrReadOnly
from rest_framework.request import Request
from rest_framework.response import Response
Expand All @@ -14,7 +13,6 @@
DiscussionEntry,
Faq,
Image,
IsoCodeMap,
Resource,
ResourceTopic,
Task,
Expand All @@ -26,7 +24,6 @@
DiscussionSerializer,
FaqSerializer,
ImageSerializer,
IsoCodeMapSerializer,
ResourceSerializer,
ResourceTopicSerializer,
TaskSerializer,
Expand Down Expand Up @@ -129,16 +126,6 @@ class ImageViewSet(viewsets.ModelViewSet[Image]):
pagination_class = CustomPagination


class IsoCodeMapListAPIView(ListAPIView[IsoCodeMap]):
queryset = IsoCodeMap.objects.all()
serializer_class = IsoCodeMapSerializer

def get(self, request: Request) -> Response:
queryset = self.get_queryset()
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)


class ResourceViewSet(viewsets.ModelViewSet[Resource]):
queryset = Resource.objects.all()
serializer_class = ResourceSerializer
Expand Down
10 changes: 1 addition & 9 deletions backend/entities/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,6 @@ class Meta:
name = factory.Faker("word")
tagline = factory.Faker("word")
social_links = ["https://www.instagram.com/activist_org/"]
# Note: Version that accesses the database so we don't create new each time.
# created_by = factory.LazyAttribute(
# lambda x: (
# UserModel.objects.exclude(username="admin").first()
# if UserModel.objects.exclude(username="admin").exists()
# else factory.SubFactory("authentication.factories.UserFactory")
# )
# )
created_by = factory.SubFactory("authentication.factories.UserFactory")
terms_checked = factory.Faker("boolean")
status = factory.SubFactory("entities.factories.StatusTypeFactory", name="Active")
Expand Down Expand Up @@ -196,7 +188,7 @@ class Meta:
model = OrganizationText

org_id = factory.SubFactory(OrganizationFactory)
iso = factory.Faker("word")
iso = "en"
primary = factory.Faker("boolean")
description = factory.Faker("text")
get_involved = factory.Faker("text")
Expand Down
4 changes: 2 additions & 2 deletions backend/entities/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ def __str__(self) -> str:

class GroupText(models.Model):
group_id = models.ForeignKey(Group, on_delete=models.CASCADE)
iso = models.ForeignKey("content.IsoCodeMap", on_delete=models.CASCADE)
iso = models.CharField(max_length=2)
primary = models.BooleanField(default=False)
description = models.TextField(max_length=500)
get_involved = models.TextField(max_length=500, blank=True)
Expand Down Expand Up @@ -216,7 +216,7 @@ def __str__(self) -> str:

class OrganizationText(models.Model):
org_id = models.ForeignKey(Organization, on_delete=models.CASCADE)
iso = models.ForeignKey("content.IsoCodeMap", on_delete=models.CASCADE, null=True)
iso = models.CharField(max_length=2)
primary = models.BooleanField(default=False)
description = models.TextField(max_length=2500)
get_involved = models.TextField(max_length=500, blank=True)
Expand Down
14 changes: 13 additions & 1 deletion backend/events/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
EventResource,
EventRole,
EventTask,
EventText,
EventTopic,
Format,
Role,
Expand All @@ -23,7 +24,7 @@ class EventFactory(factory.django.DjangoModelFactory):
class Meta:
model = Event

name = factory.Faker("name")
name = factory.Faker("word")
tagline = factory.Faker("word")
type = factory.Faker("word")
online_location_link = factory.Faker("url")
Expand Down Expand Up @@ -134,6 +135,17 @@ class Meta:
task_id = factory.SubFactory("content.factories.TaskFactory")


class EventTextFactory(factory.django.DjangoModelFactory):
class Meta:
model = EventText

event_id = factory.SubFactory(EventFactory)
iso = factory.Faker("word")
primary = factory.Faker("boolean")
description = factory.Faker("text")
get_involved = factory.Faker("text")


class EventTopicFactory(factory.django.DjangoModelFactory):
class Meta:
model = EventTopic
Expand Down
4 changes: 1 addition & 3 deletions backend/events/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,7 @@ def __str__(self) -> str:

class EventText(models.Model):
event_id = models.ForeignKey(Event, on_delete=models.CASCADE)
iso = models.ForeignKey(
"content.ISOCodeMap", on_delete=models.CASCADE, related_name="iso_code"
)
iso = models.CharField(max_length=2)
primary = models.BooleanField()
description = models.TextField(max_length=500)
get_involved = models.TextField(max_length=500, blank=True)
Expand Down
9 changes: 0 additions & 9 deletions backend/fixtures/iso_code_map.json

This file was deleted.

3 changes: 1 addition & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ services:
python manage.py migrate &&
python manage.py loaddata fixtures/superuser.json &&
python manage.py loaddata fixtures/status_types.json &&
python manage.py loaddata fixtures/iso_code_map.json &&
python manage.py populate_db --users 10 --orgs 10 --groups 10 --events 10 &&
python manage.py populate_db --users 10 --opu 1 --gpo 1 --epo 1 &&
python manage.py runserver 0.0.0.0:${BACKEND_PORT}"
ports:
- "${BACKEND_PORT}:${BACKEND_PORT}"
Expand Down
5 changes: 5 additions & 0 deletions frontend/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -10569,6 +10569,11 @@ zip-stream@^6.0.1:
compress-commons "^6.0.2"
readable-stream "^4.0.0"

zod@3.23.8:
version "3.23.8"
resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d"
integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==

zwitch@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7"
Expand Down

0 comments on commit 6bfe0de

Please sign in to comment.