Coder Social home page Coder Social logo

epcon's Introduction

CI Pipeline Documentation Status

README

This project (and its dependencies) contains the EuroPython website source code.

The code is used for the EuroPython 2021 website.

LICENSE

As a general rule, the whole website code is copyrighted by the Python Italia non-profit association, and released under the 2-clause BSD license (see LICENSE.bsd).

Some CSS files (within directories p3/static/p4/s and p3/static/p5/s) are instead explicitly marked as non-free; those files implement the current EuroPython website design and Python Italia wants to keep full rights on it. They are still published on GitHub as a reference for implementing a new design.

You are thus welcome to fork away and reuse/enhance this project, as long as you use it to publish a website with a new design (without reusing the current EuroPython design).

DEVELOPMENT

Pre-requisites

In order to run the project locally, you need to have Docker and docker-compose installed.

You can install the above mentioned packages manually or you can use our helper commands.

On Ubuntu 18.04+ run:

$ make install-docker-ubuntu

On MacOS run:

$ make install-docker-osx

On other platforms please follow the instructions described here:

The minimum versions the Makefile was tested with are:

$ docker --version
Docker version 18.09.2, build 6247962
$ docker-compose --version
docker-compose version 1.23.2, build 1110ad01

Development env setup

Initialise the database and development fixtures:

$ make init-env

Get the project up and running:

$ docker-compose up

You should be able to access the local instance of the website at http://localhost:8888.

You can access the admin pages using the admin username. You can login to the public pages using either [email protected] or [email protected]. All users' passwords are europython.

Debugging with VS Code

To start a server with the VS Code debugger enabled, run:

$ docker-compose -f docker-compose.yml -f docker-compose-vscode-debugger.yml up

Next, run "Start Debugging" command in VS Code (otherwise, the docker-compose up command will be stuck waiting for the debugger to attach). Now you can put breakpoints in your code (even in the Django template files).

Testing

$ make test

CONTRIBUTING

Note: We are using the ep2021 branch for the production version of the website, once we have switched on production, and dev/ep2021 during development leading up to the production version. The instructions reference the ep2021 branch - please adjust to dev/ep2021 for the development version.

  1. Make a fork of github.com/europython/epcon
  2. Make changes in your fork (ideally on a feature/bugfix branch)
  3. Make sure your branch is based on latest upstream/ep2021
  4. Push your changes
  5. Create a pull request to europython/epcon, targeting ep2021 branch.

IMPORTANT: all the active development happens on the ep2021 branch, master is not up to date.

Development Guidelines

To give you some direction of where we're going with the codebase, here's a short of list of things we have in mind for the near future.

  • The current codebase needs major refactorings and updates, and we really appreciate all the help, but before doing anything big please talk to us (EuroPython Web WG), so we can coordinate with other ongoing developments.

    You can use github issues for that, or find us on our public telegram group here -> https://t.me/sprintseuropythonsite

  • We currently have three major django apps – p3, assopy and conference. They are here for historical reasons, and our plan forward is to slowly get rid of p3 and assopy and replace all of them with just conference app. (This is very long term plan)

  • We've chosen to go with an approach of rewriting the epcon 'in place', which in plain English means we're adding new features and APIs (python functions and classes) within conference/ app, and then slowly removing old pieces of logic from old apps. See conference/invoicing.py for an example.

  • We use pytest and prefer the pytest tests over DjangoTestCase tests, however both are fine. Similar as above, we have a new tests/ directory and we put all tests, organised by topic, in those files. See tests/test_invoicing.py

  • We prefer integration tests (ie. using django test client) over unit tests, particulary for old features/pieces of code. Given that our current test coverage is lower than we'd like it to be, pull requests that just add tests are very welcome.

  • We also like WIP (Work In Progress) pull requests, and Proof-of-Concept proposals. If you'd like to work on something, that may take a long time, please open WIP PR (and add WIP to the title)

  • Branch names that start with feature/ bugfix/ tests/ and have descriptive names like docs/update-readme-with-dev-guidelines are preferable to 'patch-1' ;)

epcon's People

Contributors

alanderex avatar alexsavio avatar aramboi avatar artcz avatar borjaayerdi avatar c8e avatar dvd0101 avatar europython-society avatar fpierfed avatar fpliger avatar gendoikari avatar hugovk avatar judy2k avatar leriomaggio avatar malemburg avatar matrixise avatar misterrios avatar passiomatic avatar patrick91 avatar protoroto avatar rasky avatar raulcd avatar rciorba avatar sm6xmm avatar sparkiegeek avatar spleenteo avatar switowski avatar synasius avatar umgelurgel avatar yakky avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

epcon's Issues

Link to code of conduct broken

When I'm in the registration process and click on the link to the code of conduct, I get

