示例#1
0
def send(dbcal, calendar, client):
    n = 0
    for obj in dbcal.event_set.filter(user_modified=True):
        dblogger.info("Gonna send %s", obj)
        n += 1

        mycal = vobject.iCalendar()
        #~ mycal.add('vevent')

        #~ mycal = vobject.iCalendar()
        #~ vevent = vobject.newFromBehavior('vevent', '2.0')
        vevent = mycal.add('vevent')
        vevent.add('uid').value = obj.uid
        vevent.add('dtstamp').value = obj.modified
        if obj.start_time:
            vevent.add('dtstart').value = datetime.datetime.combine(
                obj.start_date, obj.start_time)
        else:
            vevent.add('dtstart').value = obj.start_date
        if obj.end_time:
            vevent.add('dtend').value = datetime.datetime.combine(
                obj.end_date, obj.end_time)
        else:
            vevent.add('dtend').value = obj.end_date
        vevent.add('transp').value = iif(
            obj.transparent, 'TRANSPARENT', 'OPAQUE')
        vevent.add('summary').value = obj.summary
        if obj.place:
            vevent.add('location').value = obj.place.name
        vevent.add('description').value = obj.description
        event = caldav.Event(
            client, data=mycal.serialize(), parent=calendar).save()
    dblogger.info("--> Sent %d events to calendar server.", n)
示例#2
0
def watch():
    """
    Loops through all remote calendars,
    synchronizing them with their calendar server.
    We first send local changes to the server,
    then retrieve remote changes into our database.

    Deserves more documentation.
    """
    for dbcal in Calendar.objects.filter(url_template__isnull=False):
        #~ if not dbcal.url_template:
            #~ continue
        url = dbcal.get_url()
        #~ dblogger.info("Synchronize calendar %s using %s",dbcal.name, url)
        dblogger.info("Synchronize calendar %s...", dbcal.name)

        client = caldav.DAVClient(url)
        principal = caldav.Principal(client, url)
        #~ print "url.username:"******"url.hostname:", principal.url.hostname

        calendars = principal.calendars()
        if len(calendars) == 0:
            dblogger.info("--> Sorry, no calendar")
        elif len(calendars) > 1:
            #~ print "WARNING: more than 1 calendar"
            dblogger.warning("--> More than 1 calendar")
        else:
            send(dbcal, calendars[0], client)
            receive(dbcal, calendars[0])
示例#3
0
def watch():
    """
    Loops through all remote calendars, 
    synchronizing them with their calendar server.
    We first send local changes to the server, 
    then retrieve remote changes into our database.
    
    Deserves more documentation.
    """
    for dbcal in Calendar.objects.filter(url_template__isnull=False):
        #~ if not dbcal.url_template:
            #~ continue
        url = dbcal.get_url()
        #~ dblogger.info("Synchronize calendar %s using %s",dbcal.name, url)
        dblogger.info("Synchronize calendar %s...", dbcal.name)

        client = caldav.DAVClient(url)
        principal = caldav.Principal(client, url)
        #~ print "url.username:"******"url.hostname:", principal.url.hostname

        calendars = principal.calendars()
        if len(calendars) == 0:
            dblogger.info("--> Sorry, no calendar")
        elif len(calendars) > 1:
            #~ print "WARNING: more than 1 calendar"
            dblogger.warning("--> More than 1 calendar")
        else:
            send(dbcal, calendars[0], client)
            receive(dbcal, calendars[0])
示例#4
0
 def process_message(self, peer, mailfrom, rcpttos, data):
     rv = mail_received.send(self,
                             peer=peer,
                             mailfrom=mailfrom,
                             rcpttos=rcpttos,
                             data=data)
     dblogger.info("20140703 process_message %s", rv)
示例#5
0
def main():
    fn = sys.argv[1]
    f = dbfreader.DBFFile(fn, codepage="cp850")
    dblogger.info("Loading %d records from %s...", len(f), fn)
    f.open()
    for dbfrow in f:
        if dbfrow.deleted():
            continue
        c = get_or_warn(dbfrow.idpar1)
        p = get_or_warn(dbfrow.idpar2)
        if not c or not p:
            continue  # invalid idpar
        t = tim2lino(dbfrow.type)
        if t is not None:
            # 10 and 11 are symmetric: don't duplicate them. if the
            # opposite record exists, ignore the other one.
            if dbfrow.type in ('10', '11'):
                qs = Link.objects.filter(parent=c, child=p, type=t)
                if qs.count() > 0:
                    continue
            obj = Link(parent=p, child=c, type=t)
            obj.full_clean()
            obj.save()

        # plp2lino(dbfrow.type, p, c)

    f.close()
示例#6
0
def send(dbcal, calendar, client):
    n = 0
    for obj in dbcal.event_set.filter(user_modified=True):
        dblogger.info("Gonna send %s", obj)
        n += 1

        mycal = vobject.iCalendar()
        #~ mycal.add('vevent')

        #~ mycal = vobject.iCalendar()
        #~ vevent = vobject.newFromBehavior('vevent', '2.0')
        vevent = mycal.add('vevent')
        vevent.add('uid').value = obj.uid
        vevent.add('dtstamp').value = obj.modified
        if obj.start_time:
            vevent.add('dtstart').value = datetime.datetime.combine(
                obj.start_date, obj.start_time)
        else:
            vevent.add('dtstart').value = obj.start_date
        if obj.end_time:
            vevent.add('dtend').value = datetime.datetime.combine(
                obj.end_date, obj.end_time)
        else:
            vevent.add('dtend').value = obj.end_date
        vevent.add('transp').value = iif(
            obj.transparent, 'TRANSPARENT', 'OPAQUE')
        vevent.add('summary').value = obj.summary
        if obj.place:
            vevent.add('location').value = obj.place.name
        vevent.add('description').value = obj.description
        event = caldav.Event(
            client, data=mycal.serialize(), parent=calendar).save()
    dblogger.info("--> Sent %d events to calendar server.", n)
示例#7
0
 def load_fnl(self, row, **kw):
     jnl, year, number = row2jnl(row)
     if jnl is None:
         dblogger.info("No journal %s (%s)", row.idjnl, row)
         return
     if year < START_YEAR:
         return
     doc = self.FINDICT.get((jnl, year, number))
     if doc is None:
         raise Exception("FNL %r without document" %
                         list(jnl, year, number))
     try:
         kw.update(seqno=int(row.line.strip()))
     except ValueError:
         pass  # some lines contain "***"
     if row.date:
         kw.update(date=row.date)
     try:
         if row.idctr == ('V'):
             kw.update(partner_id=self.par_pk(row.idcpt.strip()))
             kw.update(
                 account=vat.TradeTypes.sales.get_partner_account())
         elif row.idctr == ('E'):
             kw.update(partner_id=self.par_pk(row.idcpt.strip()))
             kw.update(
                 account=vat.TradeTypes.purchases.get_partner_account())
         elif row.idctr == ('G'):
             kw.update(partner_id=self.par_pk(row.idcpt.strip()))
             kw.update(
                 account=vat.TradeTypes.wages.get_partner_account())
         elif row.idctr == ('S'):
             kw.update(partner_id=self.par_pk(row.idcpt.strip()))
             kw.update(
                 account=vat.TradeTypes.clearings.get_partner_account())
         else:
             a = Account.objects.get(ref=row.idcpt.strip())
             kw.update(account=a)
         kw.update(amount=mton(row.mont, ZERO))
         kw.update(dc=self.dc2lino(row.dc))
     except Exception as e:
         dblogger.warning(
             "Failed to load FNL line %s from %s : %s", row, kw, e)
         raise
     try:
         kw.update(match=row.match.strip())
         item = doc.add_voucher_item(**kw)
         # match = row.match.strip()
         # if match:
         #     lst = self.must_match.setdefault(match, [])
         #     lst.append((doc, item))
         #     # self.must_match.append((doc, item, match))
         return item
     except Exception as e:
         dblogger.warning(
             "Failed to load FNL line %s from %s : %s", row, kw, e)
