Skip to content

Commit

Permalink
ruleset to gamesystem
Browse files Browse the repository at this point in the history
  • Loading branch information
augustjohnson committed Oct 8, 2024
1 parent ff06e25 commit f29dca9
Show file tree
Hide file tree
Showing 44 changed files with 57 additions and 57 deletions.
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ it with the content you add.
create a new one.
- `Publisher`: The publisher of the source. Select one of the available publishers. If the publisher is not available,
create a new one.
- `GameSystem`: The ruleset the source is associated with. Select one of the available rulesets. If the ruleset is not available,
- `GameSystem`: The gamesystem the source is associated with. Select one of the available gamesystems. If the gamesystem is not available,
create a new one.
- `Author`: The author of the source. This can be a single author or a list of authors. List them in the format `Author 1, Author 2, Author 3`.
- `Published at`: The Date and Time the source was published. Select the date it was published on. The time can be set to 00:00:00.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<p align="center">
<a href="https://open5e.com">https://open5e.com</a>
<br/>
A JSON API for the D&D 5e ruleset
A JSON API for the D&D 5e gamesystem
</p>
</p>
<br />
Expand Down
6 changes: 3 additions & 3 deletions api_v2/management/commands/export.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,13 @@ def handle(self, *args, **options) -> None:
self.stdout.write(self.style.SUCCESS('Data for v1 data complete.'))

