Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def duplicate(self):
"""duplicate the event in focus"""
# TODO copying from birthday calendars is currently problematic
# because their title is determined by X-BIRTHDAY and X-FNAME properties
# which are also copied. If the events' summary is edited it will show
# up on disk but not be displayed in khal
event = self.focus_event.event.duplicate()
try:
self.pane.collection.new(event)
except ReadOnlyCalendarError:
event.calendar = self.pane.collection.default_calendar_name or \
self.pane.collection.writable_names[0]
self.edit(event, always_save=True)
start_date, end_date = event.start_local, event.end_local
if isinstance(start_date, dt.datetime):
start_date = start_date.date()
if isinstance(end_date, dt.datetime):
end_date = end_date.date()
self.pane.eventscolumn.base_widget.update(start_date, end_date, event.recurring)
try:
self._old_focus = self.focus_position
except IndexError:
pass
def duplicate(self):
"""duplicate the event in focus"""
# TODO copying from birthday calendars is currently problematic
# because their title is determined by X-BIRTHDAY and X-FNAME properties
# which are also copied. If the events' summary is edited it will show
# up on disk but not be displayed in khal
event = self.focus_event.event.duplicate()
try:
self.pane.collection.new(event)
except ReadOnlyCalendarError:
event.calendar = self.pane.collection.default_calendar_name or \
self.pane.collection.writable_names[0]
self.edit(event, always_save=True)
start_date, end_date = event.start_local, event.end_local
if isinstance(start_date, dt.datetime):
start_date = start_date.date()
if isinstance(end_date, dt.datetime):
end_date = end_date.date()
self.pane.eventscolumn.base_widget.update(start_date, end_date, event.recurring)
try:
self._old_focus = self.focus_position
except IndexError:
pass
if isinstance(categories, str):
categories = list([category.strip() for category in categories.split(',')])
try:
event = new_vevent(
locale=conf['locale'], location=location, categories=categories,
repeat=repeat, until=until, alarms=alarms, dtstart=dtstart,
dtend=dtend, summary=summary, description=description, timezone=timezone,
)
except ValueError as error:
raise FatalError(error)
event = Event.fromVEvents(
[event], calendar=calendar_name, locale=conf['locale'])
try:
collection.new(event)
except ReadOnlyCalendarError:
raise FatalError(
'ERROR: Cannot modify calendar "{}" as it is read-only'.format(calendar_name)
)
if conf['default']['print_new'] == 'event':
if format is None:
format = conf['view']['event_format']
echo(event.format(format, dt.datetime.now(), env=env))
elif conf['default']['print_new'] == 'path':
path = os.path.join(
collection._calendars[event.calendar]['path'],
event.href
)
echo(path)
return event
def delete(self, href: str, etag: str, calendar: str):
if self._calendars[calendar]['readonly']:
raise ReadOnlyCalendarError()
self._storages[calendar].delete(href, etag)
self._backend.delete(href, calendar=calendar)
def update(self, event: Event):
"""update `event` in vdir and db"""
assert event.etag
if self._calendars[event.calendar]['readonly']:
raise ReadOnlyCalendarError()
with self._backend.at_once():
event.etag = self._storages[event.calendar].update(event.href, event, event.etag)
self._backend.update(event.raw, event.href, event.etag, calendar=event.calendar)
self._backend.set_ctag(self._local_ctag(event.calendar), calendar=event.calendar)
def new(self, event: Event, collection: Optional[str]=None):
"""save a new event to the vdir and the database
param event: the event that should be updated, will get a new href and
etag properties
type event: event.Event
"""
calendar = collection if collection is not None else event.calendar
if hasattr(event, 'etag'):
assert not event.etag
if self._calendars[calendar]['readonly']:
raise ReadOnlyCalendarError()
with self._backend.at_once():
try:
event.href, event.etag = self._storages[calendar].upload(event)
except AlreadyExistingError as Error:
href = getattr(Error, 'existing_href', None)
raise DuplicateUid(href)
self._backend.update(event.raw, event.href, event.etag, calendar=calendar)
self._backend.set_ctag(self._local_ctag(calendar), calendar=calendar)
def force_update(self, event: Event, collection: Optional[str]=None):
"""update `event` even if an event with the same uid/href already exists"""
calendar = collection if collection is not None else event.calendar
if self._calendars[calendar]['readonly']:
raise ReadOnlyCalendarError()
with self._backend.at_once():
try:
href, etag = self._storages[calendar].upload(event)
except AlreadyExistingError as error:
href = error.existing_href
_, etag = self._storages[calendar].get(href)
etag = self._storages[calendar].update(href, event, etag)
self._backend.update(event.raw, href, etag, calendar=calendar)
self._backend.set_ctag(self._local_ctag(calendar), calendar=calendar)