Compare commits
103 commits
Author | SHA1 | Date | |
---|---|---|---|
5bf63fe046 | |||
646735252f | |||
711fde5a2f | |||
28c73b4295 | |||
64a94cc807 | |||
4a98404226 | |||
1372f4d27b | |||
9815e1131d | |||
ba1def7e23 | |||
a35192b26a | |||
6557e60bfc | |||
e58a1891d5 | |||
53633bb1d0 | |||
239e9e94ed | |||
865d57c779 | |||
5f1fc54d6e | |||
eb91004c3f | |||
dc966ce335 | |||
b0ec7ce04e | |||
a9b9202a8a | |||
8bc0dfffc2 | |||
e9ab231173 | |||
503b9b164e | |||
97beb8b131 | |||
bde37005bd | |||
9d7af1ccad | |||
b5022e8b42 | |||
c084c93192 | |||
9e497ee27d | |||
9408a5c7bf | |||
9135d60067 | |||
8f2fb70094 | |||
1fccc11354 | |||
c56b15f279 | |||
50cfcb7683 | |||
d11767cbf4 | |||
87987e9ce9 | |||
87fdbd8af1 | |||
9cb0c6f676 | |||
3f31086dd8 | |||
52ab8469f7 | |||
f2b861c7a7 | |||
a77e615e0d | |||
41f9a0efde | |||
7dd8a0ad2d | |||
6af1e594ad | |||
20d7b43efc | |||
9a618bf54f | |||
354825a85b | |||
b195a34723 | |||
6ddb7b5675 | |||
f6841d5135 | |||
550f3f4122 | |||
0d6b919f47 | |||
3e21ee85d0 | |||
743a4f678a | |||
3a51efd597 | |||
e6533e541d | |||
2680b25f2c | |||
c15c0bd782 | |||
37a7a41e2a | |||
34509d23eb | |||
8020737d7a | |||
cb12d08b95 | |||
1d0d5e1d10 | |||
fbefff60a6 | |||
c56a805141 | |||
8d6519734c | |||
bf9735eae3 | |||
8e2f37d607 | |||
a94fc3a9db | |||
759ddb78df | |||
43db436130 | |||
3f6dbc09c1 | |||
33305d27ac | |||
bc5849dbfc | |||
74cda53eba | |||
ccc22f6875 | |||
94de58b319 | |||
39cbb7cb59 | |||
827a482d32 | |||
8173497769 | |||
2848db468e | |||
31e11c5350 | |||
064353d6ff | |||
71805cc66e | |||
ceda6dce0a | |||
fc88c31d82 | |||
bfaa7d9115 | |||
c01dad66f7 | |||
dd23015270 | |||
64b4d93470 | |||
ecfa3c1fce | |||
83356e5ac6 | |||
f16b33cf17 | |||
2a3944baa7 | |||
830da54d29 | |||
de0100c93c | |||
5d2cff674d | |||
4cf869c9fa | |||
0c3e579b8d | |||
95c7e803e7 | |||
afdc8a8776 |
5
.dir-locals.el
Normal file
|
@ -0,0 +1,5 @@
|
|||
;;; Directory Local Variables -*- no-byte-compile: t -*-
|
||||
;;; For more information see (info "(emacs) Directory Variables")
|
||||
|
||||
((web-mode . ((web-mode-css-indent-offset . 4)
|
||||
(web-mode-markup-indent-offset . 2))))
|
16
README.rst
|
@ -125,7 +125,7 @@ Base Data
|
|||
On initial creation and whenever you reset the database you must reload the
|
||||
basic data. This data is stored in the /fixtures directory. You can load this with:
|
||||
|
||||
``./manage.py loaddata ./fixtures/{conference,proposal_base,sites,sitetree}.json``
|
||||
``./manage.py loaddata ./fixtures/{conference,sites,sitetree,flatpages}.json``
|
||||
|
||||
And to load the base admin users:
|
||||
|
||||
|
@ -172,3 +172,17 @@ All commits to any dev/* branch create a dev review app; for instance, a commit
|
|||
|
||||
Manual deployments (eg, to staging and production) can be initiated from a pipeline's page - eg https://gitlab.com/laconfdev/symposion_app/pipelines/24003091 - after prior stages pass.
|
||||
|
||||
|
||||
|
||||
Traps for new players
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
1. Terms and Conditions during ticket purchase workflow are implemented by having a product category called something like "Terms & Conditions" with a product called "I accept". See `settings.TERMS_PRODUCT_CATEGORY` and `pinaxcon/registrasion/management/commands/populate_inventory.py`.
|
||||
|
||||
|
||||
Issues
|
||||
~~~~~~
|
||||
|
||||
Couldn't upgrade to Django 3.2 due to `python_2_unicode_compatible` in `pinax-stripe==4.4.0`. Trialed `pinax-stripe-light==5.0.0`, which seems to be it's successor, but it's missing the `pinax.stripe.models.Charge` model.
|
||||
|
||||
Got `AssertionError: database connection isn't set to UTC` in development. Fixed by `pip install psycopg2==2.8.6`.
|
||||
|
|
148
deploy/basics.yml
Normal file
|
@ -0,0 +1,148 @@
|
|||
# Basic Ansible playbook to set up security essentials: Nginx dhparams, fail2ban,
|
||||
# unattended-upgrades, history logging, firewall, no SSH keys and Postfix
|
||||
# relay/rewriting/aliases.
|
||||
#
|
||||
# Run with:
|
||||
# ANSIBLE_STDOUT_CALLBACK=debug ansible-playbook deploy/basics.yml -i deploy/inventory.yml --verbose
|
||||
- hosts: web
|
||||
become: true
|
||||
vars:
|
||||
ansible_ssh_pipelining: true
|
||||
tasks:
|
||||
- name: Generate dhparams file for HTTP2
|
||||
ansible.builtin.command:
|
||||
cmd: openssl dhparam -out /etc/nginx/dhparam.pem 2048
|
||||
creates: /etc/nginx/dhparam.pem
|
||||
|
||||
- name: Install fail2ban
|
||||
apt:
|
||||
pkg: fail2ban
|
||||
|
||||
- name: Install unattended-upgrades
|
||||
apt:
|
||||
pkg: unattended-upgrades
|
||||
|
||||
- name: Configure unattended upgrades overrides
|
||||
# See defaults in 50unattended-upgrades.
|
||||
copy:
|
||||
dest: /etc/apt/apt.conf.d/20auto-upgrades
|
||||
content: |
|
||||
APT::Periodic::Update-Package-Lists "1";
|
||||
APT::Periodic::Unattended-Upgrade "1";
|
||||
Unattended-Upgrade::Automatic-Reboot "true";
|
||||
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
|
||||
Unattended-Upgrade::Mail "root";
|
||||
|
||||
- name: Add extensive history logging
|
||||
blockinfile:
|
||||
path: /etc/bash.bashrc
|
||||
block: |
|
||||
# Write to history file immediately (rather than only when shell is
|
||||
# closed). For setting history length see HISTSIZE and HISTFILESIZE in
|
||||
# bash(1).
|
||||
shopt -s histappend
|
||||
PROMPT_COMMAND='history -a'
|
||||
HISTSIZE=1000000
|
||||
HISTFILESIZE=1000000
|
||||
insertafter: EOF
|
||||
|
||||
- name: Install `netfilter-persistent` && `iptables-persistent` packages
|
||||
apt:
|
||||
pkg:
|
||||
- iptables-persistent
|
||||
- netfilter-persistent
|
||||
|
||||
- name: Flush existing firewall rules
|
||||
iptables:
|
||||
flush: true
|
||||
|
||||
- name: Firewall rule - allow all loopback traffic
|
||||
iptables:
|
||||
action: append
|
||||
chain: INPUT
|
||||
in_interface: lo
|
||||
jump: ACCEPT
|
||||
|
||||
- name: Firewall rule - allow established connections
|
||||
iptables:
|
||||
chain: INPUT
|
||||
ctstate: ESTABLISHED,RELATED
|
||||
jump: ACCEPT
|
||||
|
||||
- name: Firewall rule - allow port ping traffic
|
||||
iptables:
|
||||
chain: INPUT
|
||||
jump: ACCEPT
|
||||
protocol: icmp
|
||||
|
||||
- name: Firewall rule - allow port 22/SSH traffic
|
||||
iptables:
|
||||
chain: INPUT
|
||||
destination_port: '22'
|
||||
jump: ACCEPT
|
||||
protocol: tcp
|
||||
|
||||
- name: Firewall rule - allow port 80/HTTP traffic
|
||||
iptables:
|
||||
chain: INPUT
|
||||
destination_port: '80'
|
||||
jump: ACCEPT
|
||||
protocol: tcp
|
||||
|
||||
- name: Firewall rule - allow port 443/HTTPS traffic
|
||||
iptables:
|
||||
chain: INPUT
|
||||
destination_port: '443'
|
||||
jump: ACCEPT
|
||||
protocol: tcp
|
||||
|
||||
- name: Firewall rule - drop any traffic without rule
|
||||
iptables:
|
||||
chain: INPUT
|
||||
jump: DROP
|
||||
|
||||
- name: Disable SSH password authentication
|
||||
lineinfile:
|
||||
path: /etc/ssh/sshd_config
|
||||
line: 'PasswordAuthentication no'
|
||||
regexp: 'PasswordAuthentication '
|
||||
|
||||
|
||||
# Postfix
|
||||
- name: Postfix
|
||||
apt:
|
||||
pkg:
|
||||
- postfix
|
||||
- mailutils
|
||||
|
||||
## Commented because you only want this on first run ever.
|
||||
# - name: Add file for SMTP credentials
|
||||
# copy:
|
||||
# dest: /etc/postfix/sasl_passwd
|
||||
# content: |-
|
||||
# # After updating, run `sudo postmap hash:/etc/postfix/sasl_passwd`.
|
||||
# [mail.sfconservancy.org]:587 conference@sfconservancy.org:PASSWORD
|
||||
|
||||
- name: Configure Postfix envelope rewriting
|
||||
copy:
|
||||
dest: /etc/postfix/canonical
|
||||
content: |-
|
||||
/./ conference@sfconservancy.org
|
||||
|
||||
- name: Configure Postfix From header rewriting
|
||||
copy:
|
||||
dest: /etc/postfix/header_checks
|
||||
content: |-
|
||||
/^From:.*/ REPLACE From: conference@sfconservancy.org
|
||||
|
||||
- name: Configure Postfix for relaying
|
||||
copy:
|
||||
src: postfix/main.cf
|
||||
dest: /etc/postfix/main.cf
|
||||
|
||||
- name: Alias mail to root
|
||||
copy:
|
||||
dest: /etc/aliases
|
||||
content: |-
|
||||
postmaster: root
|
||||
root: sysadmin@sfconservancy.org, sysadmin@sturm.com.au
|
17
deploy/cron/cron.daily
Normal file
|
@ -0,0 +1,17 @@
|
|||
#!/bin/bash
|
||||
|
||||
export DJANGO_SETTINGS_MODULE={{ env.settings }}
|
||||
set -a
|
||||
source {{ env.project_dir }}/env
|
||||
|
||||
# PYTHONPATH variable is not preserved by sudo.
|
||||
|
||||
# Clear out expired Django sessions.
|
||||
cronic sudo --user={{ env.app_user }} --preserve-env PYTHONPATH={{ env.project_dir }}:$PYTHONPATH {{ env.virtualenv }}/bin/django-admin clearsessions
|
||||
|
||||
cronic sudo --user={{ env.app_user }} --preserve-env PYTHONPATH={{ env.project_dir }}:$PYTHONPATH {{ env.virtualenv }}/bin/django-admin expunge_deleted
|
||||
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script-mode
|
||||
# End:
|
51
deploy/nginx.conf
Normal file
|
@ -0,0 +1,51 @@
|
|||
upstream {{ site_name }}_django_wsgi {
|
||||
keepalive 2; # Cache 2 connections.
|
||||
server unix:/tmp/{{ site_name }}_uwsgi.sock;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name {{ env.domain }};
|
||||
return 301 https://{{ env.domain }}$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name {{ env.domain }};
|
||||
client_max_body_size 50M;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/{{ env.domain }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/{{ env.domain }}/privkey.pem;
|
||||
|
||||
# Ask for HTTPS for 180 days.
|
||||
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains";
|
||||
|
||||
# Advise browsers not to use content type sniffing to reduce chance of XSS attacks.
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
|
||||
# Advise browser to only load external content from these sites.
|
||||
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://code.jquery.com/jquery-3.5.1.min.js https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js https://js.stripe.com/v3/ https://r.stripe.com/0";
|
||||
|
||||
location / {
|
||||
# Django web application including static files (via WhiteNoise).
|
||||
uwsgi_pass symposion_django_wsgi;
|
||||
include uwsgi_params;
|
||||
|
||||
# Disable gzip compression when where traffic might be over SSL
|
||||
# to avoid an attack that may compromise Django's CSRF
|
||||
# protection. See:
|
||||
# https://www.djangoproject.com/weblog/2013/aug/06/breach-and-django/
|
||||
gzip off;
|
||||
}
|
||||
|
||||
location /site_media/ {
|
||||
# User-uploaded files and generated reports.
|
||||
alias {{ project_dir }}/pinaxcon/site_media/;
|
||||
expires 1y;
|
||||
}
|
||||
|
||||
location /.well-known/ {
|
||||
# Used for "acmi-challenge".
|
||||
alias {{ project_dir }}/htdocs/.well-known/;
|
||||
}
|
||||
}
|
65
deploy/postfix/main.cf
Normal file
|
@ -0,0 +1,65 @@
|
|||
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
|
||||
|
||||
|
||||
# Debian specific: Specifying a file name will cause the first
|
||||
# line of that file to be used as the name. The Debian default
|
||||
# is /etc/mailname.
|
||||
#myorigin = /etc/mailname
|
||||
|
||||
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
|
||||
biff = no
|
||||
|
||||
# appending .domain is the MUA's job.
|
||||
append_dot_mydomain = no
|
||||
|
||||
# Uncomment the next line to generate "delayed mail" warnings
|
||||
#delay_warning_time = 4h
|
||||
|
||||
readme_directory = no
|
||||
|
||||
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
|
||||
# fresh installs.
|
||||
compatibility_level = 2
|
||||
|
||||
# TLS parameters
|
||||
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
|
||||
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
|
||||
smtpd_use_tls=yes
|
||||
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
|
||||
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
|
||||
|
||||
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
|
||||
# information on enabling SSL in the smtp client.
|
||||
|
||||
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
|
||||
myhostname = symposion.sfconservancy.org
|
||||
alias_maps = hash:/etc/aliases
|
||||
alias_database = hash:/etc/aliases
|
||||
myorigin = /etc/mailname
|
||||
mydestination = $myhostname, symposion, localhost
|
||||
relayhost = [mail.sfconservancy.org]:587
|
||||
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
|
||||
mailbox_size_limit = 0
|
||||
recipient_delimiter = +
|
||||
inet_interfaces = loopback-only
|
||||
inet_protocols = all
|
||||
|
||||
# Relay to Conservancy
|
||||
#
|
||||
smtp_sasl_auth_enable = yes
|
||||
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
|
||||
smtp_sasl_security_options = noanonymous
|
||||
smtp_tls_security_level = secure
|
||||
|
||||
# Increase default limit of 10M to 50M
|
||||
message_size_limit = 51200000
|
||||
|
||||
# This configuration rewrites both envelope sender and From header to a single
|
||||
# fixed address so that all outgoing mail, including cron emails, can be
|
||||
# delivered through a single user-grade SMTP account.
|
||||
#
|
||||
# Envelope
|
||||
canonical_maps = regexp:/etc/postfix/canonical
|
||||
canonical_classes = envelope_sender
|
||||
# From header
|
||||
smtp_header_checks = regexp:/etc/postfix/header_checks
|
35
deploy/uwsgi.ini
Normal file
|
@ -0,0 +1,35 @@
|
|||
[uwsgi]
|
||||
strict = true # Fail if unknown config parameter found.
|
||||
plugins = python3
|
||||
chdir = {{ project_dir }}
|
||||
home = {{ virtualenv }}
|
||||
module = pinaxcon.wsgi
|
||||
master = true
|
||||
socket = /tmp/{{ site_name }}_uwsgi.sock
|
||||
processes = 3
|
||||
harakiri = 30
|
||||
max-requests = 5000
|
||||
vacuum = true
|
||||
# For Sentry, see https://docs.sentry.io/clients/python/advanced/#a-note-on-uwsgi.
|
||||
enable-threads = true
|
||||
log-prefix = {{ site_name }}
|
||||
|
||||
# Enable uWSGI stats server for use with uwsgitop.
|
||||
# Run with: `sudo -u www-data uwsgitop /run/{{ site_name }}/django_uwsgi_stats.socket`
|
||||
stats = /tmp/{{ site_name }}_uwsgi_stats.socket
|
||||
# Memory reporting is useful for reviewing memory consumption with uwsgitop, but
|
||||
# makes the logs a little noiser.
|
||||
# memory-report = true
|
||||
|
||||
# Always use UTF-8 as the encoding for reading/writing files and other,
|
||||
# regardless of system preferences. Will be default in Python 3.15. We were
|
||||
# originally specifying LANG=en_AU.UTF-8 here, to handle Unicode chars in
|
||||
# uploaded filenames, but this broke down when that locale wasn't
|
||||
# installed. Using Python's UTF Mode should side-step this. See
|
||||
# https://docs.python.org/3/library/os.html#utf8-mode.
|
||||
env = PYTHONUTF8=1
|
||||
# Haven't decided how to securely handle code being able to write __pycache__
|
||||
# directories and bytecode into read-only directories.
|
||||
env = PYTHONDONTWRITEBYTECODE=true
|
||||
# Per Django deployment checklist.
|
||||
env = PYTHONHASHSEED=random
|
93
fabfile.py
vendored
Normal file
|
@ -0,0 +1,93 @@
|
|||
"""Automated deployment with Fabric.
|
||||
|
||||
To deploy to production:
|
||||
|
||||
python3 -m pip install --user vps-deploy
|
||||
export FABRIC_HOSTS=user@hostname
|
||||
fab deploy
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
from fabric import task # type: ignore
|
||||
from invoke.collection import Collection # type: ignore
|
||||
from vps_deploy import django_fabric2 as df2 # type: ignore
|
||||
|
||||
hosts = os.environ['FABRIC_HOSTS'].split(',')
|
||||
|
||||
|
||||
def install_essentials(c):
|
||||
# ImageMagick (convert) and Inkscape required for generating badges.
|
||||
c.run('sudo apt-get install -yy git python3-dev python3-venv python3-wheel build-essential python3-cairocffi python3-psycopg2 postgresql uwsgi-emperor uwsgi-plugin-python3 memcached netcat-openbsd nginx certbot libpq-dev libmemcached-dev libxml2-dev libxslt-dev xmlsec1 imagemagick inkscape cronic')
|
||||
|
||||
|
||||
@task(hosts=hosts)
|
||||
def deploy(c):
|
||||
install_essentials(c)
|
||||
df2.transfer_files_git(c)
|
||||
df2.init(c)
|
||||
if not c.run(f'test -e {c.env.virtualenv}', warn=True):
|
||||
c.sudo(f'mkdir -p $(dirname {c.env.virtualenv})')
|
||||
c.sudo(f'chown {c.user} $(dirname {c.env.virtualenv})')
|
||||
c.run('{env.python} -m venv --system-site-packages {env.virtualenv}'.format(env=c.env))
|
||||
with c.cd(c.env.project_dir):
|
||||
c.run('{env.virtualenv}/bin/python -m pip install -c constraints.txt -r requirements.txt'.format(env=c.env))
|
||||
# Fixes "AttributeError: install_layout". See:
|
||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003252
|
||||
# https://github.com/pypa/setuptools/issues/3278
|
||||
c.run('SETUPTOOLS_USE_DISTUTILS=stdlib {env.virtualenv}/bin/python -m pip install -c constraints.txt -r vendored_requirements.txt'.format(env=c.env))
|
||||
df2.prepare_django(c, fail_level='ERROR')
|
||||
df2.fix_permissions(
|
||||
c,
|
||||
read=['pinaxcon', 'vendor', 'static'],
|
||||
# For speaker photos and attaching supporting docs to a proposal (select
|
||||
# "view details" after submitting).
|
||||
read_write=['pinaxcon/site_media/media'],
|
||||
)
|
||||
df2.reload_uwsgi(c)
|
||||
df2.flush_memcached(c)
|
||||
df2.update_nginx(c)
|
||||
df2.install_scheduled_jobs(
|
||||
c,
|
||||
periodic_jobs=[
|
||||
'deploy/cron/cron.daily',
|
||||
],
|
||||
)
|
||||
df2.check_site_online(c)
|
||||
|
||||
|
||||
# The "ns" appears to be a magic name.
|
||||
ns = Collection(
|
||||
deploy,
|
||||
task(df2.download_postgres_db, hosts=hosts),
|
||||
task(df2.mirror_postgres_db, hosts=hosts),
|
||||
task(df2.mirror_media, hosts=hosts),
|
||||
task(df2.django_shell, hosts=hosts),
|
||||
task(df2.bash, hosts=hosts),
|
||||
)
|
||||
ns.configure({
|
||||
# Built-in Fabric config.
|
||||
'run': {
|
||||
'echo': True,
|
||||
# Needed so local commands work. Can also use FABRIC_RUN_REPLACE_ENV.
|
||||
'replace_env': False,
|
||||
},
|
||||
|
||||
# Our custom project config.
|
||||
'env': {
|
||||
'branch': 'fossy2024',
|
||||
'app_user': 'www-data',
|
||||
'db_name': 'symposion',
|
||||
'project_dir': '/srv/symposion_app',
|
||||
'media_dir': 'media',
|
||||
'virtualenv': '/srv/venvs/symposion-django-cp311',
|
||||
'site_name': 'symposion',
|
||||
'requirements': 'requirements.txt',
|
||||
'settings': 'pinaxcon.settings',
|
||||
'uwsgi_conf': 'deploy/uwsgi.ini',
|
||||
'nginx_conf': 'deploy/nginx.conf',
|
||||
'python': '/usr/bin/python3.11',
|
||||
'url': 'https://2024.fossy.us/',
|
||||
'domain': '2024.fossy.us',
|
||||
},
|
||||
})
|
|
@ -3,10 +3,10 @@
|
|||
"model": "symposion_conference.conference",
|
||||
"pk": 1,
|
||||
"fields": {
|
||||
"title": "Everything Open 2023",
|
||||
"start_date": "2023-03-14",
|
||||
"end_date": "2023-03-16",
|
||||
"timezone": "Australia/Melbourne"
|
||||
"title": "FOSSY 2023",
|
||||
"start_date": "2023-07-13",
|
||||
"end_date": "2023-07-16",
|
||||
"timezone": "US/Pacific"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
"model": "sites.site",
|
||||
"pk": 1,
|
||||
"fields": {
|
||||
"domain": "2023.everythingopen.au",
|
||||
"name": "Everything Open 2023"
|
||||
"domain": "2023.fossy.us",
|
||||
"name": "FOSSY 2023"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
@ -131,7 +131,7 @@
|
|||
"model": "sitetree.treeitem",
|
||||
"pk": 6,
|
||||
"fields": {
|
||||
"title": "About Everything Open",
|
||||
"title": "About FOSSY",
|
||||
"hint": "",
|
||||
"url": "/about/",
|
||||
"urlaspattern": false,
|
||||
|
|
|
@ -3,7 +3,6 @@ AUTHENTICATION_BACKENDS = [
|
|||
'symposion.teams.backends.TeamPermissionsBackend',
|
||||
'django.contrib.auth.backends.ModelBackend',
|
||||
]
|
||||
LOGIN_URL='/accounts/login'
|
||||
|
||||
ROOT_URLCONF = "pinaxcon.devmode_urls"
|
||||
|
||||
|
|
|
@ -21,10 +21,22 @@ class CategoryAdmin(admin.ModelAdmin):
|
|||
|
||||
|
||||
models_to_register = [
|
||||
models.TalkProposal,
|
||||
models.TutorialProposal,
|
||||
models.AIAndMachineLearningProposal,
|
||||
models.DiversityEquityAndInclusionProposal,
|
||||
models.FOSSAndARM64Proposal,
|
||||
models.FOSSFundingandEconomicsProposal,
|
||||
models.FOSSInDailyLifeProposal,
|
||||
models.FOSSInEducationProposal,
|
||||
models.LicensingAndLegalIssuesProposal,
|
||||
models.MobileDeviceUserFreedomProposal,
|
||||
models.ReproducibilityProposal,
|
||||
models.RightToRepairProposal,
|
||||
models.ScienceOfCommunityProposal,
|
||||
models.MemberProjectsProposal,
|
||||
models.SupportingUserGroupsProposal,
|
||||
models.XMPPProposal,
|
||||
models.WildCardProposal,
|
||||
]
|
||||
|
||||
for model in models_to_register:
|
||||
admin.site.register(model, CategoryAdmin,
|
||||
list_display = [
|
||||
|
|
|
@ -8,24 +8,31 @@ from pinaxcon.proposals import models
|
|||
|
||||
DEFAULT_FIELDS = [
|
||||
"title",
|
||||
"primary_topic",
|
||||
# "primary_topic",
|
||||
"target_audience",
|
||||
"experience_level",
|
||||
"abstract",
|
||||
"private_abstract",
|
||||
"content_warning",
|
||||
# "content_warning",
|
||||
"technical_requirements",
|
||||
"project",
|
||||
"project_url",
|
||||
"video_url",
|
||||
# "project",
|
||||
# "project_url",
|
||||
# "video_url",
|
||||
"require_approval",
|
||||
"recording_release",
|
||||
"materials_release",
|
||||
"indicate_use_of_proprietary_software",
|
||||
]
|
||||
|
||||
TALK_FORMAT_FIELDS = copy.copy(DEFAULT_FIELDS)
|
||||
TALK_FORMAT_FIELDS.insert(2, "talk_format")
|
||||
|
||||
class ProposalForm(forms.ModelForm):
|
||||
|
||||
required_css_class = 'label-required'
|
||||
indicate_use_of_proprietary_software = forms.BooleanField(
|
||||
help_text="Attendees expect to see only FOSS presented at all FOSSY talks. I affirm that I will clearly mark any proprietary and/or trade secret software on talk slides, in any printed materially and will verbally indicate any non-FOSS mentioned in my talk.")
|
||||
|
||||
|
||||
def clean_description(self):
|
||||
value = self.cleaned_data["description"]
|
||||
|
@ -48,3 +55,109 @@ class TutorialProposalForm(ProposalForm):
|
|||
class Meta:
|
||||
model = models.TutorialProposal
|
||||
fields = copy.copy(DEFAULT_FIELDS)
|
||||
|
||||
|
||||
class MiniconfProposalForm(ProposalForm):
|
||||
pass
|
||||
|
||||
|
||||
class AIAndMachineLearningProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.AIAndMachineLearningProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class DiversityEquityAndInclusionProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.DiversityEquityAndInclusionProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class FOSSAndARM64ProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.FOSSAndARM64Proposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class FOSSFundingandEconomicsProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.FOSSFundingandEconomicsProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class FOSSInDailyLifeProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.FOSSInDailyLifeProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class FOSSInEducationProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.FOSSInEducationProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class KeynotePanelProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.KeynotePanelProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class LicensingAndLegalIssuesProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.LicensingAndLegalIssuesProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class MobileDeviceUserFreedomProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.MobileDeviceUserFreedomProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class ReproducibilityProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.ReproducibilityProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class RightToRepairProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.RightToRepairProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class SeleniumProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.SeleniumProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class ScienceOfCommunityProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.ScienceOfCommunityProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
||||
|
||||
class MemberProjectsProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.MemberProjectsProposal
|
||||
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
|
||||
|
||||
|
||||
class WildCardProposalForm(MiniconfProposalForm):
|
||||
class Meta:
|
||||
model = models.WildCardProposal
|
||||
fields = TALK_FORMAT_FIELDS
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
# Generated by Django 2.2.28 on 2023-04-15 04:51
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||
('proposals', '0004_auto_20221208_0102'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CopyleftComplianceProposal',
|
||||
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 Linux Australia 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 Linux Australia to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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, '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, as linux.conf.au miniconfs are unfunded community run events.')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Copyleft and Compliance talk proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='MemberProjectProposal',
|
||||
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 Linux Australia 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 Linux Australia to release any other material (such as slides) from presentations covered by this proposal, under the <a href='https://creativecommons.org/licenses/by-sa/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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, '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, as linux.conf.au miniconfs are unfunded community run events.')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'SFC Member Project talk proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
]
|
63
pinaxcon/proposals/migrations/0006_auto_20230414_2356.py
Normal file
|
@ -0,0 +1,63 @@
|
|||
# Generated by Django 2.2.28 on 2023-04-15 06:56
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('proposals', '0005_copyleftcomplianceproposal_memberprojectproposal'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='copyleftcomplianceproposal',
|
||||
name='materials_release',
|
||||
field=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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</a>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='copyleftcomplianceproposal',
|
||||
name='recording_release',
|
||||
field=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."),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='copyleftcomplianceproposal',
|
||||
name='ticket_acknowledgement',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='memberprojectproposal',
|
||||
name='materials_release',
|
||||
field=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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</a>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='memberprojectproposal',
|
||||
name='recording_release',
|
||||
field=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."),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='memberprojectproposal',
|
||||
name='ticket_acknowledgement',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='talkproposal',
|
||||
name='materials_release',
|
||||
field=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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</a>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='talkproposal',
|
||||
name='recording_release',
|
||||
field=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."),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tutorialproposal',
|
||||
name='materials_release',
|
||||
field=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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</a>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tutorialproposal',
|
||||
name='recording_release',
|
||||
field=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."),
|
||||
),
|
||||
]
|
285
pinaxcon/proposals/migrations/0007_auto_20230420_0043.py
Normal file
|
@ -0,0 +1,285 @@
|
|||
# Generated by Django 2.2.28 on 2023-04-20 07:43
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||
('proposals', '0006_auto_20230414_2356'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AArch64ARM64Proposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'AArch64/ARM64 Servers and Open Source- The Who, What, Why, and How proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BSDUnixProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'BSD Unix proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CommunityProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'Community: Open Source in Practice proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ContainerDaysProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'Container Days proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DiversityEquityInclusionProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'Diversity Equity and Inclusion and FOSS proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FOSSAtPlayProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'FOSS at Play: Games, creative development, and open technology proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FOSSForEducationProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'FOSS For Education proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FOSSInDailyLifeProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'FOSS in Daily Life proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OpenSourcAIDataProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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 AI + Data proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OpenWorkProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'Issues in Open Work; Common Challenges and Best Practices in the Open Source Industry, Open Scholarship, and Government proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ScienceOfCommunityProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'Science of Community proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SustainableOpenSourceBusinessProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'Sustainable Open Source Business/ Software Worker Coops proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='XMPPProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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?')),
|
||||
('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=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (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': 'XMPP proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='copyleftcomplianceproposal',
|
||||
name='talk_format',
|
||||
field=models.IntegerField(choices=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='memberprojectproposal',
|
||||
name='talk_format',
|
||||
field=models.IntegerField(choices=[(2, 'Short Presentation (15 or 20 min)'), (3, 'Long Presentation (45 min)')], default=3, help_text='Please indicate your preferred talk length in the private abstract field below.'),
|
||||
),
|
||||
]
|
98
pinaxcon/proposals/migrations/0008_auto_20230420_0241.py
Normal file
|
@ -0,0 +1,98 @@
|
|||
# Generated by Django 2.2.28 on 2023-04-20 09:41
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('proposals', '0007_auto_20230420_0043'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='aarch64arm64proposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='bsdunixproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='communityproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='containerdaysproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='copyleftcomplianceproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='diversityequityinclusionproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fossatplayproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fossforeducationproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fossindailylifeproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='memberprojectproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='opensourcaidataproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='openworkproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='scienceofcommunityproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='sustainableopensourcebusinessproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='talkproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tutorialproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='xmppproposal',
|
||||
name='primary_topic',
|
||||
field=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),
|
||||
),
|
||||
]
|
114
pinaxcon/proposals/migrations/0009_auto_20230421_0139.py
Normal file
|
@ -0,0 +1,114 @@
|
|||
# Generated by Django 2.2.28 on 2023-04-21 08:39
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||
('proposals', '0008_auto_20230420_0241'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='SoftwareWorkerCoopsProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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': 'Software Worker Co-ops',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='sustainableopensourcebusinessproposal',
|
||||
options={'verbose_name': 'Sustainable Open Source Business'},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aarch64arm64proposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='bsdunixproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='communityproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='containerdaysproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='copyleftcomplianceproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='diversityequityinclusionproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fossatplayproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fossforeducationproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fossindailylifeproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='memberprojectproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='opensourcaidataproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='openworkproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='scienceofcommunityproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='sustainableopensourcebusinessproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='xmppproposal',
|
||||
name='talk_format',
|
||||
field=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.'),
|
||||
),
|
||||
]
|
43
pinaxcon/proposals/migrations/0010_auto_20230423_1620.py
Normal file
|
@ -0,0 +1,43 @@
|
|||
# Generated by Django 2.2.28 on 2023-04-23 23:20
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||
('proposals', '0009_auto_20230421_0139'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='WildCardProposal',
|
||||
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/3.0/au/deed.en'> Creative Commons Attribution-Share Alike Australia 3.0 Licence</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': 'Wild card',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='softwareworkercoopsproposal',
|
||||
options={'verbose_name': 'Software Worker Co-ops proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='sustainableopensourcebusinessproposal',
|
||||
options={'verbose_name': 'Sustainable Open Source Business proposal'},
|
||||
),
|
||||
]
|
130
pinaxcon/proposals/migrations/0011_auto_20230424_1449.py
Normal file
|
@ -0,0 +1,130 @@
|
|||
# Generated by Django 2.2.28 on 2023-04-24 21:49
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||
('proposals', '0010_auto_20230423_1620'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='SecurityProposal',
|
||||
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': 'Security',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aarch64arm64proposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='bsdunixproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='communityproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='containerdaysproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='copyleftcomplianceproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='diversityequityinclusionproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fossatplayproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fossforeducationproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fossindailylifeproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='memberprojectproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='opensourcaidataproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='openworkproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='scienceofcommunityproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='softwareworkercoopsproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='sustainableopensourcebusinessproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='talkproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tutorialproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='wildcardproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='xmppproposal',
|
||||
name='materials_release',
|
||||
field=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>"),
|
||||
),
|
||||
]
|
35
pinaxcon/proposals/migrations/0012_righttorepairproposal.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Generated by Django 2.2.28 on 2023-05-05 13:05
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||
('proposals', '0011_auto_20230424_1449'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
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',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
]
|
218
pinaxcon/proposals/migrations/0013_auto_20240515_0500.py
Normal file
|
@ -0,0 +1,218 @@
|
|||
# Generated by Django 2.2.28 on 2024-05-15 05:00
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('symposion_schedule', '0009_presentation_videos'),
|
||||
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||
('symposion_speakers', '0012_auto_20230420_0018'),
|
||||
('symposion_reviews', '0001_initial'),
|
||||
('proposals', '0012_righttorepairproposal'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='FOSSFundingandEconomicsProposal',
|
||||
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': 'FOSS Funding and Economics talk proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='MobileDeviceUserFreedomProposal',
|
||||
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': 'Mobile Device User Freedom talk proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ReproducibilityProposal',
|
||||
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': 'Reproducability talk proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SupportingUserGroupsProposal',
|
||||
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': 'Supporting User Groups talk proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
migrations.RenameModel(
|
||||
old_name='OpenSourcAIDataProposal',
|
||||
new_name='AIAndMachineLearningProposal',
|
||||
),
|
||||
migrations.RenameModel(
|
||||
old_name='DiversityEquityInclusionProposal',
|
||||
new_name='DiversityEquityAndInclusionProposal',
|
||||
),
|
||||
migrations.RenameModel(
|
||||
old_name='AArch64ARM64Proposal',
|
||||
new_name='FOSSAndARM64Proposal',
|
||||
),
|
||||
migrations.RenameModel(
|
||||
old_name='FOSSForEducationProposal',
|
||||
new_name='FOSSInEducationProposal',
|
||||
),
|
||||
migrations.RenameModel(
|
||||
old_name='CopyleftComplianceProposal',
|
||||
new_name='LicensingAndLegalIssuesProposal',
|
||||
),
|
||||
migrations.RenameModel(
|
||||
old_name='MemberProjectProposal',
|
||||
new_name='MemberProjectsProposal',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='communityproposal',
|
||||
name='proposalbase_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='containerdaysproposal',
|
||||
name='proposalbase_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='fossatplayproposal',
|
||||
name='proposalbase_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='openworkproposal',
|
||||
name='proposalbase_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='securityproposal',
|
||||
name='proposalbase_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='softwareworkercoopsproposal',
|
||||
name='proposalbase_ptr',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='sustainableopensourcebusinessproposal',
|
||||
name='proposalbase_ptr',
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='aiandmachinelearningproposal',
|
||||
options={'verbose_name': 'AI and Machine Learning talk proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='diversityequityandinclusionproposal',
|
||||
options={'verbose_name': 'Diversity Equity and Inclusion and FOSS talk proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='fossandarm64proposal',
|
||||
options={'verbose_name': 'FOSS and ARM64; from the Cloud to the Edge talk proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='fossindailylifeproposal',
|
||||
options={'verbose_name': 'FOSS in Daily Life talk proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='fossineducationproposal',
|
||||
options={'verbose_name': 'FOSS in Education talk proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='licensingandlegalissuesproposal',
|
||||
options={'verbose_name': 'Licensing and Legal Issues talk proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='memberprojectsproposal',
|
||||
options={'verbose_name': 'SFC Member Projects talk proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='righttorepairproposal',
|
||||
options={'verbose_name': 'Right to Repair talk proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='scienceofcommunityproposal',
|
||||
options={'verbose_name': 'Science of Community talk proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='wildcardproposal',
|
||||
options={'verbose_name': 'Wild card talk proposal'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='xmppproposal',
|
||||
options={'verbose_name': 'XMPP talk proposal'},
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='BSDUnixProposal',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='CommunityProposal',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='ContainerDaysProposal',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='FOSSAtPlayProposal',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='OpenWorkProposal',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='SecurityProposal',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='SoftwareWorkerCoopsProposal',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='SustainableOpenSourceBusinessProposal',
|
||||
),
|
||||
]
|
35
pinaxcon/proposals/migrations/0014_keynotepanelproposal.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Generated by Django 2.2.28 on 2024-05-23 05:11
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||
('proposals', '0013_auto_20240515_0500'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='KeynotePanelProposal',
|
||||
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': 'Keynote panel talk proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
]
|
35
pinaxcon/proposals/migrations/0015_seleniumproposal.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Generated by Django 2.2.28 on 2024-05-28 06:09
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('symposion_proposals', '0003_auto_20170702_2250'),
|
||||
('proposals', '0014_keynotepanelproposal'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='SeleniumProposal',
|
||||
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': 'Selenium talk proposal',
|
||||
},
|
||||
bases=('symposion_proposals.proposalbase',),
|
||||
),
|
||||
]
|
|
@ -68,7 +68,7 @@ class Proposal(ProposalBase):
|
|||
|
||||
recording_release = models.BooleanField(
|
||||
default=True,
|
||||
help_text="I allow Linux Australia to release any recordings of "
|
||||
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 "
|
||||
|
@ -78,16 +78,17 @@ class Proposal(ProposalBase):
|
|||
|
||||
materials_release = models.BooleanField(
|
||||
default=True,
|
||||
help_text="I allow Linux Australia to release any other material "
|
||||
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/3.0/au/deed.en'> "
|
||||
"Creative Commons Attribution-Share Alike Australia 3.0 Licence</a>"
|
||||
"href='https://creativecommons.org/licenses/by-sa/4.0/'> "
|
||||
"Creative Commons Attribution-ShareAlike 4.0 International</a>"
|
||||
)
|
||||
|
||||
primary_topic = models.IntegerField(
|
||||
choices=PROPOSAL_TOPIC,
|
||||
help_text="What is the primary topic area for your session?"
|
||||
help_text="What is the primary topic area for your session?",
|
||||
null=True,
|
||||
)
|
||||
|
||||
experience_level = models.IntegerField(
|
||||
|
@ -127,3 +128,118 @@ class TutorialProposal(Proposal):
|
|||
|
||||
class Meta:
|
||||
verbose_name = "tutorial proposal"
|
||||
|
||||
|
||||
class MiniconfSessionProposal(Proposal):
|
||||
|
||||
FORMAT_SHORT_PRESENTATION = 1
|
||||
FORMAT_MEDIUM_PRESENTATION = 2
|
||||
FORMAT_LONG_PRESENTATION = 3
|
||||
FORMAT_DEMONSTRATION = 4
|
||||
FORMAT_OTHER = 5
|
||||
|
||||
TALK_FORMATS = [
|
||||
(FORMAT_SHORT_PRESENTATION, "Lightning Talk (5-10 min)"),
|
||||
(FORMAT_MEDIUM_PRESENTATION, "Short Presentation (20-25 min)"),
|
||||
(FORMAT_LONG_PRESENTATION, "Long Presentation (40-45 min)"),
|
||||
]
|
||||
|
||||
talk_format = models.IntegerField(
|
||||
choices=TALK_FORMATS,
|
||||
default=FORMAT_LONG_PRESENTATION,
|
||||
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."
|
||||
)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class AIAndMachineLearningProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "AI and Machine Learning talk proposal"
|
||||
|
||||
|
||||
class DiversityEquityAndInclusionProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "Diversity Equity and Inclusion and FOSS talk proposal"
|
||||
|
||||
|
||||
class FOSSAndARM64Proposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "FOSS and ARM64; from the Cloud to the Edge talk proposal"
|
||||
|
||||
|
||||
class FOSSFundingandEconomicsProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "FOSS Funding and Economics talk proposal"
|
||||
|
||||
|
||||
class FOSSInDailyLifeProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "FOSS in Daily Life talk proposal"
|
||||
|
||||
|
||||
class FOSSInEducationProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "FOSS in Education talk proposal"
|
||||
|
||||
|
||||
class KeynotePanelProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "Keynote panel talk proposal"
|
||||
|
||||
|
||||
class LicensingAndLegalIssuesProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "Licensing and Legal Issues talk proposal"
|
||||
|
||||
|
||||
class MobileDeviceUserFreedomProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "Mobile Device User Freedom talk proposal"
|
||||
|
||||
|
||||
class ReproducibilityProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "Reproducability talk proposal"
|
||||
|
||||
|
||||
class RightToRepairProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "Right to Repair talk proposal"
|
||||
|
||||
|
||||
class ScienceOfCommunityProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "Science of Community talk proposal"
|
||||
|
||||
|
||||
class SeleniumProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "Selenium talk proposal"
|
||||
|
||||
|
||||
class MemberProjectsProposal(MiniconfSessionProposal):
|
||||
class Meta:
|
||||
verbose_name = "SFC Member Projects 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 Meta:
|
||||
verbose_name = "Wild card talk proposal"
|
||||
|
|
|
@ -28,6 +28,8 @@ class ProfileForm(forms.ModelForm):
|
|||
'lca_announce',
|
||||
'lca_chat',
|
||||
'future_conference',
|
||||
'linux_australia',
|
||||
'past_lca',
|
||||
]
|
||||
widgets = {
|
||||
'past_lca': forms.widgets.CheckboxSelectMultiple
|
||||
|
|
33
pinaxcon/registrasion/migrations/0016_auto_20230414_2356.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
# Generated by Django 2.2.28 on 2023-04-15 06:56
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pinaxcon_registrasion', '0015_auto_20221208_0102'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='attendeeprofile',
|
||||
name='address_line_1',
|
||||
field=models.CharField(blank=True, help_text='This address, if provided, will appear on your invoices.', max_length=1024, verbose_name='Address line 1'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='attendeeprofile',
|
||||
name='children',
|
||||
field=models.CharField(blank=True, help_text="This is a family friendly conference and provides free child-care for pre-school children from 6 months up to 5 years. We hope to also provide a programme for older children and will let you know closer to the conference. If you're wanting to bring your children, please let us know their age(s) so we can ensure we have enough spaces available.", max_length=256, verbose_name='Child Ages and Information'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='attendeeprofile',
|
||||
name='free_text_1',
|
||||
field=models.CharField(blank=True, help_text="A line of free text that will appear on your badge. Use this for your Mastodon or Twitter handle, IRC nick, your preferred pronouns or anything else you'd like people to see on your badge.", max_length=64, verbose_name='Free text line 1'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='attendeeprofile',
|
||||
name='lca_announce',
|
||||
field=models.BooleanField(blank=True, default=False, help_text='Select to be subscribed to the low-traffic lca-announce mailing list', verbose_name='Subscribe to lca-announce list'),
|
||||
),
|
||||
]
|
34
pinaxcon/registrasion/migrations/0017_auto_20230420_0018.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 2.2.28 on 2023-04-20 07:18
|
||||
|
||||
from django.db import migrations, models
|
||||
import django_countries.fields
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pinaxcon_registrasion', '0016_auto_20230414_2356'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='attendeeprofile',
|
||||
name='country',
|
||||
field=django_countries.fields.CountryField(default='US', max_length=2, verbose_name='Country'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='attendeeprofile',
|
||||
name='linux_australia',
|
||||
field=models.BooleanField(blank=True, default=False, help_text="Select this field to register for free <a href='http://www.linux.org.au/'>Linux Australia</a> membership.", verbose_name='Linux Australia membership'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='attendeeprofile',
|
||||
name='of_legal_age',
|
||||
field=models.BooleanField(blank=True, help_text='Being under 18 will not stop you from attending the conference.', verbose_name='Are you over 18?'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='attendeeprofile',
|
||||
name='state',
|
||||
field=models.CharField(blank=True, max_length=256, verbose_name='State/Territory/Province'),
|
||||
),
|
||||
]
|
18
pinaxcon/registrasion/migrations/0018_auto_20230501_2052.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 2.2.28 on 2023-05-02 03:52
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pinaxcon_registrasion', '0017_auto_20230420_0018'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='attendeeprofile',
|
||||
name='dietary_restrictions',
|
||||
field=models.CharField(blank=True, help_text='eg. vegan, kosher, gluten free, keto, paleo, etc', max_length=256, verbose_name='Food allergies, intolerances, or dietary restrictions'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 2.2.28 on 2024-05-06 00:00
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pinaxcon_registrasion', '0018_auto_20230501_2052'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='attendeeprofile',
|
||||
name='sfc_sustainer',
|
||||
field=models.BooleanField(blank=True, default=False, help_text='Financial support from <a href="https://sfconservancy.org/sustainer/" target="_blank">Sustainers</a> helps Conservancy\'s work in a strategic, long-term way.', verbose_name='Are you an SFC Sustainer?'),
|
||||
),
|
||||
]
|
|
@ -135,24 +135,23 @@ class AttendeeProfile(rego.AttendeeProfileBase):
|
|||
)
|
||||
country = CountryField(
|
||||
verbose_name="Country",
|
||||
default="AU",
|
||||
default="US",
|
||||
)
|
||||
state = models.CharField(
|
||||
max_length=256,
|
||||
verbose_name="State/Territory/Province",
|
||||
help_text="If your Country is Australia, you must list a state.",
|
||||
blank=True,
|
||||
)
|
||||
|
||||
of_legal_age = models.BooleanField(
|
||||
verbose_name="Are you over 18?",
|
||||
help_text="Being under 18 will not stop you from attending the "
|
||||
"conference. We need to know whether you are over 18 to "
|
||||
"allow us to cater for you at venues that serve alcohol.",
|
||||
"conference.",
|
||||
blank=True,
|
||||
)
|
||||
dietary_restrictions = models.CharField(
|
||||
verbose_name="Food allergies, intolerances, or dietary restrictions",
|
||||
help_text="eg. vegan, kosher, gluten free, keto, paleo, etc",
|
||||
max_length=256,
|
||||
blank=True,
|
||||
)
|
||||
|
@ -171,7 +170,7 @@ class AttendeeProfile(rego.AttendeeProfileBase):
|
|||
children = models.CharField(
|
||||
verbose_name="Child Ages and Information",
|
||||
max_length=256,
|
||||
help_text="Everything Open is a family friendly conference and provides "
|
||||
help_text="This is a family friendly conference and provides "
|
||||
"free child-care for pre-school children from 6 months up to 5 years. We "
|
||||
"hope to also provide a programme for older children and will let you "
|
||||
"know closer to the conference. If you're wanting to bring your children, "
|
||||
|
@ -186,6 +185,7 @@ class AttendeeProfile(rego.AttendeeProfileBase):
|
|||
"<a href='http://www.linux.org.au/'>Linux Australia</a> "
|
||||
"membership.",
|
||||
blank=True,
|
||||
default=False,
|
||||
)
|
||||
|
||||
lca_announce = models.BooleanField(
|
||||
|
@ -220,6 +220,14 @@ class AttendeeProfile(rego.AttendeeProfileBase):
|
|||
blank=True,
|
||||
)
|
||||
|
||||
sfc_sustainer = models.BooleanField(
|
||||
verbose_name="Are you an SFC Sustainer?",
|
||||
help_text="Financial support from <a href=\"https://sfconservancy.org/sustainer/\" target=\"_blank\">Sustainers</a> "
|
||||
"helps Conservancy's work in a strategic, long-term way.",
|
||||
blank=True,
|
||||
default=False,
|
||||
)
|
||||
|
||||
def first_name(self):
|
||||
return wrap(self.name, 15, break_long_words=False)[0]
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@ PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir
|
|||
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
|
||||
DJANGO_ROOT = os.path.abspath(os.path.dirname(django.__file__))
|
||||
BASE_DIR = PACKAGE_ROOT
|
||||
sys.path.append(os.path.join(PROJECT_ROOT, 'vendor'))
|
||||
|
||||
|
||||
### USER SETTINGS
|
||||
|
@ -117,22 +116,23 @@ if DEV_MODE and DEV_MODE == "LAPTOP":
|
|||
else:
|
||||
CACHES = {
|
||||
'default': {
|
||||
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
|
||||
'LOCATION': 'unique-snowflake',
|
||||
}
|
||||
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
|
||||
'LOCATION': '127.0.0.1:11211',
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '*']
|
||||
|
||||
TIME_ZONE = "Australia/Sydney"
|
||||
DATE_FORMAT = "j F Y"
|
||||
LANGUAGE_CODE = "en-au"
|
||||
TIME_ZONE = "US/Pacific"
|
||||
DATE_FORMAT = "F j Y"
|
||||
LANGUAGE_CODE = "en-us"
|
||||
|
||||
SITE_ID = int(os.environ.get("SITE_ID", 1))
|
||||
USE_I18N = True
|
||||
USE_L10N = True
|
||||
USE_TZ = True
|
||||
USE_TZ = False # Work around Django 2.2 incompatibility with psycopg >=
|
||||
# 2.9. Needed since Python 3.11 doesn't support psycogp < 2.9.
|
||||
|
||||
MEDIA_ROOT = os.environ.get("MEDIA_ROOT", os.path.join(PACKAGE_ROOT, "site_media", "media"))
|
||||
MEDIA_URL = "/site_media/media/"
|
||||
|
@ -170,6 +170,7 @@ TEMPLATES = [
|
|||
"django.template.context_processors.request",
|
||||
"django.contrib.messages.context_processors.messages",
|
||||
"pinax_theme_bootstrap.context_processors.theme",
|
||||
"account.context_processors.account",
|
||||
"symposion.reviews.context_processors.reviews",
|
||||
"django_settings_export.settings_export",
|
||||
],
|
||||
|
@ -178,11 +179,14 @@ TEMPLATES = [
|
|||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
"django.middleware.security.SecurityMiddleware",
|
||||
"whitenoise.middleware.WhiteNoiseMiddleware",
|
||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
"django.middleware.csrf.CsrfViewMiddleware",
|
||||
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||
"account.middleware.LocaleMiddleware",
|
||||
"account.middleware.TimezoneMiddleware",
|
||||
"djangosaml2.middleware.SamlSessionMiddleware",
|
||||
"django.contrib.messages.middleware.MessageMiddleware",
|
||||
"debug_toolbar.middleware.DebugToolbarMiddleware",
|
||||
|
@ -267,6 +271,8 @@ INSTALLED_APPS = [
|
|||
"waffle",
|
||||
|
||||
"crispy_forms",
|
||||
|
||||
"account",
|
||||
]
|
||||
|
||||
CRISPY_TEMPLATE_PACK = "bootstrap4"
|
||||
|
@ -321,7 +327,6 @@ LOGGING = {
|
|||
'level': 'ERROR',
|
||||
'filters': ['require_debug_false'],
|
||||
'class': 'django.utils.log.AdminEmailHandler',
|
||||
'include_html': True,
|
||||
},
|
||||
'djdt_log': {
|
||||
'level': 'DEBUG',
|
||||
|
@ -332,7 +337,7 @@ LOGGING = {
|
|||
'loggers': {
|
||||
'django.request': {
|
||||
'handlers': ['mail_admins'],
|
||||
'level': 'DEBUG',
|
||||
'level': 'ERROR',
|
||||
'propagate': True,
|
||||
},
|
||||
'symposion.request': {
|
||||
|
@ -340,10 +345,15 @@ LOGGING = {
|
|||
'level': 'DEBUG',
|
||||
'propagate': True,
|
||||
},
|
||||
'xmlschema': {
|
||||
'handlers': ['console'],
|
||||
'level': 'WARNING',
|
||||
'propagate': False,
|
||||
},
|
||||
},
|
||||
'root': {
|
||||
'handlers': ['console', 'djdt_log'],
|
||||
'level': 'DEBUG'
|
||||
'level': 'INFO'
|
||||
},
|
||||
}
|
||||
FIXTURE_DIRS = [
|
||||
|
@ -356,21 +366,36 @@ AUTHENTICATION_BACKENDS = [
|
|||
'djangosaml2.backends.Saml2Backend',
|
||||
]
|
||||
|
||||
LOGIN_URL = '/saml2/login/'
|
||||
LOGIN_URL = '/account/login/'
|
||||
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
||||
|
||||
CONFERENCE_ID = 1
|
||||
CONFERENCE_ID = 3
|
||||
PROPOSAL_FORMS = {
|
||||
"talk": "pinaxcon.proposals.forms.TalkProposalForm",
|
||||
"tutorial": "pinaxcon.proposals.forms.TutorialProposalForm",
|
||||
"ai-and-machine-learning": "pinaxcon.proposals.forms.AIAndMachineLearningProposalForm",
|
||||
"diversity-equity-and-inclusion": "pinaxcon.proposals.forms.DiversityEquityAndInclusionProposalForm",
|
||||
"foss-and-arm64": "pinaxcon.proposals.forms.FOSSAndARM64ProposalForm",
|
||||
"foss-funding-and-economics": "pinaxcon.proposals.forms.FOSSFundingandEconomicsProposalForm",
|
||||
"foss-in-daily-life": "pinaxcon.proposals.forms.FOSSInDailyLifeProposalForm",
|
||||
"foss-in-education": "pinaxcon.proposals.forms.FOSSInEducationProposalForm",
|
||||
"keynote-panel": "pinaxcon.proposals.forms.KeynotePanelProposalForm",
|
||||
"licensing-and-legal-issues": "pinaxcon.proposals.forms.LicensingAndLegalIssuesProposalForm",
|
||||
"mobile-device-user-freedom": "pinaxcon.proposals.forms.MobileDeviceUserFreedomProposalForm",
|
||||
"reproducibility": "pinaxcon.proposals.forms.ReproducibilityProposalForm",
|
||||
"right-to-repair": "pinaxcon.proposals.forms.RightToRepairProposalForm",
|
||||
"selenium": "pinaxcon.proposals.forms.SeleniumProposalForm",
|
||||
"science-of-community": "pinaxcon.proposals.forms.ScienceOfCommunityProposalForm",
|
||||
"member-projects": "pinaxcon.proposals.forms.MemberProjectsProposalForm",
|
||||
"supporting-user-groups": "pinaxcon.proposals.forms.SupportingUserGroupsProposalForm",
|
||||
"xmpp": "pinaxcon.proposals.forms.XMPPProposalForm",
|
||||
"wild-card": "pinaxcon.proposals.forms.WildCardProposalForm",
|
||||
}
|
||||
MAIN_CONFERENCE_PROPOSAL_KINDS = ("Talk",)
|
||||
|
||||
# Registrasion bits:
|
||||
ATTENDEE_PROFILE_MODEL = "pinaxcon.registrasion.models.AttendeeProfile"
|
||||
ATTENDEE_PROFILE_FORM = "pinaxcon.registrasion.forms.ProfileForm"
|
||||
INVOICE_CURRENCY = "AUD"
|
||||
GST_RATE = Decimal('0.1')
|
||||
INVOICE_CURRENCY = "USD"
|
||||
GST_RATE = Decimal('0')
|
||||
TICKET_PRODUCT_CATEGORY = 1
|
||||
TERMS_PRODUCT_CATEGORY = 2
|
||||
ATTENDEE_PROFILE_FORM = "pinaxcon.registrasion.forms.ProfileForm"
|
||||
|
@ -513,12 +538,12 @@ class PenguinDinnerCat(Category):
|
|||
return t
|
||||
|
||||
|
||||
CONFERENCE_NAME = os.environ.get('CONFERENCE_NAME', 'Everything Open')
|
||||
CONFERENCE_NAME_SHORT = os.environ.get('CONFERENCE_NAME_SHORT', 'EO')
|
||||
CONFERENCE_NAME = os.environ.get('CONFERENCE_NAME', 'FOSSY')
|
||||
CONFERENCE_NAME_SHORT = os.environ.get('CONFERENCE_NAME_SHORT', 'FOSSY')
|
||||
CONFERENCE_EMAIL = os.environ.get('CONFERENCE_EMAIL', DEFAULT_FROM_EMAIL)
|
||||
CONF_TZINFO = pytz.timezone(TIME_ZONE)
|
||||
CONF_START = CONF_TZINFO.localize(datetime(2023, 3, 14))
|
||||
CONF_END = CONF_TZINFO.localize(datetime(2023, 3, 16))
|
||||
CONF_START = CONF_TZINFO.localize(datetime(2024, 8, 1))
|
||||
CONF_END = CONF_TZINFO.localize(datetime(2024, 8, 4))
|
||||
CONF_MINICONF_END = CONF_TZINFO.localize(datetime(2023, 3, 14, 23, 59))
|
||||
EARLY_BIRD_DEADLINE = CONF_TZINFO.localize(datetime(2023, 1, 28))
|
||||
PENGUIN_DINNER_TICKET_DATE = date(2023, 3, 15)
|
||||
|
@ -580,3 +605,31 @@ VENUELESS_URL = os.environ.get('VENUELESS_URL', None)
|
|||
VENUELESS_AUDIENCE = os.environ.get('VENUELESS_AUDIENCE', "venueless")
|
||||
VENUELESS_TOKEN_ISSUER = os.environ.get('VENUELESS_TOKEN_ISSUER', "any")
|
||||
VENUELESS_SECRET = os.environ.get('VENUELESS_SECRET', SECRET_KEY)
|
||||
|
||||
|
||||
ACCOUNT_SIGNUP_REDIRECT_URL = '/dashboard/'
|
||||
ACCOUNT_LOGIN_REDIRECT_URL = '/dashboard/'
|
||||
|
||||
ADMINS = [('', email) for email in os.environ.get('DJANGO_ADMINS', '').split(',') if email]
|
||||
SERVER_EMAIL = DEFAULT_FROM_EMAIL
|
||||
|
||||
if not DEBUG:
|
||||
# Django recommended security settings.
|
||||
SECURE_CONTENT_TYPE_NOSNIFF = True
|
||||
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
|
||||
SECURE_SSL_REDIRECT = True
|
||||
SECURE_BROWSER_XSS_FILTER = True
|
||||
SESSION_COOKIE_SECURE = True
|
||||
CSRF_COOKIE_SECURE = True
|
||||
CSRF_COOKIE_HTTPONLY = True
|
||||
X_FRAME_OPTIONS = 'DENY'
|
||||
|
||||
|
||||
SILENCED_SYSTEM_CHECKS = [
|
||||
# HSTS is handled by Nginx.
|
||||
'security.W004',
|
||||
# Don't want to preload HSTS at this stage.
|
||||
'security.W021']
|
||||
|
||||
|
||||
THEME_CONTACT_EMAIL = CONFERENCE_EMAIL
|
||||
|
|
12
pinaxcon/templates/500.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block head_title %}{% trans "Server Error" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1>{% trans "Something went wrong" %}</h1>
|
||||
<p class="lead">{% trans "We're sorry but a server error has occurred. We've been notified and will look into it as soon as possible." %}</p>
|
||||
</header>
|
||||
{% endblock %}
|
20
pinaxcon/templates/account/email_confirm.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block head_title %}{% trans "Confirm Email" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col-md-5">
|
||||
<form method="post" action="{% url "account_confirm_email" key=confirmation.key %}">
|
||||
<legend>{% trans "Confirm Email" %}</legend>
|
||||
<fieldset>
|
||||
{% csrf_token %}
|
||||
<p>{% blocktrans with email=confirmation.email_address.email %}Confirm email address <b>{{ email }}</b>?{% endblocktrans %}</p>
|
||||
<button type="submit" class="btn btn-primary">{% trans "Confirm" %}</button>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
12
pinaxcon/templates/account/email_confirmation_sent.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block head_title %}{% trans "Confirm your email address" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h2>{% trans "Confirm your email address" %}</h2>
|
||||
|
||||
<p>{% blocktrans %}We have sent you an email to <b>{{ email }}</b> for verification. Follow the link provided to finalize the signup process. If you do not receive it within a few minutes, contact us at <a href="mailto:{{ THEME_CONTACT_EMAIL }}">{{ THEME_CONTACT_EMAIL }}</a>.{% endblocktrans %}</p>
|
||||
<p><a href="{{ success_url }}">{% trans "Go back" %}</a></p>
|
||||
{% endblock %}
|
10
pinaxcon/templates/account/email_confirmed.html
Normal file
|
@ -0,0 +1,10 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block head_title %}{% trans "Email confirmed" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{% trans "Email confirmed" %}</h1>
|
||||
<p>{% blocktrans with email=confirmation.email_address.email %}You have confirmed <b>{{ email }}</b>{% endblocktrans %}</p>
|
||||
{% endblock %}
|
43
pinaxcon/templates/account/login.html
Normal file
|
@ -0,0 +1,43 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load account_tags %}
|
||||
{% load i18n %}
|
||||
{% load bootstrap %}
|
||||
|
||||
{% block head_title %}{% trans "Log in" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<form method="POST" action="{% url "account_login" %}" autocapitalize="off" {% if form.is_multipart %} enctype="multipart/form-data"{% endif %}>
|
||||
<legend>{% trans "Log in to an existing account" %}</legend>
|
||||
{% csrf_token %}
|
||||
{{ form|bootstrap }}
|
||||
{% if redirect_field_value %}
|
||||
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
|
||||
{% endif %}
|
||||
<button type="submit" class="btn btn-primary">{% trans "Log in" %}</button>
|
||||
<a href="{% url "account_password_reset" %}" class="btn btn-link">{% trans "Forgot your password?" %}</a>
|
||||
</form>
|
||||
{% if ACCOUNT_OPEN_SIGNUP %}
|
||||
<p class="login-signup">
|
||||
<small>
|
||||
{% trans "Don't have an account?" %} <strong><a href="{% urlnext 'account_signup' %}">{% trans "Sign up" %}</a></strong>
|
||||
</small>
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{% include "account/_login_sidebar.html" %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
{{ block.super }}
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('#id_username').focus();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
20
pinaxcon/templates/account/logout.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block head_title %}{% trans "Log out" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col-md-5">
|
||||
<form method="POST" action="{% url "account_logout" %}">
|
||||
<legend>{% trans "Log out" %}</legend>
|
||||
<fieldset>
|
||||
{% csrf_token %}
|
||||
<p>{% trans "Are you sure you want to log out?" %}</p>
|
||||
<button type="submit" class="btn btn-primary">{% trans "Log out" %}</button>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
36
pinaxcon/templates/account/password_reset.html
Normal file
|
@ -0,0 +1,36 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
{% load bootstrap %}
|
||||
{% load account_tags %}
|
||||
|
||||
{% block head_title %}{% trans "Password reset" %}{% endblock %}
|
||||
|
||||
{% user_display request.user as user_display %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<form method="POST" action="">
|
||||
<legend>{% trans "Password reset" %}</legend>
|
||||
<p class="lead">{% trans "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." %}</p>
|
||||
<fieldset class="row">
|
||||
<div class="col-md-5">
|
||||
{% csrf_token %}
|
||||
{{ form|bootstrap }}
|
||||
<button type="submit" class="btn btn-primary">
|
||||
{% trans "Reset my password" %}
|
||||
</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<p>{% blocktrans %}If you have any trouble resetting your password, contact us at <a href="mailto:{{ THEME_CONTACT_EMAIL }}">{{ THEME_CONTACT_EMAIL }}</a>.{% endblocktrans %}</p>
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_body %}
|
||||
<script>
|
||||
$("#id_email").focus();
|
||||
</script>
|
||||
{% endblock %}
|
27
pinaxcon/templates/account/password_reset_sent.html
Normal file
|
@ -0,0 +1,27 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
{% load account_tags %}
|
||||
|
||||
{% block head_title %}{% trans "Password reset sent" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{% trans "Password reset sent" %}</h1>
|
||||
{% if not resend %}
|
||||
<p>{% blocktrans %}We have sent you an email. If you do not receive it within a few minutes, try resending or contact us at <a href="mailto:{{ THEME_CONTACT_EMAIL }}">{{ THEME_CONTACT_EMAIL }}</a>.{% endblocktrans %}</p>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-5">
|
||||
<form method="POST" action="{% url "account_password_reset" %}">
|
||||
{% csrf_token %}
|
||||
{% for field in form %}
|
||||
{{ field.as_hidden }}
|
||||
{% endfor %}
|
||||
<button type="submit" name="resend" class="btn btn-primary">{% trans "Resend" %}</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>{% blocktrans %}We have resent the password email. If you do not receive it within a few minutes, contact us at <a href="mailto:{{ THEME_CONTACT_EMAIL }}">{{ THEME_CONTACT_EMAIL }}</a>.{% endblocktrans %}</p>
|
||||
{% endif %}
|
||||
{% endblock %}
|
21
pinaxcon/templates/account/password_reset_token.html
Normal file
|
@ -0,0 +1,21 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
{% load bootstrap %}
|
||||
|
||||
{% block head_title %}{% trans "Set your new password" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col-md-5">
|
||||
<form method="POST" action="{% url "account_password_reset_token" uidb36=uidb36 token=token %}">
|
||||
<legend>{% trans "Set your new password" %}</legend>
|
||||
<fieldset>
|
||||
{% csrf_token %}
|
||||
{{ form|bootstrap }}
|
||||
<button type="submit" class="btn btn-primary">{% trans "Save" %}</button>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
11
pinaxcon/templates/account/password_reset_token_fail.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block head_title %}{% trans "Bad token" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{% trans "Bad token" %}</h1>
|
||||
{% url "account_password_reset" as url %}
|
||||
<p>{% blocktrans %}The password reset link was invalid, possibly because it has already been used. Please request a <a href="{{ url }}">new password reset</a>.{% endblocktrans %}</p>
|
||||
{% endblock %}
|
41
pinaxcon/templates/account/signup.html
Normal file
|
@ -0,0 +1,41 @@
|
|||
{% extends "site_base.html" %}
|
||||
{% load account_tags %}
|
||||
{% load i18n %}
|
||||
{% load bootstrap %}
|
||||
|
||||
{% block head_title %}Sign up{% endblock %}
|
||||
{% block page_title %}Sign up{% endblock %}
|
||||
|
||||
{% block alert %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<form id="signup_form" method="post" action="{% url "account_signup" %}" autocapitalize="off" {% if form.is_multipart %} enctype="multipart/form-data"{% endif %}>
|
||||
{% csrf_token %}
|
||||
{{ form|bootstrap }}
|
||||
{% if redirect_field_value %}
|
||||
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
|
||||
{% endif %}
|
||||
<button type="submit" class="btn btn-primary">{% trans "Sign up" %}</button>
|
||||
</form>
|
||||
<p class="login-signup">
|
||||
<small>
|
||||
{% trans "Already have an account?" %} <strong><a href="{% urlnext 'account_login' %}">{% trans "Log in" %}</a></strong>
|
||||
</small>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
{% include "account/_signup_sidebar.html" %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %} <!-- block content -->
|
||||
|
||||
{% block scripts_extra %}
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('#id_username').focus();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
14
pinaxcon/templates/account/signup_closed.html
Normal file
|
@ -0,0 +1,14 @@
|
|||
{% extends "site_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block head_title %}{% trans "Sign up" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{% trans "This site is in private beta" %}</h1>
|
||||
<p>{% blocktrans %}If you have signup code you can enter it below.{% endblocktrans %}</p>
|
||||
<form method="get" action="">
|
||||
<div><input type="text" name="code" placeholder="{% trans 'Your signup code...' %}" /></div>
|
||||
<div><input type="submit" class="btn btn-primary"></div>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -4,8 +4,7 @@
|
|||
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="col-md-1"></div>
|
||||
<div class="col-12 col-md-10 content text-page">
|
||||
<div class="col-12 content text-page"{% if flatpage.url != '/' %} style="max-width: 45rem"{% endif %}>
|
||||
{{ flatpage.content }}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,11 +1,48 @@
|
|||
{% extends "site_base.html" %}
|
||||
{% load i18n static %}
|
||||
|
||||
{% load i18n %}
|
||||
{# NOTE: This template is not used due to flatpages. #}
|
||||
|
||||
{% block head_title %}{% trans "Welcome" %}{% endblock %}
|
||||
{% block meta_desc %}FOSSY (Free and Open Source Yearly) is a 4 day community-oriented conference focused on the creation and impact of free and open source software. Join us in Portland, OR - August 1–4th 2024 at Portland State University.{% endblock %}
|
||||
{% block og_desc %}FOSSY (Free and Open Source Yearly) is a 4 day community-oriented conference focused on the creation and impact of free and open source software. Join us in Portland, OR - August 1–4th 2024 at Portland State University.{% endblock %}
|
||||
|
||||
{% block head_title %}FOSSY 2024: The first Free and Open Source Software Yearly conference{% endblock %}
|
||||
|
||||
{% block body_class %}home{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
{{ page.body }}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<header class="pt2-ns pb4">
|
||||
<div class="flex-ns center">
|
||||
<div class="mr4 dark-green sans-serif" style="flex-grow: 1">
|
||||
<h1 class="f-subheadline f-headline-ns b lh-solid tracked-tight mv0">FOSSY 2024</h1>
|
||||
<h2 class="f3 f2-ns b lh-solid mt0 mb3">August 1–4th 2024 — Portland, OR</h2>
|
||||
<h3 class="f4 f4-ns b lh-title mv2 mv3-ns">The first Free and Open Source Software Yearly conference</h3>
|
||||
</div>
|
||||
<div class="lh-solid mt4 mt0-ns" style="font-size: 10rem; max-width: 250px;"><img class="db" src="{% static 'img/conservancy_logo_tall_mono.svg' %}" style="max-height: 180px" alt="Software Freedom Conservancy"></div>
|
||||
</div>
|
||||
<div class="mt4 mt0-ns"><a href="/attend/tickets/" class="mr2"><button type="button" class="btn btn-primary mb2">Get your ticket!</button></a>
|
||||
<a href="/call-for-proposals/" class="mr2"><button type="button" class="btn btn-primary mb2">Propose a talk</button></a>
|
||||
<a href="https://lists.sfconservancy.org/mailman/listinfo/fossy-announce"><button type="button" class="btn btn-secondary mb2">Subscribe for updates</button></a></div>
|
||||
</header>
|
||||
|
||||
<section id="content">
|
||||
<h1 class="f3 mt0 mb4">FOSS is back in Portland, OR at Portland State University!</h1>
|
||||
<div class="flex-ns">
|
||||
<div class="mw6">
|
||||
<p class="f4 mt0">Software Freedom Conservancy is so proud to announce that we are hosting a community oriented conference this coming summer. FOSSY (Free and Open Source Yearly) is focused on the creation and impact of free and open source software, uplifting contributors of all experience.</p>
|
||||
|
||||
<p>We are mindful of having a safe environment for all. In this new time of conferences, we will be focused on COVID safety and making sure all attendees feel safe participating as much as they feel comfortable (we will have a detailed policy published in the coming weeks).</p>
|
||||
|
||||
<p>As this is the first year we are running a conference of this scale, we plan to have 15 tracks for talks over 4 days. With tracks for community building, development and legal and licensing issues, our conference will provide ample learning and networking opportunities for contributors of all levels of experience. We also plan to involve significant community participation in the content of our tracks.</p>
|
||||
|
||||
<p>As we look to the future of conferences, we are excited to focus on using free software to run a conference and will seek to help reduce the amount of proprietary software that is treated as default.</p>
|
||||
</div>
|
||||
<div>
|
||||
<figure class="fr pa0 mt4 mt2-ns mr0 ml0 ml4-ns mb4">
|
||||
<img src="{% static 'img/psu-smsu.jpg' %}" alt="Aerial photograph of the Portland State University">
|
||||
<figcaption class="tc mt2">Portland State University (CC-BY 3.0)</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock content %}
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
{% load sitetree %}
|
||||
{% load static %}
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-dawn-sea">
|
||||
<nav class="navbar navbar-expand-lg navbar-dark" style="background: rgb(19,119,82); background: linear-gradient(124deg, rgba(19,119,82,1) 0%, rgba(19,106,119,1) 100%); margin-bottom: 1rem">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="/">
|
||||
<img src="{% static 'img/eo2023.svg' %}" alt="Everything Open 2023 logo" height="56px">
|
||||
<h2 class="sans-serif f2 f1-ns b lh-solid tracked-tight mv0 mr3">
|
||||
<a class="washed-yellow hover-washed-yellow" href="/" style="text-decoration: none">
|
||||
FOSSY 2024
|
||||
</a>
|
||||
</h2>
|
||||
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{% load registrasion_tags %}
|
||||
{% load lca2018_tags %}
|
||||
|
||||
<h2>Tax Invoice/Statement</h2>
|
||||
<h3>Linux Australia</h3>
|
||||
<h4>ABN 56 987 117 479</h4>
|
||||
<h2>Invoice/Statement</h2>
|
||||
<h3>Software Freedom Conservancy</h3>
|
||||
{# <h4>ABN 56 987 117 479</h4> #}
|
||||
|
||||
<p>
|
||||
Enquiries: please e-mail <a href="mailto:{{ settings.CONFERENCE_EMAIL }}">{{ settings.CONFERENCE_EMAIL }}</a>
|
||||
|
@ -23,7 +23,7 @@
|
|||
{{ invoice.recipient|linebreaksbr}}
|
||||
</div>
|
||||
|
||||
<p>This invoice has been issued as a result of an application to attend {% conference_name %}. All amounts are in Australian Dollars (AUD).</p>
|
||||
<p>This invoice has been issued as a result of an application to attend {% conference_name %}.</p>
|
||||
|
||||
<table class="table table-striped my-4">
|
||||
<thead>
|
||||
|
@ -46,10 +46,12 @@
|
|||
|
||||
<tr><th colspan="4"></th></tr>
|
||||
|
||||
{% if invoice.value|gst %}
|
||||
<tr>
|
||||
<th colspan="3">Includes 10% Australian Goods and Services Tax</th>
|
||||
<td class="text-right">${{ invoice.value|gst}}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr>
|
||||
<th colspan="3">Total</th>
|
||||
|
@ -80,11 +82,10 @@
|
|||
|
||||
<hr />
|
||||
|
||||
<p>{% conference_name %} is a project of Linux Australia, Inc.</p>
|
||||
<p>{% conference_name %} is a project of Software Freedom Conservancy Inc.</p>
|
||||
|
||||
<p>
|
||||
GPO Box 4788 <br />
|
||||
Sydney NSW 2001 <br />
|
||||
Australia <br />
|
||||
ABN 56 987 117 479 <br />
|
||||
137 MONTAGUE ST STE 380 <br />
|
||||
Brooklyn, NY 11201-3548 <br />
|
||||
{# ABN 56 987 117 479 <br /> #}
|
||||
<p>
|
||||
|
|
|
@ -96,8 +96,7 @@
|
|||
<path d="M250.66,374.21V399H247V374.21Z" fill="#36a852"/>
|
||||
<path d="M265.49,393.87l2.88,1.92a8.4,8.4,0,0,1-7,3.75,8.26,8.26,0,0,1-8.38-8.45c0-5,3.61-8.45,8-8.45s6.53,3.49,7.23,5.38l.39,1-11.3,4.67a4.3,4.3,0,0,0,4.1,2.56A4.82,4.82,0,0,0,265.49,393.87Zm-8.87-3,7.56-3.13a3.28,3.28,0,0,0-3.14-1.79A4.63,4.63,0,0,0,256.62,390.83Z" fill="#ea4535"/>
|
||||
<rect x="160.95" y="373.04" width="112" height="36" fill="none"/>
|
||||
<text transform="translate(84.43 102.23)" font-size="15" fill="#231f20" font-family="SourceSansPro-Regular, Source Sans Pro">Janua<tspan x="38.69" y="0" letter-spacing="0.02em">r</tspan>
|
||||
<tspan x="44.26" y="0">y 14 - 16 2023</tspan>
|
||||
<text transform="translate(84.43 102.23)" font-size="15" fill="#231f20" font-family="SourceSansPro-Regular, Source Sans Pro">August 1–4 2024
|
||||
</text>
|
||||
<g id="Layer_2" data-name="Layer 2">
|
||||
<g id="emperor">
|
||||
|
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 116 KiB |
|
@ -1 +1 @@
|
|||
{% load i18n %}Invoice {{ invoice.id }} from Linux Australia
|
||||
{% load i18n %}Invoice {{ invoice.id }} from Software Freedom Conservancy
|
||||
|
|
|
@ -1 +1 @@
|
|||
{% load i18n %}{{ invoice.get_status_display }} -- Invoice {{ invoice.id }} from Linux Australia
|
||||
{% load i18n %}{{ invoice.get_status_display }} -- Invoice {{ invoice.id }} from Software Freedom Conservancy
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{% load lca2018_tags %}
|
||||
{% load static %}
|
||||
|
||||
{% block head_title %}Tax Invoice/Statement #{{ invoice.id }}{% endblock %}
|
||||
{% block head_title %}Invoice/Statement #{{ invoice.id }}{% endblock %}
|
||||
{% block page_title %}{% conference_name %}{% endblock %}
|
||||
|
||||
{% block proposals_body %}
|
||||
|
|
|
@ -70,9 +70,8 @@
|
|||
<p>Pay your invoice with your Visa, Mastercard, or American Express credit or debit card. Card payments are processed by <a href="https://stripe.com">Stripe</a>.</p>
|
||||
|
||||
<p>
|
||||
No data on this form is retained by {% conference_name %}, rather it is
|
||||
sent to Stripe. In particular, credit card details are not sent
|
||||
to Linux Australia. You must allow JavaScript from <code>js.stripe.com</code> and <code>stripe.network</code> to complete payment.
|
||||
No data or credit card details on this form are retained by {% conference_name %}, rather it is
|
||||
sent directly to Stripe. You must allow JavaScript from <code>js.stripe.com</code> and <code>stripe.network</code> to complete payment.
|
||||
</p>
|
||||
|
||||
<p>You have <strong>${{ invoice.balance_due }}</strong> remaining to pay on this invoice.</p>
|
||||
|
|
|
@ -12,27 +12,30 @@
|
|||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="description" content="">
|
||||
<meta name="description" content="{% block meta_desc %}{% endblock %}">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<title>{{ head_title }}</title>
|
||||
|
||||
<meta property="og:type" content="website" />
|
||||
|
||||
<link rel="icon" href="{% static 'img/favicon.ico' %}" />
|
||||
|
||||
<!-- Cards -->
|
||||
<meta property="og:title" content="{{ head_title }}">
|
||||
<meta property="og:description" content="Everything Open 2023 - March 14-16 2023, Melbourne, Australia" />
|
||||
<meta property="og:description" content="{% block og_desc %}{% endblock %}" />
|
||||
<meta property="og:url" content="{{ request.scheme }}://{{ request.get_host }}{{ request.path }}">
|
||||
<meta name="twitter:site" content="@_everythingopen">
|
||||
<meta name="twitter:site" content="@conservancy">
|
||||
<meta name="twitter:image:alt" content="{{ head_title }}" />
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:image" content="{{ request.scheme }}://{{ request.get_host }}/media/img/card/eo-badge.ba30d338.png" />
|
||||
<meta property="og:image" content="{{ request.scheme }}://{{ request.get_host }}/media/img/card/eo-badge.ba30d338.png" />
|
||||
<meta name="twitter:image" content="{{ request.scheme }}://{{ request.get_host }}{% static 'img/conservancy_logo_tall_mono.png' %}" />
|
||||
<meta property="og:image" content="{{ request.scheme }}://{{ request.get_host }}{% static 'img/conservancy_logo_tall_mono.png' %}" />
|
||||
<meta property="og:image:width" content="400" />
|
||||
<meta property="og:image:height" content="400" />
|
||||
|
||||
{% block styles %}
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://unpkg.com/tachyons@4.12.0/css/tachyons.min.css">
|
||||
<link href="{% sass_src 'scss/app.scss' %}" rel="stylesheet" type="text/css" />
|
||||
{% block extra_style %}{% endblock %}
|
||||
{% endblock %}
|
||||
|
@ -119,30 +122,27 @@
|
|||
|
||||
<footer class="footer mt-4 d-print-none">
|
||||
<div class="container py-4">
|
||||
<!-- <div class="row">
|
||||
<div class="col-md-12 pb-12 text-center" style="margin-top: 0px;margin-bottom: 0px;border-bottom-style: solid;border-bottom-width: 0px;padding-bottom: 20px;">Wifi: FOSSY <i>(see Registration for older wifi)</i><br/>PIN: outreachy1000</div>
|
||||
</div> -->
|
||||
<div class="row">
|
||||
<div class="col-md-4 pb-4">
|
||||
<strong>Everything Open 2023</strong> <br>
|
||||
March 14-16 2023 <br>
|
||||
Naarm (Melbourne), Australia <br>
|
||||
Timezone: AEDT - UTC+11 <br>
|
||||
<a href="mailto:contact@everythingopen.au" alt="Email"><i class="bi-envelope-fill"></i></a> <a
|
||||
href="https://twitter.com/_everythingopen" alt="Twitter"><i class="bi-twitter"></i></a> <a
|
||||
href="https://www.linkedin.com/showcase/everythingopen/" alt="LinkedIn"><i class="bi-linkedin"></i></a>
|
||||
|
||||
<strong>FOSSY 2024</strong> <br>
|
||||
August 1–4th 2024 <br>
|
||||
Portland, OR<br>
|
||||
Timezone: PDT - UTC-7 <br>
|
||||
<a href="mailto:{{ settings.CONFERENCE_EMAIL }}" alt="Email"><i class="far fa-envelope"></i></a> <a
|
||||
href="https://twitter.com/_everythingopen" alt="Twitter"><i class="fab fa-twitter"></i></a> <a
|
||||
href="https://www.facebook.com/EverythingOpenConference" alt="Facebook"><i class="fab fa-facebook"></i></a> <a
|
||||
href="https://www.linkedin.com/showcase/everythingopen/" alt="LinkedIn"><i class="fab fa-linkedin"></i></a>
|
||||
href="https://twitter.com/conservancy" alt="Twitter"><i class="fab fa-twitter"></i></a> <a
|
||||
href="https://social.sfconservancy.org/conservancy" alt="Mastodon"><i class="fab fa-mastodon"></i></a>
|
||||
</div>
|
||||
<div class="col-md-4 pb-4 text-center">
|
||||
<a href="https://linux.org.au"><img src="{% static 'img/la_logo.svg' %}" alt="Linux Australia logo" class="footer-image"></a>
|
||||
<a href="https://sfconservancy.org"><img src="{% static 'img/conservancy_logo.svg' %}" alt="Software Freedom Conservancy logo" class="footer-image"></a>
|
||||
</div>
|
||||
<div class="col-md-4 pb-4 text-right">
|
||||
<small>
|
||||
<a href="#">Back to top</a><br>
|
||||
© 2022 Everything Open and <a href="http://linux.org.au/">Linux Australia</a><br>
|
||||
Linux is a registered trademark of Linus Torvalds <br>
|
||||
<a href="/colophon/">Colophon</a>
|
||||
© 2024 <a href="https://sfconservancy.org/">Software Freedom Conservancy</a><br>
|
||||
<a href="/credits/">Credits</a>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -72,7 +72,7 @@
|
|||
<h3>Account Management</h3>
|
||||
<p>If you would like to change your registered email address or password, you can use our self-service account management portal</p>
|
||||
<div>
|
||||
<a class="btn btn-primary" role="button" href="https://login.linux.conf.au/manage/">Account Management</a>
|
||||
<a class="btn btn-primary" role="button" href="{% url "account_settings" %}">Account Management</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
<fieldset>
|
||||
{% include "_form_snippet.html" with form=add_speaker_form %}
|
||||
<input type="submit" value="Add speaker" class="btn btn-primary"/>
|
||||
<a href="{% url "proposal_edit" proposal.pk %}" class="btn btn-light">{% trans 'Cancel' %}</a>
|
||||
<a href="{% url "proposal_edit" proposal.pk %}" class="btn btn-light">{% trans 'Continue editing proposal' %}</a>
|
||||
</fieldset>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<td>{{ proposal.number }}</td>
|
||||
<td>
|
||||
<a href="{% url "review_detail" proposal.pk %}">
|
||||
<small><strong>{{ proposal.speaker }}</strong></small>
|
||||
<small><strong>{{ proposal.speaker }} <{{ proposal.speaker.email }}></strong></small>
|
||||
<br />
|
||||
{{ proposal.title }}
|
||||
</a>
|
||||
|
|
|
@ -54,6 +54,26 @@
|
|||
{% autoescape off %}
|
||||
<div class="abstract pb-4"><p>{{ presentation.abstract_html|safe|clean_text|urlize }}</p></div>
|
||||
{% endautoescape %}
|
||||
|
||||
{% if presentation.videos_split %}
|
||||
<h2 class="mt-4">Videos</h4>
|
||||
{% for v in presentation.youtube_videos %}
|
||||
<iframe width="560" height="315" src="{{ v }}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
|
||||
{% endfor %}
|
||||
{% if v.other_videos %}
|
||||
<video controls style="max-width: 640px">
|
||||
{% for video in presentation.other_videos %}
|
||||
<source src="{{ video }}">
|
||||
{% endfor %}
|
||||
</video>
|
||||
{% endif %}
|
||||
<p style="margin-top: 1rem">Available sources:</p>
|
||||
<ul>
|
||||
{% for video in presentation.videos_split %}
|
||||
<li>{{ video|urlize }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
from account.forms import LoginUsernameForm
|
||||
from account.views import LoginView
|
||||
import debug_toolbar
|
||||
from django.conf import settings
|
||||
from django.conf.urls.static import static
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.views.generic import RedirectView
|
||||
from django.views.generic import TemplateView
|
||||
from django.urls import include, path
|
||||
|
@ -11,7 +14,26 @@ from django.contrib import admin
|
|||
import symposion.views
|
||||
|
||||
|
||||
class CustomLoginForm(LoginUsernameForm):
|
||||
def clean(self):
|
||||
# To use account.forms.LoginEmailForm, we need to enforce unique
|
||||
# emails. Since we probably already have duplicate emails in the system,
|
||||
# we'll defer that to next year.
|
||||
try:
|
||||
super().clean()
|
||||
except ValidationError as e:
|
||||
if '@' in self.cleaned_data['username']:
|
||||
raise ValidationError(
|
||||
f'{e.message} Please login with your username, rather than your email.'
|
||||
)
|
||||
else:
|
||||
raise
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
# Trialling homepage via flatpages.
|
||||
# path('', TemplateView.as_view(template_name="homepage.html")),
|
||||
|
||||
path('saml2/', include('djangosaml2.urls')),
|
||||
path('admin/', admin.site.urls),
|
||||
|
||||
|
@ -24,6 +46,9 @@ urlpatterns = [
|
|||
path("teams/", include("symposion.teams.urls")),
|
||||
path('raffle/', include("pinaxcon.raffle.urls")),
|
||||
|
||||
path("account/login/", LoginView.as_view(form_class=CustomLoginForm, template_name='account/login.html'), name="account_login"),
|
||||
path("account/", include("account.urls")),
|
||||
|
||||
# Required by registrasion
|
||||
path('tickets/payments/', include('registripe.urls')),
|
||||
path('tickets/', include('registrasion.urls')),
|
||||
|
|
|
@ -4,7 +4,7 @@ pinax-eventlog[django-lts]==5.1.0
|
|||
django-formset-js==0.5.0
|
||||
whitenoise==5.2.0
|
||||
dj-database-url==0.5.0
|
||||
pylibmc==1.6.1
|
||||
pylibmc==1.6.3
|
||||
django-debug-toolbar==3.1.1
|
||||
django-bootstrap-form==3.4
|
||||
django-settings-export~=1.2.1
|
||||
|
@ -14,7 +14,7 @@ django-gapc-storage==0.5.2
|
|||
django-waffle==2.0.0
|
||||
|
||||
# database
|
||||
mysqlclient==2.0.1
|
||||
# psycopg2<2.9 # For Django 2.2 to avoid "AssertionError: database connection isn't set to UTC"
|
||||
|
||||
# For testing
|
||||
django-nose==1.4.7
|
||||
|
@ -28,7 +28,7 @@ django-reversion==3.0.8
|
|||
django-sitetree==1.16.0
|
||||
django-taggit==1.3.0
|
||||
django-timezone-field==4.1.2
|
||||
easy-thumbnails==2.7.0
|
||||
easy-thumbnails==2.8.5
|
||||
bleach==3.2.1
|
||||
pytz>=2020.1
|
||||
django-ical==1.7.1
|
||||
|
@ -50,3 +50,4 @@ django-sass-processor==0.8.2
|
|||
django-compressor==2.4
|
||||
|
||||
django-crispy-forms==1.9.2
|
||||
django-user-accounts==3.2.0
|
|
@ -42,6 +42,7 @@ $red: #dc3545 !default;
|
|||
$orange: #fd7e14 !default;
|
||||
$yellow: #ffc107 !default;
|
||||
$green: #28a745 !default;
|
||||
$green2: #137752 !default;
|
||||
$teal: #20c997 !default;
|
||||
$cyan: #17a2b8 !default;
|
||||
|
||||
|
@ -66,7 +67,7 @@ $colors: map-merge(
|
|||
$colors
|
||||
);
|
||||
|
||||
$primary: $blue !default;
|
||||
$primary: $green2 !default;
|
||||
$secondary: $gray-600 !default;
|
||||
$success: $green !default;
|
||||
$info: $cyan !default;
|
||||
|
|
53
static/src/img/conservancy_logo.svg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
static/src/img/conservancy_logo_tall_mono.png
Normal file
After Width: | Height: | Size: 10 KiB |
136
static/src/img/conservancy_logo_tall_mono.svg
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
static/src/img/favicon.ico
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
static/src/img/psu-smsu.jpg
Normal file
After Width: | Height: | Size: 206 KiB |
|
@ -8,6 +8,7 @@ $dawn-sea: rgb(0, 177, 197);
|
|||
$blaze : rgb(250, 166, 26);
|
||||
$dusk-sea : rgb(0, 113, 144);
|
||||
$noon-sea : rgb(0, 141, 162);
|
||||
$washed-yellow: #fffceb;
|
||||
|
||||
|
||||
body {
|
||||
|
@ -17,7 +18,6 @@ body {
|
|||
h1, .h1,
|
||||
h2, .h2,
|
||||
h3, .h3 {
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
|
@ -53,10 +53,11 @@ h3, .h3 {
|
|||
|
||||
.navbar-nav .nav-link {
|
||||
font-size: 1.2rem;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.footer {
|
||||
border-top: 1px solid $dawn-sea;
|
||||
border-top: 1px solid $green2;
|
||||
}
|
||||
|
||||
.footer-logo {
|
||||
|
@ -101,6 +102,10 @@ h3, .h3 {
|
|||
}
|
||||
}
|
||||
|
||||
.calendar th.time {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* END LCA BRAND */
|
||||
|
||||
.messagelist {
|
||||
|
|
38
vendor/registrasion/registrasion/migrations/0009_auto_20230424_1449.py
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
# Generated by Django 2.2.28 on 2023-04-24 21:49
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('registrasion', '0008_auto_20170930_1843'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='category',
|
||||
name='required',
|
||||
field=models.BooleanField(blank=True, help_text='If enabled, a user must select an item from this category.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='speakerdiscount',
|
||||
name='is_copresenter',
|
||||
field=models.BooleanField(blank=True, help_text='This condition is met if the user is a copresenter of a presentation.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='speakerdiscount',
|
||||
name='is_presenter',
|
||||
field=models.BooleanField(blank=True, help_text='This condition is met if the user is the primary presenter of a presentation.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='speakerflag',
|
||||
name='is_copresenter',
|
||||
field=models.BooleanField(blank=True, help_text='This condition is met if the user is a copresenter of a presentation.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='speakerflag',
|
||||
name='is_presenter',
|
||||
field=models.BooleanField(blank=True, help_text='This condition is met if the user is the primary presenter of a presentation.'),
|
||||
),
|
||||
]
|
|
@ -1,6 +1,8 @@
|
|||
import csv
|
||||
import datetime
|
||||
|
||||
from django.contrib.auth.decorators import user_passes_test
|
||||
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||
from django.db import connection
|
||||
from django.shortcuts import render
|
||||
from django.http import HttpResponse
|
||||
from django.urls import reverse
|
||||
|
@ -365,3 +367,33 @@ def get_all_reports():
|
|||
''' Returns all the views that have been registered with @report '''
|
||||
|
||||
return list(_all_report_views)
|
||||
|
||||
|
||||
@login_required
|
||||
@user_passes_test(lambda u: u.is_staff)
|
||||
def attendees_report(request):
|
||||
query = """
|
||||
select prof.name, email, prod.name as ticket, company, free_text_1, free_text_2, country, of_legal_age, dietary_restrictions, accessibility_requirements, gender
|
||||
from registrasion_invoice i
|
||||
inner join registrasion_cart c on i.cart_id = c.id
|
||||
inner join registrasion_productitem pi on c.id = pi.cart_id
|
||||
inner join registrasion_product prod on pi.product_id = prod.id
|
||||
inner join auth_user u on i.user_id = u.id
|
||||
inner join registrasion_attendee a on a.user_id = u.id
|
||||
inner join registrasion_attendeeprofilebase b on b.attendee_id = a.id
|
||||
left outer join pinaxcon_registrasion_attendeeprofile prof on b.id = prof.attendeeprofilebase_ptr_id
|
||||
where prod.category_id = 1
|
||||
and i.status = 2
|
||||
"""
|
||||
response = HttpResponse(content_type='text/csv')
|
||||
filename = 'attendees_report-{}.csv'.format(
|
||||
datetime.datetime.now().strftime('%Y-%m-%d'),
|
||||
)
|
||||
response['Content-Disposition'] = f'attachment; filename={filename}'
|
||||
writer = csv.writer(response)
|
||||
with connection.cursor() as cursor:
|
||||
cursor.execute(query)
|
||||
writer.writerow([i[0] for i in cursor.description])
|
||||
for row in cursor.fetchall():
|
||||
writer.writerow(row)
|
||||
return response
|
||||
|
|
|
@ -565,7 +565,7 @@ def attendee(request, form, user_id=None):
|
|||
|
||||
try:
|
||||
attendee = people.Attendee.objects.get(user__id=user_id)
|
||||
except people.DoesNotExist:
|
||||
except people.Attendee.DoesNotExist:
|
||||
return reports
|
||||
|
||||
profile_data = []
|
||||
|
|
3
vendor/registrasion/registrasion/urls.py
vendored
|
@ -2,6 +2,7 @@ from .reporting import views as rv
|
|||
|
||||
from django.conf.urls import include
|
||||
from django.conf.urls import url
|
||||
from django.urls import path
|
||||
|
||||
from .views import (
|
||||
amend_registration,
|
||||
|
@ -24,6 +25,7 @@ from .views import (
|
|||
review,
|
||||
voucher_code,
|
||||
)
|
||||
from .reporting.reports import attendees_report
|
||||
|
||||
|
||||
public = [
|
||||
|
@ -85,6 +87,7 @@ reports = [
|
|||
rv.speaker_registrations,
|
||||
name="speaker_registrations",
|
||||
),
|
||||
path("attendees/", attendees_report, name="attendees_report"),
|
||||
]
|
||||
|
||||
|
||||
|
|
3
vendor/registrasion/registrasion/views.py
vendored
|
@ -347,8 +347,7 @@ def _guided_registration_profile_and_voucher(request):
|
|||
profile_section = GuidedRegistrationSection(
|
||||
title="Profile and Personal Information",
|
||||
form=profile_form,
|
||||
description=("<div class=\"text-info\"><em>You can come back and edit these details any time before "
|
||||
"March 10 2023.</em></div>"),
|
||||
description=("<div class=\"text-info\"><em>You can come back and edit these details</em></div>"),
|
||||
)
|
||||
|
||||
return [voucher_section, profile_section]
|
||||
|
|
2
vendor/registrasion/requirements/base.txt
vendored
|
@ -1,3 +1,3 @@
|
|||
django-nested-admin==3.3.2
|
||||
#symposion==1.0b2.dev3
|
||||
lxml==4.6.1
|
||||
#lxml==4.6.1
|
||||
|
|
3
vendor/symposion/pyproject.toml
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[build-system]
|
||||
requires = ["setuptools>=42"]
|
||||
build-backend = "setuptools.build_meta"
|
3
vendor/symposion/setup.cfg
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[metadata]
|
||||
name = symposion
|
||||
version = attr: symposion.__version__
|
3
vendor/symposion/setup.py
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
import setuptools
|
||||
|
||||
setuptools.setup()
|