示例#8
0
 def load_fnl(self, row, **kw):
     jnl, year, number = row2jnl(row)
     if jnl is None:
         dblogger.info("No journal %s (%s)", row.idjnl, row)
         return
     if year < START_YEAR:
         return
     doc = self.FINDICT.get((jnl, year, number))
     if doc is None:
         raise Exception("FNL %r without document" %
                         list(jnl, year, number))
     try:
         kw.update(seqno=int(row.line.strip()))
     except ValueError:
         pass  # some lines contain "***"
     if row.date:
         kw.update(date=row.date)
     try:
         if row.idctr == ('V'):
             kw.update(partner_id=self.par_pk(row.idcpt.strip()))
             kw.update(
                 account=vat.TradeTypes.sales.get_main_account())
         elif row.idctr == ('E'):
             kw.update(partner_id=self.par_pk(row.idcpt.strip()))
             kw.update(
                 account=vat.TradeTypes.purchases.get_main_account())
         elif row.idctr == ('G'):
             kw.update(partner_id=self.par_pk(row.idcpt.strip()))
             kw.update(
                 account=vat.TradeTypes.wages.get_main_account())
         elif row.idctr == ('S'):
             kw.update(partner_id=self.par_pk(row.idcpt.strip()))
             kw.update(
                 account=vat.TradeTypes.clearings.get_main_account())
         else:
             a = Account.objects.get(ref=row.idcpt.strip())
             kw.update(account=a)
         kw.update(amount=mton(row.mont, ZERO))
         kw.update(dc=self.dc2lino(row.dc))
     except Exception as e:
         dblogger.warning(
             "Failed to load FNL line %s from %s : %s", row, kw, e)
         raise
     try:
         kw.update(match=row.match.strip())
         item = doc.add_voucher_item(**kw)
         # match = row.match.strip()
         # if match:
         #     lst = self.must_match.setdefault(match, [])
         #     lst.append((doc, item))
         #     # self.must_match.append((doc, item, match))
         return item
     except Exception as e:
         dblogger.warning(
             "Failed to load FNL line %s from %s : %s", row, kw, e)
示例#9
0
 def PUT_special(self, watcher, **kw):
     obj = watcher.watched
     model = PAR_model(kw["data"])
     if obj.__class__ != model:
         dblogger.info(
             "%s:%s (%s) : %s becomes %s",
             kw["alias"],
             kw["id"],
             dd.obj2str(obj),
             obj.__class__.__name__,
             model.__name__,
         )
         self.swapclass(watcher, model, kw["data"])
         return True
示例#10
0
def process_line(ln):
    d = json.loads(ln, object_hook=json2py)
    kw = {}
    for k, v in d.items():
        kw[str(k)] = v
    ctrl = controllers.get(kw["alias"], None)
    if ctrl is None:
        # ~ raise Exception("%(alias)s : no such controller." % kw)
        # ~ logger.debug("Ignoring change %(time)s for %(alias)s:%(id)s",kw['time'],kw['alias'],kw['id'])
        dblogger.info("Ignoring change %(time)s for %(alias)s:%(id)s", kw)
        return
    # ~ kw['data'] = ctrl.prepare_data(kw['data'])
    m = getattr(ctrl, kw["method"])
    m(**kw)
示例#11
0
    def DELETE(self, **kw):
        obj = self.get_object(kw)
        if obj is None:
            dblogger.warning("%s:%s : DELETE failed (does not exist)", kw["alias"], kw["id"])
            return
        msg = obj.disable_delete(REQUEST)
        if msg:
            dblogger.warning("%s:%s : DELETE failed: %s", kw["alias"], kw["id"], msg)
            return

        # ~ 20120921 dblogger.log_deleted(REQUEST,obj)
        dd.pre_ui_delete.send(sender=obj, request=REQUEST)
        # ~ changes.log_delete(REQUEST,obj)
        obj.delete()
        dblogger.info("%s:%s (%s) : DELETE ok", kw["alias"], kw["id"], dd.obj2str(obj))
示例#12
0
 def load_ven(self, row, **kw):
     jnl, year, number = row2jnl(row)
     if jnl is None:
         dblogger.info("No journal %s (%s)", row.idjnl, row)
         return
     if year < START_YEAR:
         dblogger.info("Ignore %s %s because year %s <%s", row.idjnl, number, year, START_YEAR)
         return
     kw.update(year=year)
     kw.update(number=number)
     kw.update(vat_regime=vat_regime(row.idreg.strip()))
     # kw.update(id=pk)
     partner = self.get_customer(row.idpar)
     if partner is None:
         raise Exception("No partner id {0} in {1}".format(row.idpar, row))
     else:
         kw.update(partner=partner)
     if jnl.trade_type.name == 'sales':
         # kw.update(imode=self.DIM)
         if row.idprj.strip():
             kw.update(project_id=int(row.idprj.strip()))
         kw.update(discount=mton(row.remise))
     elif jnl.trade_type.name == 'purchases':
         pass
         # kw.update(partner=contacts.Partner.objects.get(
         #     pk=self.par_pk(row.idpar)))
         # partner=contacts.Partner.objects.get(pk=self.par_pk(row.idpar))
     else:
         raise Exception("Unknown TradeType %r" % jnl.trade_type)
     kw.update(entry_date=row.date)
     kw.update(voucher_date=row.date)
     kw.update(user=self.get_user(row.auteur))
     kw.update(total_excl=mton(row.montr))
     kw.update(total_vat=mton(row.montt))
     kw.update(match=row.match.strip())
     doc = jnl.create_voucher(**kw)
     # doc.partner = partner
     # doc.full_clean()
     # doc.save()
     self.VENDICT[(jnl, year, number)] = doc
     if row.etat == self.etat_registered:
         self.must_register.append(doc)
     # match = row.match.strip()
     # if match:
     #     lst = self.must_match.setdefault(match, [])
     #     lst.append((doc, doc))
     #     # self.must_match.append((doc, doc, match))
     return doc
示例#13
0
def plp2lino(plptype, p, c):
    if plptype.endswith('R'):
        return
    if plptype == '01':
        role = R_CHILD
    elif plptype == '02':
        role = R_COHABITANT
    elif plptype == '03':
        role = R_ADOPTED
    elif plptype == '04':
        role = R_RELATIVE
    elif plptype == '10':
        role = R_MARRIED
    elif plptype == '11':
        role = R_PARTNER
    else:
        raise Exception("Invalid link type %r" % plptype)
    
    # Is there a household where the parent of this relation is no a
    # child?
    members = Member.objects.filter(
        person=p.person).exclude(role__in=child_roles)
    if members.count() == 0:
        hh = Household(type=T_FAMILY, name=p.person.last_name)
        hh.full_clean()
        hh.save()
        dblogger.debug(
            "Created household %s from PLP `%s is %s of %s`",
            hh, p, role, c)
        obj = Member(household=hh, role=R_CHEF, person=p.person)
        obj.full_clean()
        obj.save()
    elif members.count() == 1:
        hh = members[0].household
    else:
        msg = "Found more than 1 household for parent %r" % p
        # raise Exception(msg)
        dblogger.warning(msg)
        return
        
    obj = Member(household=hh, role=role, person=c.person)
    obj.full_clean()
    obj.save()
    dblogger.info("Created %s as %s", obj.person, obj.role)
示例#14
0
 def PUT(self, **kw):
     # ~ dblogger.info("%s.PUT(%s)",self.__class__.__name__,kw)
     obj = self.get_object(kw)
     if obj is None:
         if self.allow_put2post:
             dblogger.info("%s:%s : PUT becomes POST", kw["alias"], kw["id"])
             kw["method"] = "POST"
             return self.POST(**kw)
         else:
             dblogger.warning("%s:%s : PUT ignored (row does not exist)", kw["alias"], kw["id"])
             return
     watcher = ChangeWatcher(obj)
     if self.PUT_special(watcher, **kw):
         return
     self.set_timestamp(kw["time"])
     self.applydata(obj, kw["data"])
     dblogger.info("%s:%s (%s) : PUT %s", kw["alias"], kw["id"], dd.obj2str(obj), kw["data"])
     self.validate_and_save(obj)
     watcher.send_update(REQUEST)
