{% trans "Sorry! The page you're looking for isn't available." %}
11 | 12 | {% url 'core:events' as events_url %} 13 |17 | {% blocktrans trimmed %} 18 | Find out about organizing a Django Girls workshop in your city. 19 | {% endblocktrans %} 20 |
21 |{% trans "To see applications that have been submitted to your workshop, choose an event from the list below:" %}
8 |15 | {% url 'admin:applications_form_add' as add_url %} 16 | {% blocktrans trimmed %} 17 | To see submitted applications, you need to add an application form first. 18 | {% endblocktrans %} 19 |
20 | {% endif %} 21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /templates/admin/base_site.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base.html" %} 2 | {% load static %} 3 | {% load i18n rev %} 4 | 5 | {% block title %}{{ title }} | {% trans "Django Girls admin" %}{% endblock %} 6 | 7 | {% block extrastyle %} 8 | {{ block.super }} 9 | 10 | 11 | {% endblock %} 12 | 13 | {% block branding %} 14 |{% trans "We will send them access instructions through automated email." %}
8 | 9 |11 | {% blocktrans trimmed %} 12 | The event for {{ city|title }} has already happened and the webpage is 13 | no longer live. 14 | {% endblocktrans %} 15 |
16 | {% else %} 17 |18 | {% blocktrans %} 19 | The event page for {{ city|title }} will be coming soon. 20 | {% endblocktrans %} 21 |
22 | {% endif %} 23 |24 | {% blocktrans trimmed %} 25 | If you want to contact the organizers of this event, you can email them at 26 | {{ page_url|lower }}@djangogirls.org 27 | {% endblocktrans %} 28 |
29 | 30 | {% url 'core:events' as events_url %} 31 |7 | {% trans "Application process closes on July 23rd and you'll be informed about acceptance or rejection by July 28th (or sooner)!" %} 8 |
9 | {# TODO: This link probably doesn't work #} 10 | {% trans "Register" %} 11 |7 | {% url 'contact:landing' as contact_url %} 8 | {% blocktrans trimmed %} 9 | We would be delighted if you would like to join us as a mentor! 10 | Contact us if you're interested ❤️ 11 | {% endblocktrans %} 12 |
13 |18 | {% blocktrans trimmed %} 19 | This workshop is a part of bigger initiative: Django Girls. 20 | It is a non-profit organization and events are organized by volunteers in different places of the world. 21 | {% endblocktrans %} 22 |
23 |24 | {% blocktrans trimmed %} 25 | To see the source for the program find us on Github: 26 | github.com/DjangoGirls. 27 | {% endblocktrans %} 28 |
29 |30 | {% blocktrans trimmed %} 31 | If you want to bring Django Girls to your city, drop us a line 32 | {% endblocktrans %} 33 |
34 |6 | {% url 'contact:landing' as contact_url %} 7 | {% blocktrans trimmed %} 8 | We couldn't be here without the support from amazing people and organizations 9 | who donated money, knowledge and time to help us make this a reality. 10 | If you want to contribute and support our goal, please get it touch 11 | {% endblocktrans %} 12 |
-------------------------------------------------------------------------------- /templates/donations/error.html: -------------------------------------------------------------------------------- 1 | {% extends 'global/base.html' %} 2 | {% load i18n static %} 3 | 4 | {% block content %} 5 |9 | {% trans "Sorry, an error has occurred" %} 10 |
11 | {% if stripe_message %} 12 |{{ stripe_message }}
13 | {% endif %} 14 |{{ answer.question.title|safe }}
7 | {{ answer.answer|linebreaksbr }}
{% trans "Hi there!" %}
4 | 5 |{% blocktrans with event=event.name %}Congrats! You can now manage {{ event }} event!{% endblocktrans %}
6 | 7 |{% blocktrans with page_url=event.page_url %}The website address is https://djangogirls.org/{{ page_url }}{% endblocktrans %}
8 | 9 |
10 | {% blocktrans trimmed %}
11 | To manage it, login here:
12 | https://djangogirls.org/admin/
13 | {% endblocktrans %}
14 |
17 | {% blocktrans trimmed with email=user.email %}
18 | Email: {{ email }}
19 | Use your existing password.
20 | {% endblocktrans %}
21 |
{% trans "Here you can find instructions on editing website: https://organize.djangogirls.org/website/" %}
24 | 25 |26 | {% blocktrans with email=event.email %} 27 | Your event's email is {{ email }}. Ask the main organizer of you event 28 | for password and instructions to access it. 29 | {% endblocktrans %} 30 |
31 | 32 |33 | {% blocktrans trimmed %} 34 | You can contact hello@ if you need assistance but it's usually faster to check Slack channel - there are more people that can help you! :) 35 | {% endblocktrans %} 36 |
37 | 38 |
39 | {% trans "Hugs, rainbows and sunshines!" %}
40 | Django Girls
41 |
Hello {{ contact_person.split.0 }},
3 | 4 |Thank you for supporting our work.
5 | 6 | {% if sponsor_level == "Bronze" and prospective_sponsor %} 7 |May I please have your company logo and a short write-up for 8 | announcing you as our sponsor on social media, and any company pictures you may have?
9 | {% elif prospective_sponsor %} 10 |May I please have your company logo, company pictures and a short write-up on your company so I can do a blog post 11 | announcing you as our global sponsor as well as for use in our periodic tweets on our sponsors?
12 | 13 | {% else %} 14 |For our existing sponsors, we can either announce them again or offer them the chance to publish a guest post on our blog. 15 | If you have a post you would like featured on our blog, you can send it to me and we can post it on your behalf if it 16 | meets our Code of Conduct.
17 | {% endif %} 18 | 19 |Once again, thank you for supporting our work.
20 |Sparkles, cupcakes and high-fives, 🎉🎊🎉✨🍰👋
22 | 23 |Anna Makarudze
24 | Fundraising Coordinator,
25 | Django Girls Foundation
26 |
Hello {{ contact_person.split.0 }}
4 | 5 |My name is Anna Makarudze. I am the fundraising coordinator for Django Girls Foundation.
6 | 7 |We are currently looking for new corporate sponsors who will sponsor us through either monthly donations 8 | or with a once off annual donation. I would like to check with you if your company would consider sponsoring Django Girls.
9 | 10 |Please see attached our sponsors deck for 2023 https://drive.google.com/file/d/1T2jL9tnu5ZkNvkQRAxd7jlt_BnX7VCLE/view 11 | for our sponsor packages.
12 | 13 |If your organisation is interested, kindly get back to me and we can discuss next steps or set up a meeting 14 | if you would like to get on a call for more details.
15 | 16 |Looking forward to hearing from you soon.
17 |Sparkles, cupcakes and high-fives, 🎉🎊🎉✨🍰👋
19 | 20 |
21 | Anna Makarudze
22 | Fundraising Coordinator,
23 | Django Girls Foundation
24 |
Hello {{ contact_person.split.0 }}
3 | 4 |We would like to thank you for supporting our work this year and look forward to working with you 5 | in the new year.
6 | 7 |Happy holidays from all of us at Django Girls!
8 |Sparkles, cupcakes and high-fives, 🎉🎊🎉✨🍰👋
10 | 11 |Anna Makarudze
12 | Fundraising Coordinator,
13 | Django Girls Foundation
14 |
{% trans "Hi there!" %}
4 | 5 |{% trans "Congrats! You're now a Django Girls organizer, so awesome! Here is access to your website:" %}
6 | 7 |{% blocktrans with page_url=event.page_url %}Your website address is https://djangogirls.org/{{ page_url }}{% endblocktrans %}
8 | 9 |
10 | {% blocktrans trimmed %}
11 | Login here:
12 | https://djangogirls.org/admin/
13 | {% endblocktrans %}
14 |
17 | {% blocktrans with email=user.email %}
18 | Email: {{ email }}
19 | Password: {{ password }}
20 | {% endblocktrans %}
21 |
{% trans "Here you can find instructions on editing website: https://organize.djangogirls.org/website/" %}
24 | 25 |26 | {% blocktrans trimmed with email=event.email %} 27 | Your event's email is {{ email }}. Ask the main organizer of you event 28 | for password and instructions to access it. 29 | {% endblocktrans %} 30 |
31 | 32 |{% trans "We also invited you to Django Girls Slack, where we chat, communicate and meet each other!" %}
33 | 34 |35 | {% blocktrans trimmed %} 36 | You can contact hello@ if you need assistance but it's usually faster to check Slack channel - there are more people that can help you! :)* 37 | {% endblocktrans %} 38 |
39 | 40 |
41 | {% trans "Hugs, rainbows and sunshines!" %}
42 | Django Girls
43 |
{% blocktrans with event=event.city %}Hi team {{ event }}!{% endblocktrans %}
4 | 5 |{% trans "How are you? We hope you are doing fantastic! :)" %}
6 | 7 |8 | {% blocktrans trimmed with event=event.city %} 9 | We've noticed that the Django Girls {{event.city}} event has no live website or isn’t open for applications yet. 10 | Is everything going well with preparations? 11 | {% endblocktrans %} 12 |
13 | 14 |{% trans "Let us know how it goes. If you're stuck on something, we can definitely help! :)" %}
15 | 16 |
17 | {% trans "Hugs, cupcakes and sparkles" %},
18 | Django Girls team
19 |
{% trans "Hello there," %}
4 | 5 |6 | {% blocktrans trimmed with city=application.city %} 7 | Thank you so much for taking the time to submit an application to organize Django Girls {{ city }} workshop. 8 | {% endblocktrans %} 9 |
10 | 11 |12 | {% blocktrans trimmed %} 13 | We reviewed your application and we think that you need to do a little bit more planning before we can give you a positive answer. 14 | Please read our Organizer’s Manual and ensure you meet all the requirements to host 15 | a workshop carefully, and then read experiences of other organizers on our blog: 16 | Seoul, 17 | Wrocław, 18 | Windhoek 19 | or Budapest 20 | to see how much work is required to organize the workshop. 21 | {% endblocktrans %} 22 |
23 | 24 |25 | {% trans "When you have more things planned (like potential date, venue, coaches or sponsors), get back to us by filling out the form again." %} 26 |
27 | 28 |
29 | {% blocktrans trimmed %}
30 | Have a lovely day and thank you again for reaching out to us!
31 | Django Girls team
32 | {% endblocktrans %}
33 |
{% blocktrans with event=event.city %}Hello team {{ event }}!{% endblocktrans %}
4 | 5 |{% trans "Hope you’re all doing fantastic and took some well deserved rest after organizing your Django Girls workshop :)" %}
6 | 7 |8 | {% url 'admin:core_event_change' event.id as event_url %} 9 | {% blocktrans trimmed with base=settings.BASE_URL %} 10 | Just a friendly reminder to fill out this form to provide information how 11 | many people attended your workshop. This will help us show the global impact that Django Girls is having on the world! :) 12 | {% endblocktrans %} 13 |
14 | 15 |
16 | {% trans "Hugs, rainbows and sunshines!" %}
17 | Django Girls
18 |
{{ field.field.help_text|safe }}
8 | {% endif %} 9 | 10 | {% if field.errors %} 11 | {% for error in field.errors %} 12 |{{ error }}
13 | {% endfor %} 14 | {% endif %} 15 | 16 |13 | {% trans "Stay up to date with everything that's happening in Django Girls valley:" %} 14 |
15 | 20 |27 | {% trans "Everyone can organize their own Django Girls event and share it with their community." %} 28 |
29 | {% trans "Find out more" %} 30 |{{ sponsor.description }}
{% endif %} 12 |{{ job.location }}
18 |{{ job.remuneration }}
19 | 20 |{{ job.description| safe }}
21 |11 | {% blocktrans trimmed %} 12 | Please note that due to the Global Covid-19 Pandemic, we have suspended all in-person workshop applications. 13 | We have updated our Organiser Manual to support remote workshops as a potential alternative. Please 14 | consider applying for a remote workshop instead. 15 | {% endblocktrans %} 16 |
17 | 18 |{% trans "Any inconveniences caused are sincerely regretted." %}
19 |😃 {% blocktrans %}All done! Go ahead and get back to being awesome now. 💖 Thanks for all you do!{% endblocktrans %}
9 | {% endblock registration_message %} 10 | -------------------------------------------------------------------------------- /templates/registration/password_reset_confirm.html: -------------------------------------------------------------------------------- 1 | {% extends 'registration/base.html' %} 2 | {% load i18n %} 3 | 4 | {% block title %}{% trans "Password Reset" %} ⏰{% endblock title %} 5 | 6 | {% block registration_message %} 7 |{% trans "Alright, the big event. Enter a new, super safe and super memorable (just to you!) password." %} 🌼
8 | {% endblock registration_message %} 9 | 10 | {% block submit_button %} 11 | 12 | {% endblock submit_button %} 13 | -------------------------------------------------------------------------------- /templates/registration/password_reset_done.html: -------------------------------------------------------------------------------- 1 | {% extends 'registration/base.html' %} 2 | {% load i18n %} 3 | 4 | {% block title %} 5 | {% trans "Check Your" context "Followed by mailbox icon, check your inbox or email" %} 📥 6 | {% endblock title %} 7 | 8 | {% block registration_message %} 9 |10 | {% url 'contact:landing' as contact_url %} 11 | {% url 'password_reset' as reset_url %} 12 | {% blocktrans trimmed %} 13 | We just sent reset instructions to your email. If you have any issues, try again and if 14 | you still don't get anything, say hello! 15 | {% endblocktrans %} 16 |
17 | {% endblock registration_message %} 18 | -------------------------------------------------------------------------------- /templates/registration/password_reset_form.html: -------------------------------------------------------------------------------- 1 | {% extends 'registration/base.html' %} 2 | {% load i18n %} 3 | 4 | {% block title %}{% trans "Forget your password?" %}{% endblock title %} 5 | 6 | {% block registration_message %} 7 |{% trans "Been thinking about cupcakes and high fives too much lately? It's okay, we can make a new password for you. Enter your email and we'll send you reset instructions." %} 🙋 🍰
8 | {% endblock registration_message %} 9 | 10 | {% block submit_button %} 11 | 12 | {% endblock submit_button %} 13 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevPioneer007/FastAPI-website/022892b0f32a10d3708f0629c12bec800f2a667f/tests/__init__.py -------------------------------------------------------------------------------- /tests/applications/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevPioneer007/FastAPI-website/022892b0f32a10d3708f0629c12bec800f2a667f/tests/applications/__init__.py -------------------------------------------------------------------------------- /tests/applications/conftest.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from applications.models import Application, Form, Score 4 | 5 | 6 | @pytest.fixture 7 | def future_event_form(future_event): 8 | return Form.objects.create(event=future_event) 9 | 10 | 11 | @pytest.fixture 12 | def scored_applications(future_event_form, admin_user): 13 | Application.objects.bulk_create(Application(form=future_event_form, email=f"foo+{i}@email.com") for i in range(5)) 14 | 15 | applications = Application.objects.filter(form=future_event_form) 16 | 17 | for i, application in enumerate(applications): 18 | Score.objects.create(user=admin_user, application=application, score=i + 1) 19 | 20 | return applications 21 | -------------------------------------------------------------------------------- /tests/applications/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevPioneer007/FastAPI-website/022892b0f32a10d3708f0629c12bec800f2a667f/tests/applications/models/__init__.py -------------------------------------------------------------------------------- /tests/applications/models/conftest.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from applications.models import Application, Email, Form 4 | from core.models import Event, User 5 | 6 | 7 | @pytest.fixture 8 | def event(db): 9 | return Event.objects.create(name="Test", city="Test", country="Test", is_page_live=True, page_url="test") 10 | 11 | 12 | @pytest.fixture 13 | def form(db, event): 14 | return Form.objects.create(event=event) 15 | 16 | 17 | @pytest.fixture 18 | def user(db): 19 | return User.objects.create(email="test@test.com") 20 | 21 | 22 | @pytest.fixture 23 | def another_user(db): 24 | return User.objects.create(email="test2@test.com") 25 | 26 | 27 | @pytest.fixture 28 | def application(db, form): 29 | return Application.objects.create(form=form) 30 | 31 | 32 | @pytest.fixture 33 | def accepted_application(db, form): 34 | return Application.objects.create(email="recipient@email.com", form=form, state="accepted") 35 | 36 | 37 | @pytest.fixture 38 | def email(db, form, user): 39 | return Email.objects.create( 40 | form=form, 41 | author=user, 42 | subject="Test", 43 | text="Hey! [rsvp-url-yes] [rsvp-url-no] Bye", 44 | recipients_group="accepted", 45 | ) 46 | -------------------------------------------------------------------------------- /tests/applications/models/test_email.py: -------------------------------------------------------------------------------- 1 | def test_get_rsvp_link(email, event): 2 | link = email.get_rsvp_link("abcd") 3 | assert "abcd" in link 4 | assert event.page_url in link 5 | 6 | 7 | def test_add_rsvp_links(accepted_application, email): 8 | assert "[rsvp-url-yes]" in email.text 9 | assert "[rsvp-url-no]" in email.text 10 | body = email.add_rsvp_links(email.text, accepted_application) 11 | 12 | assert accepted_application.get_rsvp_yes_code() in body 13 | assert accepted_application.get_rsvp_no_code() in body 14 | assert "[rsvp-url-yes]" not in body 15 | assert "[rsvp-url-no]" not in body 16 | 17 | 18 | def test_send(accepted_application, email): 19 | email.send() 20 | 21 | assert email.number_of_recipients == 1 22 | assert email.successfuly_sent == accepted_application.email 23 | -------------------------------------------------------------------------------- /tests/applications/models/test_forms.py: -------------------------------------------------------------------------------- 1 | from datetime import timedelta 2 | 3 | from django.utils import timezone 4 | 5 | from applications.models import Form 6 | from applications.questions import DEFAULT_QUESTIONS 7 | 8 | 9 | def test_adding_default_questions(event): 10 | # Each new form should automatically create default questions 11 | form = Form.objects.create(event=event) 12 | assert form.question_set.count() == len(DEFAULT_QUESTIONS) 13 | 14 | # If you update the form, the default questions shouldn't be added 15 | form.text_header = "Test" 16 | form.save() 17 | assert form.question_set.count() == len(DEFAULT_QUESTIONS) 18 | 19 | 20 | def test_no_application_dates(event): 21 | form = Form.objects.create(event=event) 22 | assert form.application_open is True 23 | 24 | 25 | def test_application_open(event): 26 | now = timezone.now() 27 | form = Form.objects.create(event=event, open_from=now - timedelta(days=1), open_until=now + timedelta(days=1)) 28 | assert form.application_open is True 29 | 30 | 31 | def test_application_in_future(event): 32 | now = timezone.now() 33 | form = Form.objects.create(event=event, open_from=now + timedelta(days=1), open_until=now + timedelta(days=2)) 34 | assert form.application_open is False 35 | 36 | 37 | def test_application_closed(event): 38 | now = timezone.now() 39 | form = Form.objects.create(event=event, open_from=now - timedelta(days=2), open_until=now - timedelta(days=1)) 40 | assert form.application_open is False 41 | -------------------------------------------------------------------------------- /tests/applications/models/test_questions.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from applications.models import Question 4 | 5 | 6 | def test_get_choices_as_list(form): 7 | # correctly return choices of a choices field 8 | question = Question.objects.filter(question_type="choices")[:1].get() 9 | assert sorted(question.get_choices_as_list()) == sorted(question.choices.split(";")) 10 | 11 | # return TypeError if field is not a choices field 12 | question = Question.objects.filter(question_type="paragraph")[:1].get() 13 | with pytest.raises(TypeError): 14 | question.get_choices_as_list() 15 | -------------------------------------------------------------------------------- /tests/applications/test_utils.py: -------------------------------------------------------------------------------- 1 | from django.utils.translation import activate 2 | 3 | from applications.questions import get_organiser_menu 4 | 5 | 6 | def test_organiser_menu_entries_en(): 7 | activate("en") # default language, but to be explicit 8 | menu = get_organiser_menu("london") 9 | assert menu[0]["url"] == "/en/london/applications/" 10 | assert menu[1]["url"] == "/en/london/communication/" 11 | 12 | 13 | def test_organiser_menu_entries_fr(): 14 | activate("fr") # test french 15 | menu = get_organiser_menu("london") 16 | assert menu[0]["url"] == "/fr/london/applications/" 17 | assert menu[1]["url"] == "/fr/london/communication/" 18 | -------------------------------------------------------------------------------- /tests/applications/vcr/application_form_prevent_duplicate_emails.yaml: -------------------------------------------------------------------------------- 1 | interactions: 2 | - request: 3 | body: null 4 | headers: 5 | Accept: ['*/*'] 6 | Accept-Encoding: ['gzip, deflate'] 7 | Authorization: [Basic dXNlcjpOb25l] 8 | Connection: [keep-alive] 9 | User-Agent: [python-requests/2.12.4] 10 | method: GET 11 | uri: https://us8.api.mailchimp.com/3.0/lists/d278270e6f/members/e32bd13e2add097461cb96824b7a829c 12 | response: 13 | body: 14 | string: !!binary | 15 | H4sIAAAAAAAAAz2OsW7DMAxEf4XQ0sW1GqCTt4xBlq4ZGYmwhUqiIFEuhCD/HhoBOt+7d/cwMgqZ 16 | xWwiZbHW006RC9U5YYhuC6nMjpP17HqiLCiBs/3P7NqDp2apVq6fa+TWsA5rJiNB4uE9/1zgSgMu 17 | eccYvCZNJb2Z5fvrNBlPoi7lbtwrHPCvwgkH3AnCuzMBVxjcP3YCFKFUhDwIAzpHrYFsBH+V8woe 18 | BZ2+1Ps6FLJOZXe8MM8XoMmQIukAAAA= 19 | headers: 20 | Connection: [keep-alive] 21 | Content-Encoding: [gzip] 22 | Content-Length: ['194'] 23 | Content-Type: [application/problem+json; charset=utf-8] 24 | Date: ['Sat, 07 Jan 2017 16:28:03 GMT'] 25 | Link: ['