diff --git a/bases/br_bd_diretorios_brasil/dataset_config.yaml b/bases/br_bd_diretorios_brasil/dataset_config.yaml index 6effaf7eb..72c84087a 100644 --- a/bases/br_bd_diretorios_brasil/dataset_config.yaml +++ b/bases/br_bd_diretorios_brasil/dataset_config.yaml @@ -45,4 +45,5 @@ github_url: # Não altere esse campo. # Data da última modificação dos metadados gerada automaticamente pelo CKAN. -metadata_modified: '2022-02-09T21:59:32.440801' + +metadata_modified: '2022-02-09T21:59:32.440801' \ No newline at end of file diff --git a/bases/test_dataset/README.md b/bases/test_dataset/README.md deleted file mode 100644 index 0583ac187..000000000 --- a/bases/test_dataset/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Como capturar os dados de test_dataset? - -Para capturar esses dados, basta verificar o link dos dados originais indicado em dataset_config.yaml no item website. - -Caso tenha sido utilizado algum código de captura ou tratamento, estes estarão contidos em code/. Se o dado publicado for em sua versão bruta, não existirá a pasta code/. - -Os dados publicados estão disponíveis em: https://basedosdados.org/dataset/test-dataset \ No newline at end of file diff --git a/bases/test_dataset/dataset_config.yaml b/bases/test_dataset/dataset_config.yaml deleted file mode 100644 index d2b6f4e84..000000000 --- a/bases/test_dataset/dataset_config.yaml +++ /dev/null @@ -1,42 +0,0 @@ - -# Qual organização disponibiliza os dados originais? -# Opções: escolher dessa lista -> https://basedosdados.org/api/3/action/organization_list -# Exemplos: br-ibge, br-tse, br-rj-gov -organization: - - acaps - -dataset_id: test_dataset - -# Título do conjunto, a ser exibido no mecanismo de busca. -# Exemplo: População brasileira -title: - -# Descrição e anotações úteis sobre os dados. -description: - -# Quais temas caracterizam a base? -# Opções: escolher dessa lista -> https://basedosdados.org/api/3/action/group_list -# Importante: preencher com a chave, e não o valor. -groups: [] - -# Quais etiquetas caracterizam a base? -# Opções: escolher dessa lista -> https://basedosdados.org/api/3/action/tag_list -# Exemplos: fertilidade, preco, desmatamento. -# Caso crie etiquetas novas, as regras são: -# - letras minúsculas -# - sem acentos -# - sempre no singular -# - não repita nomes de grupos (ex. educacao, saude, meio ambiente, economia, etc.) -tags: [] - -# Url completa do CKAN já contendo o dataset-id -# Exemplo: https://basedosdados.org/dataset/ -ckan_url: - -# Url completa do Github já contendo o dataset_id -# Exemplo: https://github.com/basedosdados/mais/tree/master/bases/ -github_url: - -# Não altere esse campo. -# Data da última modificação dos metadados gerada automaticamente pelo CKAN. -metadata_modified: diff --git a/bases/test_dataset/test_table/publish.sql b/bases/test_dataset/test_table/publish.sql deleted file mode 100644 index 2917b942a..000000000 --- a/bases/test_dataset/test_table/publish.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types -*/ - -CREATE VIEW basedosdados-dev.test_dataset.test_table AS -SELECT -SAFE_CAST(ano AS STRING) ano, -SAFE_CAST(sigla_uf AS STRING) sigla_uf, -SAFE_CAST(mes AS STRING) mes, -SAFE_CAST(dado AS STRING) dado -FROM basedosdados-dev.test_dataset_staging.test_table AS t \ No newline at end of file diff --git a/bases/test_dataset/test_table/schema-staging.json b/bases/test_dataset/test_table/schema-staging.json deleted file mode 100644 index 778053fd4..000000000 --- a/bases/test_dataset/test_table/schema-staging.json +++ /dev/null @@ -1 +0,0 @@ -[{"name": "dado", "bigquery_type": null, "description": null, "temporal_coverage": null, "covered_by_dictionary": null, "directory_column": {"dataset_id": null, "table_id": null, "column_name": null}, "measurement_unit": null, "has_sensitive_data": null, "is_in_staging": null, "is_partition": null, "type": "STRING"}] \ No newline at end of file diff --git a/bases/test_dataset/test_table/table_config.yaml b/bases/test_dataset/test_table/table_config.yaml deleted file mode 100644 index 9a801dd8f..000000000 --- a/bases/test_dataset/test_table/table_config.yaml +++ /dev/null @@ -1,160 +0,0 @@ - -dataset_id: test_dataset - -table_id: test_table - -# Descreva a tabela. Essas são as primeiras frases que um usuário vai ver. -# Você não precisa ser muito conciso. Sinta-se a vontade para dar exemplos de -# como usar os dados. -# Se souber, liste também aplicações: pesquisa, apps, etc. que usem os dados., -description: table-approve passou por aqui v1.0 -> teste com retries - -# A máxima unidade espacial que a tabela cobre. -spatial_coverage: - -# Anos cobertos pela tabela. -# Preencher como lista de intervalos. -# Exemplo: 1995(1)2019. -temporal_coverage: - -# A unidade temporal com qual a tabela é atualizada. -# Opções em 'https://basedosdados.org/api/3/action/bd_available_options' -update_frequency: - -# Entidade representada por cada linha. -# Opções em 'https://basedosdados.org/api/3/action/bd_available_options' -entity: - -# A unidade temporal representada por cada linha. -# Opções em 'https://basedosdados.org/api/3/action/bd_available_options' -time_unit: - -# O conjunto mínimo de colunas identificando cada linha unicamente. -# Preencha com os nomes de colunas. -# Exemplos: id_municipio, ano. -# Pode ser vazio pois certas tabelas não possuem identificadores. -identifying_columns: - - ano - - sigla_uf - -last_updated: - metadata: - data: - release: - -# Versão da tabela. Seguindo o padrão de semantic versioning. -# Exemplo: v1.1.3 -version: - -# Quem está preenchendo esses metadados? -published_by: - name: - email: - github_user: - website: - ckan_user: - -# Qual organização/departamento/pessoa tratou os dados? -# As vezes há um ponto intermediário entre os dados originais e subir na Base dos Dados. -# Se essa pessoa é você, preencha abaixo com suas informações. -data_cleaned_by: - name: - email: - github_user: - ckan_user: - website: - code_url: - -# Se houve passos de tratamento, limpeza e manipulação de dados, descreva-os aqui. -data_cleaning_description: - -# Url dos dados originais no GCP Storage. -raw_files_url: - -# Url dos arquivos auxiliares no GCP Storage. -auxiliary_files_url: - -# Url da tabela de arquitetura no GCP Storage. -architecture_url: - -# A tabela tem colunas que precisam de dicionário? -# Opções: yes, no. -covered_by_dictionary: - -source_bucket_name: basedosdados-dev - -project_id_prod: basedosdados-dev - -project_id_staging: basedosdados-dev - -# Liste as colunas da tabela que representam partições. -# Não esqueça de deletar essas colunas nas tabelas .csv na hora de subir para o BigQuery. -# Isso poupará muito tempo e dinheiro às pessoas utilizando essa tabela. -# Se não houver partições, não modifique abaixo. -partitions: ano, sigla_uf, mes - -bdm_file_size: - -# Quais são as colunas? Certifique-se de escrever uma boa descrição, as pessoas vão gostar -# para saber sobre o que é a coluna. -# Adicionar todas as colunas manualmente pode ser bastante cansativo, por isso, quando -# inicializando este arquivo de configuração, você pode apontar a função para uma amostra de dados que -# preencherá automaticamente as colunas. -# Algumas colunas existirão apenas na tabela final, você as construirá em `publish.sql`. -# Para esses, defina is_in_staging como False. -# Além disso, você deve adicionar as colunas de partição aqui e definir is_partition como True. -columns: - - name: ano - bigquery_type: - description: testenado table-approve - temporal_coverage: - covered_by_dictionary: - directory_column: - dataset_id: - table_id: - column_name: - measurement_unit: - has_sensitive_data: - is_in_staging: - is_partition: true - - name: sigla_uf - bigquery_type: - description: testenado testando table-approve - temporal_coverage: - covered_by_dictionary: - directory_column: - dataset_id: - table_id: - column_name: - measurement_unit: - has_sensitive_data: - is_in_staging: - is_partition: true - - name: mes - bigquery_type: - description: - temporal_coverage: - covered_by_dictionary: - directory_column: - dataset_id: - table_id: - column_name: - measurement_unit: - has_sensitive_data: - is_in_staging: - is_partition: true - - name: dado - bigquery_type: - description: - temporal_coverage: - covered_by_dictionary: - directory_column: - dataset_id: - table_id: - column_name: - measurement_unit: - has_sensitive_data: - is_in_staging: - is_partition: - -metadata_modified: diff --git a/python-package/basedosdados/upload/metadata.py b/python-package/basedosdados/upload/metadata.py index c32b114bc..be85f192a 100644 --- a/python-package/basedosdados/upload/metadata.py +++ b/python-package/basedosdados/upload/metadata.py @@ -121,7 +121,8 @@ def ckan_data_dict(self) -> dict: "private": ckan_dataset.get("private") or False, "owner_org": self.owner_org, "resources": ckan_dataset.get("resources", []) - or [{"resource_type": "external_link", "name": ""}], + or [{"resource_type": "external_link", "name": ""}] + or [{"resource_type": "information_request", "name": ""}], "groups": [ {"name": group} for group in self.local_metadata.get("groups", []) or [] ], @@ -133,6 +134,7 @@ def ckan_data_dict(self) -> dict: { "key": "dataset_args", "value": { + "short_description": self.local_metadata.get("short_description"), "description": self.local_metadata.get("description"), "ckan_url": self.local_metadata.get("ckan_url"), "github_url": self.local_metadata.get("github_url"), @@ -154,30 +156,27 @@ def ckan_data_dict(self) -> dict: "spatial_coverage": self.local_metadata.get("spatial_coverage"), "temporal_coverage": self.local_metadata.get("temporal_coverage"), "update_frequency": self.local_metadata.get("update_frequency"), - "entity": self.local_metadata.get("entity"), - "time_unit": self.local_metadata.get("time_unit"), - "identifying_columns": self.local_metadata.get( - "identifying_columns" - ), + "observation_level": self.local_metadata.get("observation_level"), "last_updated": self.local_metadata.get("last_updated"), + "version": self.local_metadata.get("version"), "published_by": self.local_metadata.get("published_by"), "data_cleaned_by": self.local_metadata.get("data_cleaned_by"), "data_cleaning_description": self.local_metadata.get( "data_cleaning_description" ), + "data_cleaning_code_url": self.local_metadata.get("data_cleaning_code_url"), + "partner_organization": self.local_metadata.get("partner_organization"), "raw_files_url": self.local_metadata.get("raw_files_url"), "auxiliary_files_url": self.local_metadata.get( "auxiliary_files_url" ), "architecture_url": self.local_metadata.get("architecture_url"), - "covered_by_dictionary": self.local_metadata.get( - "covered_by_dictionary" - ), "source_bucket_name": self.local_metadata.get("source_bucket_name"), "project_id_prod": self.local_metadata.get("project_id_prod"), "project_id_staging": self.local_metadata.get("project_id_staging"), "partitions": self.local_metadata.get("partitions"), - "bdm_file_size": self.local_metadata.get("bdm_file_size"), + "uncompressed_file_size": self.local_metadata.get("uncompressed_file_size"), + "compressed_file_size": self.local_metadata.get("compressed_file_size"), "columns": self.local_metadata.get("columns"), "metadata_modified": self.local_metadata.get("metadata_modified"), "package_id": ckan_dataset.get("id"), @@ -208,7 +207,7 @@ def metadata_schema(self) -> dict: dataset_url = f"{self.CKAN_URL}/api/3/action/bd_dataset_schema" dataset_schema = requests.get(dataset_url).json().get("result") - + return dataset_schema def exists_in_ckan(self) -> bool: @@ -324,7 +323,7 @@ def create( # if `dataset_config.yaml` doesn't exist but user wants to create # it alongside `table_config.yaml` dataset_config_exists = ( - self.metadata_path / "dataset_config.yaml" + self.metadata_path / self.dataset_id / "dataset_config.yaml" ).exists() if self.table_id and not table_only and not dataset_config_exists: self.dataset_metadata_obj.create(if_exists=if_exists) @@ -348,7 +347,7 @@ def validate(self) -> bool: ckan = RemoteCKAN(self.CKAN_URL, user_agent="", apikey=None) response = ckan.action.bd_dataset_validate(**self.ckan_data_dict) - + if response.get("errors"): error = {self.ckan_data_dict.get("name"): response["errors"]} message = f"{self.filepath} has validation errors: {error}" @@ -414,14 +413,14 @@ def publish( self.validate() assert self.is_updated(), ( - f"Could not publish metadata due to out of date config file. " + f"Could not publish metadata due to out-of-date config file. " f"Please run `basedosdados metadata create {self.dataset_id} " f"{self.table_id or ''}` to get the most recently updated met" f"adata and apply your changes to it." ) data_dict = self.ckan_data_dict.copy() - + if self.table_id: # publish dataset metadata first if user wants to publish both @@ -690,9 +689,9 @@ def build_yaml_object( if yaml.get("partitions") == "": yaml["partitions"] = None - # Add dataset_id and table_id - yaml["dataset_id"] = dataset_id if table_id: + # Add dataset_id and table_id + yaml["dataset_id"] = dataset_id yaml["table_id"] = table_id # Add gcloud config variables