Beispiel #1
0
def formulaire_marc2tables(master,
                           access_to_network=True,
                           last_version=[0.0, False]):
    # =============================================================================
    # Structure du formulaire - Cadres
    # =============================================================================
    couleur_fond = "white"
    couleur_bouton = "#2D4991"
    # couleur_bouton = "#99182D"

    [
        form, zone_alert_explications, zone_access2programs, zone_actions,
        zone_ok_help_cancel, zone_notes
    ] = main.form_generic_frames(
        master, "Conversion de fichiers de notices Unimarc en tableaux",
        couleur_fond, couleur_bouton, access_to_network)

    frame_input = tk.Frame(zone_actions,
                           highlightthickness=2,
                           highlightbackground=couleur_bouton,
                           relief="groove",
                           height=150,
                           padx=10,
                           bg=couleur_fond)
    frame_input.pack(side="left", anchor="w")
    frame_input_header = tk.Frame(frame_input, bg=couleur_fond)
    frame_input_header.pack(anchor="w")
    frame_input_file = tk.Frame(frame_input, bg=couleur_fond)
    frame_input_file.pack(anchor="w")
    frame_input_file_name = tk.Frame(frame_input_file, bg=couleur_fond)
    frame_input_file_name.pack(side="left")
    frame_input_file_browse = tk.Frame(frame_input_file, bg=couleur_fond)
    frame_input_file_browse.pack(side="left")
    frame_input_infos_format = tk.Frame(frame_input, bg=couleur_fond)
    frame_input_infos_format.pack(side="left")

    frame_input_type_docs = tk.Frame(frame_input, bg=couleur_fond)
    frame_input_type_docs.pack(anchor="w")
    frame_input_type_rec = tk.Frame(frame_input, bg=couleur_fond)
    frame_input_type_rec.pack(anchor="w")

    frame_inter = tk.Frame(zone_actions,
                           borderwidth=0,
                           padx=10,
                           bg=couleur_fond)
    frame_inter.pack(side="left")

    # =============================================================================
    #     Formulaire - Fichier en entrée
    # =============================================================================

    frame_output = tk.Frame(zone_actions,
                            highlightthickness=2,
                            highlightbackground=couleur_bouton,
                            relief="groove",
                            height=120,
                            padx=10,
                            bg=couleur_fond)
    frame_output.pack(side="left")
    frame_output_header = tk.Frame(frame_output, bg=couleur_fond)
    frame_output_header.pack(anchor="w")
    frame_output_nom_fichiers = tk.Frame(frame_output, bg=couleur_fond)
    frame_output_nom_fichiers.pack(anchor="w")
    frame_output_directory = tk.Frame(frame_output, bg=couleur_fond)
    frame_output_directory.pack(anchor="w")
    frame_outputID = tk.Frame(frame_output, bg=couleur_fond)
    frame_outputID.pack(anchor="w")
    frame_output_explications = tk.Frame(frame_output, bg=couleur_fond)
    frame_output_explications.pack(anchor="w")

    frame_output_message_en_cours = tk.Frame(zone_notes,
                                             padx=20,
                                             bg=couleur_fond)
    frame_output_message_en_cours.pack(anchor="w")

    frame_valider = tk.Frame(zone_ok_help_cancel,
                             borderwidth=0,
                             relief="groove",
                             height=150,
                             padx=10,
                             bg=couleur_fond)
    frame_valider.pack(side="left")

    # définition input URL (u)
    tk.Label(frame_inter, text=" ", bg=couleur_fond).pack()
    tk.Label(frame_input_header,
             bg=couleur_fond,
             fg=couleur_bouton,
             text="En entrée\n",
             justify="left",
             font="bold").pack(anchor="w")

    main.download_zone(frame_input_file,
                       "Sélectionner un fichier de notices Unimarc",
                       entry_file_list, couleur_fond,
                       frame_output_message_en_cours)

    tk.Label(frame_output_header,
             bg=couleur_fond,
             fg=couleur_bouton,
             font="bold",
             text="En sortie",
             justify="left").pack()

    main.download_zone(frame_output_directory,
                       "Sélectionner un dossier de destination",
                       main.output_directory,
                       couleur_fond,
                       type_action="askdirectory",
                       widthb=[40, 1])

    # Format du fichier
    file_format = tk.IntVar()
    file_format.set(1)

    # Type de notices
    rec_format = tk.IntVar()
    rec_format.set(1)

    outputID = forms.Entry(
        frame_outputID,
        forms.form_ark2records["frame_outputID"]["outputID"]["title"],
        forms.form_ark2records["frame_outputID"]["outputID"]["params"])

    frame2var = [{
        "frame": frame_input_type_docs,
        "name": "frame_input_type_docs",
        "variables": [["file_format", file_format]]
    }, {
        "frame": frame_input_type_rec,
        "name": "frame_input_type_rec",
        "variables": [["rec_format", rec_format]]
    }]
    forms.display_options(frame2var, forms.form_marc2tables)

    #forms.add_saut_de_ligne(frame_input_type_docs)

    lien_help_encodage = tk.Button(
        frame_input_type_docs,
        font="Arial 8 italic",
        border=0,
        text="Je ne sais pas / Je ne comprends pas",
        command=lambda: main.click2url(
            "https://github.com/Transition-bibliographique/bibliostratus/wiki/1-%5BBleu%5D-Pr%C3%A9parer-ses-donn%C3%A9es-pour-l'alignement-%C3%A0-partir-d'un-export-catalogue#lencodage-des-fichiers-en-entr%C3%A9e"  # noqa
        ),
    ).pack()

    forms.add_saut_de_ligne(frame_input_type_docs)
    #forms.add_saut_de_ligne(frame_input_type_docs_interstice2)
    #forms.add_saut_de_ligne(frame_input_type_rec, 11)

    message_fichiers_en_sortie = """
  Le programme va générer plusieurs fichiers, par type de document,
  en fonction du processus d'alignement avec les données de la BnF
  et des métadonnées utilisées pour cela :
        - code TEX : monographies
        - code VID : audiovisuel (CD/DVD)
        - code PER : périodiques
        - autres non prévus pour le module d'alignement (blanc)
  Les codes indiquent l'option d'alignement à choisir dans le module blanc
  S'il n'y a pas de code, le fichier ne peut être chargé tel quel dans le module
  blanc : il faut au moins reprendre les colonnes.

  Pour répartir les notices en fichiers, le programme utilise les informations
  présentes dans les zones codées de chaque notice Unimarc
  
  """
    tk.Label(frame_output_explications,
             bg=couleur_fond,
             text=message_fichiers_en_sortie,
             justify="left").pack()
    # explications.pack()

    # Bouton de validation

    b = tk.Button(frame_valider,
                  bg=couleur_bouton,
                  fg="white",
                  font="bold",
                  text="OK",
                  command=lambda: launch(entry_file_list, file_format.get(
                  ), rec_format.get(), outputID.value.get(), master, form),
                  borderwidth=5,
                  padx=10,
                  pady=10,
                  width=10,
                  height=4)
    b.pack()

    tk.Label(frame_valider, font="bold", text="", bg=couleur_fond).pack()

    call4help = tk.Button(frame_valider,
                          text=main.texte_bouton_help,
                          command=lambda: main.click2url(main.url_online_help),
                          pady=5,
                          padx=5,
                          width=12)
    call4help.pack()
    tk.Label(frame_valider, text="\n", bg=couleur_fond,
             font="Arial 1 normal").pack()

    forum_button = forms.forum_button(frame_valider)
    forum_button.pack()

    tk.Label(frame_valider, text="\n", bg=couleur_fond,
             font="Arial 4 normal").pack()
    cancel = tk.Button(frame_valider,
                       text="Annuler",
                       bg=couleur_fond,
                       command=lambda: main.annuler(form),
                       pady=10,
                       padx=5,
                       width=12)
    cancel.pack()

    forms.footer(zone_notes, couleur_fond)

    tk.mainloop()
