Example #1
0
 def given_event_with(self, start="4 Aug 2010", end="10 Aug 2010",
                      text="Text", description=None,
                      pos=(0, 0), size=(0, 0)):
     event = Event(self.db.get_time_type(), human_time_to_py(start), human_time_to_py(end), text)
     if description is not None:
         event.set_data("description", description)
     self.db.save_event(event)
     self.mock_drawer.events_and_rects.append((event, wx.Rect(pos[0], pos[1], size[0], size[1])))
     return event
Example #2
0
def copy_db(from_db, to_db):
    """
    Copy all content from one db to another.

    to_db is assumed to have no categories (conflicting category names are not
    handled).
    """
    if isinstance(to_db, MemoryDB):
        to_db.disable_save()
    # Copy categories (parent attribute fixed later)
    cat_map = {}
    for cat in from_db.get_categories():
        # name, color, and visible all immutable so safe to copy
        new_cat = Category(cat.name, cat.color, None, cat.visible)
        cat_map[cat.name] = new_cat
        to_db.save_category(new_cat)
    # Fix parent attribute
    for cat in from_db.get_categories():
        if cat.parent is not None:
            cat_map[cat.name].parent = cat_map[cat.parent.name]
    # Copy events
    for event in from_db.get_all_events():
        cat = None
        if event.category is not None:
            cat = cat_map[event.category.name]
        # start_time, end_time, and text all immutable so safe to copy
        new_event = Event(to_db.get_time_type(), event.time_period.start_time,
                          event.time_period.end_time,
                          event.text,
                          cat)
        # description immutable so safe to copy
        if event.get_data("description") is not None:
            new_event.set_data("description", event.get_data("description"))
        # icon immutable in practice (since never modified) so safe to copy
        if event.get_data("icon") is not None:
            new_event.set_data("icon", event.get_data("icon"))
        to_db.save_event(new_event)
    # Copy view properties (ViewProperties is specific to db so we need to copy
    # like this instead of just using load/save_view_properties in db).
    from_vp = ViewProperties()
    from_db.load_view_properties(from_vp)
    to_vp = ViewProperties()
    for from_cat in from_db.get_categories():
        cat = cat_map[from_cat.name]
        visible = from_vp.is_category_visible(from_cat)
        to_vp.set_category_visible(cat, visible)
    if from_vp.displayed_period is not None:
        # start_time and end_time immutable so safe to copy
        start = from_vp.displayed_period.start_time
        end = from_vp.displayed_period.end_time
        to_vp.displayed_period = TimePeriod(to_db.get_time_type(), start, end)
    to_db.save_view_properties(to_vp)
    # Save
    if isinstance(to_db, MemoryDB):
        to_db.enable_save()
 def setUp(self):
     self.db = MemoryDB()
     self.db._save = Mock()
     self.db_listener = Mock()
     self.c1 = Category("work", (255, 0, 0), None, True)
     self.c2 = Category("private", (0, 255, 0), None, True)
     self.e1 = Event(self.db.get_time_type(), datetime(2010, 2, 13),
                     datetime(2010, 2, 13), "holiday")
     self.e2 = Event(self.db.get_time_type(), datetime(2010, 2, 14),
                     datetime(2010, 2, 14), "work starts")
     self.e3 = Event(self.db.get_time_type(), datetime(2010, 2, 15),
                     datetime(2010, 2, 16), "period")
     self.db.register(self.db_listener)
Example #4
0
 def given_event_with(self,
                      start="4 Aug 2010",
                      end="10 Aug 2010",
                      text="Text",
                      description=None,
                      pos=(0, 0),
                      size=(0, 0)):
     event = Event(self.db.get_time_type(), human_time_to_py(start),
                   human_time_to_py(end), text)
     if description is not None:
         event.set_data("description", description)
     self.db.save_event(event)
     self.mock_drawer.events_and_rects.append(
         (event, wx.Rect(pos[0], pos[1], size[0], size[1])))
     return event