"""
Page not found (404)
Request Method: GET
Request URL: http://ep2015.europython.eu/en/code-of-conduct/

Using the URLconf defined in pycon.urls, Django tried these URL patterns, in this order:

^accounts/
^admin/filebrowser/
^admin/rosetta/
^admin/templatesadmin/
^admin/
^comments/
^p3/
^conference/
^conference/talks/(?P<slug>[\w-]+)$ [name='conference-talk']
^conference/speakers/(?P<slug>[\w-]+) [name='conference-speaker']
^hcomments/
^i18n/
^markitup/
^login/(?P<backend>[^/]+)/$ [name='begin']
^complete/(?P<backend>[^/]+)/$ [name='complete']
^disconnect/(?P<backend>[^/]+)/$ [name='disconnect']
^disconnect/(?P<backend>[^/]+)/(?P<association_id>[^/]+)/$ [name='disconnect_individual']
^login/$ [name='login']
^logout/$ [name='logout']
^password_change/$ [name='password_change']
^password_change/done/$ [name='password_change_done']
^password_reset/$ [name='password_reset']
^password_reset/done/$ [name='password_reset_done']
^reset/(?P<uidb36>[0-9A-Za-z]{1,13})-(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$ [name='password_reset_confirm']
^reset/done/$ [name='password_reset_complete']
^media/(?P<path>.*)$
^en/ ^ ^(?P<slug>[0-9A-Za-z-_.//]+)/$ [name='pages-details-by-slug']
^en/ ^ ^$ [name='pages-root']

The current URL, en/code-of-conduct/, didn't match any of these.

You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
"""

DoesNotExist at /accounts/profile/

After using "login with google" you'll get an error.
Probably depending on

/Users/christianbarra/Dev/ep2015/src/assopy/assopy/views.py in profile
user = request.user.assopy_user 

Replace social Auth manager

The current app registered at google for social auth management it linked to my personal account and points to dev address. Before launch we should:

  • register a new proper app under the official europython account (ping @malemburg can you do that?)
  • activate the GPlus App auth on that app otherwise it will not work..
  • set both the dev.europython.eu, europython.eu and ep2015.europython.eu as redirects
  • set the new app auth keys on settings.py

Add sponsor logos

The logos can be found in the Sponsor-WG dropbox folder.

Please ask the sponsor WG for details, e.g. URLs to link back to and which sponsors to include in which order.

"View public profile" gives traceback

https://dev.europython.eu/conference/p/marc-andre-lemburg

Environment:

Request Method: GET
Request URL: http://dev.europython.eu/conference/p/marc-andre-lemburg

Django Version: 1.5.11
Python Version: 2.7.9
Installed Applications:
('filebrowser',
'p3',
'assopy',
'assopy.stripe',
'conference',
'social.apps.django_app.default',
'djangocms_admin_style',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.markup',
'django.contrib.redirects',
'django.contrib.comments',
'djangocms_text_ckeditor',
'cmsplugin_filer_file',
'cmsplugin_filer_folder',
'cmsplugin_filer_link',
'cmsplugin_filer_image',
'cmsplugin_filer_teaser',
'cmsplugin_filer_video',
'djangocms_grid',
'cms',
'menus',
'sekizai',
'tagging',
'taggit',
'authority',
'mptt',
'microblog',
'hcomments',
'django_xmlrpc',
'pingback',
'rosetta',
'south',
'templatesadmin',
'email_template',
'paypal.standard.ipn',
'filer',
'easy_thumbnails',
'recaptcha_works',
'django_crontab',
'formstyle',
'cms_migration',
'markitup',
'cms_utils',
'raven.contrib.django.raven_compat')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.http.ConditionalGetMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.transaction.TransactionMiddleware',
'assopy.middleware.DebugInfo',
'pycon.middleware.RisingResponse',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware')

Template error:
In template /usr/src/app/p3/templates/conference/profile_publicdata_company_form.html, error at line 30
Invalid filter: 'form_field'
20 :

Sito web

21 :

22 : {% if profile_data.company_homepage %}

23 : {{ profile_data.company_homepage|beautify_url }}

24 : {% else %}

25 :

26 : {% endif %}

27 :

28 :

29 :

30 : {% if full_access %}

31 :

32 : {{ form.company|form_field }}

33 : {{ form.job_title|form_field }}

34 : {{ form.company_homepage|form_field }}

35 :

36 : {% endif %}

37 :

38 :

39 :