Beispiel #2
0
def formulaire_ark2records(master,
                           access_to_network=True,
                           last_version=[0.0, False]):
    couleur_fond = "white"
    couleur_bouton = "#99182D"

    [
        form, zone_alert_explications, zone_access2programs, zone_actions,
        zone_ok_help_cancel, zone_notes
    ] = main.form_generic_frames(
        master,
        "Bibliostratus : Récupérer les notices complètes BnF / Sudoc / IdRef à partir d'une liste de n° de notices",
        couleur_fond, couleur_bouton, access_to_network)

    zone_ok_help_cancel.config(padx=10)

    frame_input = tk.Frame(zone_actions,
                           bg=couleur_fond,
                           padx=10,
                           pady=10,
                           highlightthickness=2,
                           highlightbackground=couleur_bouton)
    frame_input.pack(side="left", anchor="w", padx=10, pady=10)
    frame_input_file = tk.Frame(frame_input, bg=couleur_fond)
    frame_input_file.pack()
    frame_input_aut = tk.Frame(frame_input, bg=couleur_fond)
    frame_input_aut.pack()
    frame_input_aut_file = tk.Frame(frame_input_aut, bg=couleur_fond)
    frame_input_aut_file.pack()
    frame_input_aut_headers = tk.Frame(frame_input_aut, bg=couleur_fond)
    frame_input_aut_headers.pack(anchor="w")
    frame_input_aut_liees = tk.Frame(frame_input_aut, bg=couleur_fond)
    frame_input_aut_liees.pack(anchor="w")

    frame_output = tk.Frame(zone_actions,
                            bg=couleur_fond,
                            padx=10,
                            pady=10,
                            highlightthickness=2,
                            highlightbackground=couleur_bouton)
    frame_output.pack(side="left", anchor="w")
    frame_output_file = tk.Frame(frame_output,
                                 bg=couleur_fond,
                                 padx=10,
                                 pady=10)
    frame_output_file.pack()
    frame_output_options = tk.Frame(frame_output,
                                    bg=couleur_fond,
                                    padx=10,
                                    pady=10)
    frame_output_options.pack()
    frame_output_options_marc = tk.Frame(frame_output_options, bg=couleur_fond)
    frame_output_options_marc.pack(anchor="w")
    frame_output_options_format_global = tk.Frame(frame_output_options,
                                                  bg=couleur_fond)
    frame_output_options_format_global.pack()
    frame_output_options_format = tk.Frame(frame_output_options_format_global,
                                           bg=couleur_fond)
    frame_output_options_format.pack(side="left", anchor="nw")
    frame_output_options_intermediaire = tk.Frame(
        frame_output_options_format_global, bg=couleur_fond)
    frame_output_options_intermediaire.pack(side="left", anchor="nw")
    frame_output_options_si_xml = tk.Frame(frame_output_options_format_global,
                                           bg=couleur_fond)
    frame_output_options_si_xml.pack(side="left", anchor="nw")

    frame_outputID = tk.Frame(frame_output, bg=couleur_fond)
    frame_outputID.pack(anchor="w")
    # forms.add_saut_de_ligne(frame_outputID)

    zone_notes_message_en_cours = tk.Frame(zone_notes,
                                           padx=20,
                                           bg=couleur_fond)
    zone_notes_message_en_cours.pack()

    main.download_zone(
        frame_input_file,
        "Sélectionner un fichier contenant\nune liste de n° de notices\nARK BnF ou PPN Abes\n(un numéro par ligne)",
        entry_file_list, couleur_fond, zone_notes_message_en_cours)

    main.download_zone(frame_output_file,
                       "Sélectionner un dossier de destination",
                       main.output_directory,
                       couleur_fond,
                       type_action="askdirectory",
                       widthb=[40, 1])

    type_records = tk.IntVar()  # ARK de BIB ou d'AUT ?
    correct_record_option = tk.IntVar()  # 1 ou 2 colonnes ?
    headers = tk.IntVar()  # Fichier avec en-têtes ?
    headers.set(1)

    AUTlieesAUT = tk.IntVar()  # notices d'autorité liées
    AUTlieesSUB = tk.IntVar()
    AUTlieesWORK = tk.IntVar()

    format_records_choice = tk.IntVar()  # Choix du format
    format_records_choice.set(1)
    format_file = tk.IntVar()
    format_file.set(1)

    frame2var = [{
        "frame":
        frame_input_aut_file,
        "name":
        "frame_input_aut_file",
        "variables": [["type_records", type_records],
                      ["correct_record_option", correct_record_option]]
    }, {
        "frame": frame_input_aut_headers,
        "name": "frame_input_aut_headers",
        "variables": [["headers", headers]]
    }, {
        "frame":
        frame_input_aut_liees,
        "name":
        "frame_input_aut_liees",
        "variables": [["AUTlieesAUT", AUTlieesAUT],
                      ["AUTlieesSUB", AUTlieesSUB],
                      ["AUTlieesWORK", AUTlieesWORK]]
    }, {
        "frame": frame_output_options_format,
        "name": "frame_output_options_format",
        "variables": [["format_file", format_file]]
    }, {
        "frame":
        frame_output_options_marc,
        "name":
        "frame_output_options_marc",
        "variables": [["format_records_choice", format_records_choice]]
    }]

    forms.display_options(frame2var, forms.form_ark2records)

    xml_encoding_option = forms.Combobox(
        frame_output_options_si_xml,
        forms.form_ark2records["frame_output_options_si_xml"]
        ["xml_encoding_option"]["title"],
        forms.form_ark2records["frame_output_options_si_xml"]
        ["xml_encoding_option"]["values"],
        forms.form_ark2records["frame_output_options_si_xml"]
        ["xml_encoding_option"]["params"])

    select_fields = forms.Entry(
        frame_output_options_si_xml,
        forms.form_ark2records["frame_output_options_si_xml"]["select_fields"]
        ["title"], forms.form_ark2records["frame_output_options_si_xml"]
        ["select_fields"]["params"])
    outputID = forms.Entry(
        frame_outputID,
        forms.form_ark2records["frame_outputID"]["outputID"]["title"],
        forms.form_ark2records["frame_outputID"]["outputID"]["params"])

    forms.add_saut_de_ligne(frame_input_aut_liees, nb_sauts=5)
    forms.add_saut_de_ligne(frame_output_options_intermediaire, nb_sauts=1)
    forms.add_saut_de_ligne(frame_outputID, nb_sauts=1)

    # file_format.focus_set()
    b = tk.Button(
        zone_ok_help_cancel,
        text="OK",
        command=lambda: launch(
            entry_file_list,
            type_records.get(),
            correct_record_option.get(),
            headers.get(),
            AUTlieesAUT.get(),
            AUTlieesSUB.get(),
            AUTlieesWORK.get(),
            outputID.value.get(),
            format_records_choice.get(),
            format_file.get(),
            xml_encoding_option.options.get(),
            select_fields.value.get(),
            master,
            form,
        ),
        width=15,
        borderwidth=1,
        pady=20,
        fg="white",
        bg=couleur_bouton,
    )
    b.pack()

    main.form_saut_de_ligne(zone_ok_help_cancel, couleur_fond)
    call4help = tk.Button(zone_ok_help_cancel,
                          text=main.texte_bouton_help,
                          command=lambda: main.click2url(main.url_online_help),
                          pady=5,
                          padx=5,
                          width=12)
    call4help.pack()

    forms.add_saut_de_ligne(zone_ok_help_cancel)

    forum_button = forms.forum_button(zone_ok_help_cancel)
    forum_button.pack()

    tk.Label(zone_ok_help_cancel,
             text="\n",
             bg=couleur_fond,
             font="Arial 4 normal").pack()
    cancel = tk.Button(zone_ok_help_cancel,
                       text="Annuler",
                       bg=couleur_fond,
                       command=lambda: main.annuler(form),
                       pady=10,
                       padx=5,
                       width=12)
    cancel.pack()

    forms.footer(zone_notes, couleur_fond)

    tk.mainloop()