示例#15
0
def country2kw(row, kw):
    # for both PAR and ADR

    if row.has_key("PROF"):
        activity = row["PROF"]
        if activity:
            try:
                activity = int(activity)
            except ValueError:
                dblogger.info("Ignored invalid value PROF = %r", activity)
            else:
                if activity:
                    try:
                        activity = pcsw.Activity.objects.get(pk=activity)
                    except pcsw.Activity.DoesNotExist:
                        activity = pcsw.Activity(id=activity, name=unicode(activity))
                        activity.save(force_insert=True)
                    kw.update(activity=activity)

    country = row["PAYS"]
    if country:
        try:
            country = Country.objects.get(short_code__exact=country)
        except Country.DoesNotExist:
            country = Country(isocode=country, name=country, short_code=country)
            country.save()
        kw.update(country=country)

        zip_code = row["CP"]
        if zip_code:
            kw.update(zip_code=zip_code)
            try:
                city = Place.objects.get(country=country, zip_code__exact=zip_code)
                kw.update(city=city)
            except Place.DoesNotExist, e:
                city = Place(zip_code=zip_code, name=zip_code, country=country)
                city.save()
                kw.update(city=city)
                # ~ dblogger.warning("%s-%s : %s",row['PAYS'],row['CP'],e)
            except Place.MultipleObjectsReturned, e:
                dblogger.warning("%s-%s : %s", row["PAYS"], row["CP"], e)
示例#16
0
 def load_fin(self, row, **kw):
     jnl, year, number = row2jnl(row)
     if jnl is None:
         dblogger.info("No journal %s (%s)", row.idjnl, row)
         return
     if year < START_YEAR:
         return
     kw.update(year=year)
     kw.update(number=number)
     # kw.update(id=pk)
     kw.update(voucher_date=row.date)
     kw.update(entry_date=row.date)
     kw.update(user=self.get_user())
     kw.update(balance1=mton(row.mont1, ZERO))
     kw.update(balance2=mton(row.mont2, ZERO))
     doc = jnl.create_voucher(**kw)
     self.FINDICT[(jnl, year, number)] = doc
     # print row.etat
     if row.etat == self.etat_registered:
         self.must_register.append(doc)
     return doc
示例#17
0
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)
示例#18
0
def main(*args, **options):
    if len(args) == 0:
        addr, port = '127.0.0.1', DEFAULT_PORT
    elif len(args) != 1:
        raise CommandError('Must specify ADDR or ADDR:PORT as argument')
    else:
        a = args[0].split(':')
        if len(a) == 2:
            addr, port = a
            port = int(port)
        elif len(a) == 1:
            addr = a[0]
            port = DEFAULT_PORT
        else:
            raise CommandError("Invalid ADDR, must be something "
                               "like 127.0.0.1 or 127.0.0.1:1025")
    settings.SITE.startup()
    MySMTPServer((addr, port), None)
    dblogger.info("20140703 start listening on %s:%d", addr, port)
    asyncore.loop()
    dblogger.info("20140703 stopped listening on %s:%d", addr, port)
示例#19
0
 def load_fin(self, row, **kw):
     jnl, year, number = row2jnl(row)
     if jnl is None:
         dblogger.info("No journal %s (%s)", row.idjnl, row)
         return
     if year < START_YEAR:
         return
     kw.update(year=year)
     kw.update(number=number)
     # kw.update(id=pk)
     kw.update(voucher_date=row.date)
     kw.update(entry_date=row.date)
     kw.update(user=self.get_user())
     kw.update(balance1=mton(row.mont1, ZERO))
     kw.update(balance2=mton(row.mont2, ZERO))
     doc = jnl.create_voucher(**kw)
     self.FINDICT[(jnl, year, number)] = doc
     # print row.etat
     if row.etat == self.etat_registered:
         self.must_register.append(doc)
     return doc
示例#20
0
    def handle(self, *args, **options):
        if len(args) != 1:
            raise CommandError(
                'Please specify the path to your TIM data directory')

        dbname = settings.DATABASES['default']['NAME']
        if not confirm("Gonna reset your database (%s).\nAre you sure (y/n) ?" % dbname):
            raise CommandError("User abort.")

        options.update(interactive=False)

        dblogger.info("Lino initdb_tim started on database %s." % dbname)
        dblogger.info(lino.welcome_text())

        apps = app_labels()
        call_command('reset', *apps, **options)

        #~ call_command('reset',
          #~ 'contacts','pcsw','countries','auth','notes',
          #~ 'countries','links','uploads',
          #~ interactive=False)

        call_command('syncdb', **options)

        #~ NoteType = resolve_model('notes.NoteType')
        #~ n = NoteType.objects.all().count()
        #~ assert n == 21, 'NoteType.objects.all().count() == %d (expected 21)' % n

        #~ lino_site.initdb()
        #~ for o in tim_fixture_objects():
            #~ o.save()
        #~ logger.info('lino_site.fill() done. Starting load_tim_data()...')
        load_tim_data(args[0])

        dblogger.info("Lino initdb_tim done on database %s." % dbname)
示例#21
0
def main(*args, **options):
    if len(args) == 0:
            addr, port = '127.0.0.1', DEFAULT_PORT
    elif len(args) != 1:
        raise CommandError(
            'Must specify ADDR or ADDR:PORT as argument')
    else:
        a = args[0].split(':')
        if len(a) == 2:
            addr, port = a
            port = int(port)
        elif len(a) == 1:
            addr = a[0]
            port = DEFAULT_PORT
        else:
            raise CommandError("Invalid ADDR, must be something "
                               "like 127.0.0.1 or 127.0.0.1:1025")
    settings.SITE.startup()
    MySMTPServer((addr, port), None)
    dblogger.info("20140703 start listening on %s:%d", addr, port)
    asyncore.loop()
    dblogger.info("20140703 stopped listening on %s:%d", addr, port)
示例#22
0
    def handle(self, *args, **options):

        dbname = settings.DATABASES['default']['NAME']
        if options.get('interactive'):
            if not confirm("This is going to GARBLE your database (%s).\n"
                           "Are you sure (y/n) ?" % dbname):
                raise CommandError("User abort.")

        def build_dist(k):
            k = k.upper()
            if k == 'BE':
                return BelgianDistribution()
            if k == 'EE':
                return EstonianDistribution()
            raise CommandError("Invalid distribution key %r." % k)

        dist = build_dist(options.get('distribution'))

        User = dd.resolve_model(settings.SITE.user_model)
        Person = rt.models.contacts.Person

        for p in Person.objects.order_by('id'):
            if User.objects.filter(partner=p).count() > 0:
                # users keep their original name
                pass
            else:
                p.last_name = dist.LAST_NAMES.pop()
                if p.gender == dd.Genders.male:
                    p.first_name = dist.MALES.pop()
                    dist.FEMALES.pop()
                else:
                    p.first_name = dist.FEMALES.pop()
                    dist.MALES.pop()
                p.name = join_words(p.last_name, p.first_name)
                dist.before_save(p)
                p.save()
                dblogger.info(p.get_address(', '))
示例#23
0
    def handle(self, *args, **options):

        dbname = settings.DATABASES['default']['NAME']
        if options.get('interactive'):
            if not confirm("This is going to GARBLE your database (%s).\nAre you sure (y/n) ?" % dbname):
                raise CommandError("User abort.")

        contacts = dd.resolve_app('contacts')

        User = dd.resolve_model(settings.SITE.user_model)
        Person = dd.resolve_model('contacts.Person')
        Household = dd.resolve_model('households.Household')
        Member = dd.resolve_model('households.Member')
        Role = dd.resolve_model('households.Role')
        Country = dd.resolve_model('countries.Country')

        for p in Person.objects.order_by('id'):
            if User.objects.filter(partner=p).count() > 0:
                # users keep their original name
                pass
            else:
                p.nationality = Country.objects.get(
                    isocode=NATIONALITIES.pop())
                p.last_name = LAST_NAMES.pop()
                if p.gender == dd.Genders.male:
                    p.first_name = MALES.pop()
                    FEMALES.pop()
                else:
                    p.first_name = FEMALES.pop()
                    MALES.pop()
                #~ dblogger.log_changes(REQUEST,p)
                p.name = join_words(p.last_name, p.first_name)
                p.save()
                dblogger.info("%s from %s", unicode(p), unicode(p.nationality))

        MEN = Cycler(Person.objects.filter(gender=dd.Genders.male)
                     .order_by('id'))
        WOMEN = Cycler(
            Person.objects.filter(gender=dd.Genders.female).order_by('id'))
        for h in Household.objects.all():
            if h.member_set.all().count() == 0:
                he = MEN.pop()
                she = WOMEN.pop()
                h.name = he.last_name + "-" + she.last_name
                Member(household=h, person=he,
                       role=Role.objects.get(pk=1)).save()
                Member(household=h, person=she,
                       role=Role.objects.get(pk=2)).save()
            else:
                h.name = ''
                h.full_clean()
            h.save()
            dblogger.info(unicode(h))

        dblogger.info("GARBLE done on database %s." % dbname)
