Skip to content

Commit 39e4f1c

Browse files
authored
Merge pull request #1039 from thunderstore-io/autolist-default-packages
Add autolist_package_ids to SchemaCommunity
2 parents d363679 + e3d3f8e commit 39e4f1c

File tree

5 files changed

+63
-2
lines changed

5 files changed

+63
-2
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.1.7 on 2024-06-05 18:40
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("community", "0028_add_cover_image_fields"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="packagelisting",
15+
name="is_auto_imported",
16+
field=models.BooleanField(default=False),
17+
),
18+
]

django/thunderstore/community/models/package_listing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class PackageListing(TimestampMixin, AdminLinkMixin, models.Model):
8585
blank=True,
8686
)
8787
has_nsfw_content = models.BooleanField(default=False)
88+
is_auto_imported = models.BooleanField(default=False)
8889

8990
class Meta:
9091
constraints = [

django/thunderstore/schema_import/schema.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class SchemaCommunity(BaseModel):
1919
sections: Dict[str, SchemaThunderstoreSection]
2020
discord_url: Optional[str] = Field(alias="discordUrl")
2121
wiki_url: Optional[str] = Field(alias="wikiUrl")
22+
autolist_package_ids: Optional[List[str]] = Field(alias="autolistPackageIds")
2223

2324

2425
class SchemaGameMeta(BaseModel):

django/thunderstore/schema_import/sync.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55
from thunderstore.community.models import (
66
Community,
77
PackageCategory,
8+
PackageListing,
89
PackageListingSection,
910
)
1011
from thunderstore.core.utils import ExceptionLogger
1112
from thunderstore.repository.models import PackageInstaller
13+
from thunderstore.repository.package_reference import PackageReference
1214
from thunderstore.schema_import.schema import (
1315
Schema,
1416
SchemaCommunity,
@@ -46,6 +48,17 @@ def import_community(identifier: str, schema: SchemaCommunity):
4648
community.wiki_url = schema.wiki_url
4749
community.save()
4850

51+
if schema.autolist_package_ids:
52+
for package_id in schema.autolist_package_ids:
53+
with ExceptionLogger(continue_on_error=True):
54+
package = PackageReference.parse(package_id).package
55+
if package.get_package_listing(community) is None:
56+
PackageListing.objects.create(
57+
package=package,
58+
community=community,
59+
is_auto_imported=True,
60+
)
61+
4962
for k, v in schema.categories.items():
5063
if not (
5164
category := PackageCategory.objects.filter(

django/thunderstore/schema_import/tests/test_sync.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@
55
PackageCategory,
66
PackageListingSection,
77
)
8-
from thunderstore.repository.models import PackageInstaller
9-
from thunderstore.schema_import.schema import Schema, SchemaPackageInstaller
8+
from thunderstore.community.models.package_listing import PackageListing
9+
from thunderstore.repository.models import Package, PackageInstaller
10+
from thunderstore.schema_import.schema import (
11+
Schema,
12+
SchemaCommunity,
13+
SchemaPackageInstaller,
14+
)
1015
from thunderstore.schema_import.sync import (
1116
get_slogan_from_display_name,
17+
import_schema_communities,
1218
import_schema_package_installers,
1319
)
1420
from thunderstore.schema_import.tasks import sync_ecosystem_schema
@@ -30,12 +36,14 @@ def test_schema_sync():
3036
assert Community.objects.count() == 0
3137
assert PackageCategory.objects.count() == 0
3238
assert PackageListingSection.objects.count() == 0
39+
assert PackageListing.objects.filter(is_auto_imported=True).count() == 0
3340

3441
sync_ecosystem_schema.delay()
3542

3643
com_count = Community.objects.count()
3744
cat_count = PackageCategory.objects.count()
3845
sec_count = PackageListingSection.objects.count()
46+
3947
assert com_count > 0
4048
assert cat_count > 0
4149
assert sec_count > 0
@@ -65,3 +73,23 @@ def test_import_schema_installers():
6573
import_schema_package_installers(schema)
6674
assert PackageInstaller.objects.count() == 1
6775
assert PackageInstaller.objects.first().identifier == "foo"
76+
77+
78+
@pytest.mark.django_db
79+
def test_import_autolisted_packages(active_package: Package):
80+
schema = Schema(
81+
schemaVersion="0.0.1",
82+
games=dict(),
83+
communities={
84+
"test": SchemaCommunity(
85+
displayName="Test community",
86+
categories=dict(),
87+
sections=dict(),
88+
autolistPackageIds=[active_package.full_package_name],
89+
),
90+
},
91+
packageInstallers=dict(),
92+
)
93+
assert PackageListing.objects.filter(is_auto_imported=True).count() == 0
94+
import_schema_communities(schema)
95+
assert PackageListing.objects.filter(is_auto_imported=True).count() == 1

0 commit comments

Comments
 (0)