vulyk.ext package

Submodules

vulyk.ext.leaderboard module

class vulyk.ext.leaderboard.LeaderBoardManager(task_type_name: str, answer_model: vulyk.models.tasks.AbstractAnswer, user_model: type)[source]

Bases: object

get_leaderboard(limit: int)List[Dict[str, Union[vulyk.models.user.User, int]]][source]

Find users who contributed the most

Parameters

limit (int) – number of top users to return

Returns

List of dicts {user: user_obj, freq: count}

Return type

List[Dict[str, Union[User, int]]]

get_leaders()List[Tuple[bson.objectid.ObjectId, int]][source]

Return sorted list of tuples (user_id, tasks_done)

Returns

list of tuples (user_id, tasks_done)

Return type

List[Tuple[ObjectId, int]]

vulyk.ext.storage module

Copy files from all static folders to root folder.

class vulyk.ext.storage.Storage(collect, verbose: bool = False)[source]

Bases: flask_collect.storage.file.Storage

Storage that copies static files.

vulyk.ext.worksession module

class vulyk.ext.worksession.WorkSessionManager(work_session_model: Type[U])[source]

Bases: object

This class is responsible for accounting of work-sessions. Every time we give a task to user, a new session record is being created. If user skips the task, we mark it as skipped and delete the session. When user finishes the task, we close the session having added the timestamp of the event. Thus we’re able to perform any kind of data mining and stats counting using the data later.

Could be overridden in plugins.

U

alias of TypeVar(‘U’)

delete_work_session(task: vulyk.models.tasks.AbstractTask, user_id: bson.objectid.ObjectId)None[source]

Deletes current WorkSession if skipped.

Parameters
  • task (AbstractTask) – Given task

  • user_id (ObjectId) – ID of user, who skips a task

Raises

WorkSessionLookUpError – session is not found; WorkSessionUpdateError – can not delete the session

end_work_session(task: vulyk.models.tasks.AbstractTask, user_id: bson.objectid.ObjectId, answer: vulyk.models.tasks.AbstractAnswer)None[source]

Ends given WorkSession for given user. This is the route for correctly finished tasks: given session to be marked as closed and a timestamp of the event to be saved.

Parameters
  • task (AbstractTask) – Given task

  • user_id (ObjectId) – ID of user, who finishes a task

  • answer (AbstractAnswer) – Given answer

Raises

WorkSessionLookUpError – session is not found; WorkSessionUpdateError – can not close the session

record_activity(task: vulyk.models.tasks.AbstractTask, user_id: bson.objectid.ObjectId, seconds: int)None[source]

Update an activity counter. The intention is to find out how much time was actually spent working on the task, excluding sexting, brewing coffee and jogging.

Parameters
  • task (AbstractTask) – The task the session belongs to.

  • user_id (ObjectId) – ID of current user

  • seconds (int) – User was active for

Raises

WorkSessionLookUpError – session is not found; WorkSessionUpdateError – can not update the session

start_work_session(task: vulyk.models.tasks.AbstractTask, user_id: bson.objectid.ObjectId)None[source]

Starts new WorkSession for given user. By default we use datetime.now in the underlying model to save in start_time field.

A user should finish a certain task only once, that’s why we perform an upsert below.

Parameters
  • task (AbstractTask) – Given task

  • user_id (ObjectId) – ID of user, who gets new task

Raises

WorkSessionUpdateError – can not start a session

Module contents