Skip to content

Commit da6f0e9

Browse files
committed
fix: refresh stale mod polling sources
Replace the frozen BiomesOPlenty and SpongeForge feeds with current upstream sources. Remove entries with these last observed update dates: - FML: 2021-04-17 - Flan'sMod: 2021-04-15 - BuildingBricks: 2016-10-09 - Malleable: 2016-06-25 - HardModeTweaks: 2016-06-25 - TwinTails: 2016-06-25 - DulceDeLeche: 2016-06-25 - UnlimitedChiselWorks: 2021-05-22 - PonySocks: 2020-10-17 - FoamFix: 2021-05-28 - YNot: 2020-10-17
1 parent 14ac4ff commit da6f0e9

3 files changed

Lines changed: 69 additions & 88 deletions

File tree

mod_polling/mods.json

Lines changed: 7 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,12 @@
88
}
99
},
1010
"BiomesOPlenty": {
11-
"parser": "mcforge_v2",
12-
"category": "forge",
13-
"active": true,
14-
"mcforge": {
15-
"url": "https://files.minecraftforge.net/com/github/glitchfiend/biomesoplenty/BiomesOPlenty/promotions_slim.json",
16-
"slim": true
17-
}
18-
},
19-
"FML": {
20-
"parser": "mcforge_v2",
11+
"parser": "cfwidget",
2112
"category": "forge",
2213
"active": true,
23-
"mcforge": {
24-
"url": "https://files.minecraftforge.net/net/minecraftforge/fml/promotions_slim.json",
25-
"slim": true
14+
"curse": {
15+
"id": "220318",
16+
"regex": "BiomesOPlenty-(?:(?:fabric|neoforge|forge)-)?[0-9]+(?:\\.[0-9]+)+-(?P<version>[0-9]+(?:\\.[0-9]+)+)(?:-universal)?\\.jar"
2617
}
2718
},
2819
"MinecraftForge": {
@@ -688,41 +679,6 @@
688679
"regex": "(?:ChiselsBits|chisels-and-bits)-(?:(?:neo)?forge-)?(?:[0-9.]+(?:-snapshot)?-)?(?P<version>[0-9]+(?:\\.[0-9]+)+)(?:-universal)?\\.jar"
689680
}
690681
},
691-
"BuildingBricks": {
692-
"parser": "forge_json",
693-
"active": true,
694-
"forgejson": {
695-
"url": "https://raw.githubusercontent.com/hea3ven/BuildingBricks/master/media/update.json"
696-
}
697-
},
698-
"Malleable": {
699-
"parser": "forge_json",
700-
"active": true,
701-
"forgejson": {
702-
"url": "https://raw.githubusercontent.com/hea3ven/Malleable/version/media/update.json"
703-
}
704-
},
705-
"HardModeTweaks": {
706-
"parser": "forge_json",
707-
"active": true,
708-
"forgejson": {
709-
"url": "https://raw.githubusercontent.com/hea3ven/HardModeTweaks/version/media/update.json"
710-
}
711-
},
712-
"TwinTails": {
713-
"parser": "forge_json",
714-
"active": true,
715-
"forgejson": {
716-
"url": "https://raw.githubusercontent.com/hea3ven/TwinTails/version/media/update.json"
717-
}
718-
},
719-
"DulceDeLeche": {
720-
"parser": "forge_json",
721-
"active": true,
722-
"forgejson": {
723-
"url": "https://raw.githubusercontent.com/hea3ven/DulceDeLeche/version/media/update.json"
724-
}
725-
},
726682
"RebornCore": {
727683
"parser": "cfwidget",
728684
"active": true,
@@ -804,12 +760,11 @@
804760
}
805761
},
806762
"SpongeForge": {
807-
"parser": "mcforge_v2",
763+
"parser": "sponge_maven",
808764
"category": "forge",
809765
"active": true,
810-
"mcforge": {
811-
"url": "https://files.minecraftforge.net/org/spongepowered/spongeforge/promotions_slim.json",
812-
"slim": true
766+
"sponge_maven": {
767+
"url": "https://repo.spongepowered.org/repository/maven-releases/org/spongepowered/spongeforge/maven-metadata.xml"
813768
}
814769
},
815770
"AkashicTome": {
@@ -860,41 +815,13 @@
860815
"regex": "AppleSkin-(?:(?:neo)?forge|fabric)-mc.+?-(?P<version>.+)\\.jar"
861816
}
862817
},
863-
"UnlimitedChiselWorks": {
864-
"parser": "forge_json",
865-
"active": true,
866-
"forgejson": {
867-
"url": "https://asie.pl/files/minecraft/update/unlimitedchiselworks.json"
868-
}
869-
},
870-
"PonySocks": {
871-
"parser": "forge_json",
872-
"active": true,
873-
"forgejson": {
874-
"url": "https://asie.pl/files/minecraft/update/ponysocks.json"
875-
}
876-
},
877818
"Charset": {
878819
"parser": "forge_json",
879820
"active": true,
880821
"forgejson": {
881822
"url": "https://asie.pl/files/minecraft/update/charset.json"
882823
}
883824
},
884-
"FoamFix": {
885-
"parser": "forge_json",
886-
"active": true,
887-
"forgejson": {
888-
"url": "https://asie.pl/files/minecraft/update/foamfix.json"
889-
}
890-
},
891-
"YNot": {
892-
"parser": "forge_json",
893-
"active": true,
894-
"forgejson": {
895-
"url": "http://asie.pl/files/minecraft/update/ynot.json"
896-
}
897-
},
898825
"BetterWithMods": {
899826
"parser": "cfwidget",
900827
"active": true,
@@ -982,14 +909,6 @@
982909
"regex": "AoA3?-(?P<mc>[0-9]+(?:\\.[0-9]+)+)-(?P<version>[0-9]+(?:\\.[0-9]+)*(?:-.+)?)\\.jar"
983910
}
984911
},
985-
"Flan'sMod": {
986-
"parser": "cfwidget",
987-
"active": true,
988-
"curse": {
989-
"id": "317310",
990-
"regex": "Flan(?:'s Mod|\\.s\\.Mod)-[0-9]+(?:\\.[0-9]+)+-(?P<version>[0-9]+(?:\\.[0-9]+)+(?:-[a-z]+(?:\\.[0-9]+)?)?)(?:-all)?\\.jar"
991-
}
992-
},
993912
"LagGoggles": {
994913
"parser": "cfwidget",
995914
"active": true,

mod_polling/poller.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import logging
55
import re
66
import urllib.parse
7+
import xml.etree.ElementTree as ElementTree
78
from datetime import UTC, datetime
89

910
import aiohttp
@@ -344,6 +345,24 @@ async def check_html(self, mod):
344345

345346
return result
346347

348+
async def check_sponge_maven(self, mod):
349+
page = await self.fetch_page(self.mods[mod]["sponge_maven"]["url"])
350+
metadata = ElementTree.fromstring(page)
351+
versions = {}
352+
353+
for version_element in metadata.findall("./versioning/versions/version"):
354+
coordinate = version_element.text
355+
components = coordinate.split("-", 2) if coordinate else []
356+
357+
if len(components) != 3 or not all(components):
358+
raise NEMPException(f"Unexpected SpongeForge version: {coordinate!r}")
359+
360+
mc_version, _forge_version, sponge_version = components
361+
version_type = "dev" if "-" in sponge_version else "version"
362+
versions.setdefault(mc_version, {})[version_type] = sponge_version
363+
364+
return versions
365+
347366
async def check_cfwidget(self, mod):
348367
# Field name from the JSON to be used against the regex (name or display, name by default)
349368
field_name = self.mods[mod]["curse"].get("field", "name")

tests/test_poller_parsers.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,49 @@ async def test_dev_version_type(self, mod_poller):
133133
assert result["1.12.2"] == {"dev": "1.0.0"}
134134

135135

136+
class TestCheckSpongeMaven:
137+
async def test_latest_release_and_dev_per_mc_version(self, mod_poller):
138+
mod_poller.mods["SpongeForge"] = {
139+
"parser": "sponge_maven",
140+
"sponge_maven": {"url": "https://example.com/maven-metadata.xml"},
141+
}
142+
mod_poller.fetch_page = AsyncMock(
143+
return_value="""
144+
<metadata>
145+
<versioning>
146+
<versions>
147+
<version>1.12.2-2838-7.4.7</version>
148+
<version>1.12.2-2838-7.4.8-RC4138</version>
149+
<version>1.12.2-2838-7.4.8</version>
150+
<version>1.12.2-2838-7.4.9-RC4142</version>
151+
<version>1.21.1-52.0.0-12.0.0</version>
152+
<version>1.21.1-52.0.0-12.0.1-RC1</version>
153+
</versions>
154+
</versioning>
155+
</metadata>
156+
"""
157+
)
158+
159+
result = await mod_poller.check_sponge_maven("SpongeForge")
160+
161+
assert result == {
162+
"1.12.2": {"version": "7.4.8", "dev": "7.4.9-RC4142"},
163+
"1.21.1": {"version": "12.0.0", "dev": "12.0.1-RC1"},
164+
}
165+
166+
async def test_rejects_malformed_version(self, mod_poller):
167+
mod_poller.mods["SpongeForge"] = {
168+
"parser": "sponge_maven",
169+
"sponge_maven": {"url": "https://example.com/maven-metadata.xml"},
170+
}
171+
mod_poller.fetch_page = AsyncMock(
172+
return_value="<metadata><versioning><versions><version>invalid</version></versions></versioning></metadata>"
173+
)
174+
175+
with pytest.raises(NEMPException, match="Unexpected SpongeForge version"):
176+
await mod_poller.check_sponge_maven("SpongeForge")
177+
178+
136179
class TestCheckCurse:
137180
async def test_normal_release(self, mod_poller):
138181
mod_poller.fetch_json = AsyncMock(

0 commit comments

Comments
 (0)