Changeset 38701


Ignore:
Timestamp:
2024-02-06T13:17:33+13:00 (4 months ago)
Author:
davidb
Message:

metadata.xml files now include entries matched against PDF files

Location:
gs3-installations/intermuse/trunk/sites/intermuse/collect/ephemeral-heterogeneous/prepare
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • gs3-installations/intermuse/trunk/sites/intermuse/collect/ephemeral-heterogeneous/prepare/pagedimage-fs-generate-metadata-files.py

    r38692 r38701  
    1111if __name__ == "__main__":
    1212   
    13     toplevel_dir="Digitised-materials-ready-for-digital-archive"
    14     output_filename = None
     13    input_toplevel_dir="Digitised-materials-ready-for-digital-archive"
     14    output_toplevel_dir="Digitised-materials-ready-for-digital-archive--additional"
    1515   
    1616    if len(sys.argv) > 1:
    17         toplevel_dir = sys.argv[1]
     17        input_toplevel_dir = sys.argv[1]
    1818
    19 #    if len(sys.argv) > 2:
    20 #        output_filename = sys.argv[2]
     19    if len(sys.argv) > 2:
     20        output_toplevel_dir = sys.argv[2]
    2121       
    22     fs_structure_dirs = pagedimagefs.determine_fs_structure(toplevel_dir)
     22    fs_structure_dirs = pagedimagefs.determine_fs_structure(input_toplevel_dir)
    2323
    2424    pagedimagemd.add_directory_metadata(fs_structure_dirs)
     
    2727        pagedimagefs.print_fs_structure(fs_structure_dirs)
    2828       
    29     pagedimagemd.output_directory_metadata(fs_structure_dirs)
     29    pagedimagemd.output_directory_metadata(fs_structure_dirs,input_toplevel_dir,output_toplevel_dir)
    3030
    31 #    if output_filename == None:
    32 #        print(needs_item_file_recs)
    33 #        #pagedimagefs.output_pdf_files(all_pdfs)
    34 #    else:
    35 #        x=1
    36 #        #pagedimagefs.save_pdf_list(all_pdfs,output_filename)
    3731
    3832
  • gs3-installations/intermuse/trunk/sites/intermuse/collect/ephemeral-heterogeneous/prepare/pagedimagemd.py

    r38693 r38701  
    88    'RCM BMS chapters programmes and congress'  : {},
    99    'YorkHMS BMS Borthwick IIIF/BMS'          : {
    10         "type": "Programme",
    11         "publisher" : "The British Music Society of York",
    12         "regex"    : r'^BMS_\d+.*\.pdf$'
     10        "type"       : "Programme",
     11        "publisher"  : "The British Music Society of York",
     12        "file-regex" : r'^BMS_\d+.*\.pdf$'
    1313    },
    1414    'YorkHMS BMS Borthwick IIIF/HMS'          : {
     
    5858    return matching_md_rules;
    5959
     60def add_pdf_filenames_metadata(fs_structure_dirs,full_dirname,dir_match_type):
     61    fs_structure_this_dir = fs_structure_dirs[full_dirname]
     62
     63    pdf_filenames = fs_structure_this_dir["pdf-filenames"]
     64
     65
     66    for pdf_filename in pdf_filenames:
     67        metadata_description_list = []
     68           
     69        title_from_filename = re.sub(r"\.\w+$","",pdf_filename)
     70        title_from_filename = re.sub(r"_"," ",title_from_filename,flags=re.IGNORECASE)
     71       
     72        metadata_description_list.append(
     73            f"<Metadata mode=\"override\" name=\"im.Title\">{title_from_filename}</Metadata>"
     74        )
     75        metadata_description_list.append(
     76            f"<Metadata mode=\"override\" name=\"im.{dir_match_type}Title\">{title_from_filename}</Metadata>"
     77        )
     78
     79        pdf_filename_re = "^"+re.sub(r"\.","\\.",pdf_filename)+"$"
     80       
     81        metadata_fileset = { "FileSet": { "FileName": f"{pdf_filename_re}", "Descriptions": metadata_description_list } }
     82
     83        fs_structure_this_dir["metadata-filesets"].append(metadata_fileset)
     84       
     85   
    6086def add_directory_metadata(fs_structure_dirs):
    6187   
     
    98124                )
    99125
    100                 is_programme = "true" if (type == "programme") else "false"
     126                is_programme = "true" if (type == "Programme") else "false"
    101127               
    102128                metadata_description_list.append(
     
    114140            fs_structure_this_dir["metadata-filesets"].append(metadata_fileset)
    115141
     142            add_pdf_filenames_metadata(fs_structure_dirs,full_dirname,type)
     143           
    116144            # debugging
    117145            # print(f"{matching_md_dir_rules} matches {full_dirname}")
    118146
    119147
    120 def output_directory_metadata(fs_structure_dirs):
    121    
    122     for full_dirname in sorted(fs_structure_dirs.keys()):
    123 
    124         fs_structure_this_dir = fs_structure_dirs[full_dirname]
     148def output_directory_metadata(fs_structure_dirs, input_toplevel_dirname,output_toplevel_dirname):
     149   
     150    print("Writing out added metadata-filesets as metadata.xml files to:")
     151    print(f"  {output_toplevel_dirname}")
     152    print("----")
     153    print("Processing directories:")
     154   
     155    for input_full_dirname in sorted(fs_structure_dirs.keys()):
     156
     157        output_full_dirname = re.sub(r"^"+input_toplevel_dirname+os.sep,output_toplevel_dirname+os.sep,input_full_dirname)
     158        print(f"  {output_full_dirname}")
     159       
     160        fs_structure_this_dir = fs_structure_dirs[input_full_dirname]
    125161
    126162        if len(fs_structure_this_dir["metadata-filesets"]) > 0:
    127163
     164            fileset_lines = ""
     165           
    128166            for metadata_fileset in fs_structure_this_dir["metadata-filesets"]:
    129167
     
    133171                for description in metadata_fileset["FileSet"]["Descriptions"]:
    134172                    description_lines += f"        {description}\n"
    135                    
    136                 # Outer metadata.xml in the form
    137 
    138                 # <?xml version="1.0" encoding="UTF-8"?>
    139                 # <!DOCTYPE DirectoryMetadata SYSTEM "http://greenstone.org/dtd/DirectoryMetadata/1.0/DirectoryMetadata.dtd">
    140                 # <DirectoryMetadata>
    141                 #
    142                 #   <FileSet>
    143                 #     <FileName>...</FileName>
    144                 #     <Description>
    145                 #       # ...
    146                 #     </Description>
    147                 #   </FileSet>
    148                 #
    149                 # </DirectoryMetadata>
    150 
    151 
    152                 metadata_xml = f"""<?xml version="1.0" encoding="UTF-8"?>
    153 <!DOCTYPE DirectoryMetadata SYSTEM "http://greenstone.org/dtd/DirectoryMetadata/1.0/DirectoryMetadata.dtd">
    154 <DirectoryMetadata>
     173
     174
     175                fileset_lines += f"""
    155176
    156177  <FileSet>
     
    159180{description_lines}
    160181    </Description>
    161   <FileSet>
    162 
     182  </FileSet>
     183"""
     184
     185            fileset_lines += "\n"
     186           
     187            # Outer metadata.xml in the form
     188
     189            # <?xml version="1.0" encoding="UTF-8"?>
     190            # <!DOCTYPE DirectoryMetadata SYSTEM "http://greenstone.org/dtd/DirectoryMetadata/1.0/DirectoryMetadata.dtd">
     191            # <DirectoryMetadata>
     192            #
     193            #   <FileSet>
     194            #     <FileName>...</FileName>
     195            #     <Description>
     196            #       # ...
     197            #     </Description>
     198            #   </FileSet>
     199            #
     200            # </DirectoryMetadata>
     201
     202
     203            metadata_xml = f"""<?xml version="1.0" encoding="UTF-8"?>
     204<!DOCTYPE DirectoryMetadata SYSTEM "http://greenstone.org/dtd/DirectoryMetadata/1.0/DirectoryMetadata.dtd">
     205<DirectoryMetadata>
     206{fileset_lines}
    163207</DirectoryMetadata>"""
    164                
    165                 print("----")
    166                 print(metadata_xml)
    167                 print("----")
     208                               
     209            output_full_metadata_filename = os.path.join(output_full_dirname,"metadata.xml")
     210               
     211            os.makedirs(output_full_dirname, exist_ok=True )
     212
     213            with open(output_full_metadata_filename, "w", encoding="utf-8") as fout:
     214                fout.write(metadata_xml)
     215                fout.write("\n")
    168216               
    169217                   
Note: See TracChangeset for help on using the changeset viewer.