kpubdata 0.7.0__tar.gz → 0.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kpubdata-0.8.0/.github/CODEOWNERS +16 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/ISSUE_TEMPLATE/bug_report.yml +1 -2
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/ISSUE_TEMPLATE/dataset-request.yml +1 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/ISSUE_TEMPLATE/docs.yml +1 -2
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/ISSUE_TEMPLATE/feature_request.yml +1 -2
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/ISSUE_TEMPLATE/new-provider-adapter.yml +1 -2
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/PULL_REQUEST_TEMPLATE.md +3 -1
- kpubdata-0.8.0/.github/actions/conventional-title/action.yml +44 -0
- kpubdata-0.8.0/.github/actions/release-notes/action.yml +72 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/dependabot.yml +1 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/workflows/build-dataset.yml +5 -2
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/workflows/ci.yml +38 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/workflows/publish-pypi.yml +16 -3
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/workflows/release.yml +36 -12
- kpubdata-0.8.0/.github/workflows/security.yml +74 -0
- kpubdata-0.8.0/.github/workflows/titles.yml +135 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/AGENTS.md +68 -10
- {kpubdata-0.7.0 → kpubdata-0.8.0}/API_SPEC.md +27 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/ARCHITECTURE.md +12 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/CANONICAL_MODEL.md +41 -6
- kpubdata-0.8.0/CHANGELOG.md +244 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/CONTRIBUTING.md +9 -10
- kpubdata-0.8.0/PACKAGING.md +179 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/PKG-INFO +13 -5
- {kpubdata-0.7.0 → kpubdata-0.8.0}/PROVIDER_ADAPTER_CONTRACT.md +4 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/README.en.md +13 -4
- {kpubdata-0.7.0 → kpubdata-0.8.0}/README.md +12 -4
- kpubdata-0.8.0/SUPPORTED_DATA.md +224 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/compatibility.json +5 -5
- kpubdata-0.8.0/docs/DATASET_STATUS.md +112 -0
- kpubdata-0.8.0/docs/LIVE_PROBE.md +151 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/PRODUCTION_GRADE.md +3 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/adrs/0004-versioning-and-release.md +27 -2
- kpubdata-0.8.0/docs/adrs/0005-dataset-status-vocabulary.md +150 -0
- kpubdata-0.8.0/docs/adrs/0006-column-metadata-contract.md +125 -0
- kpubdata-0.8.0/docs/adrs/0007-independence-rules.md +125 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/brand/BRAND.md +8 -8
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/brand/TERMINOLOGY.md +2 -2
- kpubdata-0.8.0/docs/compatibility.md +166 -0
- kpubdata-0.8.0/docs/dataset-demand-list.md +63 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/governance/BACKLOG.md +4 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/governance/POLICY.md +88 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/logging.md +24 -5
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/product-family-architecture.md +44 -43
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/kosis.md +5 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/seoul.md +3 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/status/latest.json +6 -2
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/status.md +3 -3
- {kpubdata-0.7.0 → kpubdata-0.8.0}/mkdocs.yml +13 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/pyproject.toml +1 -1
- kpubdata-0.8.0/scripts/check_independence.py +146 -0
- kpubdata-0.8.0/scripts/conventional_title.py +142 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/gen_status_page.py +26 -15
- kpubdata-0.8.0/scripts/release_notes.py +222 -0
- kpubdata-0.8.0/scripts/sync_supported_data.py +119 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/validate_spec.py +9 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/verify_spec.py +39 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/__init__.py +2 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/_probe.py +4 -11
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/bootstrap.py +1 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/core/bridge.py +32 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/core/dataset.py +11 -2
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/core/executor.py +297 -82
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/core/models.py +47 -3
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/core/spec.py +95 -2
- kpubdata-0.8.0/src/kpubdata/core/status.py +226 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/korean/adapter.py +6 -6
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/localdata/adapter.py +11 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/scaffold.py +28 -28
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/apt_rent.yaml +4 -2
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/apt_trade.yaml +10 -5
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/hospital_info.yaml +4 -2
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/metro_fare.yaml +4 -2
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/tour_kor_area.yaml +2 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/tour_kor_festival.yaml +2 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/tour_kor_keyword.yaml +2 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/tour_kor_location.yaml +2 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/village_fcst.yaml +2 -1
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/schema.json +44 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/transport/cache.py +44 -6
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/transport/http.py +16 -5
- kpubdata-0.8.0/tests/unit/core/test_dataset_ref_license.py +75 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_executor.py +123 -7
- kpubdata-0.8.0/tests/unit/core/test_leading_zero_codes.py +74 -0
- kpubdata-0.8.0/tests/unit/core/test_list_all_client_path.py +63 -0
- kpubdata-0.8.0/tests/unit/core/test_list_all_spec_paging.py +176 -0
- kpubdata-0.8.0/tests/unit/core/test_provenance_url_masking.py +95 -0
- kpubdata-0.8.0/tests/unit/core/test_semantic_kind.py +125 -0
- kpubdata-0.8.0/tests/unit/core/test_spec_schema.py +75 -0
- kpubdata-0.8.0/tests/unit/core/test_status_transition.py +159 -0
- kpubdata-0.8.0/tests/unit/core/test_total_count_zero.py +64 -0
- kpubdata-0.8.0/tests/unit/scripts/test_check_independence.py +135 -0
- kpubdata-0.8.0/tests/unit/scripts/test_conventional_title.py +143 -0
- kpubdata-0.8.0/tests/unit/scripts/test_gen_status_page.py +72 -0
- kpubdata-0.8.0/tests/unit/scripts/test_release_notes.py +229 -0
- kpubdata-0.8.0/tests/unit/scripts/test_sync_supported_data.py +93 -0
- kpubdata-0.8.0/tests/unit/test_codeowners.py +44 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_scaffold.py +23 -0
- kpubdata-0.8.0/tests/unit/test_status_vocabulary.py +135 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/uv.lock +718 -509
- kpubdata-0.7.0/CHANGELOG.md +0 -168
- kpubdata-0.7.0/PACKAGING.md +0 -158
- kpubdata-0.7.0/SUPPORTED_DATA.md +0 -217
- kpubdata-0.7.0/docs/compatibility.md +0 -98
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/actions/next-version/action.yml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/actions/set-version/action.yml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/workflows/codex-review.yml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/workflows/docs.yml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/workflows/geo-check.yml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/workflows/integration.yml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.github/workflows/smoke.yml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.gitignore +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.opencode/agent/dataset-builder.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.opencode/agent/dataset-verifier.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.opencode/agent/drift-fixer.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.opencode/agent/inventory.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.opencode/command/add-dataset.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.opencode/command/fix-drift.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/.opencode/command/migrate-dataset.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/LICENSE +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/Makefile +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/PRD.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/ROADMAP.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/SECURITY.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/VALIDATION.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/adrs/0001-dialect-inspired-architecture.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/adrs/0002-standardize-ux-not-native-shape.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/adrs/0003-language-policy.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/architecture-diagrams.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/assets/terminal/cli_datasets.gif +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/assets/terminal/error_handling.gif +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/assets/terminal/make_verify.gif +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/assets/terminal/python_usage.gif +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/assets/terminal/replay_mode.gif +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/caching.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/cli.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/contributing.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/cookbook/discovery.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/cookbook/getting-started.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/cookbook/raw-access.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/datago-api-reference.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/dataset-examples.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/dataset-prioritization.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/governance/VERIFICATION.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/governance/issue-audit-2026-09-27.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/host-allowlist.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/index.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/internal/adapter-inventory.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/internal/coverage-assessment.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/internal/custom-adapters.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/internal/e2e-design.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/internal/monthly-2026-09.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/internal/pilot-log.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/production_grade.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/bok.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/datago.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/fds.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/kipris.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/korean.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/krx.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/law.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/localdata.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/lofin.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/neis.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/semas.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/providers/sgis.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/quickstart.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/terminal-captures.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/docs/tutorial-ai-agent-workflow.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/README.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/air_quality.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/air_station.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/airkorea_forecast.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/apt_rent.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/apt_trade.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/hospital_info.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/metro_fare.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/offi_rent.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/offi_trade.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/rh_rent.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/sh_rent.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/sh_trade.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/tour_kor_area.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/tour_kor_festival.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/tour_kor_keyword.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/tour_kor_location.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/ultra_srt_fcst.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/ultra_srt_ncst.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/datago/village_fcst.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/localdata/bakery.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/localdata/general_restaurant.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/localdata/rest_cafe.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/pandas_export.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/quickstart.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/raw_call.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/examples/search_datasets.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-179-building-registry.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-180-law-provider.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-229-bok-money-supply.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-92-datago-dur-usjnt-taboo.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-92-dur-age-taboo.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-92-dur-dosage-caution.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-92-dur-efficacy-duplication.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-92-dur-er-tablet-split-caution.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-92-dur-medication-period-caution.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-92-dur-older-adult-caution.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-92-dur-pregnancy-taboo.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/issue-92-dur-product-info.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/plans/sgis-provider-issue-150.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/batch_record.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/changelog_datasets.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/check_english_comments.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/check_fixture_authorship.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/check_readme_parity.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/check_required_checks.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/fetch_guide.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/gen_docs_examples.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/gen_example_scripts.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/gen_readme_datasets.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/gen_specs_from_catalogue.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/junit_summary.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/monthly_report.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/next_version.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/record.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/redact.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/report_drift.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/set_version.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/scripts/verify_guard.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/skills/kpubdata-dataset/SKILL.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/_hosts.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/_typing.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/catalog.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/cli.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/client.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/config.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/core/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/core/capability.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/core/protocol.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/core/representation.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/exceptions.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/_common.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/_datago_family.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/bok/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/bok/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/bok/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/datago/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/datago/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/datago/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/datago/envelope.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/fds/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/fds/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/fds/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/kipris/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/kipris/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/kipris/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/korean/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/korean/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/kosis/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/kosis/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/kosis/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/krx/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/krx/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/krx/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/law/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/law/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/law/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/localdata/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/localdata/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/lofin/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/lofin/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/lofin/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/manifest.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/neis/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/neis/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/neis/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/semas/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/semas/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/semas/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/seoul/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/seoul/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/seoul/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/seoul/datasets/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/seoul/datasets/citydata.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/seoul/datasets/park_info.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/seoul/datasets/park_usage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/seoul/envelope.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/sgis/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/sgis/adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/sgis/auth.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/providers/sgis/catalogue.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/py.typed +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/registry.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/air_quality.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/air_station.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/airkorea_forecast.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/ocean_buoy.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/offi_rent.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/offi_trade.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/rh_rent.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/sh_rent.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/sh_trade.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/ultra_srt_fcst.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/datago/ultra_srt_ncst.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/localdata/bakery.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/localdata/general_restaurant.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/specs/localdata/rest_cafe.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/transport/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/transport/_envelope.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/transport/_sensitive.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/transport/decode.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/transport/replay.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/src/kpubdata/transport/retry.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/provider_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_bok.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_client_dataset_list_contract.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_datago.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_fds.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_kipris.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_korean.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_kosis.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_krx.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_law.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_localdata.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_lofin.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_neis.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_semas.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_seoul.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/contract/test_sgis_contract.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/e2e/DATASETS.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/e2e/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/e2e/test_pipeline.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/batch-reclass.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/batch-record-datago.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/batch-record-kipris.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/batch-record-localdata.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/batch-record-semas.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/bok/bond_yield_3y_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/bok/error_auth.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/bok/money_supply_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/bok/success_empty.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/bok/success_single_page.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/bok/usd_krw_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/air_quality/seoul.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/air_quality/seoul.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/air_quality/seoul.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/air_station/baengnyeong_daily.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/air_station/baengnyeong_daily.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/air_station/baengnyeong_daily.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/air_station/gangnam_full_page.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/air_station/gangnam_full_page.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/air_station/gangnam_full_page.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/airkorea_forecast/default.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/airkorea_forecast/default.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/airkorea_forecast/default.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/apt_rent/seoul_gangnam.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/apt_rent/seoul_gangnam.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/apt_rent/seoul_gangnam.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/apt_trade/seoul_gangnam_2024_01.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/apt_trade/seoul_gangnam_2024_01.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/apt_trade/seoul_gangnam_2024_01.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/apt_trade/seoul_gangnam_2024_01_full_page.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/apt_trade/seoul_gangnam_2024_01_full_page.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/apt_trade/seoul_gangnam_2024_01_full_page.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/bus_arrival_v2.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/error_auth_30.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/error_gateway_key_not_registered.xml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/error_gateway_quota_exceeded.xml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/error_gateway_unregistered_ip.xml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/error_invalid_request_10.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/error_rate_limit_22.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/error_service_unavailable_01.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/error_xml_auth_30.xml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/hospital_info/default.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/hospital_info/default.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/hospital_info/default.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/hospital_info/with_pagination.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/hospital_info/with_pagination.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/hospital_info/with_pagination.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/metro_fare/default.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/metro_fare/default.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/metro_fare/default.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/offi_rent/seoul_gangnam.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/offi_rent/seoul_gangnam.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/offi_rent/seoul_gangnam.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/offi_trade/seoul_gangnam.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/offi_trade/seoul_gangnam.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/offi_trade/seoul_gangnam.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/rh_rent/seoul_gangnam.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/rh_rent/seoul_gangnam.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/rh_rent/seoul_gangnam.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/sh_rent/seoul_gangnam.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/sh_rent/seoul_gangnam.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/sh_rent/seoul_gangnam.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/sh_trade/seoul_gangnam.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/sh_trade/seoul_gangnam.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/sh_trade/seoul_gangnam.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_agri_price.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_airkorea_forecast.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_airkorea_station_realtime.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_apt_rent.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_apt_trade.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_asos_daily.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_asos_hourly.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_bond_price.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_culture_facility.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_dur_age_taboo.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_dur_dosage_caution.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_dur_efficacy_duplication.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_dur_er_tablet_split_caution.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_dur_medication_period_caution.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_dur_older_adult_caution.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_dur_pregnancy_taboo.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_dur_product_info.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_dur_usjnt_taboo.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_empty.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_g2b_catalog.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_g2b_contract.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_metro_fare.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_mid_fcst.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_mid_land_fcst.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_mid_sea_fcst.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_mid_ta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_multi_page_1.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_multi_page_2.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_offi_rent.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_offi_trade.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_rh_rent.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_rh_trade.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_road_traffic.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_sh_rent.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_sh_trade.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_single_item.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_single_page.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_social_enterprise.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_sports_facility.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_string_numerics.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_subway_passengers.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_tour_kor_area.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_tour_kor_festival.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_tour_kor_keyword.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_tour_kor_location.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_xml.xml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/success_xml_single_item.xml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_area/seoul_restaurants.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_area/seoul_restaurants.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_area/seoul_restaurants.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_festival/year_2026.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_festival/year_2026.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_festival/year_2026.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_keyword/gangnam_keyword.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_keyword/gangnam_keyword.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_keyword/gangnam_keyword.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_location/gangnam_1km.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_location/gangnam_1km.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/tour_kor_location/gangnam_1km.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/ultra_srt_fcst/seoul_1530.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/ultra_srt_fcst/seoul_1530.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/ultra_srt_fcst/seoul_1530.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/ultra_srt_fcst/seoul_1530_full_page.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/ultra_srt_fcst/seoul_1530_full_page.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/ultra_srt_fcst/seoul_1530_full_page.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/ultra_srt_ncst/seoul_1500.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/ultra_srt_ncst/seoul_1500.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/ultra_srt_ncst/seoul_1500.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/village_fcst/seoul_default.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/village_fcst/seoul_default.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/village_fcst/seoul_default.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/village_fcst/seoul_evening.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/village_fcst/seoul_evening.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/village_fcst/seoul_evening.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/village_fcst/xml_response.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/village_fcst/xml_response.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/datago/village_fcst/xml_response.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/fds/auth_error.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/fds/traceability_item.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/kipris/empty.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/kipris/patent_family.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/korean/auth_error.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/korean/dict_search.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/kosis/error_auth.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/kosis/industrial_production_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/kosis/success_empty.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/kosis/success_single_page.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/krx/investor_flow_5days.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/krx/kospi_index_5days.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/krx/market_valuation_5days.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/law/success_law_detail.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/law/success_law_search.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/law/success_ordin_search.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/affiliated_medical_institution_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/air_pollution_prevention_facility_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/amusement_facility_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/animal_breeding_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/animal_care_service_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/animal_crematorium_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/animal_exhibition_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/animal_funeral_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/animal_hospital_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/animal_import_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/animal_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/animal_training_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/animal_transport_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/bakery/default.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/bakery/default.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/bakery/default.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/bakery_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/barber_shop_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/beauty_salon_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/billiard_hall_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/boxing_gym_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/breeding_stock_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/building_sanitation_management_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/caregiver_training_institution_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/city_gas_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/civil_defense_water_supply_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/clinic_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/companion_animal_related_business_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/composite_game_provider_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/comprehensive_amusement_facility_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/comprehensive_resort_business_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/comprehensive_sports_facility_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/comprehensive_travel_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/container_packaging_manufacturing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/contract_foodservice_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/culture_industry_company_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/dance_academy_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/dance_hall_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/dental_lab_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/disinfection_business_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/distribution_specialized_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/domestic_international_travel_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/domestic_travel_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/door_to_door_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/ecommerce_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/edible_ice_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/electrical_construction_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/electrical_safety_management_agency_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/electricity_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/electronic_distribution_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/elevator_maintenance_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/elevator_manufacturing_import_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/emergency_patient_transport_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/empty_response.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/energy_saving_company_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/entertainment_bar_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/environmental_consulting_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/environmental_impact_assessment_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/environmental_measurement_agency_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/error_auth.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/feed_manufacturing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/fitness_center_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/food_additive_manufacturing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/food_cold_storage_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/food_manufacturing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/food_repackaging_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/food_transportation_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/food_vending_machine_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/foreign_tourist_city_homestay_lodging_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/foreign_tourist_city_homestay_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/foreigner_exclusive_entertainment_restaurant_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/free_job_placement_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/funeral_director_training_institution_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/funeral_service_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/game_distribution_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/game_manufacturing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/game_provider_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/gas_appliance_manufacturing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/general_amusement_facility_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/general_lodging_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/general_restaurant/default.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/general_restaurant/default.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/general_restaurant/default.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/general_restaurant_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/golf_course_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/golf_practice_range_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/groundwater_construction_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/groundwater_impact_assessment_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/groundwater_purification_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/group_cafeteria_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/hanok_experience_lodging_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/hanok_experience_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/hatchery_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/health_functional_food_distributor_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/health_functional_food_retail_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/health_functional_food_specialty_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/high_pressure_gas_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/horse_riding_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/hospital_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/ice_rink_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/imported_food_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/imported_livestock_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/instant_food_manufacturing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/international_conference_facility_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/international_conference_planning_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/international_freight_forwarding_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/internet_computer_game_facility_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/karaoke_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/large_store_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/laundry_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/livestock_artificial_insemination_center_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/livestock_farming_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/livestock_processing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/livestock_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/livestock_storage_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/livestock_transportation_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/log_production_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/logistics_warehouse_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/lpg_charging_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/lpg_collective_supply_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/lpg_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/mail_order_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/marine_environment_management_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/martial_arts_gym_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/medical_device_repair_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/medical_device_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/medical_foundation_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/medical_linen_processing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/medical_waste_treatment_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/meter_repair_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/milk_collection_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/motor_racing_course_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/movie_distribution_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/movie_import_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/movie_production_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/movie_screening_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/movie_theater_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/multilevel_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/music_video_distribution_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/music_video_production_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/night_soil_collection_transportation_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/noise_vibration_prevention_facility_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/onggi_manufacturing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/online_music_service_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/optical_shop_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/other_food_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/outdoor_advertising_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/paid_job_placement_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/performance_hall_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/pet_grooming_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/petroleum_import_export_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/petroleum_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/pharmacy_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/popular_culture_arts_planning_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/postpartum_care_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/prepaid_installment_trade_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/printing_house_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/public_bath_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/publisher_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/quasi_medical_business_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/record_distribution_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/record_production_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/residential_accommodation_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/rest_cafe/default.expected.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/rest_cafe/default.meta.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/rest_cafe/default.raw.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/rest_cafe_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/rural_guesthouse_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/safe_over_the_counter_drug_store_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/sanitary_product_manufacturing_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/sanitation_treatment_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/sawmill_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/singing_bar_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/ski_resort_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/slaughterhouse_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/small_hotel_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/soil_remediation_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/specialized_resort_business_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/swimming_pool_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/timber_import_distribution_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tobacco_import_sales_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tobacco_retail_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tobacco_wholesale_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourism_business_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourism_convenience_facility_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourism_duty_free_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourist_accommodation_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourist_entertainment_restaurant_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourist_excursion_boat_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourist_pension_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourist_performance_hall_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourist_restaurant_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourist_theater_entertainment_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/tourist_track_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/video_distribution_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/video_production_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/video_small_theater_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/video_viewing_room_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/video_viewing_service_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/waste_collection_transportation_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/waste_recycling_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/waste_treatment_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/water_pollution_prevention_facility_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/water_tank_cleaning_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/yacht_marina_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/localdata/youth_game_provider_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/lofin/error_auth.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/lofin/success_fiacrv.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/lofin/success_single_page.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/neis/auth_error.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/neis/empty_result.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/neis/meal_diet.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/neis/school_info.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/semas/empty_response.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/semas/error_auth.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/semas/error_invalid_request.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/semas/store_one_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/semas/upjong_large_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/semas/zone_one_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/seoul/bike_realtime_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/seoul/bike_rent_month_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/seoul/bike_station_master_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/seoul/citydata.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/seoul/empty_response.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/seoul/error_auth.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/seoul/park_info.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/seoul/park_usage.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/seoul/subway_realtime_arrival_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/sgis/auth_success.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/sgis/error_invalid_token.json +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/sgis/sido_boundary.geojson +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/sgis/sigungu_boundary.geojson +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/specs/README.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/specs/invalid_bad_enum.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/specs/invalid_bad_id.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/specs/invalid_id_mismatch.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/specs/invalid_missing_required.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/specs/valid_full.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/fixtures/specs/valid_minimal.yaml +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/README.md +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/conftest.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_bok_live.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_client_flow.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_datago_live.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_exception_propagation.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_kosis_live.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_krx_live.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_law_live.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_localdata_live.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_lofin_live.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_semas_live.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_seoul_live.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_session_features.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_sgis_live.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/integration/test_transport_http.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/conftest.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_bridge.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_dataset.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_dataset_coverage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_exceptions.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_exceptions_coverage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_executor_single_path.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_host_allowlist.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_models.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_models_fixtures.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_spec.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_to_pandas.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/core/test_version.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/bok/test_bok_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/datago/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/datago/conftest.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/datago/test_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/datago/test_adapter_coverage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/datago/test_fixtures.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/datago/test_generic.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/fds/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/fds/test_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/kipris/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/kipris/test_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/korean/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/korean/test_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/kosis/test_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/krx/test_krx_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/law/test_law_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/localdata/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/localdata/test_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/lofin/test_lofin_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/neis/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/neis/test_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/semas/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/semas/test_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/seoul/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/seoul/test_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/seoul/test_envelope.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/sgis/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/sgis/test_adapter.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/sgis/test_auth.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/test_adapter_contract.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/test_datago_family_adapters.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/providers/test_datago_family_parity.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/scripts/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/scripts/test_next_version.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/scripts/test_required_checks.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/scripts/test_set_version.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/scripts/test_validate_spec.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/scripts/test_workflow_script_references.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_builtin_manifest_conformance.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_catalog.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_catalog_coverage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_catalogue_validation.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_cli.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_client_auth.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_client_coverage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_client_transport_requirements.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_config.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_config_coverage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_failure_path_logging.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_fixture_authorship.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_junit_summary.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_logging.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_optional_dependencies_are_optional.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_probe.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_readme_parity.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_registry.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_registry_coverage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_shared_datago_key.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_verify_guard.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/test_verify_pipeline.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/__init__.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_cache.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_cache_edges.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_decode.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_decode_coverage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_error_envelope_caching.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_http_coverage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_http_coverage_extra.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_identity_retry.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_logging.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_retry.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_retry_after.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_retry_coverage.py +0 -0
- {kpubdata-0.7.0 → kpubdata-0.8.0}/tests/unit/transport/test_transport_requirements.py +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# R3 paths — changes here require CODEOWNER review (#520)
|
|
2
|
+
/.github/ @yeongseon
|
|
3
|
+
/src/kpubdata/config.py @yeongseon
|
|
4
|
+
/src/kpubdata/transport/ @yeongseon
|
|
5
|
+
/src/kpubdata/specs/schema.json @yeongseon
|
|
6
|
+
/docs/governance/ @yeongseon
|
|
7
|
+
# Credential host allowlist (#519, #629)
|
|
8
|
+
/src/kpubdata/_hosts.py @yeongseon
|
|
9
|
+
# Run by jobs holding `contents: write` — release notes, version, titles (#629)
|
|
10
|
+
/scripts/release_notes.py @yeongseon
|
|
11
|
+
/scripts/set_version.py @yeongseon
|
|
12
|
+
/scripts/next_version.py @yeongseon
|
|
13
|
+
/scripts/conventional_title.py @yeongseon
|
|
14
|
+
# Dependencies (#629)
|
|
15
|
+
/pyproject.toml @yeongseon
|
|
16
|
+
/uv.lock @yeongseon
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
|
-
PR 제목은 Conventional Commits
|
|
2
|
+
PR 제목은 Conventional Commits 형식이어야 합니다 — `PR title` 체크가 검사합니다(POLICY 2.1.3).
|
|
3
|
+
type: feat fix docs test perf refactor ci build chore style revert — 규칙 정본: docs/governance/POLICY.md 2.1.3
|
|
4
|
+
이슈 번호는 제목이 아니라 본문에 적습니다 (Closes #123). squash 병합이 PR 번호를 붙입니다.
|
|
3
5
|
예) feat: add KOSIS provider adapter
|
|
4
6
|
-->
|
|
5
7
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: Conventional title
|
|
2
|
+
description: >
|
|
3
|
+
Parse an issue or pull request title as `type(scope): description` and say which
|
|
4
|
+
`type:*` label it implies (POLICY 2.1.3). Wraps scripts/conventional_title.py so the
|
|
5
|
+
three repositories use one parser. Never fails the step — callers decide what an
|
|
6
|
+
invalid title means, because a pull request should go red and an issue should not.
|
|
7
|
+
|
|
8
|
+
inputs:
|
|
9
|
+
title:
|
|
10
|
+
description: "The title to check. Pass it from the event payload, never through `run:`"
|
|
11
|
+
required: true
|
|
12
|
+
|
|
13
|
+
outputs:
|
|
14
|
+
valid:
|
|
15
|
+
description: "true or false"
|
|
16
|
+
value: ${{ steps.run.outputs.valid }}
|
|
17
|
+
type:
|
|
18
|
+
description: "The Conventional Commits type, when valid"
|
|
19
|
+
value: ${{ steps.run.outputs.type }}
|
|
20
|
+
label:
|
|
21
|
+
description: "The type:* label the title implies, when valid"
|
|
22
|
+
value: ${{ steps.run.outputs.label }}
|
|
23
|
+
error:
|
|
24
|
+
description: "What is wrong with the title, when invalid"
|
|
25
|
+
value: ${{ steps.run.outputs.error }}
|
|
26
|
+
|
|
27
|
+
runs:
|
|
28
|
+
using: composite
|
|
29
|
+
steps:
|
|
30
|
+
# The title is attacker-controlled text. It reaches the script through an
|
|
31
|
+
# environment variable, not by expansion into the shell line.
|
|
32
|
+
- id: run
|
|
33
|
+
shell: bash
|
|
34
|
+
env:
|
|
35
|
+
TITLE: ${{ inputs.title }}
|
|
36
|
+
run: |
|
|
37
|
+
script="${{ github.action_path }}/../../../scripts/conventional_title.py"
|
|
38
|
+
if out=$(python3 "${script}" "${TITLE}" 2>/tmp/title-error); then
|
|
39
|
+
echo "valid=true" >> "$GITHUB_OUTPUT"
|
|
40
|
+
echo "${out}" >> "$GITHUB_OUTPUT"
|
|
41
|
+
else
|
|
42
|
+
echo "valid=false" >> "$GITHUB_OUTPUT"
|
|
43
|
+
echo "error=$(sed 's/^::error:://' /tmp/title-error | head -1)" >> "$GITHUB_OUTPUT"
|
|
44
|
+
fi
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
name: Release notes
|
|
2
|
+
description: >
|
|
3
|
+
Take a release's notes from its CHANGELOG section, or put that section in place.
|
|
4
|
+
Wraps scripts/release_notes.py so the three repositories call one implementation.
|
|
5
|
+
`extract` fails when the section is missing or empty, so a release without notes
|
|
6
|
+
stops before a tag exists.
|
|
7
|
+
|
|
8
|
+
inputs:
|
|
9
|
+
command:
|
|
10
|
+
description: "promote (prepare job) or extract (release job)"
|
|
11
|
+
required: true
|
|
12
|
+
version:
|
|
13
|
+
description: "The version being released, with or without the leading v"
|
|
14
|
+
required: true
|
|
15
|
+
changelog:
|
|
16
|
+
description: "Path to the CHANGELOG"
|
|
17
|
+
required: false
|
|
18
|
+
default: CHANGELOG.md
|
|
19
|
+
output:
|
|
20
|
+
description: "Where extract writes the notes (default: the runner's temp directory)"
|
|
21
|
+
required: false
|
|
22
|
+
default: ""
|
|
23
|
+
|
|
24
|
+
outputs:
|
|
25
|
+
file:
|
|
26
|
+
description: "The notes file (extract only)"
|
|
27
|
+
value: ${{ steps.run.outputs.file }}
|
|
28
|
+
prerelease:
|
|
29
|
+
description: "true when the version is a pre-release (aN, bN, rcN) — pass --prerelease to gh release create (#622)"
|
|
30
|
+
value: ${{ steps.run.outputs.prerelease }}
|
|
31
|
+
|
|
32
|
+
runs:
|
|
33
|
+
using: composite
|
|
34
|
+
steps:
|
|
35
|
+
# The link at the bottom compares against the previous release tag. A first
|
|
36
|
+
# release has none, so it links the history up to the new tag instead — the tag
|
|
37
|
+
# does not exist yet while this runs, but will by the time anyone clicks.
|
|
38
|
+
- id: run
|
|
39
|
+
shell: bash
|
|
40
|
+
env:
|
|
41
|
+
COMMAND: ${{ inputs.command }}
|
|
42
|
+
VERSION: ${{ inputs.version }}
|
|
43
|
+
CHANGELOG: ${{ inputs.changelog }}
|
|
44
|
+
OUTPUT: ${{ inputs.output }}
|
|
45
|
+
REPO: ${{ github.repository }}
|
|
46
|
+
run: |
|
|
47
|
+
script="${{ github.action_path }}/../../../scripts/release_notes.py"
|
|
48
|
+
if [ "${COMMAND}" = "promote" ]; then
|
|
49
|
+
python3 "${script}" promote "${VERSION}" --changelog "${CHANGELOG}"
|
|
50
|
+
exit $?
|
|
51
|
+
fi
|
|
52
|
+
OUTPUT="${OUTPUT:-${RUNNER_TEMP}/release-notes.md}"
|
|
53
|
+
tag="v${VERSION#v}"
|
|
54
|
+
prerelease=$(python3 "${script}" prerelease "${VERSION}")
|
|
55
|
+
echo "prerelease=${prerelease}" >> "$GITHUB_OUTPUT"
|
|
56
|
+
# A final release's notes fold in its pre-releases (#622), so its link
|
|
57
|
+
# compares against the previous final release, not the last pre-release.
|
|
58
|
+
exclude=()
|
|
59
|
+
if [ "${prerelease}" = "false" ]; then
|
|
60
|
+
exclude=(--exclude 'v*[a-z]*')
|
|
61
|
+
fi
|
|
62
|
+
previous=$(git describe --tags --abbrev=0 --match 'v[0-9]*' "${exclude[@]}" HEAD 2>/dev/null || true)
|
|
63
|
+
if [ -n "${previous}" ] && [ "${previous}" != "${tag}" ]; then
|
|
64
|
+
compare="https://github.com/${REPO}/compare/${previous}...${tag}"
|
|
65
|
+
else
|
|
66
|
+
compare="https://github.com/${REPO}/commits/${tag}"
|
|
67
|
+
fi
|
|
68
|
+
python3 "${script}" extract "${VERSION}" --changelog "${CHANGELOG}" \
|
|
69
|
+
--compare-url "${compare}" --output "${OUTPUT}"
|
|
70
|
+
echo "file=${OUTPUT}" >> "$GITHUB_OUTPUT"
|
|
71
|
+
echo "notes for ${tag}:"
|
|
72
|
+
cat "${OUTPUT}"
|
|
@@ -117,9 +117,12 @@ jobs:
|
|
|
117
117
|
gh issue edit "$ISSUE_NUMBER" --add-label needs-human || true
|
|
118
118
|
exit 1
|
|
119
119
|
fi
|
|
120
|
-
|
|
120
|
+
# The title names the dataset, not the issue: POLICY 2.1.3 keeps issue numbers
|
|
121
|
+
# in the body (`Closes #N`), and a squash merge appends the PR number itself.
|
|
122
|
+
git commit -m "feat(datasets): add ${DATASET:-a requested dataset} via the agent procedure" \
|
|
123
|
+
-m "Refs #$ISSUE_NUMBER"
|
|
121
124
|
git push origin "$BRANCH"
|
|
122
|
-
gh pr create --title "
|
|
125
|
+
gh pr create --title "feat(datasets): add ${DATASET:-a requested dataset} via the agent procedure" \
|
|
123
126
|
--body "에이전트 절차 산출물 — verify 통과 확인 후 사람 리뷰. Closes #$ISSUE_NUMBER" \
|
|
124
127
|
--label agent-generated || true
|
|
125
128
|
|
|
@@ -37,6 +37,9 @@ jobs:
|
|
|
37
37
|
- name: Install dependencies
|
|
38
38
|
run: uv sync --frozen --extra dev
|
|
39
39
|
|
|
40
|
+
- name: Lockfile matches pyproject
|
|
41
|
+
run: uv lock --check
|
|
42
|
+
|
|
40
43
|
- name: Ruff check
|
|
41
44
|
run: uv run ruff check .
|
|
42
45
|
|
|
@@ -69,6 +72,11 @@ jobs:
|
|
|
69
72
|
- name: README parity
|
|
70
73
|
run: uv run python scripts/check_readme_parity.py
|
|
71
74
|
|
|
75
|
+
# ADR 0007 Rules 1-2: KPubData never depends on KPubData Builder or Studio.
|
|
76
|
+
# Dependencies flow Studio -> Builder -> KPubData only (#668).
|
|
77
|
+
- name: Independence (no Builder or Studio dependency)
|
|
78
|
+
run: uv run python scripts/check_independence.py
|
|
79
|
+
|
|
72
80
|
# fixture 는 "이 데이터셋은 검증됐다" 의 근거다. 판정 대상이 근거를 고칠 수
|
|
73
81
|
# 있으면 판정이 반증 불가능해진다 (#497, #523).
|
|
74
82
|
- name: Recorded evidence authorship
|
|
@@ -284,10 +292,39 @@ jobs:
|
|
|
284
292
|
#
|
|
285
293
|
# `spec-changes` is left out on purpose: it is a summary for the reviewer, not a
|
|
286
294
|
# verdict, and a gate that fails on it would block a pull request over a report.
|
|
295
|
+
secret-scan:
|
|
296
|
+
name: Secret scan (gitleaks)
|
|
297
|
+
runs-on: ubuntu-latest
|
|
298
|
+
timeout-minutes: 10
|
|
299
|
+
env:
|
|
300
|
+
GITLEAKS_VERSION: "8.28.0"
|
|
301
|
+
# sha256 of gitleaks_8.28.0_linux_x64.tar.gz from the release's checksums file,
|
|
302
|
+
# pinned here so a tampered release cannot also swap its own checksum.
|
|
303
|
+
GITLEAKS_SHA256: "a65b5253807a68ac0cafa4414031fd740aeb55f54fb7e55f386acb52e6a840eb"
|
|
304
|
+
steps:
|
|
305
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
306
|
+
with:
|
|
307
|
+
fetch-depth: 0 # history, not just the tip: a key removed later is still leaked
|
|
308
|
+
|
|
309
|
+
# The pinned binary rather than gitleaks-action, which needs a licence key for
|
|
310
|
+
# organisations — a secret added in order to scan for secrets.
|
|
311
|
+
- name: Install gitleaks
|
|
312
|
+
run: |
|
|
313
|
+
archive="gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz"
|
|
314
|
+
curl -sSfL -o "${archive}" \
|
|
315
|
+
"https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/${archive}"
|
|
316
|
+
echo "${GITLEAKS_SHA256} ${archive}" | sha256sum -c -
|
|
317
|
+
tar xzf "${archive}" gitleaks
|
|
318
|
+
|
|
319
|
+
# A leaked credential is never acceptable to merge, so this job is one of
|
|
320
|
+
# `CI gate`'s needs (#631). The dependency audit and CodeQL live in security.yml.
|
|
321
|
+
- name: Scan the full history
|
|
322
|
+
run: ./gitleaks git . --redact --no-banner --log-level info
|
|
323
|
+
|
|
287
324
|
gate:
|
|
288
325
|
name: CI gate
|
|
289
326
|
runs-on: ubuntu-latest
|
|
290
|
-
needs: [quality, test, coverage, build, base-install, docs]
|
|
327
|
+
needs: [quality, test, coverage, build, base-install, docs, secret-scan]
|
|
291
328
|
# `always()` so a failed job still reaches this step. Without it the gate is
|
|
292
329
|
# skipped when something upstream fails, and a skipped required check is the same
|
|
293
330
|
# absence this job exists to remove.
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
# Build and publish the distribution. Two ways in, and neither of them pushes to main.
|
|
2
2
|
#
|
|
3
3
|
# release: published — a release made by hand in the GitHub UI
|
|
4
|
-
#
|
|
4
|
+
# workflow_dispatch — after release.yml has tagged (see below)
|
|
5
|
+
#
|
|
6
|
+
# **This has to stay the top-level workflow.** PyPI's trusted publisher matches the
|
|
7
|
+
# OIDC certificate's Build Config URI, which names the workflow GitHub *started*, not
|
|
8
|
+
# the one that ran. Calling this from release.yml as a reusable workflow made the
|
|
9
|
+
# certificate say `release.yml` and PyPI refused v0.7.0:
|
|
10
|
+
#
|
|
11
|
+
# Certificate's Build Config URI (.../workflows/release.yml@refs/heads/main)
|
|
12
|
+
# does not match expected Trusted Publisher (publish-pypi.yml @ yeongseon/kpubdata)
|
|
13
|
+
#
|
|
14
|
+
# So release.yml tags and creates the GitHub Release, and this is dispatched against
|
|
15
|
+
# that tag. One more click, no secret and no change to the PyPI account. Adding
|
|
16
|
+
# release.yml as a second trusted publisher on PyPI would remove the click; that is a
|
|
17
|
+
# change only the account owner can make (#593).
|
|
5
18
|
#
|
|
6
19
|
# The version bump used to live here and committed straight to main (#586). Branch
|
|
7
20
|
# protection refuses that now, and it should: the tag was created *before* the gates
|
|
@@ -12,10 +25,10 @@ on:
|
|
|
12
25
|
release:
|
|
13
26
|
types: [published]
|
|
14
27
|
|
|
15
|
-
|
|
28
|
+
workflow_dispatch:
|
|
16
29
|
inputs:
|
|
17
30
|
ref:
|
|
18
|
-
description: "Tag
|
|
31
|
+
description: "Tag to build and publish, e.g. v0.7.0"
|
|
19
32
|
required: true
|
|
20
33
|
type: string
|
|
21
34
|
|
|
@@ -102,6 +102,16 @@ jobs:
|
|
|
102
102
|
with:
|
|
103
103
|
version: ${{ steps.bump.outputs.new_version }}
|
|
104
104
|
|
|
105
|
+
# The release pull request carries its own CHANGELOG change: `[Unreleased]` becomes
|
|
106
|
+
# this version, dated. 0.7.0 shipped with its entries still under `[Unreleased]`
|
|
107
|
+
# because nothing did this. An empty `[Unreleased]` stops here, before a branch.
|
|
108
|
+
- name: Date the CHANGELOG section
|
|
109
|
+
if: ${{ !inputs.dry_run }}
|
|
110
|
+
uses: ./.github/actions/release-notes
|
|
111
|
+
with:
|
|
112
|
+
command: promote
|
|
113
|
+
version: ${{ steps.bump.outputs.new_version }}
|
|
114
|
+
|
|
105
115
|
- name: Show what changed
|
|
106
116
|
if: ${{ !inputs.dry_run }}
|
|
107
117
|
run: git --no-pager diff --stat
|
|
@@ -204,6 +214,16 @@ jobs:
|
|
|
204
214
|
fi
|
|
205
215
|
echo "${TAG} is free"
|
|
206
216
|
|
|
217
|
+
# The notes are the CHANGELOG section, not a list of pull request titles. Taken
|
|
218
|
+
# before the gates so a missing or empty section stops the release while there
|
|
219
|
+
# is still nothing to clean up.
|
|
220
|
+
- name: Release notes from the CHANGELOG
|
|
221
|
+
id: notes
|
|
222
|
+
uses: ./.github/actions/release-notes
|
|
223
|
+
with:
|
|
224
|
+
command: extract
|
|
225
|
+
version: ${{ steps.tag.outputs.tag }}
|
|
226
|
+
|
|
207
227
|
- name: Install dependencies
|
|
208
228
|
run: uv sync --frozen --extra dev
|
|
209
229
|
|
|
@@ -225,18 +245,22 @@ jobs:
|
|
|
225
245
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
226
246
|
git tag "${TAG}"
|
|
227
247
|
git push origin "${TAG}"
|
|
228
|
-
gh release create "${TAG}" --title "${TAG}"
|
|
248
|
+
gh release create "${TAG}" --title "${TAG}" \
|
|
249
|
+
--notes-file "${{ steps.notes.outputs.file }}" \
|
|
229
250
|
--target "${{ steps.commit.outputs.sha }}"
|
|
230
251
|
|
|
231
|
-
|
|
232
|
-
|
|
252
|
+
# Publishing is not called from here. PyPI's trusted publisher matches the
|
|
253
|
+
# workflow GitHub started, so a reusable call made the certificate say
|
|
254
|
+
# `release.yml` and the upload was refused. publish-pypi.yml is dispatched against
|
|
255
|
+
# the tag this job created — see its header, and #593 for removing the extra step.
|
|
256
|
+
say-what-is-next:
|
|
257
|
+
name: Say what to do next
|
|
233
258
|
needs: [release]
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
secrets: inherit
|
|
259
|
+
runs-on: ubuntu-latest
|
|
260
|
+
steps:
|
|
261
|
+
- name: Next step
|
|
262
|
+
env:
|
|
263
|
+
TAG: ${{ needs.release.outputs.tag }}
|
|
264
|
+
run: |
|
|
265
|
+
echo "::notice::${TAG} is tagged and released. Publish it with:"
|
|
266
|
+
echo "::notice:: gh workflow run publish-pypi.yml -f ref=${TAG}"
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: Security
|
|
2
|
+
|
|
3
|
+
# Supply-chain checks (kpubdata-builder#691). Two questions, one job each:
|
|
4
|
+
#
|
|
5
|
+
# dependency audit does anything uv.lock installs have a known vulnerability?
|
|
6
|
+
# CodeQL does the Python source have a known-dangerous pattern?
|
|
7
|
+
#
|
|
8
|
+
# They run on every pull request and push to main, and weekly, because a dependency
|
|
9
|
+
# gains an advisory without anyone touching this repository. Neither gates merges yet:
|
|
10
|
+
# whether a new advisory should block every open pull request is the owner's decision
|
|
11
|
+
# left open in #631. The secret scan does gate merges — it runs in ci.yml under
|
|
12
|
+
# `CI gate`, because a leaked credential is never acceptable to merge.
|
|
13
|
+
#
|
|
14
|
+
# Actions are pinned by commit SHA, the same SHAs kpubdata-builder uses.
|
|
15
|
+
|
|
16
|
+
on:
|
|
17
|
+
push:
|
|
18
|
+
branches: [main]
|
|
19
|
+
pull_request:
|
|
20
|
+
branches: [main]
|
|
21
|
+
schedule:
|
|
22
|
+
- cron: "17 3 * * 1" # Monday 03:17 UTC
|
|
23
|
+
workflow_dispatch:
|
|
24
|
+
|
|
25
|
+
permissions:
|
|
26
|
+
contents: read
|
|
27
|
+
|
|
28
|
+
concurrency:
|
|
29
|
+
group: security-${{ github.ref }}
|
|
30
|
+
cancel-in-progress: true
|
|
31
|
+
|
|
32
|
+
jobs:
|
|
33
|
+
dependency-audit:
|
|
34
|
+
name: Dependency audit (pip-audit, Python ${{ matrix.python }})
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
timeout-minutes: 10
|
|
37
|
+
strategy:
|
|
38
|
+
fail-fast: false
|
|
39
|
+
matrix:
|
|
40
|
+
# The lock resolves differently on each side of `python_full_version < '3.12'`
|
|
41
|
+
# (anyio, typing-extensions), and `uv export` keeps the markers, which pip-audit
|
|
42
|
+
# evaluates against the interpreter it runs on. Auditing on 3.10 and 3.12 covers
|
|
43
|
+
# both sides.
|
|
44
|
+
python: ["3.10", "3.12"]
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
47
|
+
- uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
|
|
48
|
+
|
|
49
|
+
# Every extra: an optional dependency is still installed by whoever asks for it.
|
|
50
|
+
# --no-deps: the export is already the full, pinned closure.
|
|
51
|
+
- name: Audit the locked dependencies
|
|
52
|
+
env:
|
|
53
|
+
PYTHON: ${{ matrix.python }}
|
|
54
|
+
run: |
|
|
55
|
+
uv export --frozen --no-hashes --no-emit-project --all-extras -o requirements.txt
|
|
56
|
+
uvx --python "${PYTHON}" pip-audit==2.10.1 -r requirements.txt --no-deps --disable-pip \
|
|
57
|
+
--progress-spinner off
|
|
58
|
+
|
|
59
|
+
codeql:
|
|
60
|
+
name: CodeQL (python)
|
|
61
|
+
runs-on: ubuntu-latest
|
|
62
|
+
timeout-minutes: 20
|
|
63
|
+
permissions:
|
|
64
|
+
contents: read
|
|
65
|
+
security-events: write
|
|
66
|
+
steps:
|
|
67
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
68
|
+
- uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
|
|
69
|
+
with:
|
|
70
|
+
languages: python
|
|
71
|
+
build-mode: none
|
|
72
|
+
- uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2
|
|
73
|
+
with:
|
|
74
|
+
category: /language:python
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Titles carry the change type; the `type:*` label follows (POLICY 2.1.3).
|
|
2
|
+
#
|
|
3
|
+
# pull_request the title must be `type(scope): description`, or this check fails.
|
|
4
|
+
# A squash merge turns the title into the commit, and the commit into
|
|
5
|
+
# the CHANGELOG entry someone writes from it.
|
|
6
|
+
# issues a valid title sets the matching `type:*` label and removes every other
|
|
7
|
+
# `type:*` label, including `type:refactor` and `type:architecture` from
|
|
8
|
+
# before POLICY 2.1.3, so an issue carries exactly one. An invalid one gets one comment saying what to change, which
|
|
9
|
+
# is deleted once the title is fixed. Issues are never failed: the
|
|
10
|
+
# person filing a bug should not see a red cross for it.
|
|
11
|
+
#
|
|
12
|
+
# Nobody sets `type:*` by hand. A label set by hand is a second place for the type to
|
|
13
|
+
# live, and POLICY 2.1 says why that goes stale.
|
|
14
|
+
name: Titles
|
|
15
|
+
|
|
16
|
+
on:
|
|
17
|
+
pull_request:
|
|
18
|
+
types: [opened, edited, reopened, synchronize]
|
|
19
|
+
issues:
|
|
20
|
+
types: [opened, edited, reopened]
|
|
21
|
+
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
pull-request:
|
|
27
|
+
name: PR title
|
|
28
|
+
if: github.event_name == 'pull_request'
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
timeout-minutes: 5
|
|
31
|
+
steps:
|
|
32
|
+
# The action is this repository's own, so it has to be checked out first. The
|
|
33
|
+
# other two repositories reference it remotely and need no checkout.
|
|
34
|
+
- uses: actions/checkout@v7
|
|
35
|
+
|
|
36
|
+
- name: Parse the title
|
|
37
|
+
id: title
|
|
38
|
+
uses: ./.github/actions/conventional-title
|
|
39
|
+
with:
|
|
40
|
+
title: ${{ github.event.pull_request.title }}
|
|
41
|
+
|
|
42
|
+
- name: The title must follow the convention
|
|
43
|
+
env:
|
|
44
|
+
VALID: ${{ steps.title.outputs.valid }}
|
|
45
|
+
ERROR: ${{ steps.title.outputs.error }}
|
|
46
|
+
LABEL: ${{ steps.title.outputs.label }}
|
|
47
|
+
run: |
|
|
48
|
+
if [ "${VALID}" != "true" ]; then
|
|
49
|
+
echo "::error::${ERROR}"
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
|
52
|
+
echo "title ok (${LABEL})"
|
|
53
|
+
|
|
54
|
+
issue:
|
|
55
|
+
name: Issue type label
|
|
56
|
+
# `edited` also fires for body edits. Only a title change can change the type.
|
|
57
|
+
if: >-
|
|
58
|
+
github.event_name == 'issues' &&
|
|
59
|
+
(github.event.action != 'edited' || github.event.changes.title != null)
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
timeout-minutes: 5
|
|
62
|
+
permissions:
|
|
63
|
+
contents: read
|
|
64
|
+
issues: write
|
|
65
|
+
steps:
|
|
66
|
+
# The action is this repository's own, so it has to be checked out first. The
|
|
67
|
+
# other two repositories reference it remotely and need no checkout.
|
|
68
|
+
- uses: actions/checkout@v7
|
|
69
|
+
|
|
70
|
+
- name: Parse the title
|
|
71
|
+
id: title
|
|
72
|
+
uses: ./.github/actions/conventional-title
|
|
73
|
+
with:
|
|
74
|
+
title: ${{ github.event.issue.title }}
|
|
75
|
+
|
|
76
|
+
- name: Set the type label from the title
|
|
77
|
+
if: steps.title.outputs.valid == 'true'
|
|
78
|
+
env:
|
|
79
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
80
|
+
REPO: ${{ github.repository }}
|
|
81
|
+
NUMBER: ${{ github.event.issue.number }}
|
|
82
|
+
LABEL: ${{ steps.title.outputs.label }}
|
|
83
|
+
run: |
|
|
84
|
+
# The four labels POLICY 2.1.3 derives. Created when missing, so a repository
|
|
85
|
+
# that never had `type:chore` does not fail here — no other label is made.
|
|
86
|
+
declare -A colour=(
|
|
87
|
+
[type:bug]=d73a4a [type:feature]=a2eeef [type:docs]=0075ca [type:chore]=cfd3d7
|
|
88
|
+
)
|
|
89
|
+
if ! gh label list --repo "${REPO}" --limit 200 --json name -q '.[].name' \
|
|
90
|
+
| grep -qxF "${LABEL}"; then
|
|
91
|
+
gh label create "${LABEL}" --repo "${REPO}" --color "${colour[$LABEL]}" \
|
|
92
|
+
--description "Set from the title prefix (POLICY 2.1.3). Do not set by hand."
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
args=(--add-label "${LABEL}")
|
|
96
|
+
while IFS= read -r current; do
|
|
97
|
+
if [[ "${current}" == type:* ]] && [ "${current}" != "${LABEL}" ]; then
|
|
98
|
+
args+=(--remove-label "${current}")
|
|
99
|
+
fi
|
|
100
|
+
done < <(gh issue view "${NUMBER}" --repo "${REPO}" --json labels -q '.labels[].name')
|
|
101
|
+
gh issue edit "${NUMBER}" --repo "${REPO}" "${args[@]}"
|
|
102
|
+
echo "#${NUMBER} → ${LABEL}"
|
|
103
|
+
|
|
104
|
+
# One comment, found again by its marker: said once when the title is wrong,
|
|
105
|
+
# removed when it is right, so a fixed issue carries no stale advice.
|
|
106
|
+
- name: Say what the title needs, or take the note back
|
|
107
|
+
env:
|
|
108
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
109
|
+
REPO: ${{ github.repository }}
|
|
110
|
+
NUMBER: ${{ github.event.issue.number }}
|
|
111
|
+
VALID: ${{ steps.title.outputs.valid }}
|
|
112
|
+
ERROR: ${{ steps.title.outputs.error }}
|
|
113
|
+
run: |
|
|
114
|
+
# pipefail, and no `| head -1`: a failed `gh api` used to vanish behind the pipe
|
|
115
|
+
# and read as "no comment yet", which posted the note twice (#628).
|
|
116
|
+
set -euo pipefail
|
|
117
|
+
marker="<!-- title-check -->"
|
|
118
|
+
ids=$(gh api "repos/${REPO}/issues/${NUMBER}/comments" --paginate \
|
|
119
|
+
-q ".[] | select(.body | startswith(\"${marker}\")) | .id")
|
|
120
|
+
existing="${ids%%$'\n'*}"
|
|
121
|
+
if [ "${VALID}" = "true" ]; then
|
|
122
|
+
if [ -n "${existing}" ]; then
|
|
123
|
+
gh api -X DELETE "repos/${REPO}/issues/comments/${existing}"
|
|
124
|
+
fi
|
|
125
|
+
exit 0
|
|
126
|
+
fi
|
|
127
|
+
if [ -z "${existing}" ]; then
|
|
128
|
+
printf '%s\n' "${marker}" \
|
|
129
|
+
"이슈 제목은 \`type(scope): 설명\` 형식으로 씁니다 (POLICY 2.1.3)." \
|
|
130
|
+
"예: \`fix(localdata): empty wrapper becomes a phantom row\`" "" \
|
|
131
|
+
"> ${ERROR}" "" \
|
|
132
|
+
"제목을 고치면 \`type:*\` 라벨이 자동으로 붙고 이 댓글은 지워집니다." \
|
|
133
|
+
> "${RUNNER_TEMP}/comment.md"
|
|
134
|
+
gh issue comment "${NUMBER}" --repo "${REPO}" --body-file "${RUNNER_TEMP}/comment.md"
|
|
135
|
+
fi
|