Timetable
Todo
Docstring (module, models, operations, utilities)
Models
- class indico.modules.events.timetable.models.breaks.Break(**kwargs)
A simple constructor that allows initialization from kwargs.
Sets attributes on the constructed instance using the names and values in
kwargs
.Only keys that are present as attributes of the instance’s class are allowed. These could be, for example, any mapped columns or relationships.
- background_color
- can_access(user)
- default_colors = ('202020', '90c0f0')
The default colors when not specifying anything.
- default_render_mode = 2
- duration
- property end_dt
- property event
- id
- inherit_location
- location_backref_name = 'breaks'
The name of the backref added to the Room model for items which are associated with that room.
- property location_parent
The parent object to consult if the location is inherited.
- locator
Define a smart locator property.
This behaves pretty much like a normal read-only property and the decorated function should return a dict containing the necessary data to build a URL for the object.
This decorator should usually be applied to a method named
locator
as this name is required for get_locator to find it automatically when just passing the object.If you need more than one locator, you can define it like this:
@locator_property def locator(self): return {...} @locator.other def locator(self): return {...}
The
other
locator can then be accessed by passingobj.locator.other
to the code expecting an object with a locator.
- own_address
- own_room
- own_room_id
- own_room_name
- own_venue
- own_venue_id
- own_venue_name
- possible_render_modes = {RenderMode.markdown}
- render_mode = 2
- property start_dt
- text_color
- title
- class indico.modules.events.timetable.models.entries.TimetableEntry(**kwargs)
A simple constructor that allows initialization from kwargs.
Sets attributes on the constructed instance using the names and values in
kwargs
.Only keys that are present as attributes of the instance’s class are allowed. These could be, for example, any mapped columns or relationships.
- break_
- break_id
- can_view(user)
Check whether the user will see this entry in the timetable.
- children
- contribution
- contribution_id
- duration
- end_dt
- event
- event_id
- extend_end_dt(end_dt)
- extend_parent(by_start=True, by_end=True)
Extend start/end of parent objects if needed.
No extension if performed for entries crossing a day boundary in the event timezone.
- Parameters:
by_start – Extend parent by start datetime.
by_end – Extend parent by end datetime.
- extend_start_dt(start_dt)
- id
- is_parallel(in_session=False)
- locator
Define a smart locator property.
This behaves pretty much like a normal read-only property and the decorated function should return a dict containing the necessary data to build a URL for the object.
This decorator should usually be applied to a method named
locator
as this name is required for get_locator to find it automatically when just passing the object.If you need more than one locator, you can define it like this:
@locator_property def locator(self): return {...} @locator.other def locator(self): return {...}
The
other
locator can then be accessed by passingobj.locator.other
to the code expecting an object with a locator.
- move(start_dt)
Move the entry to start at a different time.
This method automatically moves children of the entry to preserve their start time relative to the parent’s start time.
- move_next_to(sibling, position='before')
- property object
- parent_id
- query: IndicoBaseQuery
A SQLAlchemy query for a model. Equivalent to
db.session.query(Model)
. Can be customized per-model by overridingquery_class
.Warning
The query interface is considered legacy in SQLAlchemy. Prefer using
session.execute(select())
instead.
- session_block
- session_block_id
- property session_siblings
- property siblings
- property siblings_query
- start_dt
- type
Operations
- indico.modules.events.timetable.operations.can_swap_entry(entry, direction, in_session=False)
- indico.modules.events.timetable.operations.create_break_entry(event, data, session_block=None)
- indico.modules.events.timetable.operations.create_session_block_entry(session_, data)
- indico.modules.events.timetable.operations.create_timetable_entry(event, data, parent=None, extend_parent=False)
- indico.modules.events.timetable.operations.delete_timetable_entry(entry, log=True)
- indico.modules.events.timetable.operations.fit_session_block_entry(entry, log=True)
- indico.modules.events.timetable.operations.get_sibling_entry(entry, direction, in_session=False)
- indico.modules.events.timetable.operations.move_timetable_entry(entry: TimetableEntry, parent: TimetableEntry | None = None, day: datetime | None = None)
Move the entry to another session or top-level timetable.
- Parameters:
entry – TimetableEntry to be moved
parent – If specified then the entry will be set as a child of parent
day – If specified then the entry will be moved to the top-level timetable on this day
- indico.modules.events.timetable.operations.schedule_contribution(contribution, start_dt, session_block=None, extend_parent=False)
- indico.modules.events.timetable.operations.swap_timetable_entry(entry, direction, session_=None)
Swap entry with closest gap or non-parallel sibling.
- indico.modules.events.timetable.operations.update_break_entry(break_, data)
- indico.modules.events.timetable.operations.update_timetable_entry(entry, data)
- indico.modules.events.timetable.operations.update_timetable_entry_object(entry, data)
Update the object of a timetable entry according to its type.
Utilities
- class indico.modules.events.timetable.util.TimetableExportConfig(show_title: bool = True, show_affiliation: bool = False, show_cover_page: bool = True, show_toc: bool = True, show_session_toc: bool = True, show_abstract: bool = False, show_poster_abstract: bool = False, show_contribs: bool = False, show_length_contribs: bool = False, show_breaks: bool = False, new_page_per_session: bool = False, show_session_description: bool = False, print_date_close_to_sessions: bool = False)
- class indico.modules.events.timetable.util.TimetableExportProgramConfig(show_siblings_location: bool, show_children_location: bool)
- indico.modules.events.timetable.util.create_pdf(html, css, event) BytesIO
- indico.modules.events.timetable.util.find_latest_entry_end_dt(obj, day=None)
Get the latest end datetime for timetable entries within the object.
- Parameters:
obj – The
Event
orSessionBlock
that will be used to look for timetable entries.day – The local event date to look for timetable entries. Applicable only to
Event
.
- Returns:
The end datetime of the timetable entry finishing the latest.
None
if no entry was found.
- indico.modules.events.timetable.util.find_next_start_dt(duration, obj, day=None, force=False)
Find the next most convenient start date fitting a duration within an object.
- Parameters:
duration – Duration to fit into the event/session-block.
obj – The
Event
orSessionBlock
the duration needs to fit into.day – The local event date where to fit the duration in case the object is an event.
force – Gives earliest datetime if the duration doesn’t fit.
- Returns:
The end datetime of the latest scheduled entry in the object if the duration fits then. It it doesn’t, the latest datetime that fits it.
None
if the duration cannot fit in the object, earliest datetime ifforce
isTrue
.
- indico.modules.events.timetable.util.generate_pdf_timetable(event: Event, config=TimetableExportConfig(show_title=True, show_affiliation=False, show_cover_page=True, show_toc=True, show_session_toc=True, show_abstract=False, show_poster_abstract=False, show_contribs=False, show_length_contribs=False, show_breaks=False, new_page_per_session=False, show_session_description=False, print_date_close_to_sessions=False), *, only_session: Session | None = None)
- indico.modules.events.timetable.util.get_category_timetable(categ_ids, start_dt, end_dt, detail_level='event', tz=<UTC>, from_categ=None, grouped=True, includible=<function <lambda>>)
Retrieve time blocks that fall within a specific time interval for a given set of categories.
- Parameters:
categ_ids – iterable containing list of category IDs
start_dt – start of search interval (
datetime
, expected to be in display timezone)end_dt – end of search interval (
datetime
in expected to be in display timezone)detail_level – the level of detail of information (
event|session|contribution
)tz – the
timezone
information should be displayed infrom_categ –
Category
that will be taken into account to calculate visibilitygrouped – Whether to group results by start date
includible – a callable, to allow further arbitrary custom filtering (maybe from 3rd party plugins) on whether to include (returns True) or not (returns False) each
detail
item. Default always returns True.
- Returns:
a dictionary containing timetable information in a structured way. See source code for examples.
- indico.modules.events.timetable.util.get_nested_entries(event)
- indico.modules.events.timetable.util.get_nested_timetable(event, *, include_notes=True, show_date='all', show_session='all', detail_level='all')
- indico.modules.events.timetable.util.get_nested_timetable_location_conditions(entries)
- indico.modules.events.timetable.util.get_session_block_entries(event, day)
Return a list of event top-level session blocks for the given day.
- indico.modules.events.timetable.util.get_time_changes_notifications(changes, tzinfo, entry=None)
- indico.modules.events.timetable.util.get_top_level_entries(event)
- indico.modules.events.timetable.util.render_entry_info_balloon(entry, editable=False, sess=None, is_session_timetable=False)
- indico.modules.events.timetable.util.render_session_timetable(session, timetable_layout=None, management=False)
- indico.modules.events.timetable.util.shift_following_entries(entry, shift, session_=None)
Reschedule entries starting after the given entry by the given shift.
- class indico.modules.events.timetable.reschedule.RescheduleMode(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)
- duration = 'duration'
- none = 'none'
- time = 'time'
- property title
Return a version of the string where each word is titlecased.
More specifically, words start with uppercased characters and all remaining cased characters have lower case.
- class indico.modules.events.timetable.reschedule.Rescheduler(event, mode, day, session=None, session_block=None, fit_blocks=False, gap=datetime.timedelta(0))
Compact the the schedule of an event day by either adjusting start times or durations of timetable entries.
- Parameters:
event – The event of which the timetable entries should be rescheduled.
mode – A RescheduleMode value specifying whether the duration or start time should be adjusted.
day – A date specifying the day to reschedule (the day of the timetable entries are determined using the event’s timezone)
session – If specified, only blocks of that session will be rescheduled, ignoring any other timetable entries. Cannot be combined with session_block.
session_block` – If specified, only entries inside that block will be rescheduled. Cannot be combined with session.
fit_blocks – Whether session blocks should be resized to exactly fit their contents before the actual rescheduling operation.
gap – A timedelta specifying the cap between rescheduled timetable entries.
- run()
Perform the rescheduling.