Show
Ignore:
Timestamp:
07/03/07 08:27:28 (3 years ago)
Author:
akaihola
Message:

[dbpickle]
- added object skipping feature for plugins
- changed some info messages to debug messages

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/dbpickle/dbpickle.py

    r103 r105  
    3939returns True if it modified the object, otherwise False. 
    4040 
     41Be careful with objects automatically inserted in your app e.g. in save() 
     42methods.  Those could mess up ID numbering in databases which use sequence 
     43tables. 
     44 
    4145 
    4246Usage example 
     
    6468""" 
    6569 
    66 from django.db import transaction 
    6770import cPickle 
    6871import logging 
    69 from django.db import models 
    7072from imp import load_source 
     73import os 
    7174 
    7275try: 
     
    8588        meta = model._meta 
    8689        app, model_name = meta.app_label, meta.module_name 
     90        logging.info('dumping %s.%s' % (app, model_name)) 
    8791 
    8892        # get all many-to-many relation field names for this model 
     
    9094 
    9195        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)) 
    9397            pk = obj._get_pk_val() 
    9498            objects[app, model_name, pk] = obj 
     
    98102                # many-to-many relation of this object 
    99103                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))) 
    101105                m2m_lists.append((obj, m2m, tuple(foreign_objs))) 
    102106 
     
    144148        for obj2 in foreign_objs: 
    145149            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' % ( 
    147151                meta1.app_label, meta1.module_name, obj1._get_pk_val(), 
    148152                meta2.app_label, meta2.module_name, obj2._get_pk_val())) 
    149153            getattr(obj1, m2m).add(obj2) 
    150154 
    151 load = transaction.commit_on_success(load) 
     155#load = transaction.commit_on_success(load) 
    152156 
    153157 
     
    161165    meta = obj._meta 
    162166 
    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 
    164172    for field in meta.fields: 
    165173        if isinstance(field, models.ForeignKey): 
     
    178186                              '%(related_pk_val)s' % locals()) 
    179187 
    180     logging.info('loading %s.%s %s' % ( 
     188    logging.debug('loading %s.%s %s' % ( 
    181189        meta.app_label, 
    182190        meta.module_name, 
    183191        obj._get_pk_val())) 
    184192    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 
    187199    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 
    189203 
    190204 
     
    192206    from optparse import OptionParser 
    193207    p = OptionParser() 
     208    p.add_option('-s', '--settings' , action='store', help='Set the Django settings file') 
    194209    p.add_option('-d', '--dump', action='store_const', const='dump', dest='action', help='Dump all Django objects into a file') 
    195210    p.add_option('-l', '--load', action='store_const', const='load', dest='action', help='Load all Django objects from a file') 
     
    206221        # Python 2.3 
    207222        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 
    208231    if opts.action == 'dump': 
    209232        dump(opts.file) 
    210233    elif opts.action == 'load': 
    211         load(opts.file, opts.plugin) 
     234        load = transaction.commit_on_success(load) 
     235        load(ops.file, opts.plugin) 
    212236    else: 
    213237        print 'Please specify --dump or --load'