Index: trunk/dbpickle/dbpickle.py
===================================================================
--- trunk/dbpickle/dbpickle.py (revision 103)
+++ trunk/dbpickle/dbpickle.py (revision 105)
@@ -39,4 +39,8 @@
 returns True if it modified the object, otherwise False.
 
+Be careful with objects automatically inserted in your app e.g. in save()
+methods.  Those could mess up ID numbering in databases which use sequence
+tables.
+
 
 Usage example
@@ -64,9 +68,8 @@
 """
 
-from django.db import transaction
 import cPickle
 import logging
-from django.db import models
 from imp import load_source
+import os
 
 try:
@@ -85,4 +88,5 @@
         meta = model._meta
         app, model_name = meta.app_label, meta.module_name
+        logging.info('dumping %s.%s' % (app, model_name))
 
         # get all many-to-many relation field names for this model
@@ -90,5 +94,5 @@
 
         for obj in model.objects.all():
-            logging.info('dumping %s.%s %s' % (app, model_name, obj))
+            logging.debug('dumping %s.%s %s' % (app, model_name, obj))
             pk = obj._get_pk_val()
             objects[app, model_name, pk] = obj
@@ -98,5 +102,5 @@
                 # many-to-many relation of this object
                 foreign_objs = getattr(obj, m2m).all()
-                logging.info('dumping %s.%s.%s x %d' % (app, model_name, m2m, len(foreign_objs)))
+                logging.debug('dumping %s.%s.%s x %d' % (app, model_name, m2m, len(foreign_objs)))
                 m2m_lists.append((obj, m2m, tuple(foreign_objs)))
 
@@ -144,10 +148,10 @@
         for obj2 in foreign_objs:
             meta2 = obj2._meta
-            logging.info('loading ManyToMany %s.%s.%s -> %s.%s.%s' % (
+            logging.debug('loading ManyToMany %s.%s.%s -> %s.%s.%s' % (
                 meta1.app_label, meta1.module_name, obj1._get_pk_val(),
                 meta2.app_label, meta2.module_name, obj2._get_pk_val()))
             getattr(obj1, m2m).add(obj2)
 
-load = transaction.commit_on_success(load)
+#load = transaction.commit_on_success(load)
 
 
@@ -161,5 +165,9 @@
     meta = obj._meta
 
-    hooks['pre_walk'](obj)
+    if hooks['pre_walk'](obj) is None:
+        logging.debug('skipping %s.%s %s' % (
+            meta.app_label, meta.module_name, obj._get_pk_val()))
+        return
+
     for field in meta.fields:
         if isinstance(field, models.ForeignKey):
@@ -178,13 +186,19 @@
                               '%(related_pk_val)s' % locals())
 
-    logging.info('loading %s.%s %s' % (
+    logging.debug('loading %s.%s %s' % (
         meta.app_label,
         meta.module_name,
         obj._get_pk_val()))
     try:
-        hooks['pre_save'](obj)
-        obj.save()
+        if hooks['pre_save'](obj) is None:
+            logging.debug('skipping %s.%s %s' % (
+                meta.app_label, meta.module_name, obj._get_pk_val()))
+        else:
+            obj.save()
+
     except Exception, e:
-        logging.error('%s while saving %s' % (e, obj))
+        logging.error('%s while saving %s.%s %s %s' % (
+            e, meta.app_label, meta.module_name, obj._get_pk_val(), obj))
+        raise
 
 
@@ -192,4 +206,5 @@
     from optparse import OptionParser
     p = OptionParser()
+    p.add_option('-s', '--settings' , action='store', help='Set the Django settings file')
     p.add_option('-d', '--dump', action='store_const', const='dump', dest='action', help='Dump all Django objects into a file')
     p.add_option('-l', '--load', action='store_const', const='load', dest='action', help='Load all Django objects from a file')
@@ -206,8 +221,17 @@
         # Python 2.3
         logging.basicConfig()
+
+    if opts.settings:
+        os.environ['DJANGO_SETTINGS_MODULE'] = opts.settings
+
+    from django.db import transaction
+    from django.db import models
+
+
     if opts.action == 'dump':
         dump(opts.file)
     elif opts.action == 'load':
-        load(opts.file, opts.plugin)
+        load = transaction.commit_on_success(load)
+        load(ops.file, opts.plugin)
     else:
         print 'Please specify --dump or --load'