示例#24
0
    def load_dbf(self, tableName, row2obj=None):
        if row2obj is None:
            row2obj = getattr(self, 'load_' + tableName[-3:].lower())
        fn = self.dbpath
        if self.archive_name is not None:
            if tableName in self.archived_tables:
                fn = os.path.join(fn, self.archive_name)
        fn = os.path.join(fn, tableName)
        fn += self.table_ext
        if self.use_dbf_py:
            dblogger.info("Loading %s...", fn)
            import dbf  # http://pypi.python.org/pypi/dbf/
            #~ table = dbf.Table(fn)
            table = dbf.Table(fn, codepage=self.codepage)
            #~ table.use_deleted = False
            table.open()
            #~ print table.structure()
            dblogger.info("Loading %d records from %s (%s)...",
                          len(table), fn, table.codepage)
            for record in table:
                if not dbf.is_deleted(record):
                    yield row2obj(record)
                    # i = row2obj(record)
                    # if i is not None:
                    #     yield settings.TIM2LINO_LOCAL(tableName, i)
            table.close()
        else:
            f = dbfreader.DBFFile(fn, codepage="cp850")
            dblogger.info("Loading %d records from %s...", len(f), fn)
            f.open()
            for dbfrow in f:
                i = row2obj(dbfrow)
                if i is not None:
                    yield settings.TIM2LINO_LOCAL(tableName, i)
            f.close()

        self.after_load(tableName)
示例#25
0
 def POST(self, **kw):
     # ~ dblogger.info("%s.POST(%s)",self.__class__.__name__,kw)
     # ~ self.prepare_data(kw['data'])
     obj = self.get_object(kw)
     if obj is None:
         obj = self.create_object(kw)
         if obj is None:
             dblogger.warning("%s:%s (%s) : ignored POST %s", kw["alias"], kw["id"], obj, kw["data"])
             return
         # ~ watcher = changes.Watcher(obj,True)
         self.set_timestamp(kw["time"])
         self.applydata(obj, kw["data"])
         dblogger.info("%s:%s (%s) : POST %s", kw["alias"], kw["id"], dd.obj2str(obj), kw["data"])
         self.validate_and_save(obj)
         dd.on_ui_created.send(sender=obj, request=REQUEST)
         # ~ changes.log_create(REQUEST,obj)
     else:
         watcher = ChangeWatcher(obj)
         dblogger.info("%s:%s : POST becomes PUT", kw["alias"], kw["id"])
         self.set_timestamp(kw["time"])
         self.applydata(obj, kw["data"])
         dblogger.info("%s:%s (%s) : POST %s", kw["alias"], kw["id"], dd.obj2str(obj), kw["data"])
         self.validate_and_save(obj)
         watcher.send_update(REQUEST)
示例#26
0
 def process_message(self, peer, mailfrom, rcpttos, data):
     rv = mail_received.send(
         self, peer=peer, mailfrom=mailfrom, rcpttos=rcpttos, data=data)
     dblogger.info("20140703 process_message %s", rv)
示例#27
0
def receive(dbcal, calendar):

    rs_touched = set()
    ev_touched = set()
    rs_updated = rs_created = rs_deleted = 0
    count_update = 0
    count_new = 0
    count_deleted = 0
    #~ print "Using calendar", calendar

    props = calendar.get_properties([dav.DisplayName()])
    dbcal.name = props[dav.DisplayName().tag]
    dbcal.save()

    from_date = dbcal.start_date
    if not from_date:
        from_date = datetime.datetime.now() - datetime.timedelta(days=365)
    until_date = datetime.datetime.now() + datetime.timedelta(days=365)

    #~ from_date = aware(from_date)
    #~ until_date = aware(until_date)

    #~ print from_date.tzinfo, until_date.tzinfo
    #~ raise Exception("20110823")

    results = calendar.date_search(from_date, until_date)
    if results:
        for comp in results:
            #~ if len(list(comp.instance.getChildren())) != 1:
                #~ raise Exception("comp.instance.getChildren() is %s" % list(comp.instance.getChildren()))
            dblogger.info(
                "Got calendar component <<<\n%s\n>>>",
                prettyPrint(comp.instance))

            if comp.instance.vevent:
                event = comp.instance.vevent
                if isinstance(event, RecurringComponent):
                    """
                    in a google calendar, all events are parsed to a 
                    RecurringComponent. if event.rruleset is None 
                    we consider them non recurrent.
                    """

                    uid = event.uid.value
                    dtstart = event.dtstart.value

                    get_kw = {}
                    set_kw = {}
                    get_kw.update(uid=uid)
                    set_kw.update(summary=event.summary.value)
                    #~ dblogger.info("TRANSPARENCE IS %r", event.transp.value)
                    location_name = event.location.value
                    if location_name:
                        qs = Place.objects.filter(name__iexact=location_name)
                        if qs.count() == 0:
                            pl = Place(name=location_name)
                            pl.full_clean()
                            pl.save()
                            dblogger.info("Auto-created location %s", pl)
                        else:
                            pl = qs[0]
                            if qs.count() > 1:
                                dblogger.warning(
                                    "Found more than 1 Place for location %r", location_name)
                        set_kw.update(place=pl)
                    else:
                        set_kw.update(place=None)
                    if event.transp.value == 'TRANSPARENT':
                        set_kw.update(transparent=True)
                    else:
                        set_kw.update(transparent=False)
                    set_kw.update(description=event.description.value)
                    set_kw.update(calendar=dbcal)
                    #~ set_kw.update(location=event.location.value)
                    #~ kw.update(dtend=event.dtend.value)

                    dblogger.info("It's a RecurringComponent")
                    if event.rruleset:
                        try:
                            obj = RecurrenceSet.objects.get(uid=uid)
                            assert obj.calendar == dbcal
                            rs_updated += 1
                        except RecurrenceSet.DoesNotExist, e:
                        #~ except Exception, e:
                            obj = RecurrenceSet(uid=uid)
                            obj.calendar = dbcal
                            obj.user = dbcal.user
                            rs_created += 1
                        #~ raise Exception("20110823 must save rrule, rdate etc... %s" % type(event.rrule_list))
                        obj.rrules = '\n'.join(
                            [r.value for r in event.rrule_list])
                        #~ obj.exrules = '\n'.join([r.value for r in event.exrule_list])
                        #~ obj.rdates = '\n'.join([r.value for r in event.rdate_list])
                        #~ obj.exdates = '\n'.join([r.value for r in event.exdate_list])
                        obj.summary = event.summary.value
                        obj.description = event.description.value
                        setkw(obj, **dt2kw(dtstart, 'start'))
                        obj.full_clean()
                        obj.save()
                        dblogger.info("Saved %s", obj)
                        rs_touched.add(obj.pk)

                        set_kw.update(rset=obj)
                        if getattr(dtstart, 'tzinfo', False):
                            dtlist = event.rruleset.between(
                                aware(from_date), aware(until_date))
                        else:
                            dtlist = event.rruleset.between(
                                from_date, until_date)
                        dblogger.info("rrulset.between() --> %s", dtlist)
                    else:
                        dtlist = [dtstart]
                        dblogger.info("No rruleset")
                    duration = event.dtend.value - dtstart
                    for dtstart in dtlist:
                        dtend = dtstart + duration
                        get_kw = dt2kw(dtstart, 'start', **get_kw)
                        set_kw = dt2kw(dtend, 'end', **set_kw)
                        try:
                            obj = Event.objects.get(**get_kw)
                            count_update += 1
                        except Event.DoesNotExist, e:
                        #~ except Exception, e:
                            obj = Event(**get_kw)
                            obj.user = dbcal.user
                            count_new += 1
                        setkw(obj, **set_kw)
                        obj.full_clean()
                        obj.save()
                        dblogger.info("Saved %s", obj)
                        ev_touched.add(obj.pk)

                else:
                    raise Exception(
                        "comp.instance.vevent is a %s (expected VEvent)" % type(event))
            else:
                raise Exception(
                    "Got unhandled component %s"
                    % comp.instance.prettyPrint())
