kpubdata 0.3.0__tar.gz → 0.4.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.
Files changed (407) hide show
  1. {kpubdata-0.3.0 → kpubdata-0.4.0}/ARCHITECTURE.md +3 -3
  2. {kpubdata-0.3.0 → kpubdata-0.4.0}/CHANGELOG.md +30 -3
  3. {kpubdata-0.3.0 → kpubdata-0.4.0}/PKG-INFO +24 -4
  4. {kpubdata-0.3.0 → kpubdata-0.4.0}/README.md +23 -3
  5. kpubdata-0.4.0/ROADMAP.md +101 -0
  6. {kpubdata-0.3.0 → kpubdata-0.4.0}/SUPPORTED_DATA.md +18 -1
  7. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/product-family-architecture.md +10 -9
  8. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/providers/datago.md +15 -9
  9. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/quickstart.md +8 -0
  10. {kpubdata-0.3.0 → kpubdata-0.4.0}/pyproject.toml +1 -1
  11. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/__init__.py +3 -1
  12. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/client.py +1 -0
  13. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/config.py +3 -0
  14. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/datago/adapter.py +31 -7
  15. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/localdata/adapter.py +1 -1
  16. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/lofin/adapter.py +1 -1
  17. kpubdata-0.4.0/src/kpubdata/providers/semas/__init__.py +3 -0
  18. kpubdata-0.4.0/src/kpubdata/providers/semas/adapter.py +333 -0
  19. kpubdata-0.4.0/src/kpubdata/providers/semas/catalogue.json +665 -0
  20. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/contract/test_localdata.py +1 -1
  21. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/contract/test_lofin.py +4 -4
  22. kpubdata-0.4.0/tests/contract/test_semas.py +90 -0
  23. kpubdata-0.4.0/tests/fixtures/semas/empty_response.json +14 -0
  24. kpubdata-0.4.0/tests/fixtures/semas/error_auth.json +14 -0
  25. kpubdata-0.4.0/tests/fixtures/semas/error_invalid_request.json +14 -0
  26. kpubdata-0.4.0/tests/fixtures/semas/store_one_success.json +138 -0
  27. kpubdata-0.4.0/tests/fixtures/semas/upjong_large_success.json +27 -0
  28. kpubdata-0.4.0/tests/fixtures/semas/zone_one_success.json +39 -0
  29. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/test_datago_live.py +14 -3
  30. kpubdata-0.4.0/tests/unit/core/test_version.py +10 -0
  31. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/datago/test_adapter.py +32 -0
  32. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/localdata/test_adapter.py +3 -3
  33. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/lofin/test_lofin_adapter.py +1 -1
  34. kpubdata-0.4.0/tests/unit/providers/semas/test_adapter.py +204 -0
  35. kpubdata-0.4.0/tests/unit/transport/__init__.py +0 -0
  36. {kpubdata-0.3.0 → kpubdata-0.4.0}/uv.lock +1 -1
  37. kpubdata-0.3.0/ROADMAP.md +0 -55
  38. {kpubdata-0.3.0 → kpubdata-0.4.0}/.github/ISSUE_TEMPLATE/new-provider-adapter.yml +0 -0
  39. {kpubdata-0.3.0 → kpubdata-0.4.0}/.github/workflows/ci.yml +0 -0
  40. {kpubdata-0.3.0 → kpubdata-0.4.0}/.github/workflows/integration.yml +0 -0
  41. {kpubdata-0.3.0 → kpubdata-0.4.0}/.github/workflows/publish-pypi.yml +0 -0
  42. {kpubdata-0.3.0 → kpubdata-0.4.0}/.gitignore +0 -0
  43. {kpubdata-0.3.0 → kpubdata-0.4.0}/AGENTS.md +0 -0
  44. {kpubdata-0.3.0 → kpubdata-0.4.0}/API_SPEC.md +0 -0
  45. {kpubdata-0.3.0 → kpubdata-0.4.0}/CANONICAL_MODEL.md +0 -0
  46. {kpubdata-0.3.0 → kpubdata-0.4.0}/CONTRIBUTING.md +0 -0
  47. {kpubdata-0.3.0 → kpubdata-0.4.0}/LICENSE +0 -0
  48. {kpubdata-0.3.0 → kpubdata-0.4.0}/PACKAGING.md +0 -0
  49. {kpubdata-0.3.0 → kpubdata-0.4.0}/PRD.md +0 -0
  50. {kpubdata-0.3.0 → kpubdata-0.4.0}/PROVIDER_ADAPTER_CONTRACT.md +0 -0
  51. {kpubdata-0.3.0 → kpubdata-0.4.0}/VALIDATION.md +0 -0
  52. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/adrs/0001-dialect-inspired-architecture.md +0 -0
  53. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/adrs/0002-standardize-ux-not-native-shape.md +0 -0
  54. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/architecture-diagrams.md +0 -0
  55. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/caching.md +0 -0
  56. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/cli.md +0 -0
  57. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/datago-api-reference.md +0 -0
  58. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/logging.md +0 -0
  59. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/providers/bok.md +0 -0
  60. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/providers/kosis.md +0 -0
  61. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/providers/seoul.md +0 -0
  62. {kpubdata-0.3.0 → kpubdata-0.4.0}/docs/tutorial-ai-agent-workflow.md +0 -0
  63. {kpubdata-0.3.0 → kpubdata-0.4.0}/plans/sgis-provider-issue-150.md +0 -0
  64. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/catalog.py +0 -0
  65. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/cli.py +0 -0
  66. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/core/__init__.py +0 -0
  67. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/core/capability.py +0 -0
  68. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/core/dataset.py +0 -0
  69. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/core/models.py +0 -0
  70. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/core/protocol.py +0 -0
  71. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/core/representation.py +0 -0
  72. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/exceptions.py +0 -0
  73. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/__init__.py +0 -0
  74. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/_common.py +0 -0
  75. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/bok/__init__.py +0 -0
  76. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/bok/adapter.py +0 -0
  77. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/bok/catalogue.json +0 -0
  78. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/datago/__init__.py +0 -0
  79. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/datago/catalogue.json +0 -0
  80. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/kosis/__init__.py +0 -0
  81. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/kosis/adapter.py +0 -0
  82. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/kosis/catalogue.json +0 -0
  83. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/localdata/__init__.py +0 -0
  84. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/localdata/catalogue.json +0 -0
  85. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/lofin/__init__.py +0 -0
  86. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/lofin/catalogue.json +0 -0
  87. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/seoul/__init__.py +0 -0
  88. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/seoul/adapter.py +0 -0
  89. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/seoul/catalogue.json +0 -0
  90. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/sgis/__init__.py +0 -0
  91. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/sgis/adapter.py +0 -0
  92. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/sgis/auth.py +0 -0
  93. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/providers/sgis/catalogue.json +0 -0
  94. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/py.typed +0 -0
  95. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/registry.py +0 -0
  96. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/transport/__init__.py +0 -0
  97. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/transport/cache.py +0 -0
  98. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/transport/decode.py +0 -0
  99. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/transport/http.py +0 -0
  100. {kpubdata-0.3.0 → kpubdata-0.4.0}/src/kpubdata/transport/retry.py +0 -0
  101. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/__init__.py +0 -0
  102. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/contract/__init__.py +0 -0
  103. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/contract/provider_adapter.py +0 -0
  104. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/contract/test_bok.py +0 -0
  105. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/contract/test_datago.py +0 -0
  106. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/contract/test_kosis.py +0 -0
  107. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/contract/test_seoul.py +0 -0
  108. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/contract/test_sgis_contract.py +0 -0
  109. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/bok/error_auth.json +0 -0
  110. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/bok/success_empty.json +0 -0
  111. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/bok/success_single_page.json +0 -0
  112. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/bus_arrival_v2.json +0 -0
  113. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/error_auth_30.json +0 -0
  114. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/error_invalid_request_10.json +0 -0
  115. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/error_rate_limit_22.json +0 -0
  116. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/error_service_unavailable_01.json +0 -0
  117. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/error_xml_auth_30.xml +0 -0
  118. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_apt_rent.json +0 -0
  119. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_apt_trade.json +0 -0
  120. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_empty.json +0 -0
  121. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_metro_fare.json +0 -0
  122. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_metro_path.json +0 -0
  123. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_multi_page_1.json +0 -0
  124. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_multi_page_2.json +0 -0
  125. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_offi_rent.json +0 -0
  126. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_offi_trade.json +0 -0
  127. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_rh_rent.json +0 -0
  128. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_rh_trade.json +0 -0
  129. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_sh_rent.json +0 -0
  130. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_sh_trade.json +0 -0
  131. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_single_item.json +0 -0
  132. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_single_page.json +0 -0
  133. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_string_numerics.json +0 -0
  134. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_tour_kor_area.json +0 -0
  135. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_tour_kor_festival.json +0 -0
  136. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_tour_kor_keyword.json +0 -0
  137. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_tour_kor_location.json +0 -0
  138. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_xml.xml +0 -0
  139. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/datago/success_xml_single_item.xml +0 -0
  140. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/kosis/error_auth.json +0 -0
  141. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/kosis/success_empty.json +0 -0
  142. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/kosis/success_single_page.json +0 -0
  143. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/affiliated_medical_institution_success.json +0 -0
  144. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/air_pollution_prevention_facility_success.json +0 -0
  145. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/amusement_facility_success.json +0 -0
  146. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/animal_breeding_success.json +0 -0
  147. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/animal_care_service_success.json +0 -0
  148. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/animal_crematorium_success.json +0 -0
  149. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/animal_exhibition_success.json +0 -0
  150. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/animal_funeral_success.json +0 -0
  151. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/animal_hospital_success.json +0 -0
  152. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/animal_import_success.json +0 -0
  153. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/animal_sales_success.json +0 -0
  154. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/animal_training_success.json +0 -0
  155. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/animal_transport_success.json +0 -0
  156. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/bakery_success.json +0 -0
  157. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/barber_shop_success.json +0 -0
  158. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/beauty_salon_success.json +0 -0
  159. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/billiard_hall_success.json +0 -0
  160. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/boxing_gym_success.json +0 -0
  161. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/breeding_stock_success.json +0 -0
  162. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/building_sanitation_management_success.json +0 -0
  163. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/caregiver_training_institution_success.json +0 -0
  164. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/city_gas_success.json +0 -0
  165. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/civil_defense_water_supply_success.json +0 -0
  166. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/clinic_success.json +0 -0
  167. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/companion_animal_related_business_success.json +0 -0
  168. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/composite_game_provider_success.json +0 -0
  169. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/comprehensive_amusement_facility_success.json +0 -0
  170. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/comprehensive_resort_business_success.json +0 -0
  171. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/comprehensive_sports_facility_success.json +0 -0
  172. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/comprehensive_travel_success.json +0 -0
  173. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/container_packaging_manufacturing_success.json +0 -0
  174. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/contract_foodservice_success.json +0 -0
  175. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/culture_industry_company_success.json +0 -0
  176. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/dance_academy_success.json +0 -0
  177. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/dance_hall_success.json +0 -0
  178. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/dental_lab_success.json +0 -0
  179. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/disinfection_business_success.json +0 -0
  180. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/distribution_specialized_sales_success.json +0 -0
  181. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/domestic_international_travel_success.json +0 -0
  182. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/domestic_travel_success.json +0 -0
  183. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/door_to_door_sales_success.json +0 -0
  184. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/ecommerce_success.json +0 -0
  185. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/edible_ice_sales_success.json +0 -0
  186. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/electrical_construction_success.json +0 -0
  187. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/electrical_safety_management_agency_success.json +0 -0
  188. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/electricity_sales_success.json +0 -0
  189. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/electronic_distribution_success.json +0 -0
  190. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/elevator_maintenance_success.json +0 -0
  191. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/elevator_manufacturing_import_success.json +0 -0
  192. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/emergency_patient_transport_success.json +0 -0
  193. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/empty_response.json +0 -0
  194. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/energy_saving_company_success.json +0 -0
  195. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/entertainment_bar_success.json +0 -0
  196. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/environmental_consulting_success.json +0 -0
  197. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/environmental_impact_assessment_success.json +0 -0
  198. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/environmental_measurement_agency_success.json +0 -0
  199. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/error_auth.json +0 -0
  200. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/feed_manufacturing_success.json +0 -0
  201. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/fitness_center_success.json +0 -0
  202. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/food_additive_manufacturing_success.json +0 -0
  203. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/food_cold_storage_success.json +0 -0
  204. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/food_manufacturing_success.json +0 -0
  205. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/food_repackaging_success.json +0 -0
  206. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/food_transportation_success.json +0 -0
  207. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/food_vending_machine_success.json +0 -0
  208. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/foreign_tourist_city_homestay_lodging_success.json +0 -0
  209. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/foreign_tourist_city_homestay_success.json +0 -0
  210. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/foreigner_exclusive_entertainment_restaurant_success.json +0 -0
  211. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/free_job_placement_success.json +0 -0
  212. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/funeral_director_training_institution_success.json +0 -0
  213. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/funeral_service_success.json +0 -0
  214. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/game_distribution_success.json +0 -0
  215. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/game_manufacturing_success.json +0 -0
  216. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/game_provider_success.json +0 -0
  217. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/gas_appliance_manufacturing_success.json +0 -0
  218. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/general_amusement_facility_success.json +0 -0
  219. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/general_lodging_success.json +0 -0
  220. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/general_restaurant_success.json +0 -0
  221. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/golf_course_success.json +0 -0
  222. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/golf_practice_range_success.json +0 -0
  223. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/groundwater_construction_success.json +0 -0
  224. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/groundwater_impact_assessment_success.json +0 -0
  225. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/groundwater_purification_success.json +0 -0
  226. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/group_cafeteria_success.json +0 -0
  227. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/hanok_experience_lodging_success.json +0 -0
  228. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/hanok_experience_success.json +0 -0
  229. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/hatchery_success.json +0 -0
  230. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/health_functional_food_distributor_success.json +0 -0
  231. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/health_functional_food_retail_success.json +0 -0
  232. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/health_functional_food_specialty_success.json +0 -0
  233. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/high_pressure_gas_success.json +0 -0
  234. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/horse_riding_success.json +0 -0
  235. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/hospital_success.json +0 -0
  236. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/ice_rink_success.json +0 -0
  237. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/imported_food_sales_success.json +0 -0
  238. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/imported_livestock_sales_success.json +0 -0
  239. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/instant_food_manufacturing_success.json +0 -0
  240. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/international_conference_facility_success.json +0 -0
  241. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/international_conference_planning_success.json +0 -0
  242. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/international_freight_forwarding_success.json +0 -0
  243. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/internet_computer_game_facility_success.json +0 -0
  244. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/karaoke_success.json +0 -0
  245. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/large_store_success.json +0 -0
  246. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/laundry_success.json +0 -0
  247. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/livestock_artificial_insemination_center_success.json +0 -0
  248. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/livestock_farming_success.json +0 -0
  249. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/livestock_processing_success.json +0 -0
  250. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/livestock_sales_success.json +0 -0
  251. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/livestock_storage_success.json +0 -0
  252. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/livestock_transportation_success.json +0 -0
  253. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/log_production_success.json +0 -0
  254. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/logistics_warehouse_success.json +0 -0
  255. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/lpg_charging_success.json +0 -0
  256. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/lpg_collective_supply_success.json +0 -0
  257. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/lpg_sales_success.json +0 -0
  258. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/mail_order_sales_success.json +0 -0
  259. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/marine_environment_management_success.json +0 -0
  260. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/martial_arts_gym_success.json +0 -0
  261. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/medical_device_repair_success.json +0 -0
  262. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/medical_device_sales_success.json +0 -0
  263. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/medical_foundation_success.json +0 -0
  264. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/medical_linen_processing_success.json +0 -0
  265. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/medical_waste_treatment_success.json +0 -0
  266. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/meter_repair_success.json +0 -0
  267. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/milk_collection_success.json +0 -0
  268. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/motor_racing_course_success.json +0 -0
  269. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/movie_distribution_success.json +0 -0
  270. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/movie_import_success.json +0 -0
  271. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/movie_production_success.json +0 -0
  272. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/movie_screening_success.json +0 -0
  273. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/movie_theater_success.json +0 -0
  274. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/multilevel_sales_success.json +0 -0
  275. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/music_video_distribution_success.json +0 -0
  276. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/music_video_production_success.json +0 -0
  277. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/night_soil_collection_transportation_success.json +0 -0
  278. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/noise_vibration_prevention_facility_success.json +0 -0
  279. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/onggi_manufacturing_success.json +0 -0
  280. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/online_music_service_success.json +0 -0
  281. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/optical_shop_success.json +0 -0
  282. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/other_food_sales_success.json +0 -0
  283. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/outdoor_advertising_success.json +0 -0
  284. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/paid_job_placement_success.json +0 -0
  285. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/performance_hall_success.json +0 -0
  286. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/pet_grooming_success.json +0 -0
  287. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/petroleum_import_export_success.json +0 -0
  288. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/petroleum_sales_success.json +0 -0
  289. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/pharmacy_success.json +0 -0
  290. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/popular_culture_arts_planning_success.json +0 -0
  291. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/postpartum_care_success.json +0 -0
  292. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/prepaid_installment_trade_success.json +0 -0
  293. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/printing_house_success.json +0 -0
  294. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/public_bath_success.json +0 -0
  295. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/publisher_success.json +0 -0
  296. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/quasi_medical_business_success.json +0 -0
  297. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/record_distribution_success.json +0 -0
  298. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/record_production_success.json +0 -0
  299. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/residential_accommodation_success.json +0 -0
  300. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/rest_cafe_success.json +0 -0
  301. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/rural_guesthouse_success.json +0 -0
  302. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/safe_over_the_counter_drug_store_success.json +0 -0
  303. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/sanitary_product_manufacturing_success.json +0 -0
  304. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/sanitation_treatment_success.json +0 -0
  305. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/sawmill_success.json +0 -0
  306. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/singing_bar_success.json +0 -0
  307. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/ski_resort_success.json +0 -0
  308. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/slaughterhouse_success.json +0 -0
  309. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/small_hotel_success.json +0 -0
  310. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/soil_remediation_success.json +0 -0
  311. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/specialized_resort_business_success.json +0 -0
  312. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/swimming_pool_success.json +0 -0
  313. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/timber_import_distribution_success.json +0 -0
  314. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tobacco_import_sales_success.json +0 -0
  315. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tobacco_retail_success.json +0 -0
  316. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tobacco_wholesale_success.json +0 -0
  317. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourism_business_success.json +0 -0
  318. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourism_convenience_facility_success.json +0 -0
  319. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourism_duty_free_success.json +0 -0
  320. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourist_accommodation_success.json +0 -0
  321. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourist_entertainment_restaurant_success.json +0 -0
  322. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourist_excursion_boat_success.json +0 -0
  323. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourist_pension_success.json +0 -0
  324. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourist_performance_hall_success.json +0 -0
  325. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourist_restaurant_success.json +0 -0
  326. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourist_theater_entertainment_success.json +0 -0
  327. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/tourist_track_success.json +0 -0
  328. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/video_distribution_success.json +0 -0
  329. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/video_production_success.json +0 -0
  330. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/video_small_theater_success.json +0 -0
  331. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/video_viewing_room_success.json +0 -0
  332. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/video_viewing_service_success.json +0 -0
  333. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/waste_collection_transportation_success.json +0 -0
  334. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/waste_recycling_success.json +0 -0
  335. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/waste_treatment_success.json +0 -0
  336. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/water_pollution_prevention_facility_success.json +0 -0
  337. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/water_tank_cleaning_success.json +0 -0
  338. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/yacht_marina_success.json +0 -0
  339. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/localdata/youth_game_provider_success.json +0 -0
  340. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/lofin/error_auth.json +0 -0
  341. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/lofin/success_fiacrv.json +0 -0
  342. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/lofin/success_single_page.json +0 -0
  343. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/seoul/bike_rent_month_success.json +0 -0
  344. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/seoul/empty_response.json +0 -0
  345. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/seoul/error_auth.json +0 -0
  346. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/seoul/subway_realtime_arrival_success.json +0 -0
  347. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/sgis/auth_success.json +0 -0
  348. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/sgis/error_invalid_token.json +0 -0
  349. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/sgis/sido_boundary.geojson +0 -0
  350. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/fixtures/sgis/sigungu_boundary.geojson +0 -0
  351. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/README.md +0 -0
  352. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/__init__.py +0 -0
  353. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/conftest.py +0 -0
  354. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/test_bok_live.py +0 -0
  355. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/test_client_flow.py +0 -0
  356. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/test_exception_propagation.py +0 -0
  357. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/test_kosis_live.py +0 -0
  358. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/test_localdata_live.py +0 -0
  359. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/test_lofin_live.py +0 -0
  360. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/test_seoul_live.py +0 -0
  361. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/integration/test_transport_http.py +0 -0
  362. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/__init__.py +0 -0
  363. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/core/__init__.py +0 -0
  364. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/core/test_dataset.py +0 -0
  365. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/core/test_dataset_coverage.py +0 -0
  366. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/core/test_exceptions.py +0 -0
  367. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/core/test_exceptions_coverage.py +0 -0
  368. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/core/test_models.py +0 -0
  369. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/core/test_models_fixtures.py +0 -0
  370. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/core/test_to_pandas.py +0 -0
  371. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/__init__.py +0 -0
  372. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/bok/test_bok_adapter.py +0 -0
  373. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/datago/__init__.py +0 -0
  374. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/datago/conftest.py +0 -0
  375. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/datago/test_adapter_coverage.py +0 -0
  376. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/datago/test_fixtures.py +0 -0
  377. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/datago/test_generic.py +0 -0
  378. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/kosis/test_adapter.py +0 -0
  379. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/localdata/__init__.py +0 -0
  380. {kpubdata-0.3.0/tests/unit/providers/seoul → kpubdata-0.4.0/tests/unit/providers/semas}/__init__.py +0 -0
  381. {kpubdata-0.3.0/tests/unit/transport → kpubdata-0.4.0/tests/unit/providers/seoul}/__init__.py +0 -0
  382. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/seoul/test_adapter.py +0 -0
  383. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/sgis/__init__.py +0 -0
  384. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/sgis/test_adapter.py +0 -0
  385. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/providers/sgis/test_auth.py +0 -0
  386. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_catalog.py +0 -0
  387. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_catalog_coverage.py +0 -0
  388. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_catalogue_validation.py +0 -0
  389. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_cli.py +0 -0
  390. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_client_coverage.py +0 -0
  391. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_client_transport_requirements.py +0 -0
  392. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_config.py +0 -0
  393. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_config_coverage.py +0 -0
  394. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_failure_path_logging.py +0 -0
  395. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_logging.py +0 -0
  396. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_registry.py +0 -0
  397. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/test_registry_coverage.py +0 -0
  398. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/transport/test_cache.py +0 -0
  399. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/transport/test_decode.py +0 -0
  400. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/transport/test_decode_coverage.py +0 -0
  401. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/transport/test_http_coverage.py +0 -0
  402. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/transport/test_http_coverage_extra.py +0 -0
  403. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/transport/test_logging.py +0 -0
  404. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/transport/test_retry.py +0 -0
  405. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/transport/test_retry_after.py +0 -0
  406. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/transport/test_retry_coverage.py +0 -0
  407. {kpubdata-0.3.0 → kpubdata-0.4.0}/tests/unit/transport/test_transport_requirements.py +0 -0