Example #5
0
 def _create_event(self):
     self.event = Event(self.db.get_time_type(),
                        datetime.datetime(2010, 1, 1),
                        datetime.datetime(2010, 1, 1),
                        "foo",
                        category=None)
     return self.event
    def testDisplayedPeriodTagNotWrittenIfNotSet(self):
        # Create a new db and add one event
        db = db_open(self.tmp_path)
        db.save_event(
            Event(db.get_time_type(), datetime(2010, 8, 31, 0, 0, 0),
                  datetime(2010, 8, 31, 0, 0, 0), "test"))
        # Read the file content from disk
        f = codecs.open(self.tmp_path, "r", "utf-8")
        content = f.read()
        f.close()
        # Assert that displayed_period tag is not written
        self.assertEquals(
            content, """<?xml version="1.0" encoding="utf-8"?>
<timeline>
  <version>%s</version>
  <categories>
  </categories>
  <events>
    <event>
      <start>2010-8-31 0:0:0</start>
      <end>2010-8-31 0:0:0</end>
      <text>test</text>
      <fuzzy>False</fuzzy>
      <locked>False</locked>
      <ends_today>False</ends_today>
    </event>
  </events>
  <view>
    <hidden_categories>
    </hidden_categories>
  </view>
</timeline>
""" % get_version())
Example #7
0
 def given_event_at(self, start_time, end_time=None, visible=True):
     category = Category("category", (0, 0, 0), None, visible)
     if end_time is None:
         end_time = start_time
     event = Event(self.db.get_time_type(), human_time_to_py(start_time),
                   human_time_to_py(end_time), "event-text", category)
     self.db.save_category(category)
     self.db.save_event(event)
     self.view_properties.set_category_visible(category, visible)
Example #8
0
File: ics.py Project: sk/gnumed
 def _get_events(self, decider_fn=None):
     self.events = []
     for cal in self.cals:
         for event in cal.walk("VEVENT"):
             start, end = extract_start_end(event)
             txt = ""
             if event.has_key("summary"):
                 txt = event["summary"]
             elif event.has_key("description"):
                 txt = event["description"]
             else:
                 txt == "Unknown"
             e = Event(self.get_time_type(), start, end, txt)
             e.set_id(event["timeline_id"])
             if event.has_key("description"):
                 e.set_data("description", event["description"])
             if decider_fn is None or decider_fn(e):
                 self.events.append(e)
     return self.events
Example #9
0
 def _parse_event(self, text, tmp_dict):
     start = self._parse_time(tmp_dict.pop("tmp_start"))
     end = self._parse_time(tmp_dict.pop("tmp_end"))
     text = tmp_dict.pop("tmp_text")
     progress = self._parse_optional_int(tmp_dict, "tmp_progress")
     fuzzy = self._parse_optional_bool(tmp_dict, "tmp_fuzzy")
     locked = self._parse_optional_bool(tmp_dict, "tmp_locked")
     ends_today = self._parse_optional_bool(tmp_dict, "tmp_ends_today")
     category_text = tmp_dict.pop("tmp_category", None)
     if category_text is None:
         category = None
     else:
         category = tmp_dict["category_map"].get(category_text, None)
         if category is None:
             raise ParseException("Category '%s' not found." %
                                  category_text)
     description = tmp_dict.pop("tmp_description", None)
     alert_string = tmp_dict.pop("tmp_alert", None)
     alert = self._parse_alert_string(alert_string)
     icon_text = tmp_dict.pop("tmp_icon", None)
     if icon_text is None:
         icon = None
     else:
         icon = parse_icon(icon_text)
     hyperlink = tmp_dict.pop("tmp_hyperlink", None)
     if self._is_container_event(text):
         cid, text = self._extract_container_id(text)
         event = Container(self.get_time_type(),
                           start,
                           end,
                           text,
                           category,
                           cid=cid)
     elif self._is_subevent(text):
         cid, text = self._extract_subid(text)
         event = Subevent(self.get_time_type(),
                          start,
                          end,
                          text,
                          category,
                          cid=cid)
     else:
         if self._text_starts_with_added_space(text):
             text = self._remove_added_space(text)
         event = Event(self.get_time_type(), start, end, text, category,
                       fuzzy, locked, ends_today)
     event.set_data("description", description)
     event.set_data("icon", icon)
     event.set_data("alert", alert)
     event.set_data("hyperlink", hyperlink)
     event.set_data("progress", int(progress))
     self.save_event(event)
