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 - special string ":numtutorial: 40 - string with suffix .timeline 41 - string with suffix .ics 42 - string denoting a directory 43 """ 44 if path == ":tutorial:": 45 return open_gregorian_tutorial_timeline(path) 46 elif path == ":numtutorial:": 47 return open_numeric_tutorial_timeline(path) 48 elif os.path.isdir(path): 49 return open_directory_timeline(path) 50 elif path.endswith(".timeline"): 51 return db_open_timeline(path, timetype) 52 elif path.endswith(".ics"): 53 return db_open_ics(path) 54 else: 55 msg_template = (_("Unable to open timeline '%s'.") + "\n\n" + 56 _("Unknown format.")) 57 raise TimelineIOError(msg_template % path)58 5961 from timelinelib.dataimport.tutorial import create_in_memory_gregorian_tutorial_db 62 db = create_in_memory_gregorian_tutorial_db() 63 db.path = path 64 return db65 6668 from timelinelib.dataimport.tutorial import create_in_memory_numeric_tutorial_db 69 db = create_in_memory_numeric_tutorial_db() 70 db.path = path 71 return db72 7375 from timelinelib.dataimport.dir import import_db_from_dir 76 db = import_db_from_dir(path) 77 db.path = path 78 return db79 8082 if (os.path.exists(path) and file_starts_with(path, "# Written by Timeline ")): 83 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.")) 84 else: 85 return db_open_newtype_timeline(path, timetype)86 8789 if os.path.exists(path): 90 from timelinelib.dataimport.timelinexml import import_db_from_timeline_xml 91 db = import_db_from_timeline_xml(path) 92 if dir_is_read_only(path): 93 from timelinelib.wxgui.utils import display_warning_message 94 db.set_readonly() 95 display_warning_message(_("Since the directory of the Timeline file is not writable,\nthe timeline is opened in read-only mode")) 96 return db 97 else: 98 from timelinelib.canvas.data.db import MemoryDB 99 from timelinelib.calendar.gregorian.timetype import GregorianTimeType 100 db = MemoryDB() 101 if timetype is None: 102 db.set_time_type(GregorianTimeType()) 103 else: 104 db.set_time_type(timetype) 105 106 def save_callback(): 107 from timelinelib.dataexport.timelinexml import export_db_to_timeline_xml 108 export_db_to_timeline_xml(db, path)109 db.register_save_callback(save_callback) 110 db.set_should_lock(True) 111 return db 112 113115 try: 116 testfile = tempfile.TemporaryFile(dir=os.path.dirname(os.path.abspath(path))) 117 except: 118 return True 119 else: 120 testfile.close() 121 return False122 123125 try: 126 import icalendar 127 from timelinelib.wxgui.dialogs.importics.view import ImportIcsDialog 128 except ImportError: 129 raise TimelineIOError(_("Could not find iCalendar Python package. It is required for working with ICS files.")) 130 else: 131 from timelinelib.dataimport.ics import import_db_from_ics 132 return import_db_from_ics(path, ImportIcsDialog)133 134 137 138140 try: 141 f = open(path) 142 try: 143 line = f.readline() 144 return line 145 finally: 146 f.close() 147 except IOError: 148 raise TimelineIOError("Unable to read data from '%s'." % path)149
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Thu Jul 23 01:55:31 2020 | http://epydoc.sourceforge.net |