예제 #1
0
    def datei_zuordnen(objekt, dateiname):
        endung = dateiname.split('.')[-1]
        feldname = endung if endung in ['pdf', 'epub', 'mobi'] else 'datei'
        dateifeld = getattr(objekt, feldname)

        if isinstance(objekt, Veranstaltung):
            praefix = 'veranstaltungen/'
        elif isinstance(objekt, Buch):
            praefix = 'buecher/'
        elif isinstance(objekt, Buechlein):
            praefix = 'scholienbuechlein/'
        else:
            praefix = 'rest/'
        nach_ordner = os.path.join(MEDIA_ROOT, praefix)

        ob_feld = 'ob_aufzeichnung' if feldname == 'datei' else 'ob_' + feldname

        def anschalten():
            feld = setattr(objekt, ob_feld, True)
            objekt.save()

        if dateifeld and os.path.isfile(
                os.path.join(MEDIA_ROOT, dateifeld.name)):
            print("%s hatte schon die Datei %s" % (objekt, dateifeld.name))
            anschalten()
            return

        neuname = '%s_%s.%s' % (objekt.slug, Nutzer.erzeuge_zufall(8,
                                                                   2), endung)
        shutil.copy2(von_ordner + dateiname, MEDIA_ROOT + praefix + neuname)
        dateifeld.name = praefix + neuname
        anschalten()
예제 #2
0
def buechlein_ebooks_einlesen():
    """ Kopiert die pdfs/epub/mobi der scholienbuechlein aus dem 
    input-Ordner nach media, verändert sicherheitshalber den Dateinamen, 
    und speichert den link in der db """
    buechlein = Buechlein.objects.all()
    liste_ext = ['jpg', 'pdf', 'mobi', 'epub']

    for b in buechlein:
        for ext in liste_ext:
            nachordner = os.path.join(MEDIA_ROOT, 'scholienbuechlein/')
            if not os.path.exists(nachordner):
                os.makedirs(nachordner)
            dateifeld = b.bild if ext == 'jpg' else getattr(b, ext)
            if dateifeld and dateifeld.name.split('/')[-1] in os.listdir(
                    nachordner):
                continue
            else:
                von_ordner = 'schriften/' if ext == 'jpg' else 'down_secure/content_secure/'
                von = '%s%s.%s' % (von_ordner, b.slug, ext)
                name_neu = '%s_%s.%s' % (b.slug, Nutzer.erzeuge_zufall(8,
                                                                       2), ext)
                dateifeld.name = 'scholienbuechlein/%s' % name_neu
                shutil.copy2(von, os.path.join(MEDIA_ROOT, dateifeld.name))
                if not ext == 'jpg':
                    setattr(b, 'ob_' + ext, True)

            b.save()
예제 #3
0
def pdfs_etc_einlesen():
    liste = models.Buechlein.objects.all()[2:4]
    namen = [b.slug + ext for b in liste for ext in ['.pdf', '.mobi', '.epub']]
    with open(os.path.join(BASE_DIR, 'hey'), 'w') as f:
        f.write('\n'.join(namen))

    os.system(
        ("rsync -a --files-from=" + os.path.join(BASE_DIR, 'hey') +
         " [email protected]:~/html/production/down_secure/" +
         "content_secure/ " + os.path.join(MEDIA_ROOT, 'scholienbuechlein')))

    os.system("rm " + os.path.join(BASE_DIR, 'hey'))

    # Dateinamen ändern, damit nicht ratbar
    neue_namen = {}
    for name in namen:
        von = os.path.join(MEDIA_ROOT, 'scholienbuechlein', name)
        n, ext = os.path.splitext(name)
        neu = n + '_' + Nutzer.erzeuge_zufall(8, 2) + ext
        neue_namen.update([(name, neu)])
        nach = os.path.join(MEDIA_ROOT, 'scholienbuechlein', neu)
        os.system("mv {} {}".format(von, nach))

    for b in liste:
        b.pdf.name = 'scholienbuechlein/' + neue_namen[b.slug + '.pdf']
        b.mobi.name = 'scholienbuechlein/' + neue_namen[b.slug + '.mobi']
        b.epub.name = 'scholienbuechlein/' + neue_namen[b.slug + '.epub']
        bild = b.slug + '.jpg'
        b.bild_holen('http://www.scholarium.at/schriften/' + bild, bild)
        b.save()