Beispiel #3
0
def formulaire_main(access_to_network, last_version):
    couleur_fond = "white"
    couleur_bouton = "#e1e1e1"

    [
        master, zone_alert_explications, zone_access2programs, zone_actions,
        zone_ok_help_cancel, zone_notes
    ] = main_form_frames(
        "Bibliostratus : Stratégie d'alignement d'URIs pour la Transition bibliographique",
        couleur_fond, couleur_bouton, access_to_network)

    frame_left = tk.Frame(zone_actions, bg=couleur_fond, pady=0, padx=0)
    frame_left.pack(side="left", anchor="w")

    frame_logo = tk.Frame(frame_left,
                          highlightbackground=couleur_fond,
                          highlightcolor=couleur_fond,
                          bg=couleur_fond,
                          pady=0,
                          padx=0)
    frame_logo.pack(anchor="center")

    logo = tk.PhotoImage(file="main/files/logo_bbs.png")
    logo = logo.zoom(50)  #with 250, I ended up running out of memory
    logo = logo.subsample(
        50)  #mechanically, here it is adjusted to 32 instead of 320
    zone_logo = tk.Label(frame_logo, image=logo, borderwidth=0)
    zone_logo.image = logo
    zone_logo.pack(anchor="center")

    frame1 = tk.Frame(frame_left,
                      highlightthickness=2,
                      highlightbackground=couleur_bouton,
                      bg=couleur_fond,
                      pady=20,
                      padx=20)
    frame1.pack()

    frame2 = tk.Frame(zone_actions,
                      highlightthickness=0,
                      highlightbackground=couleur_bouton,
                      bg=couleur_fond,
                      pady=20,
                      padx=5)
    frame2.pack(side="left", anchor="w")

    frame3 = tk.Frame(zone_actions,
                      highlightthickness=2,
                      highlightbackground=couleur_bouton,
                      bg=couleur_fond,
                      pady=20,
                      padx=20)
    frame3.pack(side="left")

    frame_help_cancel = tk.Frame(zone_ok_help_cancel,
                                 bg=couleur_fond,
                                 pady=10,
                                 padx=10)
    frame_help_cancel.pack()

    # =============================================================================
    #   Module blanc : aligner ses données bibliographiques ou AUT
    # =============================================================================
    tk.Label(frame1,
             text="Aligner des données bibliographiques",
             bg=couleur_fond,
             fg="#365B43",
             font="Arial 11 bold").pack(anchor="w")
    tk.Label(frame1, text="\n", font="Arial 2 bold", bg=couleur_fond).pack()

    bib2arkButton = tk.Button(
        frame1,
        text=
        "Aligner ses données  BIB\n avec la BnF ou le Sudoc\nà partir de fichiers tableaux",
        command=lambda: bib2id.form_bib2id(master, access_to_network,
                                           [0, False]),
        padx=40,
        pady=47,
        bg="#fefefe",
        font="Arial 9 bold",
    )
    bib2arkButton.pack()

    tk.Label(frame1, text="\n", bg=couleur_fond, font="Arial 3 normal").pack()

    aut2arkButton = tk.Button(frame1,
                              text="Aligner ses données AUT ",
                              command=lambda: aut2id.form_aut2id(
                                  master, access_to_network, [0, False]),
                              padx=55,
                              pady=25,
                              bg="#fefefe",
                              font="Arial 8 normal")
    aut2arkButton.pack()

    #tk.Label(frame1, text="\n\n", bg=couleur_fond).pack()

    tk.Label(frame2, text="\n\n", bg=couleur_fond).pack()
    # =============================================================================
    #     Module bleu : convertir un fichier MARC en tables
    # =============================================================================
    tk.Label(frame3,
             text="Outils d'accompagnement",
             bg=couleur_fond,
             fg="#365B43",
             font="Arial 11 bold").pack(anchor="w")
    tk.Label(frame3, text="\n", bg=couleur_fond, font="Arial 4 normal").pack()

    tk.Label(frame3,
             text="Avant alignement",
             bg=couleur_fond,
             fg="#2D4991",
             font="Arial 10 bold").pack(anchor="w")

    tk.Label(frame3,
             text="Préparer ses données",
             bg=couleur_fond,
             fg="#365B43",
             font="Arial 9 bold").pack(anchor="w")
    tk.Label(frame3,
             text="(constitution de tableaux\nà partir d'un export catalogue)",
             bg=couleur_fond,
             fg="#365B43",
             font="Arial 9 normal",
             justify="left").pack(anchor="w")

    marc2tableButton = tk.Button(
        frame3,
        text="Convertir un fichier Unimarc\n en tableaux",
        command=lambda: marc2tables.formulaire_marc2tables(
            master, access_to_network),
        padx=10,
        pady=10,
        bg="#2D4991",
        fg="white")
    marc2tableButton.pack()

    # ☺tk.Label(frame3,text="\n",bg=couleur_fond).pack()

    tk.Label(frame3, text="\n" + "-" * 50, bg=couleur_fond,
             fg="#a1a1a1").pack()
    # =============================================================================
    #    Module rouge : exporter des notices à partir d'une liste d'ARK
    # =============================================================================
    tk.Label(frame3,
             text="Après alignement",
             bg=couleur_fond,
             fg="#99182D",
             font="Arial 10 bold").pack(anchor="w")
    tk.Label(frame3,
             text="Exporter les notices après alignement",
             bg=couleur_fond,
             fg="#365B43",
             font="Arial 9 bold").pack(anchor="w")

    ark2recordsButton = tk.Button(
        frame3,
        text=
        "Exporter des notices BnF / Abes\nà partir d'une liste d'identifiants\n(ARK / PPN)",
        command=lambda: ark2records.formulaire_ark2records(
            master, access_to_network, [0, False]),
        padx=10,
        pady=10,
        bg="#99182D",
        fg="white")
    ark2recordsButton.pack()

    forms.add_saut_de_ligne(frame3)

    tk.Label(zone_ok_help_cancel, text=" ", pady=5, bg=couleur_fond).pack()

    call4help = tk.Button(frame_help_cancel,
                          text=texte_bouton_help,
                          command=lambda: click2url(url_online_help),
                          pady=25,
                          padx=5,
                          width=12)
    call4help.pack()
    tk.Label(frame_help_cancel,
             text="\n",
             bg=couleur_fond,
             font="Arial 1 normal").pack()

    forum_button = forms.forum_button(frame_help_cancel)
    forum_button.pack()

    forms.add_saut_de_ligne(frame_help_cancel)
    cancel = tk.Button(frame_help_cancel,
                       text="Annuler",
                       bg=couleur_fond,
                       command=lambda: annuler(master),
                       pady=45,
                       padx=5,
                       width=12)
    cancel.pack()

    tk.Label(frame_help_cancel,
             text="\n\nPréférences",
             bg=couleur_fond,
             font="Arial 8 normal").pack()
    edit_settings_img = tk.PhotoImage(file='main/files/settings.png')
    edit_settings_button = tk.Button(
        frame_help_cancel,
        image=edit_settings_img,
        command=lambda: settings.edit_preferences(
            master, prefs_file_name, access_to_network, last_version),
        padx=0,
        pady=0,
        bg="white",
        font="Arial 9 bold",
    )
    edit_settings_button.pack()

    tk.Label(zone_notes,
             text="Bibliostratus - Version " + str(version) + " - " +
             lastupdate,
             bg=couleur_fond).pack()

    if last_version[1]:
        download_update = tk.Button(zone_notes,
                                    text="Télécharger la version " +
                                    str(last_version[0]),
                                    command=download_last_update)
        download_update.pack()
        url_release_notes = (
            "https://github.com/Transition-bibliographique/bibliostratus/blob/master/bibliostratus/release_notes.md#"  # noqa
            + "version-" + str(last_version[0]).replace(".", ""))
        release_notes = tk.Button(
            zone_notes,
            bg=couleur_fond,
            font="Arial 8 bold italic",
            border=0,
            text="Liste des nouveautés",
            command=lambda: download_last_update(url_release_notes))
        release_notes.pack()

    tk.mainloop()