# Start V2 output.
rulesets = GameSystem.objects.all()
ruleset_path = get_filepath_by_model(
gamesystems = GameSystem.objects.all()
gamesystem_path = get_filepath_by_model(
'GameSystem',
'api_v2',
base_path=options['dir'],
format=options['format'])
write_queryset_data(ruleset_path, rulesets, format=options['format'])
write_queryset_data(gamesystem_path, gamesystems, format=options['format'])

license_path = get_filepath_by_model(
'License',
Expand Down
6 changes: 3 additions & 3 deletions api_v2/migrations/0001_initial.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ class Migration(migrations.Migration):
fields=[
('name', models.CharField(help_text='Name of the item.', max_length=100)),
('desc', models.TextField(help_text='Description of the game content item. Markdown.')),
('key', models.CharField(help_text='Unique key for the ruleset the document was published for.', max_length=100, primary_key=True, serialize=False)),
('key', models.CharField(help_text='Unique key for the gamesystem the document was published for.', max_length=100, primary_key=True, serialize=False)),
('content_prefix', models.CharField(blank=True, help_text='Short code prepended to content keys.', max_length=10)),
],
options={
Expand Down Expand Up @@ -533,8 +533,8 @@ class Migration(migrations.Migration):
),
migrations.AddField(
model_name='document',
name='ruleset',
field=models.ForeignKey(help_text="The document's game system that it was published for.", on_delete=django.db.models.deletion.CASCADE, to='api_v2.ruleset'),
name='gamesystem',
field=models.ForeignKey(help_text="The document's game system that it was published for.", on_delete=django.db.models.deletion.CASCADE, to='api_v2.gamesystem'),
),
migrations.CreateModel(
name='Size',
Expand Down
2 changes: 1 addition & 1 deletion api_v2/models/creature.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class CreatureType(HasName, HasDescription, FromDocument):

class Creature(Object, HasAbilities, HasSenses, HasLanguage, HasSpeed, FromDocument):
"""
This is the model for a Creature, per the 5e ruleset.
This is the model for a Creature, per the 5e gamesystem.
This extends the object and abilities models.
"""
Expand Down
4 changes: 2 additions & 2 deletions api_v2/models/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class Document(HasName, HasDescription):
on_delete=models.CASCADE,
help_text="Publisher which has written the game content document.")

ruleset = models.ForeignKey(
gamesystem = models.ForeignKey(
"GameSystem",
on_delete=models.CASCADE,
help_text="The document's game system that it was published for."
Expand Down Expand Up @@ -107,7 +107,7 @@ class GameSystem(HasName, HasDescription):
key = models.CharField(
primary_key=True,
max_length=100,
help_text="Unique key for the ruleset the document was published for."
help_text="Unique key for the gamesystem the document was published for."
)

content_prefix = models.CharField(
Expand Down
2 changes: 1 addition & 1 deletion api_v2/tests/test_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def test_get_root_list(self):
self.assertContains(response, 'documents', count=2)
self.assertContains(response, 'publishers', count=2)
self.assertContains(response, 'licenses', count=2)
self.assertContains(response, 'rulesets', count=2)
self.assertContains(response, 'gamesystems', count=2)
self.assertContains(response, 'items', count=4) #include itemsets
self.assertContains(response, 'itemsets', count=2)
self.assertContains(response, 'weapons', count=2)
Expand Down
4 changes: 2 additions & 2 deletions api_v2/views/ability.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact','contains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}

class AbilityViewSet(viewsets.ReadOnlyModelViewSet):
Expand All @@ -33,7 +33,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact','contains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/alignment.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact','contains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}

class AlignmentViewSet(viewsets.ReadOnlyModelViewSet):
Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/background.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class Meta:
'key': ['in', 'iexact', 'exact'],
'name': ['iexact', 'exact'],
'document__key': ['in', 'iexact', 'exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/characterclass.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact','contains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
'subclass_of': ['exact']
}

Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/condition.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact','contains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand Down
6 changes: 3 additions & 3 deletions api_v2/views/creature.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact', 'icontains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
'size': ['exact'],
'category': ['exact', 'iexact'],
'subcategory': ['exact', 'iexact'],
Expand Down Expand Up @@ -73,7 +73,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact','contains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand All @@ -94,7 +94,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact','contains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/damagetype.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact','contains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand Down
4 changes: 2 additions & 2 deletions api_v2/views/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@

class GameSystemViewSet(viewsets.ReadOnlyModelViewSet):
""""
list: API Endpoint for returning a set of rulesets.
list: API Endpoint for returning a set of gamesystems.
retrieve: API endpoint for return a particular ruleset.
retrieve: API endpoint for return a particular gamesystem.
"""
queryset = models.GameSystem.objects.all().order_by('pk')
serializer_class = serializers.GameSystemSerializer
Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact','contains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/feat.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand Down
8 changes: 4 additions & 4 deletions api_v2/views/item.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class Meta:
'requires_attunement': ['exact'],
'category': ['in', 'exact'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand Down Expand Up @@ -56,7 +56,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand Down Expand Up @@ -89,7 +89,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
'damage_dice': ['in','iexact','exact'],
'versatile_dice': ['in','iexact','exact'],
'range_reach': ['exact','lt','lte','gt','gte'],
Expand Down Expand Up @@ -127,7 +127,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
'grants_stealth_disadvantage': ['exact'],
'strength_score_required': ['exact','lt','lte','gt','gte'],
'ac_base': ['exact','lt','lte','gt','gte'],
Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/language.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
'is_exotic': ['exact'],
'is_secret': ['exact']
}
Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/race.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Meta:
'key': ['in', 'iexact', 'exact'],
'name': ['iexact', 'exact'],
'document__key': ['in', 'iexact', 'exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
'subrace_of': ['isnull'],
'subrace_of__key':['in', 'iexact', 'exact'],
}
Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/size.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Meta:
'key': ['in', 'iexact', 'exact' ],
'name': ['iexact', 'exact','contains'],
'document__key': ['in','iexact','exact'],
'document__ruleset__key': ['in','iexact','exact'],
'document__gamesystem__key': ['in','iexact','exact'],
}


Expand Down
2 changes: 1 addition & 1 deletion api_v2/views/spell.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Meta:
'key': ['in', 'iexact', 'exact'],
'name': ['iexact', 'exact', 'contains', 'icontains'],
'document__key': ['in', 'iexact', 'exact'],
'document__ruleset__key': ['in', 'iexact', 'exact'],
'document__gamesystem__key': ['in', 'iexact', 'exact'],
'classes__key': ['in', 'iexact', 'exact'],
'classes__name': ['in'],
'level': ['exact', 'range', 'gt', 'gte', 'lt', 'lte'],
Expand Down
4 changes: 2 additions & 2 deletions data/v2/GameSystem.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[
{
"model": "api_v2.ruleset",
"model": "api_v2.gamesystem",
"pk": "o5e",
"fields": {
"name": "5th Edition",
Expand All @@ -9,7 +9,7 @@
}
},
{
"model": "api_v2.ruleset",
"model": "api_v2.gamesystem",
"pk": "a5e",
"fields": {
"name": "Advanced 5th Edition",
Expand Down
2 changes: 1 addition & 1 deletion data/v2/en-publishing/a5e-ag/Document.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Adventurer's Guide",
"desc": "In this guide to Level Up, the advanced roleplaying game, you will find everything you need to play. Create diverse and unique heroes, engage in epic combat with villainous foes, cast powerful spells, and build mighty strongholds!",
"publisher": "en-publishing",
"ruleset": "a5e",
"gamesystem": "a5e",
"author": "EN Publishing",
"published_at": "2021-11-01T00:00:00",
"permalink": "https://a5esrd.com/a5esrd",
Expand Down
2 changes: 1 addition & 1 deletion data/v2/en-publishing/a5e-ddg/Document.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Dungeon Delver’s Guide",
"desc": "The Dungeon Delver's Guide is a resource for Narrators that want to create compelling and deadly mazes and lairs, and adventurers who want to venture below and return to the surface alive.",
"publisher": "en-publishing",
"ruleset": "a5e",
"gamesystem": "a5e",
"author": "EN Publishing",
"published_at": "2023-10-03T00:00:00",
"permalink": "https://a5esrd.com/a5esrd",
Expand Down
2 changes: 1 addition & 1 deletion data/v2/en-publishing/a5e-gpg/Document.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Gate Pass Gazette",
"desc": "The Gate Pass Gazette is the official monthly magazine for Level Up: Advanced 5th Edition. You can subscribe to it on Patreon. The content below includes mechanical elements of the magazine, but not the full text or context of the articles.\r\n\r\nThe first issue (which we called Issue #0) of the Gate Pass Gazette included the artificer class, lycanthropy rules, the construct heritage, and the jabberwock monster. We release an issue every month, including new heritages, archetypes, monsters, magic items, and much much more.",
"publisher": "en-publishing",
"ruleset": "a5e",
"gamesystem": "a5e",
"author": "EN Publishing",
"published_at": "2022-01-01T00:00:00",
"permalink": "https://a5esrd.com/a5esrd",
Expand Down
2 changes: 1 addition & 1 deletion data/v2/en-publishing/mmenag/Document.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Monstrous Menagerie",
"desc": "The Monstrous Menagerie provides nearly 600 monsters, variants, monster templates, and hordes for your Level Up: Advanced 5th Edition game. Populate your game world with classic monsters ranging from the lowly stirge to the terrifying tarrasque, along with new horrors like the khalkos and the phase monster. Challenge even the mightiest adventurers with elite monsters like great wyrm dragons and the Medusa Queen. Use simple templates to create new monsters like zombie sea serpents and merfolk alchemists. Overwhelm opposition with stat blocks representing hordes of guards, skeletons, or demons.",
"publisher": "en-publishing",
"ruleset": "a5e",
"gamesystem": "a5e",
"author": "Paul Hughes",
"published_at": "2021-12-12T00:00:00",
"permalink": "https://enpublishingrpg.com/collections/level-up-advanced-5th-edition-a5e/products/level-up-monstrous-menagerie-a5e",
Expand Down
2 changes: 1 addition & 1 deletion data/v2/green-ronin/tdcs/Document.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Tal'dorei Campaign Setting",
"desc": "Critical Role: Tal'Dorei Campaign Setting is a sourcebook that details the continent of Tal'Dorei from the Critical Role campaign setting for the 5th edition of the Dungeons & Dragons fantasy role-playing game. It was published by Green Ronin Publishing and released on August 17, 2017.",
"publisher": "green-ronin",
"ruleset": "o5e",
"gamesystem": "o5e",
"author": "Matthew Mercer, James Haeck",
"published_at": "2017-08-17T00:00:00",
"permalink": "https://en.wikipedia.org/wiki/Critical_Role%3A_Tal'Dorei_Campaign_Setting",
Expand Down
2 changes: 1 addition & 1 deletion data/v2/kobold-press/bfrd/Document.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Black Flag SRD",
"desc": "Black Flag Roleplaying Reference Document v0.2",
"publisher": "kobold-press",
"ruleset": "o5e",
"gamesystem": "o5e",
"author": "Open Design LLC d/b/a Kobold Press",
"published_at": "2023-10-16T00:00:00",
"permalink": "https://koboldpress.com/black-flag-reference-document/",
Expand Down
2 changes: 1 addition & 1 deletion data/v2/kobold-press/ccdx/Document.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Creature Codex",
"desc": "Whether you need scuttling dungeon denizens, alien horrors, or sentient avatars of the World Tree, the Creature Codex has you covered! Nearly 400 new foes for your 5th Edition game—everything from acid ants and grave behemoths to void giants and zombie lords.\r\n\r\nThe 424 PAGES OF THE CREATURE CODEX INCLUDE:\r\n\r\n A dozen new demons and five new angels\r\n Wasteland dragons and dinosaurs\r\n All-new golems, including the altar flame golem, doom golem, and keg golem\r\n Elemental lords and animal lords to challenge powerful parties\r\n Chieftains and other leaders for ratfolk, centaurs, goblins, trollkin, and more\r\n New undead, including a heirophant lich to menace lower-level characters\r\n\r\n…and much more! Use them in your favorite published setting, or populate the dungeons in a world of your own creation. Pick up Creature Codex and surprise your players with monsters they won’t be expecting!\r\n\r\nCOMPATIBLE WITH THE 5TH EDITION OF THE WORLD’S FIRST ROLEPLAYING GAME!",
"publisher": "kobold-press",
"ruleset": "o5e",
"gamesystem": "o5e",
"author": "Wolfgang Baur, Dan Dillon, Richard Green, James Haeck, Chris Harris, Jeremy Hochhalter, James Introcaso, Chris Lockey, Shawn Merwin, and Jon Sawatsky",
"published_at": "2018-06-01T00:00:00",
"permalink": "https://koboldpress.com/kpstore/product/creature-codex-for-5th-edition-dnd/",
Expand Down
2 changes: 1 addition & 1 deletion data/v2/kobold-press/deepm/Document.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Deep Magic for 5th Edition",
"desc": "*Command 700 New Spells for 5th Edition!*\r\n\r\nNo matter how you slice it, magic is at the heart of fantasy—and nothing says magic like a massive tome of spells.\r\n\r\nThis tome collects, updates, tweaks, and expands spells from years of the Deep Magic for Fifth Edition series—more than 700 new and revised spells. And it adds a lot more:\r\n\r\n* 19 divine domains from Beer to Mountain and Speed to Winter;\r\n* 13 new wizard specialties, such as the elementalist and the timekeeper;\r\n* 6 new sorcerous origins, including the Aristocrat and the Farseer;\r\n* 3 otherworldly patrons for warlocks, including the Sibyl;\r\n* expanded treatments of familiars and other wizardly servants;\r\n* and much more!\r\n\r\nThis 356-page tome is not just for wizards, warlocks, and sorcerers. Deep Magic also expands the horizons of what’s possible for bards, clerics, druids, and even rangers and paladins. It offers something new for every spellcasting class!\r\n\r\nWith these new spells and options, your characters (or your villains) can become masters of winter magic, chaos magic, or shadow magic. Seek out hidden colleges and academies of lost lore. Learn new runes, hieroglyphs, and cantrips to break down the walls of reality, or just bend them a bit.\r\n\r\nDeep Magic contains nothing but magic from start to finish!",
"publisher": "kobold-press",
"ruleset": "o5e",
"gamesystem": "o5e",
"author": "Dan Dillon, Chris Harris, and Jeff Lee",
"published_at": "2020-02-13T00:00:00",
"permalink": "https://koboldpress.com/kpstore/product/deep-magic-for-5th-edition-hardcover/",
Expand Down
2 changes: 1 addition & 1 deletion data/v2/kobold-press/deepmx/Document.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Deep Magic Extended",
"desc": "?",
"publisher": "kobold-press",
"ruleset": "o5e",
"gamesystem": "o5e",
"author": "Not sure.",
"published_at": "2024-02-14T19:02:02",
"permalink": "https://koboldpress.com/deepmagic",
Expand Down
2 changes: 1 addition & 1 deletion data/v2/kobold-press/kp/Document.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Kobold Press Compilation",
"desc": "Kobold Press Community Use Policy",
"publisher": "kobold-press",
"ruleset": "o5e",
"gamesystem": "o5e",
"author": "Various",
"published_at": "2024-02-14T19:53:41",
"permalink": "https://koboldpress.com/",
Expand Down
Loading

0 comments on commit f29dca9

Please sign in to comment.