Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2009-01-11 14:40:44 (GMT)
committer Tomeu Vizoso <tomeu@sugarlabs.org>2009-01-11 14:40:44 (GMT)
commit8dc715738e81cf53920493d70c703ebcd25382be (patch)
treebeaf538b0e2631b5415da2c3c211f6b97b6c5ed6
parentd10185d6a1f0953dec3260e3771af1d538c68d85 (diff)
Add timestamp property if missing during the migration
-rw-r--r--src/olpc/datastore/indexstore.py1
-rw-r--r--src/olpc/datastore/migration.py37
2 files changed, 23 insertions, 15 deletions
diff --git a/src/olpc/datastore/indexstore.py b/src/olpc/datastore/indexstore.py
index 856b7d9..cf249d3 100644
--- a/src/olpc/datastore/indexstore.py
+++ b/src/olpc/datastore/indexstore.py
@@ -15,7 +15,6 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import logging
-import time
import os
import gobject
diff --git a/src/olpc/datastore/migration.py b/src/olpc/datastore/migration.py
index 8846cf1..55c03eb 100644
--- a/src/olpc/datastore/migration.py
+++ b/src/olpc/datastore/migration.py
@@ -25,6 +25,8 @@ import cjson
from olpc.datastore import layoutmanager
+DATE_FORMAT = '%Y-%m-%dT%H:%M:%S'
+
def migrate_from_0():
logging.info('Migrating datastore from version 0 to version 1')
@@ -44,12 +46,8 @@ def migrate_from_0():
_migrate_file(root_path, old_root_path, uid)
_migrate_preview(root_path, old_root_path, uid)
except Exception:
- #logging.warning('Failed to migrate entry %r:%s\n' %(uid,
- # ''.join(traceback.format_exception(*sys.exc_info()))))
- #
- # In production, we may choose to ignore errors when failing to
- # migrate some entries. But for now, raise them.
- raise
+ logging.error('Error while migrating entry %r: %s\n' % \
+ (uid, traceback.format_exc()))
# Just be paranoid, it's cheap.
if old_root_path.endswith('datastore/store'):
@@ -64,18 +62,29 @@ def _migrate_metadata(root_path, old_root_path, uid):
old_metadata_path = os.path.join(old_root_path, uid + '.metadata')
metadata = cjson.decode(open(old_metadata_path, 'r').read())
+
if 'uid' not in metadata:
metadata['uid'] = uid
+
+ if 'timestamp' not in metadata and 'mtime' in metadata:
+ metadata['timestamp'] = \
+ time.mktime(time.strptime(metadata['mtime'], DATE_FORMAT))
+
for key, value in metadata.items():
- f = open(os.path.join(metadata_path, key), 'w')
try:
- if isinstance(value, unicode):
- value = value.encode('utf-8')
- if not isinstance(value, basestring):
- value = str(value)
- f.write(value)
- finally:
- f.close()
+ f = open(os.path.join(metadata_path, key), 'w')
+ try:
+ if isinstance(value, unicode):
+ value = value.encode('utf-8')
+ if not isinstance(value, basestring):
+ value = str(value)
+ f.write(value)
+ finally:
+ f.close()
+ except Exception:
+ logging.error(
+ 'Error while migrating property %s of entry %s: %s\n' % \
+ (key, uid, traceback.format_exc()))
def _migrate_file(root_path, old_root_path, uid):
if os.path.exists(os.path.join(old_root_path, uid)):