Changeset 105 for trunk/dbpickle/dbpickle.py
- Timestamp:
- 07/03/07 08:27:28 (3 years ago)
- Files:
-
- 1 modified
-
trunk/dbpickle/dbpickle.py (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/dbpickle/dbpickle.py
r103 r105 39 39 returns True if it modified the object, otherwise False. 40 40 41 Be careful with objects automatically inserted in your app e.g. in save() 42 methods. Those could mess up ID numbering in databases which use sequence 43 tables. 44 41 45 42 46 Usage example … … 64 68 """ 65 69 66 from django.db import transaction67 70 import cPickle 68 71 import logging 69 from django.db import models70 72 from imp import load_source 73 import os 71 74 72 75 try: … … 85 88 meta = model._meta 86 89 app, model_name = meta.app_label, meta.module_name 90 logging.info('dumping %s.%s' % (app, model_name)) 87 91 88 92 # get all many-to-many relation field names for this model … … 90 94 91 95 for obj in model.objects.all(): 92 logging. info('dumping %s.%s %s' % (app, model_name, obj))96 logging.debug('dumping %s.%s %s' % (app, model_name, obj)) 93 97 pk = obj._get_pk_val() 94 98 objects[app, model_name, pk] = obj … … 98 102 # many-to-many relation of this object 99 103 foreign_objs = getattr(obj, m2m).all() 100 logging. info('dumping %s.%s.%s x %d' % (app, model_name, m2m, len(foreign_objs)))104 logging.debug('dumping %s.%s.%s x %d' % (app, model_name, m2m, len(foreign_objs))) 101 105 m2m_lists.append((obj, m2m, tuple(foreign_objs))) 102 106 … … 144 148 for obj2 in foreign_objs: 145 149 meta2 = obj2._meta 146 logging. info('loading ManyToMany %s.%s.%s -> %s.%s.%s' % (150 logging.debug('loading ManyToMany %s.%s.%s -> %s.%s.%s' % ( 147 151 meta1.app_label, meta1.module_name, obj1._get_pk_val(), 148 152 meta2.app_label, meta2.module_name, obj2._get_pk_val())) 149 153 getattr(obj1, m2m).add(obj2) 150 154 151 load = transaction.commit_on_success(load)155 #load = transaction.commit_on_success(load) 152 156 153 157 … … 161 165 meta = obj._meta 162 166 163 hooks['pre_walk'](obj) 167 if hooks['pre_walk'](obj) is None: 168 logging.debug('skipping %s.%s %s' % ( 169 meta.app_label, meta.module_name, obj._get_pk_val())) 170 return 171 164 172 for field in meta.fields: 165 173 if isinstance(field, models.ForeignKey): … … 178 186 '%(related_pk_val)s' % locals()) 179 187 180 logging. info('loading %s.%s %s' % (188 logging.debug('loading %s.%s %s' % ( 181 189 meta.app_label, 182 190 meta.module_name, 183 191 obj._get_pk_val())) 184 192 try: 185 hooks['pre_save'](obj) 186 obj.save() 193 if hooks['pre_save'](obj) is None: 194 logging.debug('skipping %s.%s %s' % ( 195 meta.app_label, meta.module_name, obj._get_pk_val())) 196 else: 197 obj.save() 198 187 199 except Exception, e: 188 logging.error('%s while saving %s' % (e, obj)) 200 logging.error('%s while saving %s.%s %s %s' % ( 201 e, meta.app_label, meta.module_name, obj._get_pk_val(), obj)) 202 raise 189 203 190 204 … … 192 206 from optparse import OptionParser 193 207 p = OptionParser() 208 p.add_option('-s', '--settings' , action='store', help='Set the Django settings file') 194 209 p.add_option('-d', '--dump', action='store_const', const='dump', dest='action', help='Dump all Django objects into a file') 195 210 p.add_option('-l', '--load', action='store_const', const='load', dest='action', help='Load all Django objects from a file') … … 206 221 # Python 2.3 207 222 logging.basicConfig() 223 224 if opts.settings: 225 os.environ['DJANGO_SETTINGS_MODULE'] = opts.settings 226 227 from django.db import transaction 228 from django.db import models 229 230 208 231 if opts.action == 'dump': 209 232 dump(opts.file) 210 233 elif opts.action == 'load': 211 load(opts.file, opts.plugin) 234 load = transaction.commit_on_success(load) 235 load(ops.file, opts.plugin) 212 236 else: 213 237 print 'Please specify --dump or --load'
