def pxs2person(row, person): kw = {} store(kw, card_number=row['CARDNUMBER'], card_type=row.get('CARDTYPE', ''), # 20110110 card_issuer=row.get('CARDISSUER', ''), # 20110110 noble_condition=row.get('NOBLEECOND', ''), # 20110110 birth_place=row.get('BIRTHPLACE', ''), remarks2=row.get('MEMO', ''), gender=convert_sex(row['SEXE']) ) for k, v in kw.items(): setattr(person, k, v) par2person(row, person) if row['IDMUT']: try: person.health_insurance = Company.objects.get( pk=ADR_id(row['IDMUT'])) except ValueError, e: dblogger.warning(u"%s : invalid health_insurance %r", obj2str(person), row['IDMUT']) except Company.DoesNotExist, e: dblogger.warning(u"%s : health_insurance %s not found", obj2str(person), row['IDMUT'])
def pxs2person(row, person): kw = {} store( kw, card_number=row['CARDNUMBER'], card_type=row.get('CARDTYPE', ''), # 20110110 card_issuer=row.get('CARDISSUER', ''), # 20110110 noble_condition=row.get('NOBLEECOND', ''), # 20110110 birth_place=row.get('BIRTHPLACE', ''), remarks2=row.get('MEMO', ''), gender=convert_sex(row['SEXE'])) for k, v in kw.items(): setattr(person, k, v) par2person(row, person) if row['IDMUT']: try: person.health_insurance = Company.objects.get( pk=ADR_id(row['IDMUT'])) except ValueError, e: dblogger.warning(u"%s : invalid health_insurance %r", obj2str(person), row['IDMUT']) except Company.DoesNotExist, e: dblogger.warning(u"%s : health_insurance %s not found", obj2str(person), row['IDMUT'])
def pxs2person(row, person): kw = {} store(kw, card_number=row['CARDNUMBER'], card_issuer=row.get('CARDISSUER', ''), # 20110110 noble_condition=row.get('NOBLEECOND', ''), # 20110110 birth_place=row.get('BIRTHPLACE', ''), remarks2=row.get('MEMO', ''), gender=convert_sex(row['SEXE']) ) for k, v in kw.items(): setattr(person, k, v) par2person(row, person) if row.has_key('CARDTYPE'): #~ row.card_type = BeIdCardTypes.items_dict.get(row['CARDTYPE'].strip(),'') from lino_welfare.modlib.pcsw import models as pcsw if row['CARDTYPE'] == 0: person.card_type = BeIdCardTypes.blank_item else: person.card_type = BeIdCardTypes.get_by_value(str(row['CARDTYPE'])) if row['IDMUT']: try: person.health_insurance = Company.objects.get( pk=ADR_id(row['IDMUT'])) except ValueError, e: dblogger.warning(u"%s : invalid health_insurance %r", obj2str(person), row['IDMUT']) except Company.DoesNotExist, e: dblogger.warning(u"%s : health_insurance %s not found", obj2str(person), row['IDMUT'])
def pxs2person(row, person): kw = {} store( kw, card_number=row['CARDNUMBER'], card_type=row.get('CARDTYPE', ''), # 20110110 card_issuer=row.get('CARDISSUER', ''), # 20110110 noble_condition=row.get('NOBLEECOND', ''), # 20110110 birth_place=row.get('BIRTHPLACE', ''), remarks2=row.get('MEMO', ''), gender=convert_sex(row['SEXE'])) for k, v in kw.items(): setattr(person, k, v) par2person(row, person) if row['IDMUT']: try: person.health_insurance = Company.objects.get( pk=ADR_id(row['IDMUT'])) except ValueError as e: dblogger.warning(u"%s : invalid health_insurance %r", obj2str(person), row['IDMUT']) except Company.DoesNotExist as e: dblogger.warning(u"%s : health_insurance %s not found", obj2str(person), row['IDMUT']) if row['APOTHEKE']: try: person.pharmacy = Company.objects.get(pk=int(row['APOTHEKE'])) except ValueError as e: dblogger.warning(u"%s : invalid pharmacy %r", obj2str(person), row['APOTHEKE']) except Company.DoesNotExist as e: dblogger.warning(u"%s : pharmacy %s not found", obj2str(person), row['APOTHEKE']) nat = row['NATIONALIT'] if nat: try: country = Country.objects.get(short_code__exact=nat) except Country.DoesNotExist: country = Country(isocode=nat, name=nat, short_code=nat) country.save() person.nationality = country store_date(row, person, 'GEBDAT', 'birth_date') store_date(row, person, 'VALID1', 'card_valid_from') store_date(row, person, 'VALID2', 'card_valid_until')
def finalize(self): """ """ self.flush_deferred_objects() if len(self.AFTER_LOAD_HANDLERS): logger.info( "Finalize %d after_load handlers", len(self.AFTER_LOAD_HANDLERS)) for h in self.AFTER_LOAD_HANDLERS: logger.info("Running after_load handler %s", h.__doc__) h(self) logger.info("Loaded %d objects", self.count_objects) if self.save_later: count = 0 s = '' for model, msg_objects in list(self.save_later.items()): for msg, objects in list(msg_objects.items()): if False: # detailed content of the first object s += "\n- %s %s (%d object(s), e.g. %s)" % ( full_model_name(model), msg, len(objects), obj2str(objects[0].object, force_detailed=True)) else: # pk of all objects s += "\n- %s %s (%d object(s) with primary key %s)" % ( full_model_name(model), msg, len(objects), ', '.join([str(o.object.pk) for o in objects])) count += len(objects) msg = "Abandoning with %d unsaved instances:%s" % (count, s) logger.warning(msg)
def allow(action, user, obj, state): v = allow4(action, user, obj, state) logger.info( u"debug_permissions %r required(%s, %s), " "allow(%s, %s, %s) --> %s", action, required_roles, allowed_states, user.username, obj2str(obj), state, v) return v
def finalize(self): """ """ self.flush_deferred_objects() if len(self.AFTER_LOAD_HANDLERS): logger.info("Finalize %d after_load handlers", len(self.AFTER_LOAD_HANDLERS)) for h in self.AFTER_LOAD_HANDLERS: logger.info("Running after_load handler %s", h.__doc__) h(self) # logger.info("Loaded %d objects", self.count_objects) if self.save_later: count = 0 s = '' for model, msg_objects in list(self.save_later.items()): for msg, objects in list(msg_objects.items()): if False: # detailed content of the first object s += "\n- %s %s (%d object(s), e.g. %s)" % ( full_model_name(model), msg, len(objects), obj2str(objects[0].object, force_detailed=True)) else: # pk of all objects s += "\n- %s %s (%d object(s) with primary key %s)" % ( full_model_name(model), msg, len(objects), ', '.join([str(o.object.pk) for o in objects])) count += len(objects) msg = "Abandoning with {} unsaved instances:{}" logger.warning(msg.format(count, s))
def __repr__(self): s = self.__class__.__name__ + "(" attrs = [] for k in 'label instance bound_action href params name'.split(): v = getattr(self, k) if v is not None: attrs.append(k + "=" + obj2str(v)) s += ', '.join(attrs) return s + ")"
def try_save(self, *args, **kw): """Try to save the specified Model instance `obj`. Return `True` on success, `False` if this instance wasn't saved and should be deferred. """ obj = self.object try: """ """ m = getattr(obj, 'before_dumpy_save', None) if m is not None: m(self.deserializer) if not self.deserializer.quick: try: obj.full_clean() except ValidationError as e: raise # Exception("{0} : {1}".format(obj2str(obj), e)) obj.save(*args, **kw) logger.debug("%s has been saved" % obj2str(obj)) self.deserializer.register_success() return True # except ValidationError,e: # except ObjectDoesNotExist,e: # except (ValidationError,ObjectDoesNotExist), e: # except (ValidationError,ObjectDoesNotExist,IntegrityError), e: except Exception as e: if True: if not settings.SITE.loading_from_dump: # hand-written fixtures are expected to yield in savable # order logger.warning("Failed to save %s:" % obj2str(obj)) raise deps = [ f.remote_field.model for f in obj._meta.fields if f.remote_field and f.remote_field.model ] if not deps: logger.exception(e) raise Exception("Failed to save independent %s." % obj2str(obj)) self.deserializer.register_failure(self, e) return False
def try_save(self, *args, **kw): """Try to save the specified Model instance `obj`. Return `True` on success, `False` if this instance wasn't saved and should be deferred. """ obj = self.object try: """ """ m = getattr(obj, 'before_dumpy_save', None) if m is not None: m(self.deserializer) if not self.deserializer.quick: try: obj.full_clean() except ValidationError as e: raise # Exception("{0} : {1}".format(obj2str(obj), e)) obj.save(*args, **kw) logger.debug("%s has been saved" % obj2str(obj)) self.deserializer.register_success() return True # except ValidationError,e: # except ObjectDoesNotExist,e: # except (ValidationError,ObjectDoesNotExist), e: # except (ValidationError,ObjectDoesNotExist,IntegrityError), e: except Exception as e: if True: if not settings.SITE.loading_from_dump: # hand-written fixtures are expected to yield in savable # order logger.warning("Failed to save %s from manual fixture:" % obj2str(obj)) raise deps = [f.remote_field.model for f in obj._meta.fields if f.remote_field and f.remote_field.model] if not deps: logger.exception(e) raise Exception( "Failed to save independent %s." % obj2str(obj)) self.deserializer.register_failure(self, e) return False
def register_failure(self, obj, e): msg = force_unicode(e) d = self.save_later.setdefault(obj.object.__class__, {}) l = d.setdefault(msg, []) if len(l) == 0: logger.info("Deferred %s : %s", obj2str(obj.object), msg) l.append(obj) # report a full traceback, but only once per model and # exception type: k = (obj.object.__class__, e.__class__) if k not in self.reported_tracebacks: logger.exception(e) self.reported_tracebacks.add(k)
def register_failure(self, obj, e): msg = force_text(e) d = self.save_later.setdefault(obj.object.__class__, {}) l = d.setdefault(msg, []) if len(l) == 0: logger.info("Deferred %s : %s", obj2str(obj.object), msg) l.append(obj) # report a full traceback, but only once per model and # exception type: k = (obj.object.__class__, e.__class__) if k not in self.reported_tracebacks: logger.exception(e) self.reported_tracebacks.add(k)
def pre_delete_handler(sender, instance=None, **kw): """Before actually deleting an object, we override Django's behaviour concerning related objects via a GFK field. In Lino you can configure the cascading behaviour using :attr:`allow_cascaded_delete`. See also :doc:`/dev/gfks`. It seems that Django deletes *generic related objects* only if the object being deleted has a `GenericRelation <https://docs.djangoproject.com/en/1.7/ref/contrib/contenttypes/#django.contrib.contenttypes.fields.GenericRelation>`_ field (according to `Why won't my GenericForeignKey cascade when deleting? <http://stackoverflow.com/questions/6803018/why-wont-my-genericforeignkey-cascade-when-deleting>`_). OTOH this statement seems to be wrong: it happens also in my projects which do *not* use any `GenericRelation`. As :mod:`test_broken_gfk <lino_welfare.projects.eupen.tests.test_broken_gfk>` shows. TODO: instead of calling :meth:`disable_delete <lino.core.model.Model.disable_delete>` here again (it has been called earlier by the delete action before asking for user confirmation), Lino might change the `on_delete` attribute of all `ForeignKey` fields which are not in :attr:`allow_cascaded_delete` from ``CASCADE`` to ``PROTECTED`` at startup. """ kernel = settings.SITE.kernel # print "20141208 generic related objects for %s:" % obj must_cascade = [] for gfk, fk_field, qs in kernel.get_generic_related(instance): if gfk.name in qs.model.allow_cascaded_delete: must_cascade.append(qs) else: if fk_field.null: # clear nullable GFKs for obj in qs: setattr(obj, gfk.name, None) elif qs.count(): raise Warning(instance.delete_veto_message( qs.model, qs.count())) for qs in must_cascade: if qs.count(): logger.info("Deleting %d %s before deleting %s", qs.count(), qs.model._meta.verbose_name_plural, obj2str(instance)) for obj in qs: obj.delete()
def try_full_clean(i): while True: try: i.full_clean() except ValidationError, e: if not hasattr(e, 'message_dict'): raise for k in e.message_dict.keys(): fld = i._meta.get_field(k) v = getattr(i, k) setattr(i, k, fld.default) dblogger.warning("%s : ignoring value %r for %s : %s", obj2str(i), v, k, e) return
def try_full_clean(i): while True: try: i.full_clean() except ValidationError, e: if not hasattr(e, 'message_dict'): raise for k in e.message_dict.keys(): fld = i._meta.get_field(k) v = getattr(i, k) setattr(i, k, fld.default) dblogger.warning( "%s : ignoring value %r for %s : %s", obj2str(i), v, k, e) return
def lookup_or_create(model, lookup_field, value, **known_values): """ Look-up whether there is a model instance having `lookup_field` with value `value` (and optionally other `known_values` matching exactly). If it doesn't exist, create it and emit an :attr:`auto_create <lino.core.signals.auto_create>` signal. """ from lino.utils.mldbc.fields import BabelCharField #~ logger.info("2013011 lookup_or_create") fkw = dict() fkw.update(known_values) if isinstance(lookup_field, basestring): lookup_field = model._meta.get_field(lookup_field) if isinstance(lookup_field, BabelCharField): flt = settings.SITE.lookup_filter( lookup_field.name, value, **known_values) else: if isinstance(lookup_field, models.CharField): fkw[lookup_field.name + '__iexact'] = value else: fkw[lookup_field.name] = value flt = models.Q(**fkw) #~ flt = models.Q(**{self.lookup_field.name: value}) qs = model.objects.filter(flt) if qs.count() > 0: # if there are multiple objects, return the first if qs.count() > 1: logger.warning( "%d %s instances having %s=%r (I'll return the first).", qs.count(), model.__name__, lookup_field.name, value) return qs[0] #~ known_values[lookup_field.name] = value obj = model(**known_values) setattr(obj, lookup_field.name, value) try: obj.full_clean() except ValidationError as e: raise ValidationError("Failed to auto_create %s : %s" % (obj2str(obj), e)) obj.save() signals.auto_create.send(obj, known_values=known_values) return obj
def lookup_or_create(model, lookup_field, value, **known_values): """ Look-up whether there is a model instance having `lookup_field` with value `value` (and optionally other `known_values` matching exactly). If it doesn't exist, create it and emit an :attr:`auto_create <lino.core.signals.auto_create>` signal. """ from lino.utils.mldbc.fields import BabelCharField #~ logger.info("2013011 lookup_or_create") fkw = dict() fkw.update(known_values) if isinstance(lookup_field, six.string_types): lookup_field = model._meta.get_field(lookup_field) if isinstance(lookup_field, BabelCharField): flt = settings.SITE.lookup_filter( lookup_field.name, value, **known_values) else: if isinstance(lookup_field, models.CharField): fkw[lookup_field.name + '__iexact'] = value else: fkw[lookup_field.name] = value flt = models.Q(**fkw) #~ flt = models.Q(**{self.lookup_field.name: value}) qs = model.objects.filter(flt) if qs.count() > 0: # if there are multiple objects, return the first if qs.count() > 1: logger.warning( "%d %s instances having %s=%r (I'll return the first).", qs.count(), model.__name__, lookup_field.name, value) return qs[0] #~ known_values[lookup_field.name] = value obj = model(**known_values) setattr(obj, lookup_field.name, value) try: obj.full_clean() except ValidationError as e: raise ValidationError("Failed to auto_create %s : %s" % (obj2str(obj), e)) obj.save() signals.auto_create.send(obj, known_values=known_values) return obj
def __repr__(self): kw = dict() if self.master_instance is not None: kw.update(master_instance=obj2str(self.master_instance)) if self.filter is not None: kw.update(filter=repr(self.filter)) if self.known_values: kw.update(known_values=self.known_values) if self.requesting_panel: kw.update(requesting_panel=self.requesting_panel) u = self.get_user() if u is not None: kw.update(user=u.username) if False: # self.request: kw.update(request=format_request(self.request)) return "<%s %s(%s)>" % (self.__class__.__name__, self.bound_action.full_name(), kw)
def __repr__(self): kw = dict() if self.master_instance is not None: kw.update(master_instance=obj2str(self.master_instance)) if self.filter is not None: kw.update(filter=repr(self.filter)) if self.known_values: kw.update(known_values=self.known_values) if self.requesting_panel: kw.update(requesting_panel=self.requesting_panel) u = self.get_user() if u is not None: kw.update(user=u.username) if False: # self.request: kw.update(request=format_request(self.request)) return "<%s %s(%s)>" % ( self.__class__.__name__, self.bound_action.full_name(), kw)
def register_failure(self, obj, e): msg = force_text(e) d = self.save_later.setdefault(obj.object.__class__, {}) l = d.setdefault(msg, []) count = len(l) if count == 0: logger.info("Deferred %s : %s", obj2str(obj.object), msg) elif count > self.max_deferred_objects: self.flush_deferred_objects() if count > self.max_deferred_objects + 1: raise Exception("More than {} deferred objects".format( self.max_deferred_objects)) l.append(obj) # report a full traceback, but only once per model and # exception type: k = (obj.object.__class__, e.__class__) if k not in self.reported_tracebacks: logger.exception(e) self.reported_tracebacks.add(k)
def register_failure(self, obj, e): msg = force_text(e) d = self.save_later.setdefault(obj.object.__class__, {}) l = d.setdefault(msg, []) count = len(l) if count == 0: logger.info("Deferred %s : %s", obj2str(obj.object), msg) elif count > self.max_deferred_objects: self.flush_deferred_objects() if count > self.max_deferred_objects + 1: raise Exception( "More than {} deferred objects".format( self.max_deferred_objects)) l.append(obj) # report a full traceback, but only once per model and # exception type: k = (obj.object.__class__, e.__class__) if k not in self.reported_tracebacks: logger.exception(e) self.reported_tracebacks.add(k)
def load_dbf(dbpath, tableName, load): fn = os.path.join(dbpath, '%s.DBF' % tableName) f = dbfreader.DBFFile(fn, codepage="cp850") dblogger.info("Loading %d records from %s...", len(f), fn) f.open() for dbfrow in f: i = load(dbfrow) if i is not None: i = settings.TIM2LINO_LOCAL(tableName, i) if i is not None: try_full_clean(i) try: i.save() #~ dblogger.debug("%s has been saved",i) except Exception, e: #~ except IntegrityError,e: dblogger.warning( "Failed to save %s from %s : %s", obj2str(i), dbfrow, e) dblogger.exception(e)
def finalize(self): """ """ self.flush_deferred_objects() if len(self.AFTER_LOAD_HANDLERS): logger.info( "Finalize %d after_load handlers", len(self.AFTER_LOAD_HANDLERS)) for h in self.AFTER_LOAD_HANDLERS: logger.info("Running after_load handler %s", h.__doc__) h(self) # logger.info("Loaded %d objects", self.count_objects) if self.save_later: count = 0 s = '' for model, msg_objects in list(self.save_later.items()): for msg, objects in list(msg_objects.items()): if False: # detailed content of the first object s += "\n- %s %s (%d object(s), e.g. %s)" % ( full_model_name(model), msg, len(objects), obj2str(objects[0].object, force_detailed=True)) else: # pk of all objects s += "\n- %s %s (%d object(s) with primary key %s)" % ( full_model_name(model), msg, len(objects), ', '.join([str(o.object.pk) for o in objects])) count += len(objects) msg = "Abandoning with {} unsaved instances:{}" logger.warning(msg.format(count, s)) # Don't raise an exception. The unsaved instances got lost and # the loaddata should be done again, but meanwhile the database # is not necessarily invalid and may be used for further testing. # And anyway, loaddata would catch it and still continue. # raise Exception(msg) settings.SITE.loading_from_dump = False
if row['IDMUT']: try: person.health_insurance = Company.objects.get( pk=ADR_id(row['IDMUT'])) except ValueError, e: dblogger.warning(u"%s : invalid health_insurance %r", obj2str(person), row['IDMUT']) except Company.DoesNotExist, e: dblogger.warning(u"%s : health_insurance %s not found", obj2str(person), row['IDMUT']) if row['APOTHEKE']: try: person.pharmacy = Company.objects.get(pk=int(row['APOTHEKE'])) except ValueError, e: dblogger.warning(u"%s : invalid pharmacy %r", obj2str(person), row['APOTHEKE']) except Company.DoesNotExist, e: dblogger.warning(u"%s : pharmacy %s not found", obj2str(person), row['APOTHEKE']) nat = row['NATIONALIT'] if nat: try: country = Country.objects.get(short_code__exact=nat) except Country.DoesNotExist: country = Country(isocode=nat, name=nat, short_code=nat) country.save() person.nationality = country store_date(row, person, 'GEBDAT', 'birth_date')
def __repr__(self): return obj2str(self)
def log_deleted(request, elem): #~ on_user_change(request,elem) logger.info(u"%s deleted by %s.", obj2str(elem), request.user)
try: person.health_insurance = Company.objects.get( pk=ADR_id(row['IDMUT'])) except ValueError, e: dblogger.warning(u"%s : invalid health_insurance %r", obj2str(person), row['IDMUT']) except Company.DoesNotExist, e: dblogger.warning(u"%s : health_insurance %s not found", obj2str(person), row['IDMUT']) if row['APOTHEKE']: try: person.pharmacy = Company.objects.get(pk=int(row['APOTHEKE'])) except ValueError, e: dblogger.warning(u"%s : invalid pharmacy %r", obj2str(person), row['APOTHEKE']) except Company.DoesNotExist, e: dblogger.warning(u"%s : pharmacy %s not found", obj2str(person), row['APOTHEKE']) nat = row['NATIONALIT'] if nat: try: country = Country.objects.get(short_code__exact=nat) except Country.DoesNotExist: country = Country(isocode=nat, name=nat, short_code=nat) country.save() person.nationality = country store_date(row, person, 'GEBDAT', 'birth_date') store_date(row, person, 'VALID1', 'card_valid_from')