예제 #4
0
def eintragen_mitglieder(daten):
    """ bekommt eine Liste von dicts mit dem Inhalt von je einer Zeile der
    mitgliederExt-Tabelle der alten db. Trägt entsprechende Nutzer ein
    und gibt dict alte user_id -> Profil-Instanz zurück """

    profil_attributnamen = dict([
        ('stufe', 'Mitgliedschaft'), ('anrede', 'Anrede'), ('tel', 'Telefon'),
        ('firma', 'Firma'), ('strasse', 'Strasse'), ('plz', 'PLZ'),
        ('ort', 'Ort'), ('land', 'Land'), ('guthaben', 'credits_left'),
        ('titel', 'Titel'), ('anredename', 'Anredename'),
        ('letzte_zahlung', 'Zahlung'), ('datum_ablauf', 'Ablauf'),
        ('alt_id', 'user_id'), ('alt_notiz', 'Notiz'),
        ('alt_scholien', 'Scholien'), ('alt_mahnstufe', 'Mahnstufe'),
        ('alt_auslaufend', 'auslaufend'), ('alt_gave_credits', 'gave_credits'),
        ('alt_registration_ip', 'user_registration_ip')
    ])

    nutzer_attributnamen = dict([
        ('email', 'user_email'),
        ('first_name', 'Vorname'),
        ('last_name', 'Nachname'),
        ('date_joined', 'user_registration_datetime'),
        ('last_login', 'last_login_time'),
    ])

    letzte_id = max(Nutzer.objects.all().values_list('id', flat=True))

    liste_nutzer = []  # hat dann gleiche Reihenfolge wie daten

    with transaction.atomic():
        for i, zeile in enumerate(daten):
            try:
                if not zeile[
                        'user_email']:  # das gibt Konflikt mit django-guardians AnonymousUser, der hat auch leere Mail
                    raise Nutzer.DoesNotExist
                nutzer = Nutzer.objects.get(email=zeile['user_email'])
                print("Nutzer gab's schon: %s" % zeile['user_email'])
            except Nutzer.DoesNotExist:
                nutzer = Nutzer.leeren_anlegen()  # legt Nutzer mit Profil
                # und Signup-Objekt an; mit Zufalls-Name und -Passwort
                print('Neuer Nutzer mit {}, alte id {} vom {}'.format(
                    zeile['user_email'], zeile['user_id'],
                    zeile['user_registration_datetime']))
            nutzer.is_active = True
            nutzer.save()
            liste_nutzer.append(nutzer)

    for zeile in daten:  # falls None drin steht, gäbe es sonst Fehler
        zeile['Vorname'] = zeile['Vorname'] or ''
        zeile['Nachname'] = zeile['Nachname'] or ''
        for k, v in zeile.items():
            if v == '0000-00-00 00:00:00':
                zeile[k] = '1111-01-01 00:00:00'
            if v == '0000-00-00':
                zeile[k] = '1111-01-01'

    def eintragen_nutzer(nutzer, zeile):
        for neu, alt in nutzer_attributnamen.items():
            setattr(nutzer, neu, zeile[alt])

    def eintragen_profil(profil, zeile):
        for neu, alt in profil_attributnamen.items():
            setattr(profil, neu, zeile[alt])

    id_zu_profil = {}

    with transaction.atomic():
        for i, nutzer in enumerate(liste_nutzer):
            zeile = daten[i]
            eintragen_nutzer(nutzer, zeile)
            pw_alt = zeile['user_password_hash']
            nutzer.password = '******'.format(pw_alt.split('$')[-1])
            nutzer.save()
            profil = nutzer.my_profile
            eintragen_profil(profil, zeile)
            profil.save()
            id_zu_profil[zeile['user_id']] = profil

    print('Nutzerattribute und Profilattribute eingetragen')

    return liste_nutzer, id_zu_profil
예제 #5
0
파일: nutzerdaten.py 프로젝트: wmles/olymp
def kopfleiste_knoepfe(user):
    """ Der tag erwartet von der Funktion ein dict, in dem die Liste der 
    url-text-Paare für die Knöpfe der Kopfleiste steht """

    return {'knoepfe': Nutzer.knoepfe_kopf(user)}