Example #10
0
 def _create_db(self):
     db = XmlTimeline(self.tmp_path)
     # Create categories
     cat1 = Category("Category 1", (255, 0, 0), (0, 0, 255), True)
     db.save_category(cat1)
     cat2 = Category("Category 2", (0, 255, 0), None, True, parent=cat1)
     db.save_category(cat2)
     cat3 = Category("Category 3", (0, 0, 255), None, True, parent=cat2)
     db.save_category(cat3)
     # Create events
     ev1 = Event(db.get_time_type(), datetime(2010, 3, 3), datetime(2010, 3, 6),
                 "Event 1", cat1)
     ev1.set_data("description", u"The <b>first</b> event åäö.")
     ev1.set_data("alert", (datetime(2012, 12, 31), "Time to go"))
     db.save_event(ev1)
     # Create view properties
     vp = ViewProperties()
     start = datetime(2010, 3, 1)
     end = datetime(2010, 4, 1)
     vp.displayed_period = TimePeriod(db.get_time_type(), start, end)
     vp.set_category_visible(cat3, False)
     db.save_view_properties(vp)
Example #11
0
 def _event_from_path(self, file_path):
     stat = os.stat(file_path)
     # st_atime (time of most recent access),
     # st_mtime (time of most recent content modification),
     # st_ctime (platform dependent; time of most recent metadata change on
     #           Unix, or the time of creation on Windows):
     dt = datetime.fromtimestamp(int(stat.st_mtime))
     start_time = Gregorian(dt.year, dt.month, dt.day, dt.hour, dt.minute,
                            dt.second).to_time()
     end_time = start_time
     if start_time > end_time:
         start_time, end_time = end_time, start_time
     text = os.path.basename(file_path)
     category = self._category_from_path(file_path)
     evt = Event(self.get_time_type(), start_time, end_time, text, category)
     return evt
Example #12
0
def copy_db(from_db, to_db):
    """
    Copy all content from one db to another.

    to_db is assumed to have no categories (conflicting category names are not
    handled).
    """
    if isinstance(to_db, MemoryDB):
        to_db.disable_save()
    # Copy categories (parent attribute fixed later)
    cat_map = {}
    for cat in from_db.get_categories():
        # name, color, and visible all immutable so safe to copy
        new_cat = Category(cat.name, cat.color, None, cat.visible)
        cat_map[cat.name] = new_cat
        to_db.save_category(new_cat)
    # Fix parent attribute
    for cat in from_db.get_categories():
        if cat.parent is not None:
            cat_map[cat.name].parent = cat_map[cat.parent.name]
    # Copy events
    for event in from_db.get_all_events():
        cat = None
        if event.category is not None:
            cat = cat_map[event.category.name]
        # start_time, end_time, and text all immutable so safe to copy
        new_event = Event(to_db.get_time_type(), event.time_period.start_time,
                          event.time_period.end_time, event.text, cat)
        # description immutable so safe to copy
        if event.get_data("description") is not None:
            new_event.set_data("description", event.get_data("description"))
        # icon immutable in practice (since never modified) so safe to copy
        if event.get_data("icon") is not None:
            new_event.set_data("icon", event.get_data("icon"))
        to_db.save_event(new_event)
    # Copy view properties (ViewProperties is specific to db so we need to copy
    # like this instead of just using load/save_view_properties in db).
    from_vp = ViewProperties()
    from_db.load_view_properties(from_vp)
    to_vp = ViewProperties()
    for from_cat in from_db.get_categories():
        cat = cat_map[from_cat.name]
        visible = from_vp.is_category_visible(from_cat)
        to_vp.set_category_visible(cat, visible)
    if from_vp.displayed_period is not None:
        # start_time and end_time immutable so safe to copy
        start = from_vp.displayed_period.start_time
        end = from_vp.displayed_period.end_time
        to_vp.displayed_period = TimePeriod(to_db.get_time_type(), start, end)
    to_db.save_view_properties(to_vp)
    # Save
    if isinstance(to_db, MemoryDB):
        to_db.enable_save()
