def register_calendar_type(self, name, calendar_type, force=False): """ Registers a calendar by type. This is useful for registering a new calendar to be lazily instantiated at some future point in time. Parameters ---------- name: str The key with which to register this calendar. calendar_type: type The type of the calendar to register. force : bool, optional If True, old calendars will be overwritten on a name collision. If False, name collisions will raise an exception. Default is False. Raises ------ CalendarNameCollision If a calendar is already registered with the given calendar's name. """ if force: self.deregister_calendar(name) if self.has_calendar(name): raise CalendarNameCollision(calendar_name=name) self._calendar_factories[name] = calendar_type
def register_calendar(calendar, force=False): """ Registers a calendar for retrieval by the get_calendar method. Parameters ---------- calendar : TradingCalendar The calendar to be registered for retrieval. force : bool, optional If True, old calendars will be overwritten on a name collision. If False, name collisions will raise an exception. Default: False. Raises ------ CalendarNameCollision If a calendar is already registered with the given calendar's name. """ # If we are forcing the registration, remove an existing calendar with the # same name. if force: deregister_calendar(calendar.name) # Check if we are already holding a calendar with the same name if calendar.name in _static_calendars: raise CalendarNameCollision(calendar_name=calendar.name) _static_calendars[calendar.name] = calendar
def register_calendar(self, name, calendar, force=False): """ Registers a calendar for retrieval by the get_calendar method. Parameters ---------- name: str The key with which to register this calendar. calendar: TradingCalendar The calendar to be registered for retrieval. force : bool, optional If True, old calendars will be overwritten on a name collision. If False, name collisions will raise an exception. Default is False. Raises ------ CalendarNameCollision If a calendar is already registered with the given calendar's name. """ if force: self.deregister_calendar(name) if self.has_calendar(name): raise CalendarNameCollision(calendar_name=name) self._calendars[name] = calendar
def register_calendar_type(self, name, calendar_type, force=False): """ Registers a calendar by type. Parameters ---------- name: str The key with which to register this calendar. calendar_type: type The type of the calendar to register. force : bool, optional If True, old calendars will be overwritten on a name collision. If False, name collisions will raise an exception. Default: False. Raises ------ CalendarNameCollision If a calendar is already registered with the given calendar's name. """ if force: self._calendar_factories.pop(name, None) if name in self._calendars or name in self._calendar_factories: raise CalendarNameCollision(calendar_name=name) self._calendar_factories[name] = calendar_type
def register_calendar_alias(self, alias, real_name, force=False): """ Register an alias for a calendar. This is useful when multiple exchanges should share a calendar, or when there are multiple ways to refer to the same exchange. After calling ``register_alias('alias', 'real_name')``, subsequent calls to ``get_calendar('alias')`` will return the same result as ``get_calendar('real_name')``. Parameters ---------- alias : str The name to be used to refer to a calendar. real_name : str The canonical name of the registered calendar. force : bool, optional If True, old calendars will be overwritten on a name collision. If False, name collisions will raise an exception. Default is False. """ if force: self.deregister_calendar(alias) if self.has_calendar(alias): raise CalendarNameCollision(calendar_name=alias) self._aliases[alias] = real_name # Ensure that the new alias doesn't create a cycle, and back it out if # we did. try: self.resolve_alias(alias) except CyclicCalendarAlias: del self._aliases[alias] raise