@@ -349,9 +349,10 @@ Not part of the core runtime contract.
349
349
  Examples:
350
350
 
351
351
  - pandas export
352
- - MCP adapter
353
352
  - plugin loaders
354
353
 
354
+ MCP adapter는 별도 레포(kpubdata-mcp 등)로 분리합니다. 코어 런타임에 포함하지 않습니다.
355
+
355
356
  ## 4. Main abstractions
356
357
 
357
358
  ### 4.1 Client
@@ -475,7 +476,7 @@ src/kpubdata/
475
476
  mappings.py
476
477
  adapters/
477
478
  pandas.py
478
- mcp.py
479
+ # MCP adapter는 별도 레포(kpubdata-mcp 등)로 분리
479
480
  ```
480
481
 
481
482
  ## 9. Execution flow
@@ -546,4 +547,3 @@ Do **not** change the core just because one adapter is weird.
546
547
  | :--- | :--- | :--- |
547
548
  | [kpubdata-builder](https://github.com/yeongseon/kpubdata-builder) | [ARCHITECTURE.md](https://github.com/yeongseon/kpubdata-builder/blob/main/ARCHITECTURE.md) | Builder 아키텍처 |
548
549
  | [kpubdata-studio](https://github.com/yeongseon/kpubdata-studio) | [ARCHITECTURE.md](https://github.com/yeongseon/kpubdata-studio/blob/main/ARCHITECTURE.md) | Studio 아키텍처 |
549
-
@@ -7,7 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [0.3.0] - 2025-04-22
10
+ ## [0.3.1] - 2026-04-23
11
+
12
+ ### Fixed
13
+ - Source `__version__` from `importlib.metadata` instead of hardcoded string (#127)
14
+ - Add 활용신청 (activation request) hint to datago 403 `AuthError` and document API key activation requirement (#128)
15
+ - Add required parameters to metro integration tests (#140)
16
+
17
+ ## [0.3.0] - 2026-04-22
11
18
 
12
19
  ### Added
13
20
  - `localdata` provider: expand permit datasets from 26 to **195**, covering all official KSIC categories — health (13), animal (18), culture (53), living (26), food (32), resources & environment (37), other (16)
@@ -19,7 +26,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
19
26
  - Unit and contract tests plus SGIS fixture responses for boundary and auth/error scenarios
20
27
  - Full fixture, unit test, and contract test coverage for all 195 localdata datasets
21
28
 
22
- ## [0.2.0] - 2025-04-17
29
+ ## [0.2.3] - 2026-04-19
30
+
31
+ ### Fixed
32
+ - `LofinAdapter` SSL context ignored when `Client` passes shared transport
33
+
34
+ ### Added
35
+ - 7 real estate transaction datasets to datago provider (`apt_rent`, `offi_trade`, `offi_rent`, `rh_trade`, `rh_rent`, `sh_trade`, `sh_rent`)
36
+ - Treat `resultCode` `'000'` as success for RTMS endpoints
37
+
38
+ ## [0.2.2] - 2026-04-17
39
+
40
+ ### Added
41
+ - Cursor pagination support and pagination documentation
42
+
43
+ ## [0.2.1] - 2026-04-17
44
+
45
+ ### Added
46
+ - `SUPPORTED_DATA.md` 실API 최종 검증일 컬럼 추가
47
+ - Single-page pagination contract and `list_all()` implementation
48
+
49
+ ## [0.2.0] - 2026-04-17
23
50
 
24
51
  ### Added
25
52
  - Single-page pagination contract for all adapters (datago, bok, lofin, kosis)
@@ -35,7 +62,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
35
62
  - Unreachable single-record adapter stubs
36
63
  - Single-record access from the provider and dataset public APIs
37
64
 
38
- ## [0.1.0] - 2025-04-10
65
+ ## [0.1.0] - 2026-04-10
39
66
 
40
67
  ### Added
41
68
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kpubdata
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: Dialect-inspired Python access framework for Korean public data
5
5
  Author: Yeongseon Choe
6
6
  License: MIT
@@ -166,6 +166,11 @@ KPubData가 지원하는 각 기관의 API 키를 발급받아 [환경 변수](h
166
166
  - **절차**: 회원가입 → 지방행정인허가 Open API(일반음식점/휴게음식점) 활용신청 → 승인 후 인증키 확인
167
167
  - **환경 변수**: `KPUBDATA_LOCALDATA_API_KEY`
168
168
 
169
+ #### 소상공인시장진흥공단 상가(상권)정보 (data.go.kr) — `semas`
170
+ - **가입 URL**: [https://www.data.go.kr](https://www.data.go.kr)
171
+ - **절차**: 회원가입 → 소상공인시장진흥공단 상가(상권)정보 Open API 활용신청 → 승인 후 인증키 확인
172
+ - **환경 변수**: `KPUBDATA_SEMAS_API_KEY`
173
+
169
174
  #### 서울 열린데이터광장 (data.seoul.go.kr) — `seoul`
170
175
  - **가입 URL**: [https://data.seoul.go.kr/](https://data.seoul.go.kr/)
171
176
  - **절차**: 회원가입 → 원하는 Open API 페이지에서 인증키 신청/확인 → 마이페이지에서 발급 키 확인
@@ -198,6 +203,9 @@ export KPUBDATA_LOFIN_API_KEY="your-lofin-api-key"
198
203
  # 지방행정인허가
199
204
  export KPUBDATA_LOCALDATA_API_KEY="your-localdata-service-key"
200
205
 
206
+ # 소상공인시장진흥공단 상가(상권)정보
207
+ export KPUBDATA_SEMAS_API_KEY="your-semas-service-key"
208
+
201
209
  # 서울 열린데이터광장
202
210
  export KPUBDATA_SEOUL_API_KEY="your-seoul-api-key"
203
211
 
@@ -221,6 +229,7 @@ client = Client(provider_keys={
221
229
  "kosis": "YOUR_KOSIS_API_KEY",
222
230
  "lofin": "YOUR_LOFIN_API_KEY",
223
231
  "localdata": "YOUR_DATA_GO_KR_API_KEY",
232
+ "semas": "YOUR_SEMAS_API_KEY",
224
233
  "seoul": "YOUR_SEOUL_API_KEY",
225
234
  "sgis": "YOUR_SGIS_CONSUMER_KEY:YOUR_SGIS_CONSUMER_SECRET",
226
235
  })
@@ -349,7 +358,18 @@ for item in result.items:
349
358
  print(item["BPLC_NM"], item["ROAD_NM_ADDR"])
350
359
  ```
