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()
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()
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()
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
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)}