Parcourir la source

Add a render helper that adds required globals

pull/38/head
Sindre Stephansen il y a 5 ans
Parent
révision
a4a1bd5451
10 fichiers modifiés avec 38 ajouts et 54 suppressions
  1. +1
    -12
      src/app/views/app.py
  2. +4
    -6
      src/app/views/apply.py
  3. +5
    -7
      src/app/views/index.py
  4. +3
    -5
      src/app/views/login.py
  5. +0
    -3
      src/app/views/logout.py
  6. +3
    -5
      src/app/views/new_project.py
  7. +2
    -5
      src/app/views/open_projects.py
  8. +4
    -6
      src/app/views/project.py
  9. +3
    -5
      src/app/views/register.py
  10. +13
    -0
      src/app/views/utils.py

+ 1
- 12
src/app/views/app.py Voir le fichier

@@ -1,6 +1,5 @@
import os
import web
from views.utils import get_nav_bar, csrf_field
from views.login import Login
from views.logout import Logout
from views.register import Register
@@ -13,7 +12,7 @@ from views.apply import Apply
# Connect to smtp server, enables web.sendmail()
try:
smtp_server = os.getenv("smtp_server") + ":25"
web.config.smtp_server = smtp_server
web.config.smtp_server = smtp_server
except:
smtp_server = "molde.idi.ntnu.no:25"
web.config.smtp_server = smtp_server
@@ -39,9 +38,6 @@ urls = (
# Initialize application using the web py framework
app = web.application(urls, globals())

# Get html templates
render = web.template.render('templates/')

# Set session timeout
web.config.session_parameters['timeout'] = 15000000

@@ -52,16 +48,9 @@ if web.config.get('_session') is None:
else:
session = web.config._session

# Add session to global variables
render._add_global(session, 'session')

# Add CSRF field to global variables
web.template.Template.globals['csrf_field'] = csrf_field

# Make the session available cross modules through webctx
def session_hook():
web.ctx.session = session
web.template.Template.globals['session'] = session

app.add_processor(web.loadhook(session_hook))



+ 4
- 6
src/app/views/apply.py Voir le fichier

@@ -1,11 +1,9 @@
import web
import models.project
from models.user import get_user_name_by_id
from views.utils import get_nav_bar, get_element_count, csrf_protected
from views.utils import get_nav_bar, get_element_count, csrf_protected, get_render
from views.forms import get_apply_form, get_apply_permissions_form

# Get html templates
render = web.template.render('templates/')

class Apply:

@@ -30,8 +28,7 @@ class Apply:
apply_permissions_form = get_apply_permissions_form()
applicants = [[session.userid, session.username]]
permissions = [["TRUE", "TRUE", "TRUE"]]
render = web.template.render('templates/', globals={"get_apply_permissions_form":get_apply_permissions_form, 'session':session})

render = get_render(globals={"get_apply_permissions_form": get_apply_permissions_form})
return render.apply(nav, apply_form, get_apply_permissions_form, project, applicants, permissions)

@csrf_protected
@@ -49,7 +46,8 @@ class Apply:
apply_permission_form = get_apply_permissions_form()

# Prepare globals
render = web.template.render('templates/', globals={"get_apply_permissions_form":get_apply_permissions_form, 'session':session})
render = get_render(globals={"get_apply_permissions_form": get_apply_permissions_form})

if data.projectid:
project = models.project.get_project_by_id(data.projectid)



+ 5
- 7
src/app/views/index.py Voir le fichier

@@ -1,17 +1,15 @@
import web
import models.project
from views.utils import get_nav_bar
from views.utils import get_nav_bar, get_render

# Get html templates
render = web.template.render('templates/')

class Index:
def GET(self):
"""
"""
Get main page using the projects URL input variable to
determine which projects to show.
:return: index page
"""
session = web.ctx.session
@@ -31,4 +29,4 @@ class Index:
project_bulk_one = models.project.get_projects_by_status_and_owner(str(session.userid), "finished")
project_bulk_two = models.project.get_projects_by_participant_and_status(str(session.userid), "finished")

return render.index(nav, project_bulk_one, project_bulk_two, data.projects, categories)
return get_render().index(nav, project_bulk_one, project_bulk_two, data.projects, categories)

+ 3
- 5
src/app/views/login.py Voir le fichier

@@ -1,6 +1,6 @@
import web
from views.forms import login_form
from views.utils import get_nav_bar, csrf_protected
from views.utils import get_nav_bar, csrf_protected, get_render
import models.session
import models.user
import logging
@@ -11,9 +11,6 @@ import time

logger = logging.getLogger(__name__)

# Get html templates
render = web.template.render('templates/')

# The remember cookie should be valid for a week
remember_timeout = 3600*24*7

@@ -39,7 +36,7 @@ class Login():
# Log the user in if the rememberme cookie is set and valid
self.check_rememberme()

return render.login(nav, login_form, "")
return get_render().login(nav, login_form, "")

@csrf_protected
def POST(self):
@@ -50,6 +47,7 @@ class Login():
session = web.ctx.session
nav = get_nav_bar(session)
data = web.input(username="", password="", remember=False)
render = get_render()

# Validate login credential with database query
user = models.user.get_user(data.username)


+ 0
- 3
src/app/views/logout.py Voir le fichier

@@ -2,9 +2,6 @@ import web
from views.utils import get_nav_bar
import models.session

# Get html templates
render = web.template.render('templates/')


class Logout:



+ 3
- 5
src/app/views/new_project.py Voir le fichier

@@ -1,13 +1,10 @@
import web
from web import form
from views.forms import get_task_form_elements, get_project_form_elements, get_user_form_elements, project_buttons
from views.utils import get_nav_bar, get_element_count, csrf_protected
from views.utils import get_nav_bar, get_element_count, csrf_protected, get_render
import models.project
import models.user

# Get html templates
render = web.template.render('templates/')


class New_project:
def GET(self):
@@ -24,7 +21,7 @@ class New_project:
task_form_elements = get_task_form_elements()
user_form_elements = get_user_form_elements()
project_form = form.Form(*(project_form_elements + task_form_elements + user_form_elements))
return render.new_project(nav, project_form, project_buttons, "")
return get_render().new_project(nav, project_form, project_buttons, "")

@csrf_protected
def POST(self):
@@ -35,6 +32,7 @@ class New_project:
"""
session = web.ctx.session
nav = get_nav_bar(session)
render = get_render()

# Try the different URL input parameters to determine how to generate the form
data = web.input(add_user=None, remove_user=None,


+ 2
- 5
src/app/views/open_projects.py Voir le fichier

@@ -1,10 +1,7 @@
import web
from views.utils import get_nav_bar
from views.utils import get_nav_bar, get_render
from models.project import get_categories, get_projects_by_status_and_category

# Get html templates
render = web.template.render('templates/')


class Open_projects:
def GET(self):
@@ -20,4 +17,4 @@ class Open_projects:
open_projects = get_projects_by_status_and_category(data.categoryid, "open")
nav = get_nav_bar(session)
categories = get_categories()
return render.open_projects(nav, categories, open_projects)
return get_render().open_projects(nav, categories, open_projects)

+ 4
- 6
src/app/views/project.py Voir le fichier

@@ -1,13 +1,10 @@
import web
import models.project
from views.utils import get_nav_bar, csrf_protected
from views.utils import get_nav_bar, csrf_protected, get_render
from views.forms import project_form
import os
from time import sleep

# Get html templates
render = web.template.render('templates/')


class Project:

@@ -38,8 +35,9 @@ class Project:
else:
project = [[]]
tasks = [[]]
render = web.template.render('templates/', globals={'get_task_files':models.project.get_task_files, 'session':session})
return render.project(nav, project_form, project, tasks,permissions, categories)

render = get_render(globals={'get_task_files': models.project.get_task_files})
return render.project(nav, project_form, project, tasks, permissions, categories)

@csrf_protected
def POST(self):


+ 3
- 5
src/app/views/register.py Voir le fichier

@@ -1,6 +1,6 @@
import web
from views.forms import register_form
from views.utils import get_nav_bar, csrf_protected, password_weakness
from views.utils import get_nav_bar, csrf_protected, password_weakness, get_render
import models.register
import models.user
import logging
@@ -9,9 +9,6 @@ import re

logger = logging.getLogger(__name__)

# Get html templates
render = web.template.render('templates/')


class Register:

@@ -23,7 +20,7 @@ class Register:
"""
session = web.ctx.session
nav = get_nav_bar(session)
return render.register(nav, register_form, "")
return get_render().register(nav, register_form, "")

@csrf_protected
def POST(self):
@@ -35,6 +32,7 @@ class Register:
session = web.ctx.session
nav = get_nav_bar(session)
data = web.input()
render = get_render()

register = register_form()
if not register.validates():


+ 13
- 0
src/app/views/utils.py Voir le fichier

@@ -2,6 +2,19 @@ import web
from uuid import uuid4


def get_render(path='templates/', globals={}, **kwargs):
default_globals = {
'session': web.config._session,
'csrf_field': csrf_field,
}

return web.template.render(
path,
globals={**default_globals, **globals},
**kwargs,
)


def get_nav_bar(session):
"""
Generates the page nav bar


Chargement…
Annuler
Enregistrer