Bagit.py

Biblioteca responsável na formatação da compactação de arquivo.

O código-fonte implementa a estrutura de diretório Bagit e as convenções de nomenclatura de arquivo, que fornece uma estrutura para agrupar um conjunto arbitrário de itens em um único pacote, junto com arquivos de metadados que descrevem o conteúdo do pacote. Ele fornece uma ferramenta de linha de comando e uma biblioteca Python para criar e trabalhar com diretórios Bagit. A biblioteca é usada para criar bags e armazenar metadados como pares chave-valor em um arquivo chamado bag-info.txt. A biblioteca oferece suporte ao uso de vários algoritmos de hash para criar somas de verificação dos arquivos do bag. O código contém cabeçalhos de metadados bag-info.txt padrão, suporta Unicode e tem suporte de internacionalização com gettext (biblioteca do Projeto GNU que faz a internacionalização de softwares).

O código define um objeto Bag, a finalidade deste objeto é fornecer uma interface para leitura e manipulação de arquivos bag. Bags são um tipo de pacote de dados que armazenam arquivos e metadados. A classe lê as informações necessárias de um bag, como sua versão e codificação, no arquivo Bagit.txt. Ele também carrega os dados do arquivo bag-info.txt em seu atributo info. 

Possui módulo que inclui métodos para validar a estrutura e o conteúdo de um bag, para buscar entradas do arquivo fetch.txt, carregar arquivos de manifesto e verificar a presença do campo Payload no arquivo de informações do bag. O módulo gera um BagError se encontrar algum erro durante a validação e inclui um método is_valid para retornar um booleano indicando o sucesso ou falha da validação.

Se houver uma incompatibilidade, um BagValidationError será gerado. Em seguida, o código valida a completude do bag verificando se há alguma incompatibilidade entre os manifestos de arquivo e os arquivos reais no sistema de arquivos. Se houver uma incompatibilidade, um BagValidationError será gerado. O código então verifica se o conteúdo real dos arquivos corresponde aos hashes registrados armazenados nos arquivos de manifesto. Se houver uma incompatibilidade, um BagValidationError será gerado. Por fim, o código verifica se o arquivo Bagit.txt, que é um arquivo obrigatório em um pacote, está em conformidade com a especificação.

O código define funções para manipulação de normalização de nomes de arquivo e cálculo de hashes de arquivo:

  • O ‘normalize_unicode’ normaliza nomes de arquivos para o formato Unicode e retorna um dicionário que mapeia os nomes de arquivos para seus valores conforme codificados. Isso evita conflitos entre o sistema de arquivos e os manifestos causados por alguns sistemas de arquivos que aplicam diferentes formas de normalização. 
  • O ‘get_hashers’ retorna um dicionário de instâncias hashlib dada uma lista de nomes de algoritmos. 
  • O ‘calc_hashes’ calcula hashes de arquivo usando os algoritmos especificados. 
  • O ‘load_tag_file’ carrega um arquivo de tags e retorna seu conteúdo como um dicionário.

O código usa a biblioteca argparse para fornecer uma interface de linha de comando. O código consiste em várias funções e classes, incluindo:

  • O ‘can_bag’ que verifica se o diretório fornecido tem permissões suficientes para ser ensacado.
  • O ‘can_read’ que verifica se o diretório ou arquivos fornecidos são ilegíveis.
  • O ‘generate_manifest_lines’ que gera uma lista de valores de soma de verificação para um arquivo em formato de manifesto.
  • O ‘encode_filename’ e ‘decode_filename’ que codificam/decodificam nomes de arquivos.
  • O ‘force_unicode’ que retorna uma string Unicode dada uma string unicode ou byte.
  • O ‘BagArgumentParser’ e ‘BagHeaderAction’ que são usados para a interface de linha de comando.
  • O ‘make_parser’ que configura a interface de linha de comando.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *