Home | Trees | Indices | Help |
|
---|
|
1 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 Rickard Lindberg, Roger Lindberg 2 # 3 # This file is part of Timeline. 4 # 5 # Timeline is free software: you can redistribute it and/or modify 6 # it under the terms of the GNU General Public License as published by 7 # the Free Software Foundation, either version 3 of the License, or 8 # (at your option) any later version. 9 # 10 # Timeline is distributed in the hope that it will be useful, 11 # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 # GNU General Public License for more details. 14 # 15 # You should have received a copy of the GNU General Public License 16 # along with Timeline. If not, see <http://www.gnu.org/licenses/>. 17 18 19 import os.path 20 import tempfile 21 22 from timelinelib.canvas.data.exceptions import TimelineIOError 23 from timelinelib.canvas.data import Category 24 from timelinelib.canvas.data import Event 25 from timelinelib.canvas.data import TimePeriod 26 from timelinelib.canvas.drawing.viewproperties import ViewProperties 27 2830 """ 31 Create timeline database that can read and write timeline data from and to 32 persistent storage identified by path. 33 34 Throw a TimelineIOError exception if not able to read from the given path. 35 36 Valid values for path: 37 38 - special string ":tutorial:" 39 - string with suffix .timeline 40 - string with suffix .ics 41 - string denoting a directory 42 """ 43 if path == ":tutorial:": 44 return open_gregorian_tutorial_timeline(path) 45 elif path == ":numtutorial:": 46 return open_numeric_tutorial_timeline(path) 47 elif os.path.isdir(path): 48 return open_directory_timeline(path) 49 elif path.endswith(".timeline"): 50 return db_open_timeline(path, timetype) 51 elif path.endswith(".ics"): 52 return db_open_ics(path) 53 else: 54 msg_template = (_("Unable to open timeline '%s'.") + "\n\n" + 55 _("Unknown format.")) 56 raise TimelineIOError(msg_template % path)57 5860 from timelinelib.dataimport.tutorial import create_in_memory_gregorian_tutorial_db 61 db = create_in_memory_gregorian_tutorial_db() 62 db.path = path 63 return db64 6567 from timelinelib.dataimport.tutorial import create_in_memory_numeric_tutorial_db 68 db = create_in_memory_numeric_tutorial_db() 69 db.path = path 70 return db71 7274 from timelinelib.dataimport.dir import import_db_from_dir 75 db = import_db_from_dir(path) 76 db.path = path 77 return db78 7981 if (os.path.exists(path) and file_starts_with(path, "# Written by Timeline ")): 82 raise TimelineIOError(_("You are trying to open an old file with a new version of timeline. Please install version 0.21.1 of timeline to convert it to the new format.")) 83 else: 84 return db_open_newtype_timeline(path, timetype)85 8688 if os.path.exists(path): 89 from timelinelib.dataimport.timelinexml import import_db_from_timeline_xml 90 db = import_db_from_timeline_xml(path) 91 if dir_is_read_only(path): 92 from timelinelib.wxgui.utils import display_warning_message 93 db.set_readonly() 94 display_warning_message(_("Since the directory of the Timeline file is not writable,\nthe timeline is opened in read-only mode")) 95 return db 96 else: 97 from timelinelib.canvas.data.db import MemoryDB 98 from timelinelib.calendar.gregorian.timetype import GregorianTimeType 99 db = MemoryDB() 100 if timetype is None: 101 db.set_time_type(GregorianTimeType()) 102 else: 103 db.set_time_type(timetype) 104 105 def save_callback(): 106 from timelinelib.dataexport.timelinexml import export_db_to_timeline_xml 107 export_db_to_timeline_xml(db, path)108 db.register_save_callback(save_callback) 109 db.set_should_lock(True) 110 return db 111 112114 try: 115 testfile = tempfile.TemporaryFile(dir=os.path.dirname(os.path.abspath(path))) 116 except: 117 return True 118 else: 119 testfile.close() 120 return False121 122124 try: 125 import icalendar 126 from timelinelib.wxgui.dialogs.importics.view import ImportIcsDialog 127 except ImportError: 128 raise TimelineIOError(_("Could not find iCalendar Python package. It is required for working with ICS files.")) 129 else: 130 from timelinelib.dataimport.ics import import_db_from_ics 131 return import_db_from_ics(path, ImportIcsDialog)132 133 136 137139 try: 140 f = open(path) 141 try: 142 line = f.readline() 143 return line 144 finally: 145 f.close() 146 except IOError: 147 raise TimelineIOError("Unable to read data from '%s'." % path)148
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Sun Aug 19 01:55:20 2018 | http://epydoc.sourceforge.net |