Traceback:
File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response

  1.                     response = callback(request, _callback_args, *_callback_kwargs)
    
    File "/usr/src/app/src/conference/conference/views.py" in wrapper
  2.             return render_to_response(tpl, output, RequestContext(request), mimetype=ct)
    
    File "/usr/local/lib/python2.7/site-packages/django/shortcuts/init.py" in render_to_response
  3. return HttpResponse(loader.render_to_string(_args, *_kwargs), **httpresponse_kwargs)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
  4.     t = get_template(template_name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in get_template
  5. template, origin = find_template(template_name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in find_template
  6.         source, display_name = loader(name, dirs)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in call
  7.     return self.load_template(template_name, template_dirs)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in load_template
  8.         template = get_template_from_string(source, origin, template_name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in get_template_from_string
  9. return Template(source, origin, name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in init
  10.     self.nodelist = compile_string(template_string, origin)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in compile_string
  11. return parser.parse()
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in parse
  12.                 compiled_result = compile_func(self, token)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader_tags.py" in do_extends
  13. nodelist = parser.parse()
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in parse
  14.                 compiled_result = compile_func(self, token)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader_tags.py" in do_block
  15. nodelist = parser.parse(('endblock',))
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in parse
  16.                 compiled_result = compile_func(self, token)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader_tags.py" in do_include
  17.                                isolated_context=isolated_context)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader_tags.py" in init
  18.         t = get_template(template_path)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in get_template
  19. template, origin = find_template(template_name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in find_template
  20.         source, display_name = loader(name, dirs)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in call
  21.     return self.load_template(template_name, template_dirs)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in load_template
  22.         template = get_template_from_string(source, origin, template_name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in get_template_from_string
  23. return Template(source, origin, name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in init
  24.     self.nodelist = compile_string(template_string, origin)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in compile_string
  25. return parser.parse()
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in parse
  26.                 compiled_result = compile_func(self, token)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader_tags.py" in do_include
  27.                                isolated_context=isolated_context)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader_tags.py" in init
  28.         t = get_template(template_path)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in get_template
  29. template, origin = find_template(template_name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in find_template
  30.         source, display_name = loader(name, dirs)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in call
  31.     return self.load_template(template_name, template_dirs)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in load_template
  32.         template = get_template_from_string(source, origin, template_name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/loader.py" in get_template_from_string
  33. return Template(source, origin, name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in init
  34.     self.nodelist = compile_string(template_string, origin)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in compile_string
  35. return parser.parse()
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in parse
  36.                 compiled_result = compile_func(self, token)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/defaulttags.py" in do_if
  37. nodelist = parser.parse(('elif', 'else', 'endif'))
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in parse
  38.             filter_expression = self.compile_filter(token.contents)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in compile_filter
  39.     return FilterExpression(token, self)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in init
  40.             filter_func = parser.find_filter(filter_name)
    
    File "/usr/local/lib/python2.7/site-packages/django/template/base.py" in find_filter
  41.         raise TemplateSyntaxError("Invalid filter: '%s'" % filter_name)
    

Exception Type: TemplateSyntaxError at /conference/p/marc-andre-lemburg
Exception Value: Invalid filter: 'form_field'

Pdf invoice

I can't open my invoice "the file is empty"

Blam! A 5xx error occured

After paying with stripe (at least I got a nice green background tick for a second or two) I got
Blam! A 5xx error occured
and no confirmation email whatsoever. Now I am not sure if I paid or not.
I can retry later today just let me know.

Paypal payments don't work

Reported on the ML:

Subject: Re: [EuroPython] EuroPython 2015: We've opened the flood gates :-)
Date: Tue, 03 Mar 2015 15:18:55 +0000
From: Roberto Martínez [email protected]
To: M.-A. Lemburg [email protected], EuroPython Mailing List [email protected]

Hi,

there is a problem with the paypal payment option. Paypal issues this
warning:

"We cannot process this transaction because there is a problem with the
PayPal email address supplied by the seller. Please contact the seller to
resolve the problem. If this payment is for an eBay listing, you can
contact the seller via the "Ask Seller a Question" link on the listing
page. When you have the correct email address, payment can be made at
www.paypal.com."

Best regards,
Roberto

Missing Vendor folder

In production lacks the vendor folder.

then:

  • modernizr-min.js
  • bootstrap-min.js
  • retina.js

return 404 and the profile page's tabs don't work.

Cheers :)

"Report bugs" link somewhere on the website

It'd be nice if people who notice typos or other things like that would know where to report them without having to ask on the mailing list.

A "Report bugs" link in the footer (or perhaps in the Contacts page), pointing to this GitHub repository, would be helpful for that.

pre-launch checklist

List of tasks to do before launch:

  • Solve Paypal redirect [#12]
  • Reset STRIPE from test to production
  • Reset Google Social Auth [#52]
  • Register all sponsors and logos
  • Upload sponsors resized logo if app does not resize
  • redirect europython.eu to ep2015.europython.eu (and configure nginx to that subdmain)
  • review fares and deadlines
  • add missing texts at home
  • check helpdesk email is correctly set and visible on the app (menu?footer?)
  • feeds (https://dev.europython.eu/en/blog/feeds/latest/) -> 404
  • set ALLOWED_HOSTS

CFP form spanish proposal unclear error

The form submit fails if the proposal fields are set like in the following image:
After submitting, the language option highlights with red, but no error message is displayed.

image

Disable features that aren't ready yet

These things are currently listed on the website, but not yet ready for production:

  • calendar
  • CFP
  • newsletter box

(possibly more, once you are logged in)

Translation messages check.

Some %trans tags are not working well because of HTML tags in them.
Should we put translations for Spanish and Basque?

Message about Italian laws

"We require date of birth for speakers to accomodate for Italian laws regarding minors."

Seen in the profile personal data page.

Normal and social accounts are not merged

Hi, I had a registered account with my email and a ticket bought. I tried to login with Google and I can't login anymore with username/password. Also, the ticket is gone from my profile. I still have an old session with the ticket in my profile though.

Am I the only one? =)

Website installation fails with DatabaseError: no such table: conference_talk

I followed the instructions from the README.md, but then get this output from migrate (after a syncdb run):

europython-2015/epcon> python manage.py migrate
/home/lemburg/egenix/projects/europython-2015/epcon/src/assopy/assopy/utils.py:61: RuntimeWarning: unique index on auth_user.email is missing, use: CREATE UNIQUE INDEX auth_user_unique_email ON auth_user(email COLLATE NOCASE);
warnings.warn(msg, RuntimeWarning)

Running migrations for p3:

  • Migrating forwards to 0010_auto__chg_field_hotelroom_booking.

    p3:0003_p3talks

  • Migration 'p3:0003_p3talks' is marked for no-dry-run.
    ! Error found during real run of migration! Aborting.

    ! Since you have a database that does not support running
    ! schema-altering statements in transactions, we have had
    ! to leave it in an interim state between migrations.

! You might be able to recover with: (migration cannot be dry-run; cannot discover commands)
! The South developers regret this has happened, and would
! like to gently persuade you to consider a slightly
! easier-to-deal-with DBMS (one that supports DDL transactions)
! NOTE: The error which caused the migration to fail is further up.
Error in migration: p3:0003_p3talks
DatabaseError: no such table: conference_talk

Refactor the code base into a single repository

The current setup uses three repos:

  • epcon
  • conference
  • assopy

Live would be much easier, if we'd just merge all of these into a single epcon repository and get rid off all the error prone subclassing, extending, etc.

We solve some issues, if you agree with our changes we can start using our conference library

Environment variable to limit maximum tickets (more spagethi code, but it WORKS!)
env name:
https://github.com/EuroPython/conference/blob/master/conference/settings.py#L31
and also the dates are important:
https://github.com/EuroPython/conference/blob/master/conference/models.py#L679

When submiting there was an issue with the birthday, if the user didnt set the birhtday the web sit crashed and the user couldt apply a proposal.

We solve with this (in conference app):
https://github.com/EuroPython/conference/blob/master/conference/forms.py#L185

If you agree with this emprovements just change from requirements the pythonItalia/conference and start using Europython/conference.

Cheers

Cannot edit talk proposal

When trying to edit my talk proposal (to fix the wording and add some tags), saving does not work. At the top of the form, I see the messages

slides_agreement
    This field is required.
video_agreement
    This field is required.

and the entry is not updated.

Additionally, these messages are displayed in plain text rather than like error messages.

STRIPE_CURRENCY

AttributeError at /en/accounts/stripe/checkout/3/

'Settings' object has no attribute 'STRIPE_CURRENCY'

You get this error if you try to buy a ticket with stripe.

CFP form changes

Reported by Alexander from the Program WG:

Language:
Spanish instead of Italian

Talk type:
remove „a 4-hours“ before training, we only have 2,5 /3 hours training.

Duration:
remove 90 minutes
maybe we also could add:
2,5 hours training
3 hours training

Helpdesk durations missing in CFP form

From the helpdesk:

  1. The list is still missing help desk durations (and actually, nowhere
    does it say how long the help desk session is supposed to be).

The latter is not quite true anymore, since we've added that information yesterday.

Talk submission agreements

There are currently two checkboxes on the submission page:

  • I agree to let the organization record my talk and publish the video. (required)
  • I agree to release all the talk material after the event. (required)

This needs to be replaced with:

  • I have read, understood and agree to the EuroPython Speaker Release Agreement

with "EuroPython Speaker Release Agreement" linking to /speaker-release-agreement/

The note under the second bullet can be changed to:

"If the talk is accepted, speakers are encouraged to upload their talk slides to the web site."

Reset password template

From Mal:

Template error:
In template /usr/src/app/src/assopy/assopy/templates/registration/password_reset_email.html, error
at line 8
Reverse for 'django.contrib.auth.views.password_reset_confirm' with arguments '()' and keyword
arguments '{u'uidb36': u'c', u'token': u'3zi-8279b766d747c198f50f'}' not found.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.