351
360
 
352
- ### 10. 전체 페이지 자동 조회 (list_all)
361
+ ### 10. 소상공인 상가정보 조회 (Semas)
362
+
363
+ ```python
364
+ client = Client(provider_keys={"semas": "YOUR_SEMAS_API_KEY"})
365
+ ds = client.dataset("semas.store_radius")
366
+ result = ds.list(cx="127.02758", cy="37.49794", radius="250", page_size=10)
367
+
368
+ for item in result.items:
369
+ print(item["bizesNm"], item["rdnmAdr"])
370
+ ```
371
+
372
+ ### 11. 전체 페이지 자동 조회 (list_all)
353
373
 
354
374
  대량의 데이터를 페이지 단위로 자동 순회하려면 `list_all()`을 사용합니다.
355
375
 
@@ -363,7 +383,7 @@ for batch in ds.list_all(fyr="2024"):
363
383
  print(item)
364
384
  ```
365
385
 
366
- ### 11. pandas DataFrame 변환
386
+ ### 12. pandas DataFrame 변환
367
387
 
368
388
  조회 결과를 pandas DataFrame으로 변환하여 분석할 수 있습니다.
369
389
 
@@ -494,4 +514,4 @@ KPubData의 설계 철학과 사용 방법을 안내하는 문서 목록입니
494
514
  - [Pandas](https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html)(데이터 분석용 파이썬 라이브러리) 데이터프레임 변환 어댑터 추가
495
515
 
496
516
  ### v0.3
497
- - 표준 코어를 기반으로 한 경량 [MCP](https://modelcontextprotocol.io/)(Model Context Protocol — AI 모델이 외부 도구를 사용하는 표준 규약) 어댑터 지원
517
+ - Provider 확장 (지역 기반 추가 데이터셋)
@@ -129,6 +129,11 @@ KPubData가 지원하는 각 기관의 API 키를 발급받아 [환경 변수](h
129
129
  - **절차**: 회원가입 → 지방행정인허가 Open API(일반음식점/휴게음식점) 활용신청 → 승인 후 인증키 확인
130
130
  - **환경 변수**: `KPUBDATA_LOCALDATA_API_KEY`
131
131
 
132
+ #### 소상공인시장진흥공단 상가(상권)정보 (data.go.kr) — `semas`
133
+ - **가입 URL**: [https://www.data.go.kr](https://www.data.go.kr)
134
+ - **절차**: 회원가입 → 소상공인시장진흥공단 상가(상권)정보 Open API 활용신청 → 승인 후 인증키 확인
135
+ - **환경 변수**: `KPUBDATA_SEMAS_API_KEY`
136
+
132
137
  #### 서울 열린데이터광장 (data.seoul.go.kr) — `seoul`
133
138
  - **가입 URL**: [https://data.seoul.go.kr/](https://data.seoul.go.kr/)
134
139
  - **절차**: 회원가입 → 원하는 Open API 페이지에서 인증키 신청/확인 → 마이페이지에서 발급 키 확인
@@ -161,6 +166,9 @@ export KPUBDATA_LOFIN_API_KEY="your-lofin-api-key"
161
166
  # 지방행정인허가
162
167
  export KPUBDATA_LOCALDATA_API_KEY="your-localdata-service-key"
163
168
 
169
+ # 소상공인시장진흥공단 상가(상권)정보
170
+ export KPUBDATA_SEMAS_API_KEY="your-semas-service-key"
171
+
164
172
  # 서울 열린데이터광장
165
173
  export KPUBDATA_SEOUL_API_KEY="your-seoul-api-key"
166
174
 
@@ -184,6 +192,7 @@ client = Client(provider_keys={
184
192
  "kosis": "YOUR_KOSIS_API_KEY",
185
193
  "lofin": "YOUR_LOFIN_API_KEY",
186
194
  "localdata": "YOUR_DATA_GO_KR_API_KEY",
195
+ "semas": "YOUR_SEMAS_API_KEY",
187
196
  "seoul": "YOUR_SEOUL_API_KEY",
188
197
  "sgis": "YOUR_SGIS_CONSUMER_KEY:YOUR_SGIS_CONSUMER_SECRET",
189
198
  })
@@ -312,7 +321,18 @@ for item in result.items:
312
321
  print(item["BPLC_NM"], item["ROAD_NM_ADDR"])
313
322
  ```