Example #13
0
def an_event_with(start=None,
                  end=None,
                  time=ANY_TIME,
                  text="foo",
                  fuzzy=False,
                  locked=False,
                  ends_today=False):
    if start and end:
        start = human_time_to_py(start)
        end = human_time_to_py(end)
    else:
        start = human_time_to_py(time)
        end = human_time_to_py(time)
    return Event(PyTimeType(),
                 start,
                 end,
                 text,
                 Category("bar", None, None, True),
                 fuzzy=fuzzy,
                 locked=locked,
                 ends_today=ends_today)
Example #14
0
 def _get_events(self, decider_fn=None):
     self.events = []
     for cal in self.cals:
         for event in cal.walk("VEVENT"):
             start, end = extract_start_end(event)
             txt = ""
             if event.has_key("summary"):
                 txt = event["summary"]
             elif event.has_key("description"):
                 txt = event["description"]
             else:
                 txt == "Unknown"
             e = Event(self.get_time_type(), start, end, txt)
             e.set_id(event["timeline_id"])
             if event.has_key("description"):
                 e.set_data("description", event["description"])
             if decider_fn is None or decider_fn(e):
                 self.events.append(e)
     return self.events
 def _create_db(self):
     db = XmlTimeline(self.tmp_path)
     # Create categories
     cat1 = Category("Category 1", (255, 0, 0), (0, 0, 255), True)
     db.save_category(cat1)
     cat2 = Category("Category 2", (0, 255, 0), None, True, parent=cat1)
     db.save_category(cat2)
     cat3 = Category("Category 3", (0, 0, 255), None, True, parent=cat2)
     db.save_category(cat3)
     # Create events
     ev1 = Event(db.get_time_type(), datetime(2010, 3, 3),
                 datetime(2010, 3, 6), "Event 1", cat1)
     ev1.set_data("description", u"The <b>first</b> event åäö.")
     ev1.set_data("alert", (datetime(2012, 12, 31), "Time to go"))
     db.save_event(ev1)
     # Create view properties
     vp = ViewProperties()
     start = datetime(2010, 3, 1)
     end = datetime(2010, 4, 1)
     vp.displayed_period = TimePeriod(db.get_time_type(), start, end)
     vp.set_category_visible(cat3, False)
     db.save_view_properties(vp)
Example #16
0
 def given_point_event_wich_ends_today(self):
     self.event = Event(self.db.get_time_type(),
                        self.now,
                        self.now,
                        "evt",
                        ends_today=True)
Example #17
0
 def given_default_point_event(self):
     self.event = Event(self.db.get_time_type(), self.now, self.now, "evt")
Example #18
0
 def given_point_event(self):
     self.event = Event(self.db.get_time_type(),
                        self.time("2000-01-01 10:01:01"),
                        self.time("2000-01-01 10:01:01"), "evt")
Example #19
0
 def given_locked_point_event(self):
     self.event = Event(self.db.get_time_type(),
                        self.now,
                        self.now,
                        "evt",
                        locked=True)
Example #20
0
 def given_fuzzy_point_event(self):
     self.event = Event(self.db.get_time_type(),
                        self.now,
                        self.now,
                        "evt",
                        fuzzy=True)
 def given_event(self, name, start, end):
     event = Event(self.timeline.get_time_type(), start, end, name)
     self.timeline.save_event(event)
Example #22
0
 def add_event(self, text, description, start_add, end_add=None):
     start, end = self.calc_start_end(start_add, end_add)
     evt = Event(self.db.get_time_type(), start, end, text, self.last_cat)
     if description:
         evt.set_data("description", description)
     self.db.save_event(evt)