Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Christophe Savard <savard.jean.christophe@gmail.com>2009-04-15 15:37:21 (GMT)
committer Jean-Christophe Savard <savard.jean.christophe@gmail.com>2009-04-15 15:37:21 (GMT)
commit7614c86d0ab1a54ac3e63d95bc20ef892a18cdf0 (patch)
treebc15c713d5b4dc81de2b4eaccf526404aeac0a72
parent506ef038b668ad3ecfa79e24a4bae80e4fec0e36 (diff)
LP 341760 Serializer : Bundler.py up to date
-rw-r--r--src/sugar/tutorius/bundler.py159
-rw-r--r--src/sugar/tutorius/temp.py177
-rwxr-xr-xsrc/sugar/tutorius/tests/run-tests.py1
3 files changed, 83 insertions, 254 deletions
diff --git a/src/sugar/tutorius/bundler.py b/src/sugar/tutorius/bundler.py
index d6fb9e2..3678e86 100644
--- a/src/sugar/tutorius/bundler.py
+++ b/src/sugar/tutorius/bundler.py
@@ -22,6 +22,7 @@ This module contains all the data handling class of Tutorius
import logging
import os
+import uuid
from sugar.tutorius import gtkutils, overlayer
from sugar.tutorius.core import Tutorial, State, FiniteStateMachine
@@ -158,8 +159,8 @@ class TutorialBundler:
editor.
"""
- TUT_STORE_ROOT = os.getenv("$SUGAR_PREFIX") + "/share/tutorius/" + guid
- TUT_BUNDLE_ROOT = os.getenv("$SUGAR_BUNDLE_PATH") + "/data/tutorius/"
+ TUT_STORE_ROOT = os.getenv("$SUGAR_PREFIX") + "/share/tutorius/Data"
+ TUT_BUNDLE_ROOT = os.getenv("$SUGAR_BUNDLE_PATH") + "/data/tutorius/Data"
INI_ACTIVITY_SECTION = "RELATED_ACTIVITIES"
INI_METADATA_SECTION = "GENERAL_METADATA"
INI_GUID_PROPERTY = "GUID"
@@ -170,104 +171,108 @@ class TutorialBundler:
def __init__(self,generated_guid = None):
"""
TODO.
- The GUID associated to the tutorial will be generated in the constructor.
+ Tutorial_bundler constructor. If a GUID is given in the parameter, the
+ Tutorial_bundler object will be associated with it. If no GUID is given,
+ a new GUID will be generated,
"""
+ def __SetGuid(self, value):
+ self.__guid = value
+
+ def __GetGuid(self):
+ return self.__guid
+
+ def __DelGuid(self):
+ del self.__guid
+
+ Guid = property(fget=__SetGuid,
+ fset=__GetGuid,
+ fdel=__DelGuid,
+ doc="The guid associated with the Tutoria_Bundler")
+
+ guid = property(fget=get_guid(),
+ fset=set_guid())
+
+ if generated_gui is not None:
+ self.Guid = generated_guid
+ else:
+ self.Guid = uuid.uuid1()
+
+
+
#TODO : GUID generation if no guid is given in entry to the constructor.
- def write_metadata_file(data, guid=None):
+ def write_metadata_file(self, data):
"""
Write metadata to a property file. If a GUID is provided, TutorialBundler
will try to find and overwrite the existing property file who contain the
- given GUID, and will raise an exception if it cannot find it. If no
- GUID is provided, TutorialBundler will create a new property file.
+ given GUID, and will raise an exception if it cannot find it.
"""
NotImplementedError
-
- def write_fsm(fsm, guid=None, metadata_filename = None):
-
+
+ def return_ini_file_path(self):
+ """
+ Return the path of the .ini file associated with the guiven guid set in
+ the Guid property of the Tutorial_Bundler. If the guid is present in
+ more than one path, the TUT_STORE_ROOT is given priority.
"""
- Save fsm to disk. If a GUID parameter is provided, the existing GUID is
- located in the .ini files in TUT_STORRE_ROOT and TUT_BUNDLE_ROOT and
- the corresponding FSM is/are overwritten. If the GUID is not found, an
- exception occur. If no GUID is provided, FSM is written in a new file
- in TUT_STORE_ROOT. If a new FSM is created, the existing .ini filename
- must be given in "metadata_filename".
- """
config = SafeConfigParser()
-
- if guid is not None:
+ path = None
- logging.debug("************ Path of TUT_STORE_ROOT folder of activity : " \
+ logging.debug("************ Path of TUT_STORE_ROOT folder of activity : " \
+ TUT_STORE_ROOT)
- # iterate for each .ini file in the TUT_STORE_ROOT folder
+ # iterate for each .ini file in the TUT_STORE_ROOT folder
- for file_name in os.listdir(TUT_STORE_ROOT):
- if file_name.endswith(".ini"):
- logging.debug("******************* Found .ini file : " \
- + file_name)
- config.read(file_name)
- if config.get(INI_METADATA_SECTION, INI_GUID_PROPERTY) == guid:
- xml_filename = config.get(INI_METADATA_SECTION,
- INI_XML_FSM_PROPERTY)
- save_fsm(fsm, xml_filename, TUT_STORE_ROOT)
+ for file_name in os.listdir(TUT_STORE_ROOT):
+ if file_name.endswith(".ini"):
+ logging.debug("******************* Found .ini file : " \
+ + file_name)
+ config.read(file_name)
+ if config.get(INI_METADATA_SECTION, INI_GUID_PROPERTY) == self.Guid:
+ xml_filename = config.get(INI_METADATA_SECTION,
+ INI_XML_FSM_PROPERTY)
+ path = TUT_STORE_ROOT + "/" + self.Guid + "/" + file_name
+ return path
- logging.debug("************ Path of TUT_BUNDLE_ROOT folder of activity : " \
+ logging.debug("************ Path of TUT_BUNDLE_ROOT folder of activity : " \
+ TUT_BUNDLE_ROOT)
- ## TODO : Remove code duplication
-
- # iterate for each .ini file in the TUT_BUNDLE_ROOT folder
- for file_name in os.listdir(TUT_BUNDLE_ROOT):
- if file_name.endswith(".ini"):
- logging.debug("******************* Found .ini file : " \
- + file_name)
- config.read(file_name)
- if config.get(INI_METADATA_SECTION, INI_GUID_PROPERTY) == guid:
- xml_filename = config.get(INI_METADATA_SECTION,
- INI_XML_FSM_PROPERTY)
- save_fsm(fsm, xml_filename, TUT_STORE_ROOT)
-
- elif metadata_filename is not None:
-
- logging.debug("************ Path of TUT_STORE_ROOT folder of activity : " \
- + TUT_STORE_ROOT)
-
- # iterate for each .ini file in the TUT_STORE_ROOT folder
-
- for file_name in os.listdir(TUT_STORE_ROOT):
- if file_name == metadata_filename:
- logging.debug("******************* Found .ini file : " \
- + file_name)
- config.read(file_name)
- xml_filename = config.get(INI_METADATA_SECTION, INI_XML_FSM_PROPERTY)
- save_fsm(fsm,xml_filename,TUT_STORE_ROOT)
+ # iterate for each .ini file in the TUT_BUNDLE_ROOT folder
+ for file_name in os.listdir(TUT_BUNDLE_ROOT):
+ if file_name.endswith(".ini"):
+ logging.debug("******************* Found .ini file : " \
+ + file_name)
+ config.read(file_name)
+ if config.get(INI_METADATA_SECTION, INI_GUID_PROPERTY) == guid:
+ path = TUT_BUNDLE_ROOT + "/" + self.Guid + "/" + file_name
+ return path
+
+ if path is None:
+ logging.debug("**************** Error : GUID not found")
+ raise KeyError
-
- logging.debug("************ Path of TUT_BUNDLE_ROOT folder of activity : " \
- + TUT_BUNDLE_ROOT)
-
- ## TODO : Remove code duplication
-
- # iterate for each .ini file in the TUT_BUNDLE_ROOT folder
- for file_name in os.listdir(TUT_BUNDLE_ROOT):
- if file_name == metadata_filename:
- logging.debug("******************* Found .ini file : " \
- + file_name)
- config.read(file_name)
- if config.get(INI_METADATA_SECTION, INI_GUID_PROPERTY) == guid:
- xml_filename = config.get(INI_METADATA_SECTION,
- INI_XML_FSM_PROPERTY)
- save_fsm(fsm, xml_filename, TUT_STORE_ROOT)
-
-
+ def write_fsm(self, fsm, guid=None):
+
+ """
+ Save fsm to disk. If a GUID parameter is provided, the existing GUID is
+ located in the .ini files in TUT_STORRE_ROOT and TUT_BUNDLE_ROOT and
+ the corresponding FSM is/are created or overwritten. If the GUID is not
+ found, an exception occur.
+ """
- return tuto
+ config = SafeConfigParser()
+
+ if guid is not None:
+ path = return_ini_file_path()
+ config.read(path)
+ xml_filename = config.get(INI_METADATA_SECTION, INI_XML_FSM_PROPERTY)
+ save_fsm(fsm, xml_filename, TUT_STORE_ROOT)
+
- def add_resources(typename, file):
+ def add_resources(self, typename, file):
"""
Add ressources to metadata.
"""
diff --git a/src/sugar/tutorius/temp.py b/src/sugar/tutorius/temp.py
index f9ca9db..6c7fb85 100644
--- a/src/sugar/tutorius/temp.py
+++ b/src/sugar/tutorius/temp.py
@@ -1,176 +1 @@
-# Copyright (C) 2009, Tutorius.org
-# Copyright (C) 2009, Jean-Christophe Savard <savard.jean.christophe@gmail.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-"""
-This module contains all the data handling class of Tutorius
-"""
-
-import logging
-import linecache
-import os
-
-from sugar.tutorius import gtkutils, overlayer
-from sugar.tutorius.core import Tutorial, State, FiniteStateMachine
-from sugar.tutorius.actions import DialogMessage, OnceWrapper, BubbleMessage
-from sugar.tutorius.filters import GtkWidgetEventFilter, TimerEvent
-
-class TutorialStore:
-
- def list_avaible_tutorials(self, activity_name):
- """
- Recuperate the list of all tutorials present on disk for a
- given activity.
- """
- # TODO : Temp path; decide how .tml files will be distrribued in file
- # architecture
-
- path = os.getenv("SUGAR_ACTIVITY_ROOT") + "/data/"
- logging.debug("*********** Path of /data/ folder of activity : " + path)
-
- # Create /data/ folder if no exists
- if not os.path.exists(path):
- os.mkdir(path)
- logging.debug("************* Creating data folder")
-
- tutoKeyName = {}
-
- # iterate for each .tml file in the activity /data folder
- for file_name in os.listdir(path):
-
- if file_name.endswith(".tml"):
- logging.debug("************** .tml file found : " + file_name)
-
- # TODO : Filter for just current activity files
- # (design convention and/or filter xxxxx.yyyyyy key ? )
-
- # Get the key line (always 1st line of .tml file)
- key_line = linecache.getline(path + file_name, 1)
- key_line = key_line.split("\n")[0]
- # Get the name line (always 2nd line of .tml file)
- name_line = linecache.getline(path + file_name, 2)
- name_line = name_line.split("\n")[0]
- # Create dictionary
- tutoKeyName[key_line.split("--KEY::")[1]] = \
- name_line.split("--NAME::")[1]
-
-
-## tutoKeyName = {}
-## tutoKeyName["Writus.CopyPasteStyle"] = "Copy-paste and style"
-
- return tutoKeyName
-
-
-
-class Serializer:
- """
- Class that provide serializing and deserializing of the FSM
- used in the tutorials to/from disk.
- """
-
- def save_fsm(self,fsm):
- """
- Save fsm to disk.
- """
- NotImplementedError
-
- def load_fsm(self, guid):
- """
- Load fsm from disk.
- """
- NotImplementedError
-
-class XMLSerializer(Serializer):
- """
- Class that provide serializing and deserializing of the FSM
- used in the tutorials to/from a xml file.
- """
-
- def save_fsm(self,fsm):
- """
- Save fsm to .xml file
- """
- path = os.getenv("SUGAR_ACTIVITY_ROOT") + "/data/"
- logging.debug("************ Path of /data/ folder of activity : " \
- + path)
- logging.debug("************ User key = " + key)
-
- # iterate for each .tml file in the activity /data folder
- for file_name in os.listdir(path):
-
- if file_name.endswith(".tml"):
-
- logging.debug("************ found .tml file : " + file_name)
- key_line = linecache.getline(path + file_name, 1)
- key_line = key_line.split("\n")[0]
- fileKey = key_line.split("--KEY::")[1]
- logging.debug("************ fileKey = " + fileKey)
- if key == fileKey:
- logging.debug("************ Key : " + key + \
- " = fileKey : " + fileKey)
- tml = file(path + file_name, "r")
- str = tml.read()
- pick = str.split("--PICKLE::")[1]
-
- fsm = pickle.loads(pick)
- tuto = {key:Tutorial(key,fsm)}
-
- return tuto
-
-
- def load_fsm(self, guid):
- """
- Load fsm from xml file who .ini file guid match argument guid.
- """
-
- path = os.getenv("SUGAR_ACTIVITY_ROOT") + "/data/"
- # Create /data/ folder if no exists
- if not os.path.exists(path):
- os.mkdir(path)
- logging.debug("************* Creating data folder")
-
- # Save the dictionnary to .tml file
- tutoSave = file(path + filename + ".tml", 'w')
- str = "--KEY::" + key + "\n--NAME::" + name + "\n--PICKLE::" + \
- pickle.dumps(fsm,0)
- tutoSave.write(str)
- tutoSave.close()
-
-
-class TutorialBundler:
- """
- This class provide the various data handling methods useable by the tutorial
- editor.
- """
-
- def write_metadata_file(data):
- """
- Write metadata to a .ini file.
- """
- NotImplementedError
-
- def write_fsm(fsm):
- """
- Write fsm to disk.
- """
- NotImplementedError
-
- def add_resources(typename, file):
- """
- Add ressources to metadata.
- """
- NotImplementedError \ No newline at end of file
+Ex GUID : 79521158-22b4-11de-8cfa-000c293a027a \ No newline at end of file
diff --git a/src/sugar/tutorius/tests/run-tests.py b/src/sugar/tutorius/tests/run-tests.py
index 182d7b2..0c9219b 100755
--- a/src/sugar/tutorius/tests/run-tests.py
+++ b/src/sugar/tutorius/tests/run-tests.py
@@ -40,7 +40,6 @@ if __name__=='__main__':
runner = unittest.TextTestRunner()
runner.run(suite)
-
coverage.stop()
coverage.report(glob(GLOB_PATH))
coverage.erase()