314
323
 
315
- ### 10. 전체 페이지 자동 조회 (list_all)
324
+ ### 10. 소상공인 상가정보 조회 (Semas)
325
+
326
+ ```python
327
+ client = Client(provider_keys={"semas": "YOUR_SEMAS_API_KEY"})
328
+ ds = client.dataset("semas.store_radius")
329
+ result = ds.list(cx="127.02758", cy="37.49794", radius="250", page_size=10)
330
+
331
+ for item in result.items:
332
+ print(item["bizesNm"], item["rdnmAdr"])
333
+ ```
334
+
335
+ ### 11. 전체 페이지 자동 조회 (list_all)
316
336
 
317
337
  대량의 데이터를 페이지 단위로 자동 순회하려면 `list_all()`을 사용합니다.
318
338
 
@@ -326,7 +346,7 @@ for batch in ds.list_all(fyr="2024"):
326
346
  print(item)
327
347
  ```
328
348
 
329
- ### 11. pandas DataFrame 변환
349
+ ### 12. pandas DataFrame 변환
330
350
 
331
351
  조회 결과를 pandas DataFrame으로 변환하여 분석할 수 있습니다.
332
352
 
@@ -457,4 +477,4 @@ KPubData의 설계 철학과 사용 방법을 안내하는 문서 목록입니
457
477
  - [Pandas](https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html)(데이터 분석용 파이썬 라이브러리) 데이터프레임 변환 어댑터 추가
458
478
 
459
479
  ### v0.3
460
- - 표준 코어를 기반으로 한 경량 [MCP](https://modelcontextprotocol.io/)(Model Context Protocol — AI 모델이 외부 도구를 사용하는 표준 규약) 어댑터 지원
480
+ - Provider 확장 (지역 기반 추가 데이터셋)
@@ -0,0 +1,101 @@
1
+ # Roadmap — KPubData
2
+
3
+ > kpubdata는 **한국 공공데이터 접근 코어 프레임워크**에 집중합니다.
4
+ > MCP, HTTP API 등 서비스 레이어는 본체에 포함하지 않으며, 필요 시 별도 레포(`kpubdata-mcp` 등)로 분리합니다.
5
+
6
+ ## 개발 3축
7
+
8
+ | 축 | 설명 | 대표 이슈 |
9
+ | :--- | :--- | :--- |
10
+ | **Core** | 핵심 계약(contract), 스키마, 메타데이터, discovery 안정화 | #55, #57, #63 |
11
+ | **Plugin Ecosystem** | entry-point plugin discovery, provider scaffolding 도구 | #112, #61 |
12
+ | **Provider Adapters** | 기관별 어댑터 확장 (datago, localdata, semas, bok, ...) | #87-#94, #161-#168 |
13
+
14
+ ---
15
+
16
+ ## v0.1 ✅
17
+
18
+ Foundation release.
19
+
20
+ - finalize core contracts
21
+ - implement transport skeleton
22
+ - implement 3 distinct adapters (datago, bok, kosis)
23
+ - support XML + JSON
24
+ - support discovery + list + raw
25
+ - ship docs and contract tests
26
+
27
+ ## v0.2 ✅
28
+
29
+ Stabilization and ergonomics.
30
+
31
+ - dataset metadata enrichment
32
+ - schema improvements
33
+ - pandas adapter (`to_pandas()`)
34
+ - single-page pagination contract + `list_all()`
35
+ - more examples and documentation
36
+
37
+ ## v0.3 ✅
38
+
39
+ Provider expansion.
40
+
41
+ - localdata provider: 195개 인허가 데이터셋
42
+ - sgis provider: 행정구역 경계 GeoJSON
43
+ - semas provider: 상가(상권)정보 17개 데이터셋
44
+ - seoul provider: 지하철 실시간, 따릉이
45
+ - lofin provider: 6개 재정 데이터셋
46
+ - datago provider: 부동산 실거래가, 관광, 지하철 어댑터 추가
47
+
48
+ ## v0.4 — Core 안정화
49
+
50
+ - dataset metadata enrichment (#55)
51
+ - schema improvements (#57)
52
+ - more robust discovery (#63)
53
+ - documentation (#59, #172)
54
+ - integration tests (#80)
55
+
56
+ ## v0.5 — Provider 확장
57
+
58
+ - datago: 실시간 도로교통정보 (#87), 농수축산물 가격정보 (#88)
59
+ - datago: 건축물대장 (#90), 사업자등록 상태조회 (#91)
60
+ - datago: 의약품 안전사용정보 (#92), 지하철역별 승하차 인원 (#93)
61
+ - datago: 기상청 중기예보 (#94)
62
+ - datago: 워크넷 채용정보 (#161), 긴급재난문자 (#162), 채권시세정보 (#163)
63
+ - datago: NEIS 급식식단정보 (#164), 식품이력추적 (#165), 전국체육시설 (#166)
64
+ - datago: 문화시설 (#167), 환경소음 측정망 (#168)
65
+
66
+ ## v1.0 criteria
67
+
68
+ - public API feels stable
69
+ - adapter contract proven across multiple provider families (7+ providers)
70
+ - plugin discovery로 외부 provider 패키지 등록 가능
71
+ - docs/examples sufficient for external users
72
+ - breakage policy and versioning discipline established
73
+
74
+ ---
75
+
76
+ ## 본체에 포함하지 않는 것
77
+
78
+ 아래 항목은 kpubdata 코어에 넣지 않습니다. 필요 시 product family 별도 레포로 분리합니다.
79
+
80
+ | 항목 | 분리 대상 레포 | 상태 |
81
+ | :--- | :--- | :--- |
82
+ | MCP adapter | `kpubdata-mcp` | 미생성 (필요 시 분리) |
83
+ | HTTP/REST API 서비스 | `kpubdata-api` | 미생성 (필요 시 분리) |
84
+ | LLM tool schema / agent helper | `kpubdata-mcp` | 미생성 (필요 시 분리) |
85
+
86
+ ---
87
+
88
+ ## 관련 문서
89
+
90
+ ### 이 저장소 내 문서
91
+ | 문서 | 설명 |
92
+ | :--- | :--- |
93
+ | [PRD.md](./PRD.md) | 제품 요구사항 정의 |
94
+ | [ARCHITECTURE.md](./ARCHITECTURE.md) | 시스템 아키텍처 설계 |
95
+ | [API_SPEC.md](./API_SPEC.md) | 파이썬 API 명세 |
96
+
97
+ ### KPubData Product Family
98
+ | 저장소 | 문서 | 설명 |
99
+ | :--- | :--- | :--- |
100
+ | [kpubdata-builder](https://github.com/yeongseon/kpubdata-builder) | [ROADMAP.md](https://github.com/yeongseon/kpubdata-builder/blob/main/ROADMAP.md) | Builder 로드맵 |
101
+ | [kpubdata-studio](https://github.com/yeongseon/kpubdata-studio) | [ROADMAP.md](https://github.com/yeongseon/kpubdata-studio/blob/main/ROADMAP.md) | Studio 로드맵 |
@@ -235,10 +235,27 @@
235
235
  | 지원 | 테스트 검증 | - | 지방행정인허가 (`localdata`) | `caregiver_training_institution` | 요양보호사교육기관 인허가 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 행정안전부 제공, 기타/전문교육기관 |
236
236
  | 지원 | 테스트 검증 | - | 지방행정인허가 (`localdata`) | `funeral_director_training_institution` | 장례지도사교육기관 인허가 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 행정안전부 제공, 기타/전문교육기관 |
237
237
  | 지원 | 테스트 검증 | - | 지방행정인허가 (`localdata`) | `free_job_placement` | 무료직업소개소 인허가 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 행정안전부 제공, 기타/사무지원 |
238
- | 지원 | 테스트 검증 | - | 지방행정인허가 (`localdata`) | `paid_job_placement` | 유료직업소개소 인허가 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 행정안전부 제공, 기타/사무지원 | 스키장업 인허가 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 행정안전부 제공, KSIC R93 |
238
+ | 지원 | 테스트 검증 | - | 지방행정인허가 (`localdata`) | `paid_job_placement` | 유료직업소개소 인허가 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 행정안전부 제공, 기타/사무지원 |
239
239
  | 지원 | 테스트 검증 | - | 통계청 통계지리정보서비스 (`sgis`) | `boundary.sido` | 시도 행정구역 경계 | SGIS `consumer_key` + `consumer_secret` | [sgis.kostat.go.kr](https://sgis.kostat.go.kr/developer/html/main.html) | GeoJSON FeatureCollection 응답을 레코드 단위(`items`)로 정규화 |
240
240
  | 지원 | 테스트 검증 | - | 통계청 통계지리정보서비스 (`sgis`) | `boundary.sigungu` | 시군구 행정구역 경계 | SGIS `consumer_key` + `consumer_secret` | [sgis.kostat.go.kr](https://sgis.kostat.go.kr/developer/html/main.html) | `boundary/hadmarea.geojson` + `low_search` 기반 조회 |
241
241
  | 지원 | 테스트 검증 | - | 통계청 통계지리정보서비스 (`sgis`) | `boundary.emd` | 읍면동 행정구역 경계 | SGIS `consumer_key` + `consumer_secret` | [sgis.kostat.go.kr](https://sgis.kostat.go.kr/developer/html/main.html) | fixture/contract 검증 완료, 실API 검증은 후속 |
242
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `zone_one` | 지정상권 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeZoneOne` |
243
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `zone_radius` | 반경상권 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeZoneInRadius` |
244
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `zone_rect` | 사각형상권 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeZoneInRectangle` |
245
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `zone_admi` | 행정구역상권 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeZoneInAdmi` |
246
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `store_one` | 단일상가 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeOne` |
247
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `store_building` | 건물상가 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeListInBuilding` |
248
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `store_pnu` | 지번상가 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeListInPnu` |
249
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `store_dong` | 행정동상가 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeListInDong` |
250
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `store_area` | 상권상가 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeListInArea` |
251
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `store_radius` | 반경상가 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeListInRadius` |
252
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `store_rect` | 사각형상가 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeListInRectangle` |
253
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `store_polygon` | 다각형상가 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeListInPolygon` |
254
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `store_upjong` | 업종별상가 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeListInUpjong` |
255
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `store_date` | 수정일자상가 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `storeListByDate` |
256
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `upjong_large` | 업종대분류 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `largeUpjongList` |
257
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `upjong_middle` | 업종중분류 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `middleUpjongList` |
258
+ | 지원 | 테스트 검증 | - | 소상공인시장진흥공단 (`semas`) | `upjong_small` | 업종소분류 조회 | [공공데이터포털](https://www.data.go.kr) 서비스키 | [data.go.kr](https://www.data.go.kr) | 상가(상권)정보 API / `smallUpjongList` |
242
259
  | 지원 | 테스트 검증 | - | 서울 열린데이터광장 (`seoul`) | `subway_realtime_arrival` | 서울시 지하철 실시간 도착정보 | [서울 열린데이터광장](https://data.seoul.go.kr/) 인증키 | [data.seoul.go.kr](https://data.seoul.go.kr/) | 경로 기반 인증키 + 서비스별 top-level envelope |
243
260
  | 지원 | 테스트 검증 | - | 서울 열린데이터광장 (`seoul`) | `bike_rent_month` | 서울시 공공자전거 이용정보(월별) | [서울 열린데이터광장](https://data.seoul.go.kr/) 인증키 | [data.seoul.go.kr](https://data.seoul.go.kr/) | 경로 기반 인증키 + 인덱스 페이지네이션 |
244
261
  | 지원 | 실API 검증 | 2025-04-15 | 한국은행 ECOS (`bok`) | `base_rate` | 한국은행 기준금리 | [ECOS](https://ecos.bok.or.kr/api/) 인증키 | [ecos.bok.or.kr](https://ecos.bok.or.kr/api/) | |
@@ -8,7 +8,7 @@ KPubData Product Family(Korea Public Data Product Family)는 한국 공공데이
8
8
  | :--- | :--- | :--- |
9
9
  | [kpubdata](https://github.com/yeongseon/kpubdata) | 공공데이터를 가져오고 표준화하는 코어 라이브러리 | Python 3.10+ |
10
10
  | [kpubdata-builder](https://github.com/yeongseon/kpubdata-builder) | 수집된 데이터를 다양한 형식으로 가공하는 빌드 파이프라인 | Python 3.10+ |
11
- | [kpubdata-studio](https://github.com/yeongseon/kpubdata-studio) | 빌드 과정을 시각적으로 관리하는 웹 대시보드 | Next.js 15 + TypeScript |
11
+ | [kpubdata-studio](https://github.com/yeongseon/kpubdata-studio) | 빌드 과정을 시각적으로 관리하는 웹 대시보드 | Vite + React Router + TypeScript (SPA) |
12
12
 
13
13
  ---
14
14
 
@@ -52,7 +52,7 @@ graph TD
52
52
  U3([파이썬 개발자]) -->|Python SDK| Core
53
53
 
54
54
  subgraph "KPubData Product Family"
55
- Studio["kpubdata-studio<br/>웹 대시보드<br/>(Next.js 15 + TypeScript)"]
55
+ Studio["kpubdata-studio<br/>웹 대시보드<br/>(Vite + React Router + TypeScript (SPA))"]
56
56
  Builder["kpubdata-builder<br/>데이터 빌드 파이프라인<br/>(Python 3.10+)"]
57
57
  Core["kpubdata<br/>데이터 접속 코어<br/>(Python 3.10+)"]
58
58
  end
@@ -180,9 +180,9 @@ graph LR
180
180
  | 항목 | kpubdata | kpubdata-builder | kpubdata-studio |
181
181
  | :--- | :--- | :--- | :--- |
182
182
  | **언어** | [Python](https://docs.python.org/ko/3/tutorial/) 3.10+ | [Python](https://docs.python.org/ko/3/tutorial/) 3.10+ | [TypeScript](https://www.typescriptlang.org/ko/docs/) 5 |
183
- | **프레임워크** | — (순수 라이브러리) | — (CLI + 라이브러리) | [Next.js](https://nextjs.org/docs) 15 |
183
+ | **프레임워크** | — (순수 라이브러리) | — (CLI + 라이브러리) | [Vite](https://vite.dev/) + [React Router](https://reactrouter.com/) |
184
184
  | **UI** | 없음 (코드로만 사용) | CLI(명령줄 인터페이스) | 웹 브라우저 ([React](https://ko.react.dev/) + [Tailwind CSS](https://tailwindcss.com/docs)) |
185
- | **빌드 도구** | [hatchling](https://hatch.pypa.io/) | [hatchling](https://hatch.pypa.io/) | Next.js 내장 빌드 |
185
+ | **빌드 도구** | [hatchling](https://hatch.pypa.io/) | [hatchling](https://hatch.pypa.io/) | Vite 내장 빌드 |
186
186
  | **패키지 관리** | [uv](https://github.com/astral-sh/uv) | [uv](https://github.com/astral-sh/uv) | [npm](https://docs.npmjs.com/about-npm) |
187
187
  | **타입 검사** | [mypy](https://mypy.readthedocs.io/) | [mypy](https://mypy.readthedocs.io/) | TypeScript 내장 (`tsc`) |
188
188
  | **린터** | [ruff](https://docs.astral.sh/ruff/) | [ruff](https://docs.astral.sh/ruff/) | [ESLint](https://eslint.org/) |
@@ -198,7 +198,7 @@ graph LR
198
198
  graph TD
199
199
  subgraph "사용자 환경 (브라우저)"
200
200
  direction TB
201
- StudioUI["kpubdata-studio<br/>Next.js 웹 앱<br/>(사용자가 직접 보는 화면)"]
201
+ StudioUI["kpubdata-studio<br/>Vite SPA<br/>(사용자가 직접 보는 화면)"]
202
202
  end
203
203
 
204
204
  subgraph "서버 환경 (Python Runtime)"
@@ -223,7 +223,7 @@ graph TD
223
223
 
224
224
  | 환경 | 프로젝트 | 실행 방식 |
225
225
  | :--- | :--- | :--- |
226
- | **사용자 브라우저** | kpubdata-studio | `npm run dev` → [http://localhost:3000](http://localhost:3000) 접속 |
226
+ | **사용자 브라우저** | kpubdata-studio | `npm run dev` → [http://localhost:5173](http://localhost:5173) 접속 |
227
227
  | **Python 서버/로컬** | kpubdata, kpubdata-builder | `pip install` 후 Python 코드에서 import 또는 CLI 실행 |
228
228
  | **외부** | 공공 데이터 API | 정부/기관에서 운영하는 서버 (우리가 제어할 수 없음) |
229
229
 
@@ -318,7 +318,7 @@ Studio (브라우저) Builder (서버)
318
318
  | :--- | :--- | :--- | :--- |
319
319
  | **v0.1** | 동기 코어, 주요 5개 API 어댑터, XML/JSON 지원 | BuildSpec 모델, Markdown 내보내기, Manifest 생성 | 정보 구조 설계, Draft 상태 관리, Builder API 연동 |
320
320
  | **v0.2** | 메타데이터 보강, Pandas 어댑터, 신규 기관 확대 | JSONL/Parquet 내보내기, HuggingFace 레이아웃 | 실시간 미리보기, 데이터 검증 뷰, 결과물 뷰어 |
321
- | **v0.3** | 경량 MCP 어댑터 지원 | Publish 훅, 빌드 이력 관리, CI/CD 연동 | Publish 워크플로우, 전체 대시보드 |
321
+ | **v0.3** | Provider 확장 (datago 부동산, 관광, 지하철) | Publish 훅, 빌드 이력 관리, CI/CD 연동 | Publish 워크플로우, 전체 대시보드 |
322
322
 
323
323
  ---
324
324
 
@@ -331,7 +331,7 @@ A: 네. kpubdata는 독립적인 파이썬 라이브러리입니다. `pip instal
331
331
  A: 아니요. Studio는 Builder의 API를 호출하여 동작하므로, Builder가 반드시 실행되고 있어야 합니다. Studio는 "화면"이고, Builder가 실제 "엔진"입니다.
332
332
 
333
333
  **Q: 세 프로젝트를 한 컴퓨터에서 동시에 실행해야 하나요?**
334
- A: 개발 환경에서는 한 컴퓨터에서 모두 실행할 수 있습니다. 운영 환경에서는 Builder(Python 서버)와 Studio(Next.js 웹 서버)를 별도 서버에 배포하는 것이 일반적입니다.
334
+ A: 개발 환경에서는 한 컴퓨터에서 모두 실행할 수 있습니다. 운영 환경에서는 Builder(Python 서버)와 Studio(Vite 웹 서버)를 별도 서버에 배포하는 것이 일반적입니다.
335
335
 
336
336
  **Q: 새로운 공공 API를 추가하려면 어디를 수정하나요?**
337
337
  A: kpubdata의 `providers/` 디렉토리에 새 어댑터를 추가합니다. Builder와 Studio는 수정할 필요 없이 자동으로 새 데이터셋을 사용할 수 있게 됩니다. 이것이 의존성이 한 방향인 것의 장점입니다.
@@ -366,4 +366,5 @@ A: kpubdata의 `providers/` 디렉토리에 새 어댑터를 추가합니다. Bu
366
366
  | YAML | 들여쓰기로 구조를 표현하는 설정 파일 형식 | [위키백과](https://ko.wikipedia.org/wiki/YAML) |
367
367
  | Python | 읽기 쉬운 범용 프로그래밍 언어 | [공식 튜토리얼 (한국어)](https://docs.python.org/ko/3/tutorial/) |
368
368
  | TypeScript | 자바스크립트에 타입을 추가한 언어 | [공식 문서 (한국어)](https://www.typescriptlang.org/ko/docs/) |
369
- | Next.js | React 기반 웹 애플리케이션 프레임워크 | [공식 문서](https://nextjs.org/docs) |
369
+ | Vite | 빠른 프론트엔드 개발 서버 및 번들러 | [공식 문서](https://vite.dev/) |
370
+ | React Router | SPA 라우팅 라이브러리 | [공식 문서](https://reactrouter.com/) |
@@ -35,7 +35,7 @@
35
35
 
36
36
  ### 3단계: 승인 대기
37
37
 
38
- - **자동 승인**: 기상청, 한국환경공단 등 대부분의 API는 신청 즉시 자동 승인됩니다.
38
+ - **자동 승인**: 대부분의 API는 활용신청 후 약 1~5분 안에 자동 승인됩니다.
39
39
  - **심의 승인**: 국토교통부 아파트매매 실거래가 등 일부 API는 담당 기관의 심의 후 승인까지 1~2일이 소요될 수 있습니다.
40
40
 
41
41
  ### 4단계: 인증키 확인
@@ -52,16 +52,22 @@
52
52
  export KPUBDATA_DATAGO_API_KEY="발급받은-일반-인증키"
53
53
  ```
54
54
 
55
- ### 6단계: 키 활성화 대기
55
+ ## API별 활용신청(활성화) requirement
56
56
 
57
- **중요: API 키는 발급 직후 바로 사용할 수 없습니다.**
57
+ data.go.kr은 **계정용 공통 인증키 1개만 있으면 끝나는 구조가 아닙니다.** 호출하려는 Open API마다 상세 페이지에서 별도로 **활용신청**을 해야 합니다.
58
58
 
59
- - 발급 후 **1~2시간**의 활성화 대기 시간이 필요합니다.
60
- - 이 시간 동안 공공데이터포털 시스템이 각 API 제공기관의 서버와 인증키를 동기화합니다.
61
- - 동기화 완료 전에는 `SERVICE_KEY_IS_NOT_REGISTERED_ERROR` 또는 `401 Unauthorized` 에러가 발생합니다.
62
- - 동기화 시간은 제공기관에 따라 다를 수 있으며, 드물게 2시간 이상 걸리는 경우도 있습니다.
59
+ - 같은 `KPUBDATA_DATAGO_API_KEY`를 쓰더라도 API별 활성화 상태는 서로 다를 수 있습니다.
60
+ - 활용신청 후 대부분의 API는 약 **1~5분 안에 자동 승인/활성화**됩니다.
61
+ - 활성화 전에는 KPubData 호출이 **HTTP 403**으로 실패할 수 있습니다.
62
+ - 이 경우 해당 데이터셋의 data.go.kr 상세 페이지로 가서 **"활용신청"** 버튼을 눌렀는지 먼저 확인하세요.
63
63
 
64
- ### 7단계: 활성화 확인
64
+ 예시:
65
+
66
+ - `datago.village_fcst`를 쓰려면 단기예보 API 페이지에서 활용신청 필요
67
+ - `datago.air_quality`를 쓰려면 대기오염정보 API 페이지에서 활용신청 필요
68
+ - 둘은 같은 포털/같은 키를 써도 **각각 따로** 활성화해야 함
69
+
70
+ ### 6단계: 활성화 확인
65
71
 
66
72
  키가 활성화되었는지 확인하려면 다음과 같이 테스트합니다:
67
73
 
@@ -70,7 +76,7 @@ export KPUBDATA_DATAGO_API_KEY="발급받은-일반-인증키"
70
76
  curl "http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getVilageFcst?serviceKey=YOUR_KEY&dataType=json&numOfRows=1&pageNo=1&base_date=20250401&base_time=0500&nx=55&ny=127"
71
77
  ```
72
78
 
73
- 정상 응답이 오면 활성화가 완료된 것입니다. `SERVICE_KEY_IS_NOT_REGISTERED_ERROR` 에러가 나오면 조금 더 기다려야 합니다.
79
+ 정상 응답이 오면 활성화가 완료된 것입니다. `403 Forbidden`, `SERVICE_KEY_IS_NOT_REGISTERED_ERROR`, 또는 인증 관련 오류가 나오면 활용신청 여부와 승인 대기 시간을 다시 확인하세요.
74
80
 
75
81
  ## KPubData에서 신청해야 할 API 목록
76
82
 
@@ -117,6 +117,12 @@ ProviderResponseError: BOK ECOS returned error
117
117
  ```
118
118
  → 날짜를 `"20240101"` 대신 `"202401"` (YYYYMM) 형식으로 입력했는지 확인하세요.
119
119
 
120
+ ### "data.go.kr에서 403이 나옵니다"
121
+ ```
122
+ AuthError: data.go.kr returned 403...
123
+ ```
124
+ → data.go.kr은 공통 인증키만으로는 부족하고 **API별 활용신청**이 필요합니다. 사용하려는 API 상세 페이지에서 "활용신청"을 눌렀는지 확인하세요. 대부분 1~5분 안에 자동 승인되지만 일부 API는 더 오래 걸릴 수 있습니다.
125
+
120
126
  ## Step 7: 다른 데이터도 조회해보기
121
127
 
122
128
  ### 사용 가능한 전체 데이터셋 목록 보기
@@ -146,6 +152,8 @@ kosis.population_migration — 시도별 이동자수 (Population Migration)
146
152
  - 공공데이터포털(datago): [datago API 키 발급 가이드](./providers/datago.md)
147
153
  - 통계청 KOSIS: [KOSIS API 키 발급 가이드](./providers/kosis.md)
148
154
 
155
+ > 참고: `datago`는 인증키 발급 후에도 **데이터셋별 활용신청**이 필요합니다. 활용신청 전에는 403이 발생할 수 있습니다.
156
+
149
157
  ## Step 8: 전체 페이지 자동 조회
150
158
 
151
159
  데이터가 많을 때 `list_all()`을 사용하면 모든 페이지를 자동으로 순회합니다.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "kpubdata"
7
- version = "0.3.0"
7
+ version = "0.4.0"
8
8
  description = "Dialect-inspired Python access framework for Korean public data"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -49,4 +49,6 @@ __all__ = [
49
49
  "ProviderNotRegisteredError",
50
50
  ]
51
51
 
52
- __version__ = "0.2.3"
52
+ from importlib.metadata import version as _pkg_version
53
+
54
+ __version__: str = _pkg_version("kpubdata")
@@ -26,6 +26,7 @@ _BUILTIN_PROVIDERS: tuple[tuple[str, str, str], ...] = (
26
26
  ("kosis", "kpubdata.providers.kosis", "KosisAdapter"),
27
27
  ("lofin", "kpubdata.providers.lofin", "LofinAdapter"),
28
28
  ("localdata", "kpubdata.providers.localdata.adapter", "LocaldataAdapter"),
29
+ ("semas", "kpubdata.providers.semas.adapter", "SemasAdapter"),
29
30
  )
30
31
 
31
32
 
@@ -4,6 +4,9 @@ Key lookup order for provider keys:
4
4
  1. Explicit `provider_keys` dict passed to constructor
5
5
  2. Environment variable: KPUBDATA_{PROVIDER}_API_KEY (uppercased)
6
6
  3. Environment variable: {PROVIDER}_API_KEY (uppercased, fallback)
7
+
8
+ data.go.kr providers (localdata, lofin, semas) all use the "datago" key.
9
+ Set KPUBDATA_DATAGO_API_KEY once for all data.go.kr-based providers.
7
10
  """
8
11
 
9
12
  from __future__ import annotations
@@ -7,6 +7,8 @@ from collections.abc import Mapping, Sequence
7
7
  from typing import NoReturn, cast
8
8
  from urllib.parse import urlparse
9
9
 
10
+ import httpx
11
+
10
12
  from kpubdata.config import KPubDataConfig
11
13
  from kpubdata.core.models import (
12
14
  DatasetRef,
@@ -22,6 +24,7 @@ from kpubdata.exceptions import (
22
24
  ProviderResponseError,
23
25
  RateLimitError,
24
26
  ServiceUnavailableError,
27
+ TransportError,
25
28
  )
26
29
  from kpubdata.providers._common import build_schema_from_metadata, coerce_int, load_catalogue
27
30
  from kpubdata.transport.decode import decode_json, decode_xml, detect_content_type
@@ -29,6 +32,12 @@ from kpubdata.transport.http import HttpTransport, TransportConfig
29
32
 
30
33
  logger = logging.getLogger("kpubdata.provider.datago")
31
34
 
35
+ _DATAGO_403_HINT = (
36
+ "data.go.kr returned 403. This usually means the specific API has not been activated "
37
+ "(활용신청) for your key. Visit the dataset's page on https://www.data.go.kr and "
38
+ "click '활용신청'. Approval is usually automatic and becomes active within a few minutes."
39
+ )
40
+
32
41
 
33
42
  def _is_success_code(code: str) -> bool:
34
43
  """Return True for any data.go.kr resultCode that signals success.
@@ -362,13 +371,23 @@ class DataGoAdapter:
362
371
  self, url: str, params: Mapping[str, object], dataset_id: str = ""
363
372
  ) -> dict[str, object]:
364
373
  string_params = {key: str(value) for key, value in params.items()}
365
- response = self._transport.request(
366
- "GET",
367
- url,
368
- params=string_params,
369
- dataset_id=dataset_id,
370
- provider="datago",
371
- )
374
+ try:
375
+ response = self._transport.request(
376
+ "GET",
377
+ url,
378
+ params=string_params,
379
+ dataset_id=dataset_id,
380
+ provider="datago",
381
+ )
382
+ except TransportError as exc:
383
+ if self._is_http_403(exc):
384
+ raise AuthError(
385
+ _DATAGO_403_HINT,
386
+ provider="datago",
387
+ dataset_id=dataset_id or None,
388
+ status_code=403,
389
+ ) from exc
390
+ raise
372
391
 
373
392
  try:
374
393
  content_type = detect_content_type(response)
@@ -394,6 +413,11 @@ class DataGoAdapter:
394
413
  )
395
414
  raise ParseError("Decoded payload is not an object", provider="datago")
396
415
 
416
+ @staticmethod
417
+ def _is_http_403(exc: TransportError) -> bool:
418
+ cause = exc.__cause__
419
+ return isinstance(cause, httpx.HTTPStatusError) and cause.response.status_code == 403
420
+
397
421
  def _validate_envelope(
398
422
  self, payload: dict[str, object], dataset: DatasetRef | None = None
399
423
  ) -> tuple[dict[str, object], list[dict[str, object]]]:
@@ -160,7 +160,7 @@ class LocaldataAdapter:
160
160
  return payload
161
161
 
162
162
  def _require_api_key(self) -> str:
163
- return self._config.require_provider_key("localdata")
163
+ return self._config.require_provider_key("datago")
164
164
 
165
165
  def _build_request_url(self, dataset: DatasetRef, operation: str | None = None) -> str:
166
166
  base_url_raw = dataset.raw_metadata.get("base_url")
@@ -164,7 +164,7 @@ class LofinAdapter:
164
164
  return payload
165
165
 
166
166
  def _require_api_key(self) -> str:
167
- return self._config.require_provider_key("lofin")
167
+ return self._config.require_provider_key("datago")
168
168
 
169
169
  def _build_request_url(
170
170
  self,
@@ -0,0 +1,3 @@
1
+ from __future__ import annotations
2
+
3
+ __all__: list[str] = []