beaver_manager package

Beaver Management app using flask

beaver_manager.app

Flask – Flask application instance

beaver_manager.db

SQLAlchemy – SQLAlchemy databse instance

Submodules

beaver_manager.decorators module

beaver_manager.decorators.async(f)[source]

Decorator that will make any function asynchronus

beaver_manager.email module

Module to control email

beaver_manager.email.send_email(subject, sender, recipients, text_body, html_body)[source]

Sends email to recipent using the flasks email module

Args: subject (str): Plain text sender (str): Sender of email in plain text recepients (str): Reciepent email. Can be list of strings text_body (str): Body of message without HTML formatting html_body (str): Body of message with HTML formattin

beaver_manager.forms module

class beaver_manager.forms.BeaverAttendanceForm(formdata=<class 'flask_wtf.form._Auto'>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: flask_wtf.form.Form

beavers = <UnboundField(MultiCheckboxField, ('Present: ',), {'coerce': <class 'int'>})>
class beaver_manager.forms.BeaverSortForm(formdata=<class 'flask_wtf.form._Auto'>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: flask_wtf.form.Form

sort_on = <UnboundField(SelectField, ('Sort By',), {'choices': [('surname', 'Surname'), ('first_name', 'First Name'), ('lodge.name', 'Lodge')]})>
class beaver_manager.forms.EmailForm(formdata=<class 'flask_wtf.form._Auto'>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: flask_wtf.form.Form

message = <UnboundField(TextAreaField, (), {})>
subject = <UnboundField(StringField, (), {})>
class beaver_manager.forms.MultiCheckboxField(label=None, validators=None, coerce=<class 'str'>, choices=None, **kwargs)[source]

Bases: wtforms.fields.core.SelectMultipleField

A multiple-select, except displays a list of checkboxes.

Iterating the field will produce subfields, allowing custom rendering of the enclosed checkbox fields.

option_widget = <wtforms.widgets.core.CheckboxInput object>
widget = <wtforms.widgets.core.ListWidget object>
class beaver_manager.forms.TripSortForm(formdata=<class 'flask_wtf.form._Auto'>, obj=None, prefix='', csrf_context=None, secret_key=None, csrf_enabled=None, *args, **kwargs)[source]

Bases: flask_wtf.form.Form

sort_on = <UnboundField(SelectField, ('Sort By',), {'choices': [('date', 'Date'), ('location', 'Location')]})>

beaver_manager.models module

This module contains SQLAlchemy model definitions to create SQL tables

class beaver_manager.models.Attendance(**kwargs)[source]

Bases: flask_sqlalchemy.Model

A model for a meeting. Linked to a Criterion to allow automatic completetion of badges. If beaver was present for the meeting then the criterion is completed.

id

int – Unique Primary Key.

date

DateTime – Date of meeting

criterion_id

int – Foreign key for Criterion

criterion

Criterion – Provides a link to the Criterion that Attendance is asscociated with

description

str – Brief description of evening

organiser

str – Name of organiser for that meeting

class beaver_manager.models.Badge(**kwargs)[source]

Bases: flask_sqlalchemy.Model

Model for a Badge

id

int – Unique Primary Key.

name

str – Name of the badge

img_url

str – URL for the badge image

beavers_badges

list[BeaverBadge] – A list of beavers_badges asscociated with the lodge

class beaver_manager.models.BadgeCriterion(criterion_id, badge_id, completed)[source]

Bases: flask_sqlalchemy.Model

Model for a BadgeCriterion. Acts as an intermediary between BeaverBadge and Criterion

Parameters:
  • criterion_id (int) – Foreign key for Criterion
  • badge_id (int) – Foreign key for BeaverBadge
  • completed (bool) – Represents whether the criterion has been completed or not
id

int – Unique Primary Key.

criterion

Crterion – Provides a link to the Criterion that criterion is asscociated with

badge

BeaverBadge – Provides a link to the BeaverBadge that criterion is asscociated with

description

str – Desription of criterion

class beaver_manager.models.Beaver(**kwargs)[source]

Bases: flask_sqlalchemy.Model

Model for a beaver

id

int – Unique Primary Key.

first_name

str – The beaver’s first name

surname

str – The beaver’s surname

dob

DateTime – The beaver’s date of birth

lodge_id

int – Foreign key for Lodge table

lodge

Lodge – Provides direct access to the Lodge that is that is linked to the beaver

contacts

list[EmergencyContact] – A list of EmergencyContact objects associated with the beaver

badges

list[BeaverBadge] – A list of BeaverBadge associated with the beaver

beaver_attendances

list[BeaverAttendance] – A list of BeaverAttendance objects associated with the beaver

class beaver_manager.models.BeaverAttendance(attendance_id, beaver_id, present)[source]

Bases: flask_sqlalchemy.Model

Model for a BeaverAttendance. Acts as an intermediary between Beaver and Attendance

Parameters:
  • attendance_id (int) – Foreign key for Attendance
  • beaver_id (int) – Foreign key for Beaver
  • present (bool) – Represents whether the beaver was been presesnt or not
id

int – Unique Primary Key.

attendance

Attendance – Provides a link to the Attendance that BeaverAttendance is asscociated with

beaver

Beaver – Provides a link to the Beaver that BeaverAttendance is asscociated with

class beaver_manager.models.BeaverBadge(beaver_id, badge_id, completed)[source]

Bases: flask_sqlalchemy.Model

Model for a BeaverBadge. Acts as an intermediary between Beaver and Badge

Parameters:
  • beaver_id (int) – Foreign key for Beaver
  • badge_id (int) – Foreign key for Badge
  • completed (bool) – Represents whether the badge has been completed or not
id

int – Unique Primary Key.

beaver

Beaver – Provides a link to the Beaver that badge is asscociated with

class beaver_manager.models.BeaverTrip(beaver_id, trip_id, permission, paid)[source]

Bases: flask_sqlalchemy.Model

Model for a BeaverTrip. Acts as intermediary between Beaver and Trip

Parameters:
  • beaver_id (int) – Foreign key for Beaver
  • trip_id (int) – Foreign key for Trip
  • permission (bool) – Represents whether the criterion has been completed or not
  • paid (bool) – Represents whether the criterion has been completed or not
id

int – Unique Primary Key.

beaver

Beaver – Provides a link to the Beaver that BeaverTrip is asscociated with

trip

Trip – Provides a link to the Trip that BeaverTrip is asscociated with

class beaver_manager.models.Criterion(**kwargs)[source]

Bases: flask_sqlalchemy.Model

Model for a Criterion.

id

int – Unique Primary Key.

badge_id

int – Foreign key for Badge

badge

Badge – Provides a link to the Badge that criterion is asscociated with

description

str – Desription of criterion

class beaver_manager.models.EmergencyContact(**kwargs)[source]

Bases: flask_sqlalchemy.Model

Model for an Emergency contact

id

int – Unique Primary Key.

beaver_id

int – Foreign Key for the Beaver table

beaver

Beaver – Provides direct access to the Beaver that is

linked to the contact
first_name

str – The contact’s first name

surname

str – The contact’s surname

email

str – The contact’s email

phone_number

str – The contact’s phone number

address_line1

str – The contact’s first address line

address_line2

str – The contact’s first second address line

town

str – The town in which the Contact lives

county

str – The county in which the Contact lives

postcode

str – The contact’s postcode

class beaver_manager.models.Lodge(**kwargs)[source]

Bases: flask_sqlalchemy.Model

Model for a Lodge (group of beavers)

id

int – Unique Primary Key.

name

str – Name of the lodge

beavers

list[Beaver] – A list of beavers asscociated with the lodge

class beaver_manager.models.Trip(**kwargs)[source]

Bases: flask_sqlalchemy.Model

A model for a Trip.

id

int – Unique Primary Key.

location

str – Place Name

cost

numeric – Cost of trip [Max Value of 99999.99]

date

DateTime – Date of trip

overnight

bool – Whether trip is overight

number_of_nights

int – Number of nights the trip is

beaver_manager.views module

This module contains the views for the app.

Using flasks route() function to route the request it then executes the nesecerrary code return a rendered template at the end.

class beaver_manager.views.AttendanceModelView(model, session, name=None, category=None, endpoint=None, url=None, static_folder=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: flask_admin.contrib.sqla.view.ModelView

Custom view for Flask-Admin. Adds BeaverAttendance as an inline view

action_view()

Mass-model action view.

ajax_lookup()
ajax_update()

Edits a single column of a record in list view.

create_view()

Create model view

delete_view()

Delete model view. Only POST method is allowed.

details_view()

Details model view

edit_view()

Edit model view

export_csv()

Export a CSV of records.

form_excluded_columns = 'beaver_attendances'
index_view()

List view

class beaver_manager.views.BadgeModelView(model, session, name=None, category=None, endpoint=None, url=None, static_folder=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: flask_admin.contrib.sqla.view.ModelView

Custom view for Flask-Admin. Adds criterion as inline model and modifies update behaviour

action_view()

Mass-model action view.

ajax_lookup()
ajax_update()

Edits a single column of a record in list view.

create_view()

Create model view

delete_view()

Delete model view. Only POST method is allowed.

details_view()

Details model view

edit_view()

Edit model view

export_csv()

Export a CSV of records.

form_excluded_columns = 'beaver_badges'
index_view()

List view

inline_models = (<class 'beaver_manager.models.Criterion'>,)
on_model_change(form, model, is_created)[source]

When a Badge record is created or modified ensures that it has a BeaverBadge record for all Beavers and that the BeaverBadge has the correct criteria

on_model_delete(model)[source]

When a Badge is deleted, delete all :class:`BeaverBadge`s associated with it.

class beaver_manager.views.BeaverBadgeModelView(model, session, name=None, category=None, endpoint=None, url=None, static_folder=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: flask_admin.contrib.sqla.view.ModelView

Only used for debugging. Custom view for Flask-Admin. Adds BadgeCriterion as an inline view

action_view()

Mass-model action view.

ajax_lookup()
ajax_update()

Edits a single column of a record in list view.

create_view()

Create model view

delete_view()

Delete model view. Only POST method is allowed.

details_view()

Details model view

edit_view()

Edit model view

export_csv()

Export a CSV of records.

index_view()

List view

inline_models = (<class 'beaver_manager.models.BadgeCriterion'>,)
class beaver_manager.views.BeaverModelView(model, session, name=None, category=None, endpoint=None, url=None, static_folder=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: flask_admin.contrib.sqla.view.ModelView

Custom view for Flask-Admin. Adds emergency contacts as inline model and modifies update behaviour

action_view()

Mass-model action view.

ajax_lookup()
ajax_update()

Edits a single column of a record in list view.

create_view()

Create model view

delete_view()

Delete model view. Only POST method is allowed.

details_view()

Details model view

edit_view()

Edit model view

export_csv()

Export a CSV of records.

form_excluded_columns = ('badges', 'beaver_attendances', 'trips')
index_view()

List view

inline_models = (<class 'beaver_manager.models.EmergencyContact'>,)
on_model_change(form, model, is_created)[source]

When a Beaver record is created or modified ensures that it has a BeaverBadge record for all Badges and that the BeaverBadge has the correct criteria

on_model_delete(model)[source]

When a beaver is deleted delete all :class:`BeaverBadge`s, :class:`BeaverTrip`s, :class:`BeaverAttendance`s and :class:`EmergencyContact`s associated with it.

class beaver_manager.views.ChoiceObj(name, choices)[source]

Bases: object

class beaver_manager.views.MyHomeView(name=None, category=None, endpoint=None, url=None, template='admin/index.html', menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: flask_admin.base.AdminIndexView

index()[source]
class beaver_manager.views.TripModelView(model, session, name=None, category=None, endpoint=None, url=None, static_folder=None, menu_class_name=None, menu_icon_type=None, menu_icon_value=None)[source]

Bases: flask_admin.contrib.sqla.view.ModelView

Custom view for Flask-Admin modifying update behaviour

action_view()

Mass-model action view.

ajax_lookup()
ajax_update()

Edits a single column of a record in list view.

create_view()

Create model view

delete_view()

Delete model view. Only POST method is allowed.

details_view()

Details model view

edit_view()

Edit model view

export_csv()

Export a CSV of records.

form_excluded_columns = 'trips'
index_view()

List view

on_model_change(form, model, is_created)[source]

When a Trip record is created or modified ensures that it has a BeaverTrip record for all Beavers.

on_model_delete(model)[source]

When a Trip is deleted, delete all :class:`BeaverTrip`s associated with it.

beaver_manager.views.beaver(beaver_id)[source]

Displays Information about the given beaver

Parameters:beaver_id (int) – The ID number of the beaver record
beaver_manager.views.beavers()[source]

Queries the database for all beavers then displays a list of them

beaver_manager.views.index(success=None, error=None)[source]

Displays the homepage

Parameters:
  • success (str) – Message to be displayed in toatr success pop up
  • error (str) – Message to be displayed in toatr error pop up
beaver_manager.views.internal_error(error)[source]
beaver_manager.views.not_found_error(error)[source]
beaver_manager.views.register(attendance_id)[source]

Displays a form to record beavers atendance.

Parameters:attendance_id (int) – The ID number of the attendance record
beaver_manager.views.registers()[source]

Displays a list displaying dates for which registers can be taken

beaver_manager.views.trip(trip_id)[source]

Displays information about the trip and allows user to select whether or a bevaer has paid for the trip and has permission for the trip

Parameters:trip_id (int) – The ID number of the trip record
beaver_manager.views.trips()[source]

Displays a list of all trips linking to an indiviual view showing more data

beaver_manager.logic module

This module contains any logic that does not belong in any other module

beaver_manager.logic.to_percent(value, total)[source]

Works out the percentage of a value from a total.

Parameters:
  • value (int) – The value to be converted
  • total (int) – The total to be used in conversion
Returns:

Number between 0.0 and 100.0

Return type:

(int)

beaver_manager.logic.update_beaver_badge(beaver_badge)[source]

Checks to see if all the criteria are completed for beaver_badge and if so sets beaver_badge.completed to True

Parameters:
  • beaver_badge (BeaverBadge) – The beaver badge which need
  • checking
beaver_manager.logic.update_criterion(attendance)[source]

Check whether a beaver was present for a given attendance and if so sets the corrosponding criterion.completed to True

Parameters:attendance (Attendance) – The attendance for which criterion need updating