示例#28
0
from django.db import models
from django.conf import settings
from django.utils.translation import ugettext as _

from lino.core.utils import resolve_model
from lino.utils.instantiator import Instantiator
from lino.api import dd
from lino.utils import dblogger
from lino.utils import Cycler

from lino.sandbox.contacts import models as contacts

#~ print 20120225, 'settings.FIXTURE_DIRS is', settings.FIXTURE_DIRS

dblogger.info("Imported contacts demo fixture")

COUNT = 0

#~ addresstype= Instantiator('contacts.AddressType',"name").build
role = Instantiator('contacts.Role', "name").build
#~ person = Instantiator('contacts.Person',"first_name last_name").build
#~ company = Instantiator('contacts.Company',"name").build
#~ contact = Instantiator('contacts.Contact').build

Company = contacts.Company
Person = contacts.Person
User = contacts.User
City = resolve_model('countries.City')

if not settings.SITE.abstract_address:
示例#29
0
                        "comp.instance.vevent is a %s (expected VEvent)" % type(event))
            else:
                raise Exception(
                    "Got unhandled component %s"
                    % comp.instance.prettyPrint())
                #~ print "children:", [c for c in comp.instance.getChildren()]

            #~ raise StopIteration
    qs = dbcal.event_set.exclude(id__in=ev_touched)
    count_deleted = qs.count()
    qs.delete()  # note: doesn't call delete methods of individual objects
    qs = dbcal.recurrenceset_set.exclude(id__in=rs_touched)
    rs_deleted = qs.count()
    qs.delete()  # note: doesn't call delete methods of individual objects
    dblogger.info(
        "--> Created %d, updated %d, deleted %s Events",
        count_new, count_update, count_deleted)
    dblogger.info(
        "--> Created %d, updated %d, deleted %s RecurrenceSets",
        rs_created, rs_updated, rs_deleted)


def send(dbcal, calendar, client):
    n = 0
    for obj in dbcal.event_set.filter(user_modified=True):
        dblogger.info("Gonna send %s", obj)
        n += 1

        mycal = vobject.iCalendar()
        #~ mycal.add('vevent')
