Add 2026 tracks
This commit is contained in:
parent
de4d86a522
commit
e5cd53a1f5
5 changed files with 176 additions and 103 deletions
|
|
@ -21,17 +21,12 @@ class CategoryAdmin(admin.ModelAdmin):
|
||||||
|
|
||||||
|
|
||||||
models_to_register = [
|
models_to_register = [
|
||||||
|
models.CampKDEProposal,
|
||||||
models.DatabasesProposal,
|
models.DatabasesProposal,
|
||||||
models.DistrosProposal,
|
|
||||||
models.FOSSInDailyLifeProposal,
|
models.FOSSInDailyLifeProposal,
|
||||||
models.FOSSInEducationProposal,
|
models.LinuxKernelProposal,
|
||||||
models.LegalIssuesProposal,
|
models.OpenSourceGovernanceAndCommunitySustainabilityProposal,
|
||||||
models.LibreGraphicsProposal,
|
models.RightToRepairProposal,
|
||||||
models.LinuxKernalProposal,
|
|
||||||
models.MobileDevicesProposal,
|
|
||||||
models.P2PLocalFirstProposal,
|
|
||||||
models.ScienceOfCommunityProposal,
|
|
||||||
models.SupportingUserGroupsProposal,
|
|
||||||
models.WildCardProposal,
|
models.WildCardProposal,
|
||||||
models.XMPPProposal,
|
models.XMPPProposal,
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -61,15 +61,15 @@ class MiniconfProposalForm(ProposalForm):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class DatabasesProposalForm(MiniconfProposalForm):
|
class CampKDEProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.DatabasesProposal
|
model = models.CampKDEProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class DistrosProposalForm(MiniconfProposalForm):
|
class DatabasesProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.DistrosProposal
|
model = models.DatabasesProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -79,57 +79,21 @@ class FOSSInDailyLifeProposalForm(MiniconfProposalForm):
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class FOSSInEducationProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.FOSSInEducationProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class LegalIssuesProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.LegalIssuesProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class LibreGraphicsProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.LibreGraphicsProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class LinuxKernelProposalForm(MiniconfProposalForm):
|
class LinuxKernelProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.LinuxKernalProposal
|
model = models.LinuxKernelProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class MobileDevicesProposalForm(MiniconfProposalForm):
|
class OpenSourceGovernanceAndCommunitySustainabilityProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.MobileDevicesProposal
|
model = models.OpenSourceGovernanceAndCommunitySustainabilityProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
class P2PLocalFirstProposalForm(MiniconfProposalForm):
|
class RightToRepairProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.P2PLocalFirstProposal
|
model = models.RightToRepairProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class ScienceOfCommunityProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.ScienceOfCommunityProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class SupportingUserGroupsProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.SupportingUserGroupsProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
|
||||||
|
|
||||||
|
|
||||||
class XMPPProposalForm(MiniconfProposalForm):
|
|
||||||
class Meta:
|
|
||||||
model = models.XMPPProposal
|
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -137,3 +101,9 @@ class WildCardProposalForm(MiniconfProposalForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.WildCardProposal
|
model = models.WildCardProposal
|
||||||
fields = TALK_FORMAT_FIELDS
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
||||||
|
|
||||||
|
class XMPPProposalForm(MiniconfProposalForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.XMPPProposal
|
||||||
|
fields = TALK_FORMAT_FIELDS
|
||||||
|
|
|
||||||
138
pinaxcon/proposals/migrations/0019_auto_20260319_0640.py
Normal file
138
pinaxcon/proposals/migrations/0019_auto_20260319_0640.py
Normal file
|
|
@ -0,0 +1,138 @@
|
||||||
|
# Generated by Django 2.2.28 on 2026-03-19 06:40
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('symposion_schedule', '0009_presentation_videos'),
|
||||||
|
('symposion_speakers', '0014_auto_20260319_0640'),
|
||||||
|
('symposion_proposals', '0004_auto_20260319_0640'),
|
||||||
|
('symposion_reviews', '0001_initial'),
|
||||||
|
('proposals', '0018_mobiledevicesproposal'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='CampKDEProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Camp KDE talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='OpenSourceGovernanceAndCommunitySustainabilityProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Open Source Governance and Community Sustainability talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='RightToRepairProposal',
|
||||||
|
fields=[
|
||||||
|
('proposalbase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='symposion_proposals.ProposalBase')),
|
||||||
|
('target_audience', models.IntegerField(choices=[(4, 'Developer'), (3, 'Community'), (1, 'End User'), (2, 'Business')], help_text='Who is the target audience for your session?')),
|
||||||
|
('recording_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any recordings of presentations covered by this proposal, on YouTube under the standard YouTube licence, and on other platforms under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (<a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'> CC BY-NC-SA 4.0</a>) licence.")),
|
||||||
|
('materials_release', models.BooleanField(default=True, help_text="I allow Software Freedom Conservancy to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/4.0/'> Creative Commons Attribution-ShareAlike 4.0 International</a>")),
|
||||||
|
('primary_topic', models.IntegerField(choices=[(1, 'Linux'), (2, 'Software'), (3, 'Hardware'), (4, 'Firmware'), (5, 'System Administration / Operations'), (6, 'Security'), (7, 'Documentation'), (8, 'Community'), (9, 'Science & Data'), (10, 'Galleries, Libraries, Archives & Museums (GLAM)'), (11, 'Multimedia'), (12, 'Aerospace / UAV'), (13, 'Agriculture'), (14, 'Other')], help_text='What is the primary topic area for your session?', null=True)),
|
||||||
|
('experience_level', models.IntegerField(choices=[(1, 'Beginner'), (2, 'Intermediate'), (3, 'Advanced')], help_text='What level of experience will your session be pitched at?')),
|
||||||
|
('require_approval', models.BooleanField(default=False, help_text='Do you require further approval from your employer or institution before you can confirm your availability to present?')),
|
||||||
|
('content_warning', models.TextField(blank=True, help_text='This will be shown on the schedule to give attendees advanced warning of topics covered in the session. ', verbose_name='Content Warning')),
|
||||||
|
('content_warning_html', models.TextField(blank=True)),
|
||||||
|
('talk_format', models.IntegerField(choices=[(1, 'Lightning Talk (5-10 min)'), (2, 'Short Presentation (20-25 min)'), (3, 'Long Presentation (40-45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.')),
|
||||||
|
('ticket_acknowledgement', models.BooleanField(default=False, help_text='I understand that I will be required to purchase a conference ticket and arrange my own travel and accommodation.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Right to Repair talk proposal',
|
||||||
|
},
|
||||||
|
bases=('symposion_proposals.proposalbase',),
|
||||||
|
),
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='LinuxKernalProposal',
|
||||||
|
new_name='LinuxKernelProposal',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='fossineducationproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='legalissuesproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='libregraphicsproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='mobiledevicesproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='p2plocalfirstproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='scienceofcommunityproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='supportingusergroupsproposal',
|
||||||
|
name='proposalbase_ptr',
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='linuxkernelproposal',
|
||||||
|
options={'verbose_name': 'Linux Kernel talk proposal'},
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='DistrosProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='FOSSInEducationProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='LegalIssuesProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='LibreGraphicsProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='MobileDevicesProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='P2PLocalFirstProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='ScienceOfCommunityProposal',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='SupportingUserGroupsProposal',
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -160,66 +160,41 @@ class MiniconfSessionProposal(Proposal):
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
|
||||||
|
class CampKDEProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Camp KDE talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class DatabasesProposal(MiniconfSessionProposal):
|
class DatabasesProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Databases talk proposal"
|
verbose_name = "Databases talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class DistrosProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Distros talk proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class FOSSInDailyLifeProposal(MiniconfSessionProposal):
|
class FOSSInDailyLifeProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "FOSS in Daily Life talk proposal"
|
verbose_name = "FOSS in Daily Life talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class FOSSInEducationProposal(MiniconfSessionProposal):
|
class LinuxKernelProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "FOSS in Education talk proposal"
|
verbose_name = "Linux Kernel talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class LegalIssuesProposal(MiniconfSessionProposal):
|
class OpenSourceGovernanceAndCommunitySustainabilityProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Legal Issues talk proposal"
|
verbose_name = "Open Source Governance and Community Sustainability talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class LibreGraphicsProposal(MiniconfSessionProposal):
|
class RightToRepairProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Libre Graphics talk proposal"
|
verbose_name = "Right to Repair talk proposal"
|
||||||
|
|
||||||
|
|
||||||
class LinuxKernalProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Linux Kernal talk proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class MobileDevicesProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Mobile Devices talk proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class P2PLocalFirstProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Peer-to-Peer and Local First talk proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class ScienceOfCommunityProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Science of Community talk proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class SupportingUserGroupsProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "Supporting User Groups talk proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class XMPPProposal(MiniconfSessionProposal):
|
|
||||||
class Meta:
|
|
||||||
verbose_name = "XMPP talk proposal"
|
|
||||||
|
|
||||||
|
|
||||||
class WildCardProposal(MiniconfSessionProposal):
|
class WildCardProposal(MiniconfSessionProposal):
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Wild card talk proposal"
|
verbose_name = "Wild card talk proposal"
|
||||||
|
|
||||||
|
|
||||||
|
class XMPPProposal(MiniconfSessionProposal):
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "XMPP talk proposal"
|
||||||
|
|
|
||||||
|
|
@ -399,17 +399,12 @@ MARKDOWNIFY = {
|
||||||
|
|
||||||
CONFERENCE_ID = 5
|
CONFERENCE_ID = 5
|
||||||
PROPOSAL_FORMS = {
|
PROPOSAL_FORMS = {
|
||||||
|
"camp-kde": "pinaxcon.proposals.forms.CampKDEProposalForm",
|
||||||
"databases": "pinaxcon.proposals.forms.DatabasesProposalForm",
|
"databases": "pinaxcon.proposals.forms.DatabasesProposalForm",
|
||||||
"distros": "pinaxcon.proposals.forms.DistrosProposalForm",
|
|
||||||
"foss-in-daily-life": "pinaxcon.proposals.forms.FOSSInDailyLifeProposalForm",
|
"foss-in-daily-life": "pinaxcon.proposals.forms.FOSSInDailyLifeProposalForm",
|
||||||
"foss-in-education": "pinaxcon.proposals.forms.FOSSInEducationProposalForm",
|
|
||||||
"legal-issues": "pinaxcon.proposals.forms.LegalIssuesProposalForm",
|
|
||||||
"libre-graphics": "pinaxcon.proposals.forms.LibreGraphicsProposalForm",
|
|
||||||
"linux-kernel": "pinaxcon.proposals.forms.LinuxKernelProposalForm",
|
"linux-kernel": "pinaxcon.proposals.forms.LinuxKernelProposalForm",
|
||||||
"mobile-devices": "pinaxcon.proposals.forms.MobileDevicesProposalForm",
|
"open-source-governance-and-community-sustainability": "pinaxcon.proposals.forms.OpenSourceGovernanceAndCommunitySustainabilityProposalForm",
|
||||||
"peer-to-peer-local-first": "pinaxcon.proposals.forms.P2PLocalFirstProposalForm",
|
"right-to-repair": "pinaxcon.proposals.forms.RightToRepairProposalForm",
|
||||||
"science-of-community": "pinaxcon.proposals.forms.ScienceOfCommunityProposalForm",
|
|
||||||
"supporting-user-groups": "pinaxcon.proposals.forms.SupportingUserGroupsProposalForm",
|
|
||||||
"xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
|
"xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
|
||||||
"wild-card": "pinaxcon.proposals.forms.WildCardProposalForm",
|
"wild-card": "pinaxcon.proposals.forms.WildCardProposalForm",
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue