Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tutorius/vault.py
diff options
context:
space:
mode:
authorJCTutorius <charlie@tutorius-dev.(none)>2009-11-04 16:34:45 (GMT)
committer JCTutorius <charlie@tutorius-dev.(none)>2009-11-04 16:34:45 (GMT)
commit29338d21201d35d815719d5efadde70411bdda54 (patch)
treec099aaa276abef0d10129307053114c6c42e13f5 /tutorius/vault.py
parentd50c3cd98d6e99c7311286559136dc1a775a326d (diff)
vault ressssources, pending review
Diffstat (limited to 'tutorius/vault.py')
-rw-r--r--tutorius/vault.py75
1 files changed, 72 insertions, 3 deletions
diff --git a/tutorius/vault.py b/tutorius/vault.py
index b455a52..9cda2e9 100644
--- a/tutorius/vault.py
+++ b/tutorius/vault.py
@@ -28,10 +28,10 @@ import uuid
import xml.dom.minidom
from xml.dom import NotFoundErr
import zipfile
-from ConfigParser import SafeConfigParser
from . import addon
from .core import Tutorial, State, FiniteStateMachine
+from ConfigParser import SafeConfigParser
logger = logging.getLogger("tutorius")
@@ -62,6 +62,7 @@ NODE_COMPONENT = "Component"
NODE_SUBCOMPONENT = "property"
NODE_SUBCOMPONENTLIST = "listproperty"
NEXT_STATE_ATTR = "next_state"
+RESSOURCES_FOLDER = 'ressources'
class Vault(object):
@@ -73,7 +74,7 @@ class Vault(object):
given activity.
@param activity_name the name of the activity associated with this tutorial. None means ALL activities
- @param activity_vers the version number of the activity to find tutorail for. 0 means find for ANY version. If activity_name is None, version number is not used
+ @param activity_vers the version number of the activity to find tutorail for. 0 means find for ANY version. Ifactivity_ame is None, version number is not used
@returns a map of tutorial {names : GUID}.
"""
# check both under the activity data and user installed folders
@@ -303,7 +304,7 @@ class Vault(object):
@staticmethod
- def deleteTutorial(Tutorial):
+ def deleteTutorial(Guid):
"""
Removes the tutorial from the Vault. It will unpublish the tutorial if need be,
and it will also wipe it from the persistent storage.
@@ -320,6 +321,74 @@ class Vault(object):
else:
return False
+
+ @staticmethod
+ def add_ressource(tutorial_guid, file_path):
+ """
+ Returns a unique name for this resource composed from the original name of the file
+ and a suffix to make it unique ( ex: name_1.jpg ) and add it to the resources for the tutorial.
+ @param tutorial_guid The guid of the tutorial
+ @param file_path the file path of the ressource to add
+ @returns the ressource_id of the ressource
+ """
+
+ # Get the tutorial path
+ bundler = TutorialBundler(tutorial_guid)
+ tutorial_path = bundler.get_tutorial_path(tutorial_guid)
+ # Get the file name
+ fname_splitted = file_path.rsplit('/')
+ file_name = fname_splitted[fname_splitted.__len__() - 1]
+ base_name, extension = os.path.splitext(file_name)
+ # Append unique name to file name
+ file_name_appended = base_name + '_' + str(uuid.uuid1()) + extension
+ # Check if the ressource file already exists
+ new_file_path = os.path.join(tutorial_path, RESSOURCES_FOLDER, file_name_appended)
+ if os.path.isfile(new_file_path) == False:
+ # Copy the ressource file in the vault
+ if os.path.isdir(os.path.join(tutorial_path, RESSOURCES_FOLDER)) == False:
+ os.makedirs(os.path.join(tutorial_path, RESSOURCES_FOLDER))
+ assert os.path.isfile(file_path)
+ shutil.copyfile(file_path, new_file_path)
+
+ return file_name_appended
+
+
+ @staticmethod
+ def delete_ressource(tutorial_guid, ressource_id):
+ """
+ Delete the resource from the resources of the tutorial.
+ @param tutorial_guid the guid of the tutorial
+ @param ressource_id the ressource id of the ressource to delete
+ """
+ # Get the tutorial path
+ bundler = TutorialBundler(tutorial_guid)
+ tutorial_path = bundler.get_tutorial_path(tutorial_guid)
+ # Check if the ressource file exists
+ file_path = os.path.join(tutorial_path, RESSOURCES_FOLDER, ressource_id)
+ if os.path.isfile(file_path):
+ # Delete the ressource
+ os.remove(file_path)
+ else:
+ print('File not found, no delete took place')
+
+ @staticmethod
+ def get_ressource_path(tutorial_guid, ressource_id):
+ """
+ Returns the absolute file path to the resourceID
+ @param tutorial_guid the guid of the tutorial
+ @param ressource_id the ressource id of the ressource to find the path for
+ @returns the absolute path of the ressource file
+ """
+ # Get the tutorial path
+ bundler = TutorialBundler(tutorial_guid)
+ tutorial_path = bundler.get_tutorial_path(tutorial_guid)
+ # Check if the ressource file exists
+ file_path = os.path.join(tutorial_path, RESSOURCES_FOLDER, ressource_id)
+ if os.path.isfile(file_path):
+ return file_path
+ else:
+ return None
+
class Serializer(object):
"""