示例#30
0
def objects():
    global COUNT
    COUNT += 1
    dblogger.info("Started contacts demo fixture %d", COUNT)

    #~ yield addresstype(**dd.babel_values('name',en="Default",fr=u'Gérant',de=u"Geschäftsführer",et=u"Manager"))

    yield role(**dd.babel_values('name',
                                 en="Manager",
                                 fr=u'Gérant',
                                 de=u"Geschäftsführer",
                                 et=u"Manager"))
    yield role(**dd.babel_values(
        'name', en="Director", fr=u'Directeur', de=u"Direktor",
        et=u"Direktor"))
    yield role(**dd.babel_values('name',
                                 en="Secretary",
                                 fr=u'Sécrétaire',
                                 de=u"Sekretär",
                                 et=u"Sekretär"))
    yield role(**dd.babel_values('name',
                                 en="IT Manager",
                                 fr=u'Gérant informatique',
                                 de=u"EDV-Manager",
                                 et=u"IT manager"))

    yield company(u"Rumma & Ko OÜ", 'EE', '10115', 'Tallinn', u'Tartu mnt',
                  '71')

    yield company(u'Bäckerei Ausdemwald', 'BE', '4700', 'Eupen',
                  u'Vervierser Straße', '45')
    yield company(u'Bäckerei Mießen', 'BE', '4700', 'Eupen', u'Gospert', '103')
    yield company(u'Bäckerei Schmitz', 'BE', '4700', 'Eupen',
                  u'Aachener Straße', '53')
    yield company(u'Garage Mergelsberg', 'BE', '4720', 'Kelmis',
                  u'Kasinostraße', '13')

    yield company(u'Donderweer BV', 'NL', '4816 AR', 'Breda', 'Edisonstraat',
                  '12')
    yield company(u'Van Achter NV', 'NL', '4836 LG', 'Breda', 'Hazeldonk', '2')

    yield company(u'Hans Flott & Co', 'DE', '22453', 'Hamburg',
                  u'Niendorfer Weg', '532')
    yield company(u'Bernd Brechts Bücherladen', 'DE', '80333', u'München',
                  u'Brienner Straße', '18')
    yield company(u'Reinhards Baumschule', 'DE', '12487 ', u'Berlin',
                  u'Segelfliegerdamm', '123')

    yield company(u'Moulin Rouge', 'FR', '75018', 'Paris',
                  u'Boulevard de Clichy', '82')
    yield company(u'Auto École Verte', 'FR', '54000 ', 'Nancy',
                  u'rue de Mon Désert', '12')

    #~ yield person(u'Luc',  u'Saffre', gender=Gender.male)
    yield person(u'Andreas',
                 u'Arens',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.male)
    yield person(u'Annette',
                 u'Arens',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.female)
    yield person(u'Hans',
                 u'Altenberg',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.male)
    yield person(u'Alfons',
                 u'Ausdemwald',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.male)
    yield person(u'Laurent',
                 u'Bastiaensen',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.male)
    yield person(u'Charlotte',
                 u'Collard',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.female)
    yield person(u'Ulrike',
                 u'Charlier',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.female)
    yield person(u'Marc',
                 u'Chantraine',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.male)
    yield person(u'Daniel',
                 u'Dericum',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.male)
    yield person(u'Dorothée',
                 u'Demeulenaere',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.female)
    yield person(u'Berta',
                 u'Ernst',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.female)
    yield person(u'Bernd',
                 u'Evertz',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=dd.Genders.male)
    yield person(u'Eberhart',
                 u'Evers',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Daniel',
                 u'Emonts',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Edgar',
                 u'Engels',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Luc',
                 u'Faymonville',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Gérard',
                 u'Gernegroß',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Werner',
                 u'Groteclaes',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Grete',
                 u'Hilgers',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.female)
    yield person(u'Hans',
                 u'Hilgers',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Irene',
                 u'Ingels',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.female)
    yield person(u'Jérémy',
                 u'Jansen',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Jean-Pierre',
                 u'Jacob',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Herbert',
                 u'Johnen',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Johannes',
                 u'Jonas',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Jan', u'Jousten', 'BE', '4700', 'Eupen', gender=Gender.male)
    yield person(u'Karl',
                 u'Kaivers',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Guido',
                 u'Lambertz',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Luc', u'Laschet', 'BE', '4700', 'Eupen', gender=Gender.male)
    yield person(u'Line',
                 u'Lazarus',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.female)
    yield person(u'Josefine',
                 u'Leffin',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.female)
    yield person(u'Marc',
                 u'Malmendier',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Leo', u'Meessen', 'BE', '4700', 'Eupen', gender=Gender.male)
    yield person(u'Franz',
                 u'Mießen',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.male)
    yield person(u'Marie-Louise',
                 u'Meier',
                 'BE',
                 '4700',
                 'Eupen',
                 gender=Gender.female)

    yield person(u'Erich',
                 u'Emonts',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.male)
    yield person(u'Erwin',
                 u'Emontspool',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.male)
    yield person(u'Erna',
                 u'Emonts-Gast',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.female)
    yield person(u'Alfons',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.male)
    yield person(u'Berta',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.female)
    yield person(u'Christian',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.male)
    yield person(u'Daniela',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.female)
    yield person(u'Edgard',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.male)
    yield person(u'Fritz',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.male)
    yield person(u'Guido',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.male)
    yield person(u'Hans',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.male)
    yield person(u'Hedi',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.female)
    yield person(u'Inge',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.female)
    yield person(u'Jean',
                 u'Radermacher',
                 'BE',
                 '4730',
                 'Raeren',
                 gender=Gender.male)

    # special challenges for alphabetic ordering
    yield person(u'Elio', u'di Rupo')
    yield person(u'Leonardo', u'da Vinci')
    yield person(u'Herman', u'van Veen')
    yield person(u'Rein', u'Õunapuu')
    yield person(u'Otto', u'Östges')
    yield person(u'Erna', u'Ärgerlich')

    yield person(u'Bernard', u'Bodard', title='Dr.')
    yield person(u'Jean', u'Dupont')

    yield person(u'Mark', u'Martelaer')
    yield person(u'Rik', u'Radermecker')
    yield person(u'Marie-Louise', u'Vandenmeulenbos')

    yield person(u'Emil', u'Eierschal')
    yield person(u'Lisa', u'Lahm')
    yield person(u'Bernd', u'Brecht')
    yield person(u'Karl', u'Keller')

    yield person(u'Robin', u'Dubois')
    yield person(u'Denis', u'Denon')
    yield person(u'Jérôme', u'Jeanémart')

    s = u"""\
Aachener Straße
Akazienweg
Alter Malmedyer Weg
Am Bahndamm
Am Berg
Am Waisenbüschchen
Auenweg
Auf dem Spitzberg
Auf'm Rain
August-Thonnar-Str.
Bahnhofsgasse
Bahnhofstraße
Bellmerin
Bennetsborn
Bergkapellstraße
Bergstraße
Binsterweg
Brabantstraße
Buchenweg
Edelstraße
Euregiostraße
Favrunpark
Feldstraße
Fränzel
Gewerbestraße
Gospert
Gülcherstraße
Haagenstraße
Haasberg
Haasstraße
Habsburgerweg
Heidberg
Heidgasse
Heidhöhe
Herbesthaler Straße
Hisselsgasse
Hochstraße
Hook
Hostert
Hufengasse
Hugo-Zimmermann-Str.
Hütte
Hütterprivatweg
Im Peschgen
In den Siepen
Industriestraße
Johannesstraße
Judenstraße
Kaperberg
Kaplan-Arnolds-Str.
Karl-Weiß-Str.
Kehrweg
Kirchgasse
Kirchstraße
Klinkeshöfchen
Kügelgasse
Langesthal
Lascheterweg
Limburgerweg
Lindenweg
Lothringerweg
Malmedyer Straße
Maria-Theresia-Straße
Marktplatz
Monschauer Straße
Mühlenweg
Neustraße
Nikolausfeld
Nispert
Noereth
Obere Ibern
Obere Rottergasse
Oestraße
Olengraben
Panorama
Paveestraße
Peter-Becker-Str.
Rosenweg
Rot-Kreuz-Str.
Rotenberg
Rotenbergplatz
Schilsweg
Schlüsselhof
Schnellewindgasse
Schönefeld
Schorberg
Schulstraße
Selterschlag
Simarstraße
Steinroth
Stendrich
Stockbergerweg
Stockem
Theodor-Mooren-Str.
Untere Ibern
Vervierser Straße
Vossengasse
Voulfeld
Werthplatz
Weserstraße
"""

    streets_of_eupen = [
        line.strip() for line in s.splitlines() if len(line.strip()) > 0
    ]

    if settings.SITE.abstract_address:

        nr = 1
        #~ CITIES = Cycler(City.objects.all())
        eupen = City.objects.get(name="Eupen")
        STREETS = Cycler(streets_of_eupen)
        for p in Person.objects.filter(city=eupen):
            p.street = STREETS.pop()
            p.street_no = str(nr)
            p.save()
            nr += 1
    else:
        nr = 1
        for street in streets_of_eupen:
            for i in range(3):
                yield address('BE', '4700', 'Eupen', street, str(nr))
                nr += 1

        ADDRESSES = Cycler(Address.objects.all())
        for p in Person.objects.all():
            p.address = ADDRESSES.pop()
            p.save()

    PERSONS = Cycler(contacts.Person.objects.all())
    COMPANIES = Cycler(contacts.Company.objects.all())
    ROLES = Cycler(contacts.Role.objects.all())
    for i in range(100):
        com = COMPANIES.pop()
        yield contact(com, PERSONS.pop(), role=ROLES.pop())
        yield contact(com, PERSONS.pop(), role=ROLES.pop())

    rumma = contacts.Company.objects.get(name=u"Rumma & Ko OÜ")

    def user(first_name, last_name, **kw):
        p = Person(first_name=first_name, last_name=last_name)
        p.save()
        return User(person=p, company=rumma, **kw)

    #~ yield user("Alice","Imedemaal",is_superuser=True)
    yield user("Alice", "Imedemaal", user_type=UserTypes.admin)
    yield user("Bert", "Sesamestreet")
    yield user("Charles", "Braun")
    dblogger.info("Done contacts demo fixture")
示例#31
0
def objects():
    global COUNT
    COUNT += 1
    dblogger.info("Started contacts demo fixture %d",COUNT)
    
    #~ yield addresstype(**babel_values('name',en="Default",fr=u'Gérant',de=u"Geschäftsführer",et=u"Manager"))
    
    yield role(**babel_values('name',en="Manager",fr=u'Gérant',de=u"Geschäftsführer",et=u"Manager"))
    yield role(**babel_values('name',en="Director",fr=u'Directeur',de=u"Direktor",et=u"Direktor"))
    yield role(**babel_values('name',en="Secretary",fr=u'Sécrétaire',de=u"Sekretär",et=u"Sekretär"))
    yield role(**babel_values('name',en="IT Manager",fr=u'Gérant informatique',de=u"EDV-Manager",et=u"IT manager"))
    
    
    yield company(u"Rumma & Ko OÜ", 'EE','10115','Tallinn',u'Tartu mnt','71')
    
    yield company(u'Bäckerei Ausdemwald', 'BE', '4700', 'Eupen',  u'Vervierser Straße','45')
    yield company(u'Bäckerei Mießen',     'BE', '4700', 'Eupen',  u'Gospert','103')
    yield company(u'Bäckerei Schmitz',    'BE', '4700', 'Eupen',  u'Aachener Straße','53')
    yield company(u'Garage Mergelsberg',  'BE', '4720', 'Kelmis', u'Kasinostraße','13')
    
    yield company(u'Donderweer BV',       'NL', '4816 AR','Breda', 'Edisonstraat','12')
    yield company(u'Van Achter NV',       'NL', '4836 LG','Breda', 'Hazeldonk','2')
    
    yield company(u'Hans Flott & Co',     'DE', '22453','Hamburg',u'Niendorfer Weg','532')
    yield company(u'Bernd Brechts Bücherladen','DE', '80333',u'München',u'Brienner Straße','18')
    yield company(u'Reinhards Baumschule','DE', '12487 ',u'Berlin',u'Segelfliegerdamm','123')
    
    yield company(u'Moulin Rouge',  'FR', '75018','Paris',u'Boulevard de Clichy','82')
    yield company(u'Auto École Verte','FR', '54000 ','Nancy',u'rue de Mon Désert','12')
    
    
    
    #~ yield person(u'Luc',  u'Saffre', gender=Gender.male)
    
    yield person(u'Andreas',  u'Arens', 'BE','4700','Eupen',  gender=mixins.Genders.male)
    yield person(u'Annette',  u'Arens','BE','4700','Eupen',  gender=mixins.Genders.female)
    yield person(u'Hans',     u'Altenberg','BE','4700','Eupen',  gender=mixins.Genders.male)
    yield person(u'Alfons',   u'Ausdemwald','BE','4700','Eupen',  gender=mixins.Genders.male)
    yield person(u'Laurent',  u'Bastiaensen','BE','4700','Eupen',  gender=mixins.Genders.male)
    yield person(u'Charlotte',  u'Collard','BE','4700','Eupen',  gender=mixins.Genders.female)
    yield person(u'Ulrike',  u'Charlier','BE','4700','Eupen',  gender=mixins.Genders.female)
    yield person(u'Marc',  u'Chantraine','BE','4700','Eupen',  gender=mixins.Genders.male)
    yield person(u'Daniel',   u'Dericum','BE','4700','Eupen',  gender=mixins.Genders.male)
    yield person(u'Dorothée', u'Demeulenaere','BE','4700','Eupen',  gender=mixins.Genders.female)
    yield person(u'Berta',    u'Ernst','BE','4700','Eupen',  gender=mixins.Genders.female)
    yield person(u'Bernd',    u'Evertz','BE','4700','Eupen',  gender=mixins.Genders.male)
    yield person(u'Eberhart', u'Evers','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Daniel',   u'Emonts','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Edgar',    u'Engels','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Luc',      u'Faymonville','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Gérard',   u'Gernegroß','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Werner',   u'Groteclaes','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Grete',    u'Hilgers','BE','4700','Eupen',  gender=Gender.female)
    yield person(u'Hans',     u'Hilgers','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Irene',    u'Ingels','BE','4700','Eupen',  gender=Gender.female)
    yield person(u'Jérémy',   u'Jansen','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Jean-Pierre', u'Jacob','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Herbert', u'Johnen','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Johannes', u'Jonas','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Jan', u'Jousten','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Karl', u'Kaivers','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Guido', u'Lambertz','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Luc', u'Laschet','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Line', u'Lazarus','BE','4700','Eupen',  gender=Gender.female)
    yield person(u'Josefine', u'Leffin','BE','4700','Eupen',  gender=Gender.female)
    yield person(u'Marc', u'Malmendier','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Leo', u'Meessen','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Franz', u'Mießen','BE','4700','Eupen',  gender=Gender.male)
    yield person(u'Marie-Louise', u'Meier','BE','4700','Eupen',  gender=Gender.female)
    
    yield person(u'Erich',     u'Emonts',     'BE','4730','Raeren', gender=Gender.male)
    yield person(u'Erwin',     u'Emontspool', 'BE','4730','Raeren', gender=Gender.male)
    yield person(u'Erna',      u'Emonts-Gast', 'BE','4730','Raeren', gender=Gender.female)
    yield person(u'Alfons',    u'Radermacher','BE','4730','Raeren', gender=Gender.male)
    yield person(u'Berta',     u'Radermacher','BE','4730','Raeren', gender=Gender.female)
    yield person(u'Christian', u'Radermacher','BE','4730','Raeren', gender=Gender.male)
    yield person(u'Daniela',   u'Radermacher','BE','4730','Raeren', gender=Gender.female)
    yield person(u'Edgard',    u'Radermacher','BE','4730','Raeren', gender=Gender.male)
    yield person(u'Fritz',     u'Radermacher','BE','4730','Raeren', gender=Gender.male)
    yield person(u'Guido',     u'Radermacher','BE','4730','Raeren', gender=Gender.male)
    yield person(u'Hans',      u'Radermacher','BE','4730','Raeren', gender=Gender.male)
    yield person(u'Hedi',      u'Radermacher','BE','4730','Raeren', gender=Gender.female)
    yield person(u'Inge',      u'Radermacher','BE','4730','Raeren', gender=Gender.female)
    yield person(u'Jean',      u'Radermacher','BE','4730','Raeren', gender=Gender.male)
    
    # special challenges for alphabetic ordering
    yield person(u'Elio',     u'di Rupo')
    yield person(u'Leonardo', u'da Vinci')
    yield person(u'Herman',   u'van Veen')
    yield person(u'Rein',   u'Õunapuu')
    yield person(u'Otto',   u'Östges')
    yield person(u'Erna',   u'Ärgerlich')
    
    
    yield person(u'Bernard',u'Bodard',title='Dr.')
    yield person(u'Jean',u'Dupont')
    
    yield person(u'Mark',u'Martelaer')
    yield person(u'Rik',u'Radermecker')
    yield person(u'Marie-Louise',u'Vandenmeulenbos')
    
    yield person(u'Emil',u'Eierschal')
    yield person(u'Lisa',u'Lahm')
    yield person(u'Bernd',u'Brecht')
    yield person(u'Karl',u'Keller')
    
    yield person(u'Robin',u'Dubois')
    yield person(u'Denis',u'Denon')
    yield person(u'Jérôme',u'Jeanémart')
    
    
    s = u"""\
Aachener Straße
Akazienweg
Alter Malmedyer Weg
Am Bahndamm
Am Berg
Am Waisenbüschchen
Auenweg
Auf dem Spitzberg
Auf'm Rain
August-Thonnar-Str.
Bahnhofsgasse
Bahnhofstraße
Bellmerin
Bennetsborn
Bergkapellstraße
Bergstraße
Binsterweg
Brabantstraße
Buchenweg
Edelstraße
Euregiostraße
Favrunpark
Feldstraße
Fränzel
Gewerbestraße
Gospert
Gülcherstraße
Haagenstraße
Haasberg
Haasstraße
Habsburgerweg
Heidberg
Heidgasse
Heidhöhe
Herbesthaler Straße
Hisselsgasse
Hochstraße
Hook
Hostert
Hufengasse
Hugo-Zimmermann-Str.
Hütte
Hütterprivatweg
Im Peschgen
In den Siepen
Industriestraße
Johannesstraße
Judenstraße
Kaperberg
Kaplan-Arnolds-Str.
Karl-Weiß-Str.
Kehrweg
Kirchgasse
Kirchstraße
Klinkeshöfchen
Kügelgasse
Langesthal
Lascheterweg
Limburgerweg
Lindenweg
Lothringerweg
Malmedyer Straße
Maria-Theresia-Straße
Marktplatz
Monschauer Straße
Mühlenweg
Neustraße
Nikolausfeld
Nispert
Noereth
Obere Ibern
Obere Rottergasse
Oestraße
Olengraben
Panorama
Paveestraße
Peter-Becker-Str.
Rosenweg
Rot-Kreuz-Str.
Rotenberg
Rotenbergplatz
Schilsweg
Schlüsselhof
Schnellewindgasse
Schönefeld
Schorberg
Schulstraße
Selterschlag
Simarstraße
Steinroth
Stendrich
Stockbergerweg
Stockem
Theodor-Mooren-Str.
Untere Ibern
Vervierser Straße
Vossengasse
Voulfeld
Werthplatz
Weserstraße
"""
    
    streets_of_eupen = [ line.strip() for line in s.splitlines() if len(line.strip()) > 0 ]
    
    if settings.SITE.abstract_address:
    
        nr = 1
        #~ CITIES = Cycler(City.objects.all())
        eupen = City.objects.get(name="Eupen")
        STREETS = Cycler(streets_of_eupen)
        for p in Person.objects.filter(city=eupen):
            p.street = STREETS.pop()
            p.street_no = str(nr)
            p.save()
            nr += 1
    else:
        nr = 1
        for street in streets_of_eupen:
            for i in range(3):
                yield address('BE','4700','Eupen',street,str(nr))
                nr += 1
            
            
        ADDRESSES = Cycler(Address.objects.all())
        for p in Person.objects.all():
            p.address = ADDRESSES.pop()
            p.save()
      
        
    PERSONS = Cycler(contacts.Person.objects.all())
    COMPANIES = Cycler(contacts.Company.objects.all())
    ROLES = Cycler(contacts.Role.objects.all())
    for i in range(100):
        com = COMPANIES.pop()
        yield contact(com,PERSONS.pop(),role=ROLES.pop())
        yield contact(com,PERSONS.pop(),role=ROLES.pop())
        
    rumma = contacts.Company.objects.get(name=u"Rumma & Ko OÜ")
    def user(first_name,last_name,**kw):
        p = Person(first_name=first_name,last_name=last_name)
        p.save()
        return User(person=p,company=rumma,**kw)
    
    #~ yield user("Alice","Imedemaal",is_superuser=True)
    yield user("Alice","Imedemaal",profile=UserProfiles.admin)
    yield user("Bert","Sesamestreet")
    yield user("Charles","Braun")
    dblogger.info("Done contacts demo fixture")
示例#32
0
from django.utils.translation import ugettext as _

from lino.core.dbutils import resolve_model
from lino.utils.instantiator import Instantiator
from north.dbutils import babel_values
#~ from lino.utils.choicelists import Gender
#~ from lino.utils.perms import UserLevels
#~ from lino.core.perms import UserProfiles
from lino.utils import dblogger
from lino.utils import Cycler

from lino.sandbox.contacts import models as contacts

#~ print 20120225, 'settings.FIXTURE_DIRS is', settings.FIXTURE_DIRS

dblogger.info("Imported contacts demo fixture")

COUNT = 0

#~ addresstype= Instantiator('contacts.AddressType',"name").build
role = Instantiator('contacts.Role',"name").build
#~ person = Instantiator('contacts.Person',"first_name last_name").build
#~ company = Instantiator('contacts.Company',"name").build
#~ contact = Instantiator('contacts.Contact').build

Company = contacts.Company
Person = contacts.Person
User = contacts.User
City = resolve_model('countries.City')

if not settings.SITE.abstract_address:
示例#33
0
def watch(data_dir):
    "Deserves more documentation."
    infile = os.path.join(data_dir, "changelog.json")
    if not os.path.exists(infile):
        # ~ print "Nothing to do."
        return

    watching = os.path.join(data_dir, "changelog.watching.json")
    if not os.path.exists(watching):
        try:
            os.rename(infile, watching)
        except Exception, e:
            dblogger.debug("Could not rename %s to %s: %s", infile, watching, e)
            return
    dblogger.info("Processing file %s", watching)
    fd_watching = codecs.open(watching, "r", encoding="cp850")

    failed = os.path.join(data_dir, "changelog.failed.json")
    fd_failed = codecs.open(failed, "a", encoding="cp850")
    # ~ log = open(os.path.join(data_dir,'changelog.done.log'),'a')
    i = 0
    for ln in fd_watching.readlines():
        i += 1
        dblogger.debug("process_line(%r,%r)", i, ln)
        try:
            process_line(ln)
        except Exception, e:
            # ~ raise
            fd_failed.write("// %s %r\n%s\n\n" % (time.strftime("%Y-%m-%d %H:%M:%S"), e, ln))
            # ~ fd_failed.write(ln+'\n')
示例#34
0
def receive(dbcal, calendar):

    rs_touched = set()
    ev_touched = set()
    rs_updated = rs_created = rs_deleted = 0
    count_update = 0
    count_new = 0
    count_deleted = 0
    #~ print "Using calendar", calendar

    props = calendar.get_properties([dav.DisplayName()])
    dbcal.name = props[dav.DisplayName().tag]
    dbcal.save()

    from_date = dbcal.start_date
    if not from_date:
        from_date = datetime.datetime.now() - datetime.timedelta(days=365)
    until_date = datetime.datetime.now() + datetime.timedelta(days=365)

    #~ from_date = aware(from_date)
    #~ until_date = aware(until_date)

    #~ print from_date.tzinfo, until_date.tzinfo
    #~ raise Exception("20110823")

    results = calendar.date_search(from_date, until_date)
    if results:
        for comp in results:
            #~ if len(list(comp.instance.getChildren())) != 1:
                #~ raise Exception("comp.instance.getChildren() is %s" % list(comp.instance.getChildren()))
            dblogger.info(
                "Got calendar component <<<\n%s\n>>>",
                prettyPrint(comp.instance))

            if comp.instance.vevent:
                event = comp.instance.vevent
                if isinstance(event, RecurringComponent):
                    """
                    in a google calendar, all events are parsed to a
                    RecurringComponent. if event.rruleset is None
                    we consider them non recurrent.
                    """

                    uid = event.uid.value
                    dtstart = event.dtstart.value

                    get_kw = {}
                    set_kw = {}
                    get_kw.update(uid=uid)
                    set_kw.update(summary=event.summary.value)
                    #~ dblogger.info("TRANSPARENCE IS %r", event.transp.value)
                    location_name = event.location.value
                    if location_name:
                        qs = Place.objects.filter(name__iexact=location_name)
                        if qs.count() == 0:
                            pl = Place(name=location_name)
                            pl.full_clean()
                            pl.save()
                            dblogger.info("Auto-created location %s", pl)
                        else:
                            pl = qs[0]
                            if qs.count() > 1:
                                dblogger.warning(
                                    "Found more than 1 Place for location %r", location_name)
                        set_kw.update(place=pl)
                    else:
                        set_kw.update(place=None)
                    if event.transp.value == 'TRANSPARENT':
                        set_kw.update(transparent=True)
                    else:
                        set_kw.update(transparent=False)
                    set_kw.update(description=event.description.value)
                    set_kw.update(calendar=dbcal)
                    #~ set_kw.update(location=event.location.value)
                    #~ kw.update(dtend=event.dtend.value)

                    dblogger.info("It's a RecurringComponent")
                    if event.rruleset:
                        try:
                            obj = RecurrenceSet.objects.get(uid=uid)
                            assert obj.calendar == dbcal
                            rs_updated += 1
                        except RecurrenceSet.DoesNotExist as e:
                        #~ except Exception, e:
                            obj = RecurrenceSet(uid=uid)
                            obj.calendar = dbcal
                            obj.user = dbcal.user
                            rs_created += 1
                        #~ raise Exception("20110823 must save rrule, rdate etc... %s" % type(event.rrule_list))
                        obj.rrules = '\n'.join(
                            [r.value for r in event.rrule_list])
                        #~ obj.exrules = '\n'.join([r.value for r in event.exrule_list])
                        #~ obj.rdates = '\n'.join([r.value for r in event.rdate_list])
                        #~ obj.exdates = '\n'.join([r.value for r in event.exdate_list])
                        obj.summary = event.summary.value
                        obj.description = event.description.value
                        setkw(obj, **dt2kw(dtstart, 'start'))
                        obj.full_clean()
                        obj.save()
                        dblogger.info("Saved %s", obj)
                        rs_touched.add(obj.pk)

                        set_kw.update(rset=obj)
                        if getattr(dtstart, 'tzinfo', False):
                            dtlist = event.rruleset.between(
                                aware(from_date), aware(until_date))
                        else:
                            dtlist = event.rruleset.between(
                                from_date, until_date)
                        dblogger.info("rrulset.between() --> %s", dtlist)
                    else:
                        dtlist = [dtstart]
                        dblogger.info("No rruleset")
                    duration = event.dtend.value - dtstart
                    for dtstart in dtlist:
                        dtend = dtstart + duration
                        get_kw = dt2kw(dtstart, 'start', **get_kw)
                        set_kw = dt2kw(dtend, 'end', **set_kw)
                        try:
                            obj = Event.objects.get(**get_kw)
                            count_update += 1
                        except Event.DoesNotExist as e:
                        #~ except Exception, e:
                            obj = Event(**get_kw)
                            obj.user = dbcal.user
                            count_new += 1
                        setkw(obj, **set_kw)
                        obj.full_clean()
                        obj.save()
                        dblogger.info("Saved %s", obj)
                        ev_touched.add(obj.pk)

                else:
                    raise Exception(
                        "comp.instance.vevent is a %s (expected VEvent)" % type(event))
            else:
                raise Exception(
                    "Got unhandled component %s"
                    % comp.instance.prettyPrint())
                #~ print "children:", [c for c in comp.instance.getChildren()]

            #~ raise StopIteration
    qs = dbcal.event_set.exclude(id__in=ev_touched)
    count_deleted = qs.count()
    qs.delete()  # note: doesn't call delete methods of individual objects
    qs = dbcal.recurrenceset_set.exclude(id__in=rs_touched)
    rs_deleted = qs.count()
    qs.delete()  # note: doesn't call delete methods of individual objects
    dblogger.info(
        "--> Created %d, updated %d, deleted %s Events",
        count_new, count_update, count_deleted)
    dblogger.info(
        "--> Created %d, updated %d, deleted %s RecurrenceSets",
        rs_created, rs_updated, rs_deleted)
示例#35
0
                        "comp.instance.vevent is a %s (expected VEvent)" % type(event))
            else:
                raise Exception(
                    "Got unhandled component %s"
                    % comp.instance.prettyPrint())
                #~ print "children:", [c for c in comp.instance.getChildren()]

            #~ raise StopIteration
    qs = dbcal.event_set.exclude(id__in=ev_touched)
    count_deleted = qs.count()
    qs.delete()  # note: doesn't call delete methods of individual objects
    qs = dbcal.recurrenceset_set.exclude(id__in=rs_touched)
    rs_deleted = qs.count()
    qs.delete()  # note: doesn't call delete methods of individual objects
    dblogger.info(
        "--> Created %d, updated %d, deleted %s Events",
        count_new, count_update, count_deleted)
    dblogger.info(
        "--> Created %d, updated %d, deleted %s RecurrenceSets",
        rs_created, rs_updated, rs_deleted)


def send(dbcal, calendar, client):
    n = 0
    for obj in dbcal.event_set.filter(user_modified=True):
        dblogger.info("Gonna send %s", obj)
        n += 1

        mycal = vobject.iCalendar()
        #~ mycal.add('vevent')