pjplan package

Subpackages

Submodules

pjplan.calendar module

pjplan.calendar.DEFAULT_CALENDAR = Weekly: [-, -] | MON | TUE | WED | THU | FRI | SAT | SUN | | 8.0 | 8.0 | 8.0 | 8.0 | 8.0 | 0.0 | 0.0 |

Default calendar monday-friday with 8 hours per day

class pjplan.calendar.DirectCalendar(units: Dict[datetime, float] | None = None)

Bases: IWorkCalendar

property dates
get_available_units(date: datetime) float

Returns number of work hours for date :param date: date :return: number of work hours

set_units(units: Dict[datetime, float])
class pjplan.calendar.FixedCalendar(units: float, start: datetime | None = None, end: datetime | None = None)

Bases: IWorkCalendar

get_available_units(date: datetime) float

Returns number of work hours for date :param date: date :return: number of work hours

class pjplan.calendar.FuncCalendar(calendar: IWorkCalendar, func: Callable[[float], float])

Bases: IWorkCalendar

get_available_units(date: datetime) float

Returns number of work hours for date :param date: date :return: number of work hours

class pjplan.calendar.IWorkCalendar

Bases: ABC

Work calendar interface

apply(func: Callable[[float], float]) IWorkCalendar
abstract get_available_units(date: datetime) float

Returns number of work hours for date :param date: date :return: number of work hours

class pjplan.calendar.WeeklyCalendar(start: datetime | None = None, end: datetime | None = None, days: List[int] | None = None, units_per_day: int | float | Dict[int, float] | None = None)

Bases: IWorkCalendar

IWorkCalendar implementation with following arguments: 1. working_days - list of week working days 0 - monday, 1 - tuesday, etc. 2. day_hours - number of working hours in working day

clone() WeeklyCalendar
property end
get_available_units(date: datetime) float

Returns number of work hours for date :param date: date :return: number of work hours

get_week_day_hours() Dict[int, float]
property start
class pjplan.calendar.WorkCalendarDisjunction(calendars: Iterable[IWorkCalendar])

Bases: IWorkCalendar

get_available_units(date: datetime) float

Returns number of work hours for date :param date: date :return: number of work hours

class pjplan.calendar.WorkCalendarDiv(calendars: Iterable[IWorkCalendar])

Bases: IWorkCalendar

get_available_units(date: datetime) float

Returns number of work hours for date :param date: date :return: number of work hours

class pjplan.calendar.WorkCalendarSub(calendars: Iterable[IWorkCalendar])

Bases: IWorkCalendar

get_available_units(date: datetime) float

Returns number of work hours for date :param date: date :return: number of work hours

class pjplan.calendar.WorkCalendarSum(calendars: Iterable[IWorkCalendar])

Bases: IWorkCalendar

get_available_units(date: datetime) float

Returns number of work hours for date :param date: date :return: number of work hours

class pjplan.calendar.WorkCalendarsMul(calendars: Iterable[IWorkCalendar])

Bases: IWorkCalendar

get_available_units(date: datetime) float

Returns number of work hours for date :param date: date :return: number of work hours

pjplan.resource module

class pjplan.resource.IResource(name: str)

Bases: ABC

Ресурс - человек, машина или любая другая сущность, которая необходима для выполнения работы (Task)

abstract get_available_units(date: datetime) float
get_nearest_availability_date(start_date: datetime, direction: int, max_days=100) datetime

Возвращает ближайшую дату доступности ресурса, начиная со start_date :param direction: 1 или -1 :param start_date: дата начала поиска :param max_days: максимальный интервал поиска (в днях) :return: дата доступности

class pjplan.resource.Resource(name: str, calendar: ~pjplan.calendar.IWorkCalendar = Weekly: [-, -] | MON | TUE | WED | THU | FRI | SAT | SUN | | 8.0 | 8.0 | 8.0 | 8.0 | 8.0 | 0.0 | 0.0 |)

Bases: IResource

get_available_units(date: datetime) float

Возвращает количество доступных рабочих часов ресурса в указанную дату :param date: дата :return: количество доступных часов ресурса

pjplan.schedule module

class pjplan.schedule.BackwardScheduler(end: datetime | None = None, resources: List[IResource] | None = None, balance_resources: bool = True, default_estimate: int = 0)

Bases: IScheduler

calc(project: WBS) Schedule

Строит расписание проекта :param wbs: структура работ :return: Tuple (<копия wbs с установленными start и end у всех Task>, <Отчет об использовании ресурсов>)

class pjplan.schedule.ForwardScheduler(start: datetime | None = None, resources: List[IResource] | None = None, balance_resources: bool = True, default_estimate: int = 0)

Bases: IScheduler

calc(project: WBS) Schedule

Строит расписание проекта :param wbs: структура работ :return: Tuple (<копия wbs с установленными start и end у всех Task>, <Отчет об использовании ресурсов>)

class pjplan.schedule.IScheduler

Bases: ABC

Планировщик проектов. Строит расписание проекта

abstract calc(wbs: WBS) Schedule

Строит расписание проекта :param wbs: структура работ :return: Tuple (<копия wbs с установленными start и end у всех Task>, <Отчет об использовании ресурсов>)

class pjplan.schedule.ResourceUsage

Bases: object

Отчет об использовании ресурсов

add_rows(rows: List[ResourceUsageItem])
reserve(resource: IResource, date: datetime, task: Task, units: float) float
reserved(resource: IResource, date: datetime, task: Task | None = None) float
rows() List[ResourceUsageItem]
class pjplan.schedule.ResourceUsageItem(resource: pjplan.resource.IResource, date: datetime.datetime, task: pjplan.task.Task, units: float)

Bases: object

date: datetime
resource: IResource
task: Task
units: float
class pjplan.schedule.Schedule(schedule: WBS, resource_usage: ResourceUsage)

Bases: object

pjplan.wbs module

class pjplan.wbs.WBS(tasks: Iterable[Task] | None = None, **kwargs)

Bases: object

Work Burn-down Structure

clone() WBS

Returns copy of this WBS.

critical_path() CriticalPath
critical_path2()
property end: datetime | None

Returns max end date from all tasks in WBS

print(fields: Iterable[str] | None = None, children=True, theme=None)

Print task sheet :param fields: fields to print :param children: show/hide child tasks :param theme: color theme

Color theme specified by dict: {

‘header_color’: ‘<header color>’, ‘level_colors’: [‘<level 0 color>’, ‘<level 1 color>’, …]

}

remove(task: Task) bool

Remove task from WBS :param task:

remove_all(key: Callable[[Task], bool] | None = None, **kwargs)

Remove all tasks matched to key from WBS. :param key: see TaskList.remove_all for details :param kwargs: see TaskList.remove_all for details :return: list of deleted tasks

property roots: _ChildrenList

List of all root tasks in WBS

property start: datetime | None

Returns min start date from all tasks in WBS

subtree(roots: Task | Iterable[Task]) WBS

Returns new WBS, contains subtree of this WBS with all children and successors/predecessors inside this subtree or outside WBS.

Parameters:

roots – root tasks for new WBS

Returns:

new WBS

property tasks: _ImmutableTaskList

List of all tasks in WBS

Module contents

Пакет содержит API для работы с проектами и расписаниями задач.