kpubdata 0.2.2__tar.gz → 0.3.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 (399) hide show
  1. {kpubdata-0.2.2 → kpubdata-0.3.0}/.gitignore +5 -0
  2. {kpubdata-0.2.2 → kpubdata-0.3.0}/API_SPEC.md +33 -0
  3. {kpubdata-0.2.2 → kpubdata-0.3.0}/CHANGELOG.md +12 -0
  4. {kpubdata-0.2.2 → kpubdata-0.3.0}/PKG-INFO +86 -4
  5. {kpubdata-0.2.2 → kpubdata-0.3.0}/README.md +85 -3
  6. kpubdata-0.3.0/SUPPORTED_DATA.md +278 -0
  7. kpubdata-0.3.0/docs/caching.md +97 -0
  8. kpubdata-0.3.0/docs/cli.md +181 -0
  9. kpubdata-0.3.0/docs/logging.md +136 -0
  10. {kpubdata-0.2.2 → kpubdata-0.3.0}/docs/providers/datago.md +315 -2
  11. kpubdata-0.3.0/docs/providers/seoul.md +133 -0
  12. kpubdata-0.3.0/plans/sgis-provider-issue-150.md +46 -0
  13. {kpubdata-0.2.2 → kpubdata-0.3.0}/pyproject.toml +4 -1
  14. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/__init__.py +1 -1
  15. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/catalog.py +48 -2
  16. kpubdata-0.3.0/src/kpubdata/cli.py +464 -0
  17. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/client.py +81 -1
  18. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/config.py +3 -0
  19. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/core/capability.py +2 -1
  20. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/core/dataset.py +78 -1
  21. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/bok/adapter.py +62 -8
  22. kpubdata-0.3.0/src/kpubdata/providers/datago/adapter.py +564 -0
  23. kpubdata-0.3.0/src/kpubdata/providers/datago/catalogue.json +298 -0
  24. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/kosis/adapter.py +49 -6
  25. kpubdata-0.3.0/src/kpubdata/providers/localdata/__init__.py +5 -0
  26. {kpubdata-0.2.2/src/kpubdata/providers/datago → kpubdata-0.3.0/src/kpubdata/providers/localdata}/adapter.py +84 -64
  27. kpubdata-0.3.0/src/kpubdata/providers/localdata/catalogue.json +17357 -0
  28. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/lofin/adapter.py +58 -6
  29. kpubdata-0.3.0/src/kpubdata/providers/seoul/__init__.py +3 -0
  30. kpubdata-0.3.0/src/kpubdata/providers/seoul/adapter.py +318 -0
  31. kpubdata-0.3.0/src/kpubdata/providers/seoul/catalogue.json +24 -0
  32. kpubdata-0.3.0/src/kpubdata/providers/sgis/__init__.py +5 -0
  33. kpubdata-0.3.0/src/kpubdata/providers/sgis/adapter.py +312 -0
  34. kpubdata-0.3.0/src/kpubdata/providers/sgis/auth.py +154 -0
  35. kpubdata-0.3.0/src/kpubdata/providers/sgis/catalogue.json +55 -0
  36. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/registry.py +27 -0
  37. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/transport/__init__.py +3 -0
  38. kpubdata-0.3.0/src/kpubdata/transport/cache.py +211 -0
  39. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/transport/decode.py +36 -0
  40. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/transport/http.py +102 -0
  41. kpubdata-0.3.0/tests/contract/test_localdata.py +290 -0
  42. kpubdata-0.3.0/tests/contract/test_seoul.py +91 -0
  43. kpubdata-0.3.0/tests/contract/test_sgis_contract.py +96 -0
  44. kpubdata-0.3.0/tests/fixtures/datago/bus_arrival_v2.json +20 -0
  45. kpubdata-0.3.0/tests/fixtures/datago/success_apt_rent.json +55 -0
  46. kpubdata-0.3.0/tests/fixtures/datago/success_metro_fare.json +31 -0
  47. kpubdata-0.3.0/tests/fixtures/datago/success_metro_path.json +38 -0
  48. kpubdata-0.3.0/tests/fixtures/datago/success_offi_rent.json +57 -0
  49. kpubdata-0.3.0/tests/fixtures/datago/success_offi_trade.json +57 -0
  50. kpubdata-0.3.0/tests/fixtures/datago/success_rh_rent.json +57 -0
  51. kpubdata-0.3.0/tests/fixtures/datago/success_rh_trade.json +61 -0
  52. kpubdata-0.3.0/tests/fixtures/datago/success_sh_rent.json +51 -0
  53. kpubdata-0.3.0/tests/fixtures/datago/success_sh_trade.json +55 -0
  54. kpubdata-0.3.0/tests/fixtures/datago/success_tour_kor_area.json +39 -0
  55. kpubdata-0.3.0/tests/fixtures/datago/success_tour_kor_festival.json +37 -0
  56. kpubdata-0.3.0/tests/fixtures/datago/success_tour_kor_keyword.json +33 -0
  57. kpubdata-0.3.0/tests/fixtures/datago/success_tour_kor_location.json +35 -0
  58. kpubdata-0.3.0/tests/fixtures/localdata/affiliated_medical_institution_success.json +1 -0
  59. kpubdata-0.3.0/tests/fixtures/localdata/air_pollution_prevention_facility_success.json +1 -0
  60. kpubdata-0.3.0/tests/fixtures/localdata/amusement_facility_success.json +1 -0
  61. kpubdata-0.3.0/tests/fixtures/localdata/animal_breeding_success.json +1 -0
  62. kpubdata-0.3.0/tests/fixtures/localdata/animal_care_service_success.json +1 -0
  63. kpubdata-0.3.0/tests/fixtures/localdata/animal_crematorium_success.json +1 -0
  64. kpubdata-0.3.0/tests/fixtures/localdata/animal_exhibition_success.json +1 -0
  65. kpubdata-0.3.0/tests/fixtures/localdata/animal_funeral_success.json +1 -0
  66. kpubdata-0.3.0/tests/fixtures/localdata/animal_hospital_success.json +15 -0
  67. kpubdata-0.3.0/tests/fixtures/localdata/animal_import_success.json +1 -0
  68. kpubdata-0.3.0/tests/fixtures/localdata/animal_sales_success.json +1 -0
  69. kpubdata-0.3.0/tests/fixtures/localdata/animal_training_success.json +1 -0
  70. kpubdata-0.3.0/tests/fixtures/localdata/animal_transport_success.json +1 -0
  71. kpubdata-0.3.0/tests/fixtures/localdata/bakery_success.json +63 -0
  72. kpubdata-0.3.0/tests/fixtures/localdata/barber_shop_success.json +63 -0
  73. kpubdata-0.3.0/tests/fixtures/localdata/beauty_salon_success.json +63 -0
  74. kpubdata-0.3.0/tests/fixtures/localdata/billiard_hall_success.json +15 -0
  75. kpubdata-0.3.0/tests/fixtures/localdata/boxing_gym_success.json +1 -0
  76. kpubdata-0.3.0/tests/fixtures/localdata/breeding_stock_success.json +1 -0
  77. kpubdata-0.3.0/tests/fixtures/localdata/building_sanitation_management_success.json +1 -0
  78. kpubdata-0.3.0/tests/fixtures/localdata/caregiver_training_institution_success.json +1 -0
  79. kpubdata-0.3.0/tests/fixtures/localdata/city_gas_success.json +1 -0
  80. kpubdata-0.3.0/tests/fixtures/localdata/civil_defense_water_supply_success.json +1 -0
  81. kpubdata-0.3.0/tests/fixtures/localdata/clinic_success.json +15 -0
  82. kpubdata-0.3.0/tests/fixtures/localdata/companion_animal_related_business_success.json +1 -0
  83. kpubdata-0.3.0/tests/fixtures/localdata/composite_game_provider_success.json +1 -0
  84. kpubdata-0.3.0/tests/fixtures/localdata/comprehensive_amusement_facility_success.json +1 -0
  85. kpubdata-0.3.0/tests/fixtures/localdata/comprehensive_resort_business_success.json +1 -0
  86. kpubdata-0.3.0/tests/fixtures/localdata/comprehensive_sports_facility_success.json +1 -0
  87. kpubdata-0.3.0/tests/fixtures/localdata/comprehensive_travel_success.json +1 -0
  88. kpubdata-0.3.0/tests/fixtures/localdata/container_packaging_manufacturing_success.json +1 -0
  89. kpubdata-0.3.0/tests/fixtures/localdata/contract_foodservice_success.json +1 -0
  90. kpubdata-0.3.0/tests/fixtures/localdata/culture_industry_company_success.json +1 -0
  91. kpubdata-0.3.0/tests/fixtures/localdata/dance_academy_success.json +15 -0
  92. kpubdata-0.3.0/tests/fixtures/localdata/dance_hall_success.json +1 -0
  93. kpubdata-0.3.0/tests/fixtures/localdata/dental_lab_success.json +1 -0
  94. kpubdata-0.3.0/tests/fixtures/localdata/disinfection_business_success.json +1 -0
  95. kpubdata-0.3.0/tests/fixtures/localdata/distribution_specialized_sales_success.json +1 -0
  96. kpubdata-0.3.0/tests/fixtures/localdata/domestic_international_travel_success.json +1 -0
  97. kpubdata-0.3.0/tests/fixtures/localdata/domestic_travel_success.json +1 -0
  98. kpubdata-0.3.0/tests/fixtures/localdata/door_to_door_sales_success.json +1 -0
  99. kpubdata-0.3.0/tests/fixtures/localdata/ecommerce_success.json +1 -0
  100. kpubdata-0.3.0/tests/fixtures/localdata/edible_ice_sales_success.json +1 -0
  101. kpubdata-0.3.0/tests/fixtures/localdata/electrical_construction_success.json +1 -0
  102. kpubdata-0.3.0/tests/fixtures/localdata/electrical_safety_management_agency_success.json +1 -0
  103. kpubdata-0.3.0/tests/fixtures/localdata/electricity_sales_success.json +1 -0
  104. kpubdata-0.3.0/tests/fixtures/localdata/electronic_distribution_success.json +1 -0
  105. kpubdata-0.3.0/tests/fixtures/localdata/elevator_maintenance_success.json +1 -0
  106. kpubdata-0.3.0/tests/fixtures/localdata/elevator_manufacturing_import_success.json +1 -0
  107. kpubdata-0.3.0/tests/fixtures/localdata/emergency_patient_transport_success.json +1 -0
  108. kpubdata-0.3.0/tests/fixtures/localdata/empty_response.json +12 -0
  109. kpubdata-0.3.0/tests/fixtures/localdata/energy_saving_company_success.json +1 -0
  110. kpubdata-0.3.0/tests/fixtures/localdata/entertainment_bar_success.json +1 -0
  111. kpubdata-0.3.0/tests/fixtures/localdata/environmental_consulting_success.json +1 -0
  112. kpubdata-0.3.0/tests/fixtures/localdata/environmental_impact_assessment_success.json +1 -0
  113. kpubdata-0.3.0/tests/fixtures/localdata/environmental_measurement_agency_success.json +1 -0
  114. kpubdata-0.3.0/tests/fixtures/localdata/error_auth.json +8 -0
  115. kpubdata-0.3.0/tests/fixtures/localdata/feed_manufacturing_success.json +1 -0
  116. kpubdata-0.3.0/tests/fixtures/localdata/fitness_center_success.json +15 -0
  117. kpubdata-0.3.0/tests/fixtures/localdata/food_additive_manufacturing_success.json +1 -0
  118. kpubdata-0.3.0/tests/fixtures/localdata/food_cold_storage_success.json +1 -0
  119. kpubdata-0.3.0/tests/fixtures/localdata/food_manufacturing_success.json +1 -0
  120. kpubdata-0.3.0/tests/fixtures/localdata/food_repackaging_success.json +1 -0
  121. kpubdata-0.3.0/tests/fixtures/localdata/food_transportation_success.json +1 -0
  122. kpubdata-0.3.0/tests/fixtures/localdata/food_vending_machine_success.json +1 -0
  123. kpubdata-0.3.0/tests/fixtures/localdata/foreign_tourist_city_homestay_lodging_success.json +1 -0
  124. kpubdata-0.3.0/tests/fixtures/localdata/foreign_tourist_city_homestay_success.json +1 -0
  125. kpubdata-0.3.0/tests/fixtures/localdata/foreigner_exclusive_entertainment_restaurant_success.json +1 -0
  126. kpubdata-0.3.0/tests/fixtures/localdata/free_job_placement_success.json +1 -0
  127. kpubdata-0.3.0/tests/fixtures/localdata/funeral_director_training_institution_success.json +1 -0
  128. kpubdata-0.3.0/tests/fixtures/localdata/funeral_service_success.json +1 -0
  129. kpubdata-0.3.0/tests/fixtures/localdata/game_distribution_success.json +1 -0
  130. kpubdata-0.3.0/tests/fixtures/localdata/game_manufacturing_success.json +1 -0
  131. kpubdata-0.3.0/tests/fixtures/localdata/game_provider_success.json +1 -0
  132. kpubdata-0.3.0/tests/fixtures/localdata/gas_appliance_manufacturing_success.json +1 -0
  133. kpubdata-0.3.0/tests/fixtures/localdata/general_amusement_facility_success.json +1 -0
  134. kpubdata-0.3.0/tests/fixtures/localdata/general_lodging_success.json +1 -0
  135. kpubdata-0.3.0/tests/fixtures/localdata/general_restaurant_success.json +63 -0
  136. kpubdata-0.3.0/tests/fixtures/localdata/golf_course_success.json +15 -0
  137. kpubdata-0.3.0/tests/fixtures/localdata/golf_practice_range_success.json +15 -0
  138. kpubdata-0.3.0/tests/fixtures/localdata/groundwater_construction_success.json +1 -0
  139. kpubdata-0.3.0/tests/fixtures/localdata/groundwater_impact_assessment_success.json +1 -0
  140. kpubdata-0.3.0/tests/fixtures/localdata/groundwater_purification_success.json +1 -0
  141. kpubdata-0.3.0/tests/fixtures/localdata/group_cafeteria_success.json +1 -0
  142. kpubdata-0.3.0/tests/fixtures/localdata/hanok_experience_lodging_success.json +1 -0
  143. kpubdata-0.3.0/tests/fixtures/localdata/hanok_experience_success.json +1 -0
  144. kpubdata-0.3.0/tests/fixtures/localdata/hatchery_success.json +1 -0
  145. kpubdata-0.3.0/tests/fixtures/localdata/health_functional_food_distributor_success.json +1 -0
  146. kpubdata-0.3.0/tests/fixtures/localdata/health_functional_food_retail_success.json +1 -0
  147. kpubdata-0.3.0/tests/fixtures/localdata/health_functional_food_specialty_success.json +1 -0
  148. kpubdata-0.3.0/tests/fixtures/localdata/high_pressure_gas_success.json +1 -0
  149. kpubdata-0.3.0/tests/fixtures/localdata/horse_riding_success.json +15 -0
  150. kpubdata-0.3.0/tests/fixtures/localdata/hospital_success.json +63 -0
  151. kpubdata-0.3.0/tests/fixtures/localdata/ice_rink_success.json +15 -0
  152. kpubdata-0.3.0/tests/fixtures/localdata/imported_food_sales_success.json +1 -0
  153. kpubdata-0.3.0/tests/fixtures/localdata/imported_livestock_sales_success.json +1 -0
  154. kpubdata-0.3.0/tests/fixtures/localdata/instant_food_manufacturing_success.json +1 -0
  155. kpubdata-0.3.0/tests/fixtures/localdata/international_conference_facility_success.json +1 -0
  156. kpubdata-0.3.0/tests/fixtures/localdata/international_conference_planning_success.json +1 -0
  157. kpubdata-0.3.0/tests/fixtures/localdata/international_freight_forwarding_success.json +1 -0
  158. kpubdata-0.3.0/tests/fixtures/localdata/internet_computer_game_facility_success.json +1 -0
  159. kpubdata-0.3.0/tests/fixtures/localdata/karaoke_success.json +63 -0
  160. kpubdata-0.3.0/tests/fixtures/localdata/large_store_success.json +1 -0
  161. kpubdata-0.3.0/tests/fixtures/localdata/laundry_success.json +63 -0
  162. kpubdata-0.3.0/tests/fixtures/localdata/livestock_artificial_insemination_center_success.json +1 -0
  163. kpubdata-0.3.0/tests/fixtures/localdata/livestock_farming_success.json +1 -0
  164. kpubdata-0.3.0/tests/fixtures/localdata/livestock_processing_success.json +1 -0
  165. kpubdata-0.3.0/tests/fixtures/localdata/livestock_sales_success.json +1 -0
  166. kpubdata-0.3.0/tests/fixtures/localdata/livestock_storage_success.json +1 -0
  167. kpubdata-0.3.0/tests/fixtures/localdata/livestock_transportation_success.json +1 -0
  168. kpubdata-0.3.0/tests/fixtures/localdata/log_production_success.json +1 -0
  169. kpubdata-0.3.0/tests/fixtures/localdata/logistics_warehouse_success.json +1 -0
  170. kpubdata-0.3.0/tests/fixtures/localdata/lpg_charging_success.json +1 -0
  171. kpubdata-0.3.0/tests/fixtures/localdata/lpg_collective_supply_success.json +1 -0
  172. kpubdata-0.3.0/tests/fixtures/localdata/lpg_sales_success.json +1 -0
  173. kpubdata-0.3.0/tests/fixtures/localdata/mail_order_sales_success.json +1 -0
  174. kpubdata-0.3.0/tests/fixtures/localdata/marine_environment_management_success.json +1 -0
  175. kpubdata-0.3.0/tests/fixtures/localdata/martial_arts_gym_success.json +1 -0
  176. kpubdata-0.3.0/tests/fixtures/localdata/medical_device_repair_success.json +1 -0
  177. kpubdata-0.3.0/tests/fixtures/localdata/medical_device_sales_success.json +1 -0
  178. kpubdata-0.3.0/tests/fixtures/localdata/medical_foundation_success.json +1 -0
  179. kpubdata-0.3.0/tests/fixtures/localdata/medical_linen_processing_success.json +1 -0
  180. kpubdata-0.3.0/tests/fixtures/localdata/medical_waste_treatment_success.json +1 -0
  181. kpubdata-0.3.0/tests/fixtures/localdata/meter_repair_success.json +1 -0
  182. kpubdata-0.3.0/tests/fixtures/localdata/milk_collection_success.json +1 -0
  183. kpubdata-0.3.0/tests/fixtures/localdata/motor_racing_course_success.json +1 -0
  184. kpubdata-0.3.0/tests/fixtures/localdata/movie_distribution_success.json +1 -0
  185. kpubdata-0.3.0/tests/fixtures/localdata/movie_import_success.json +1 -0
  186. kpubdata-0.3.0/tests/fixtures/localdata/movie_production_success.json +1 -0
  187. kpubdata-0.3.0/tests/fixtures/localdata/movie_screening_success.json +1 -0
  188. kpubdata-0.3.0/tests/fixtures/localdata/movie_theater_success.json +15 -0
  189. kpubdata-0.3.0/tests/fixtures/localdata/multilevel_sales_success.json +1 -0
  190. kpubdata-0.3.0/tests/fixtures/localdata/music_video_distribution_success.json +1 -0
  191. kpubdata-0.3.0/tests/fixtures/localdata/music_video_production_success.json +1 -0
  192. kpubdata-0.3.0/tests/fixtures/localdata/night_soil_collection_transportation_success.json +1 -0
  193. kpubdata-0.3.0/tests/fixtures/localdata/noise_vibration_prevention_facility_success.json +1 -0
  194. kpubdata-0.3.0/tests/fixtures/localdata/onggi_manufacturing_success.json +1 -0
  195. kpubdata-0.3.0/tests/fixtures/localdata/online_music_service_success.json +1 -0
  196. kpubdata-0.3.0/tests/fixtures/localdata/optical_shop_success.json +15 -0
  197. kpubdata-0.3.0/tests/fixtures/localdata/other_food_sales_success.json +1 -0
  198. kpubdata-0.3.0/tests/fixtures/localdata/outdoor_advertising_success.json +1 -0
  199. kpubdata-0.3.0/tests/fixtures/localdata/paid_job_placement_success.json +1 -0
  200. kpubdata-0.3.0/tests/fixtures/localdata/performance_hall_success.json +15 -0
  201. kpubdata-0.3.0/tests/fixtures/localdata/pet_grooming_success.json +15 -0
  202. kpubdata-0.3.0/tests/fixtures/localdata/petroleum_import_export_success.json +1 -0
  203. kpubdata-0.3.0/tests/fixtures/localdata/petroleum_sales_success.json +1 -0
  204. kpubdata-0.3.0/tests/fixtures/localdata/pharmacy_success.json +63 -0
  205. kpubdata-0.3.0/tests/fixtures/localdata/popular_culture_arts_planning_success.json +1 -0
  206. kpubdata-0.3.0/tests/fixtures/localdata/postpartum_care_success.json +1 -0
  207. kpubdata-0.3.0/tests/fixtures/localdata/prepaid_installment_trade_success.json +1 -0
  208. kpubdata-0.3.0/tests/fixtures/localdata/printing_house_success.json +1 -0
  209. kpubdata-0.3.0/tests/fixtures/localdata/public_bath_success.json +15 -0
  210. kpubdata-0.3.0/tests/fixtures/localdata/publisher_success.json +1 -0
  211. kpubdata-0.3.0/tests/fixtures/localdata/quasi_medical_business_success.json +1 -0
  212. kpubdata-0.3.0/tests/fixtures/localdata/record_distribution_success.json +1 -0
  213. kpubdata-0.3.0/tests/fixtures/localdata/record_production_success.json +1 -0
  214. kpubdata-0.3.0/tests/fixtures/localdata/residential_accommodation_success.json +1 -0
  215. kpubdata-0.3.0/tests/fixtures/localdata/rest_cafe_success.json +63 -0
  216. kpubdata-0.3.0/tests/fixtures/localdata/rural_guesthouse_success.json +1 -0
  217. kpubdata-0.3.0/tests/fixtures/localdata/safe_over_the_counter_drug_store_success.json +1 -0
  218. kpubdata-0.3.0/tests/fixtures/localdata/sanitary_product_manufacturing_success.json +1 -0
  219. kpubdata-0.3.0/tests/fixtures/localdata/sanitation_treatment_success.json +1 -0
  220. kpubdata-0.3.0/tests/fixtures/localdata/sawmill_success.json +1 -0
  221. kpubdata-0.3.0/tests/fixtures/localdata/singing_bar_success.json +15 -0
  222. kpubdata-0.3.0/tests/fixtures/localdata/ski_resort_success.json +15 -0
  223. kpubdata-0.3.0/tests/fixtures/localdata/slaughterhouse_success.json +1 -0
  224. kpubdata-0.3.0/tests/fixtures/localdata/small_hotel_success.json +1 -0
  225. kpubdata-0.3.0/tests/fixtures/localdata/soil_remediation_success.json +1 -0
  226. kpubdata-0.3.0/tests/fixtures/localdata/specialized_resort_business_success.json +1 -0
  227. kpubdata-0.3.0/tests/fixtures/localdata/swimming_pool_success.json +15 -0
  228. kpubdata-0.3.0/tests/fixtures/localdata/timber_import_distribution_success.json +1 -0
  229. kpubdata-0.3.0/tests/fixtures/localdata/tobacco_import_sales_success.json +1 -0
  230. kpubdata-0.3.0/tests/fixtures/localdata/tobacco_retail_success.json +1 -0
  231. kpubdata-0.3.0/tests/fixtures/localdata/tobacco_wholesale_success.json +1 -0
  232. kpubdata-0.3.0/tests/fixtures/localdata/tourism_business_success.json +1 -0
  233. kpubdata-0.3.0/tests/fixtures/localdata/tourism_convenience_facility_success.json +1 -0
  234. kpubdata-0.3.0/tests/fixtures/localdata/tourism_duty_free_success.json +1 -0
  235. kpubdata-0.3.0/tests/fixtures/localdata/tourist_accommodation_success.json +1 -0
  236. kpubdata-0.3.0/tests/fixtures/localdata/tourist_entertainment_restaurant_success.json +1 -0
  237. kpubdata-0.3.0/tests/fixtures/localdata/tourist_excursion_boat_success.json +1 -0
  238. kpubdata-0.3.0/tests/fixtures/localdata/tourist_pension_success.json +1 -0
  239. kpubdata-0.3.0/tests/fixtures/localdata/tourist_performance_hall_success.json +1 -0
  240. kpubdata-0.3.0/tests/fixtures/localdata/tourist_restaurant_success.json +1 -0
  241. kpubdata-0.3.0/tests/fixtures/localdata/tourist_theater_entertainment_success.json +1 -0
  242. kpubdata-0.3.0/tests/fixtures/localdata/tourist_track_success.json +1 -0
  243. kpubdata-0.3.0/tests/fixtures/localdata/video_distribution_success.json +1 -0
  244. kpubdata-0.3.0/tests/fixtures/localdata/video_production_success.json +1 -0
  245. kpubdata-0.3.0/tests/fixtures/localdata/video_small_theater_success.json +1 -0
  246. kpubdata-0.3.0/tests/fixtures/localdata/video_viewing_room_success.json +1 -0
  247. kpubdata-0.3.0/tests/fixtures/localdata/video_viewing_service_success.json +1 -0
  248. kpubdata-0.3.0/tests/fixtures/localdata/waste_collection_transportation_success.json +1 -0
  249. kpubdata-0.3.0/tests/fixtures/localdata/waste_recycling_success.json +1 -0
  250. kpubdata-0.3.0/tests/fixtures/localdata/waste_treatment_success.json +1 -0
  251. kpubdata-0.3.0/tests/fixtures/localdata/water_pollution_prevention_facility_success.json +1 -0
  252. kpubdata-0.3.0/tests/fixtures/localdata/water_tank_cleaning_success.json +1 -0
  253. kpubdata-0.3.0/tests/fixtures/localdata/yacht_marina_success.json +1 -0
  254. kpubdata-0.3.0/tests/fixtures/localdata/youth_game_provider_success.json +1 -0
  255. kpubdata-0.3.0/tests/fixtures/seoul/bike_rent_month_success.json +38 -0
  256. kpubdata-0.3.0/tests/fixtures/seoul/empty_response.json +10 -0
  257. kpubdata-0.3.0/tests/fixtures/seoul/error_auth.json +10 -0
  258. kpubdata-0.3.0/tests/fixtures/seoul/subway_realtime_arrival_success.json +55 -0
  259. kpubdata-0.3.0/tests/fixtures/sgis/auth_success.json +10 -0
  260. kpubdata-0.3.0/tests/fixtures/sgis/error_invalid_token.json +6 -0
  261. kpubdata-0.3.0/tests/fixtures/sgis/sido_boundary.geojson +35 -0
  262. kpubdata-0.3.0/tests/fixtures/sgis/sigungu_boundary.geojson +35 -0
  263. kpubdata-0.3.0/tests/integration/README.md +22 -0
  264. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/integration/conftest.py +29 -0
  265. kpubdata-0.3.0/tests/integration/test_datago_live.py +300 -0
  266. kpubdata-0.3.0/tests/integration/test_localdata_live.py +85 -0
  267. kpubdata-0.3.0/tests/integration/test_seoul_live.py +45 -0
  268. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/providers/bok/test_bok_adapter.py +39 -0
  269. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/providers/datago/test_adapter.py +116 -8
  270. kpubdata-0.3.0/tests/unit/providers/datago/test_fixtures.py +336 -0
  271. kpubdata-0.3.0/tests/unit/providers/datago/test_generic.py +233 -0
  272. kpubdata-0.3.0/tests/unit/providers/kosis/test_adapter.py +73 -0
  273. kpubdata-0.3.0/tests/unit/providers/localdata/test_adapter.py +794 -0
  274. kpubdata-0.3.0/tests/unit/providers/lofin/test_lofin_adapter.py +169 -0
  275. kpubdata-0.3.0/tests/unit/providers/seoul/__init__.py +0 -0
  276. kpubdata-0.3.0/tests/unit/providers/seoul/test_adapter.py +193 -0
  277. kpubdata-0.3.0/tests/unit/providers/sgis/__init__.py +1 -0
  278. kpubdata-0.3.0/tests/unit/providers/sgis/test_adapter.py +222 -0
  279. kpubdata-0.3.0/tests/unit/providers/sgis/test_auth.py +143 -0
  280. kpubdata-0.3.0/tests/unit/test_cli.py +445 -0
  281. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/test_client_transport_requirements.py +24 -0
  282. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/test_config.py +6 -2
  283. kpubdata-0.3.0/tests/unit/test_failure_path_logging.py +105 -0
  284. kpubdata-0.3.0/tests/unit/test_logging.py +272 -0
  285. kpubdata-0.3.0/tests/unit/transport/__init__.py +0 -0
  286. kpubdata-0.3.0/tests/unit/transport/test_cache.py +186 -0
  287. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/transport/test_logging.py +23 -0
  288. {kpubdata-0.2.2 → kpubdata-0.3.0}/uv.lock +1 -1
  289. kpubdata-0.2.2/.sisyphus/remove-get-record-plan.md +0 -18
  290. kpubdata-0.2.2/SUPPORTED_DATA.md +0 -56
  291. kpubdata-0.2.2/src/kpubdata/providers/datago/catalogue.json +0 -92
  292. kpubdata-0.2.2/tests/integration/test_datago_live.py +0 -74
  293. kpubdata-0.2.2/tests/unit/providers/datago/test_fixtures.py +0 -140
  294. kpubdata-0.2.2/tests/unit/providers/lofin/test_lofin_adapter.py +0 -85
  295. {kpubdata-0.2.2 → kpubdata-0.3.0}/.github/ISSUE_TEMPLATE/new-provider-adapter.yml +0 -0
  296. {kpubdata-0.2.2 → kpubdata-0.3.0}/.github/workflows/ci.yml +0 -0
  297. {kpubdata-0.2.2 → kpubdata-0.3.0}/.github/workflows/integration.yml +0 -0
  298. {kpubdata-0.2.2 → kpubdata-0.3.0}/.github/workflows/publish-pypi.yml +0 -0
  299. {kpubdata-0.2.2 → kpubdata-0.3.0}/AGENTS.md +0 -0
  300. {kpubdata-0.2.2 → kpubdata-0.3.0}/ARCHITECTURE.md +0 -0
  301. {kpubdata-0.2.2 → kpubdata-0.3.0}/CANONICAL_MODEL.md +0 -0
  302. {kpubdata-0.2.2 → kpubdata-0.3.0}/CONTRIBUTING.md +0 -0
  303. {kpubdata-0.2.2 → kpubdata-0.3.0}/LICENSE +0 -0
  304. {kpubdata-0.2.2 → kpubdata-0.3.0}/PACKAGING.md +0 -0
  305. {kpubdata-0.2.2 → kpubdata-0.3.0}/PRD.md +0 -0
  306. {kpubdata-0.2.2 → kpubdata-0.3.0}/PROVIDER_ADAPTER_CONTRACT.md +0 -0
  307. {kpubdata-0.2.2 → kpubdata-0.3.0}/ROADMAP.md +0 -0
  308. {kpubdata-0.2.2 → kpubdata-0.3.0}/VALIDATION.md +0 -0
  309. {kpubdata-0.2.2 → kpubdata-0.3.0}/docs/adrs/0001-dialect-inspired-architecture.md +0 -0
  310. {kpubdata-0.2.2 → kpubdata-0.3.0}/docs/adrs/0002-standardize-ux-not-native-shape.md +0 -0
  311. {kpubdata-0.2.2 → kpubdata-0.3.0}/docs/architecture-diagrams.md +0 -0
  312. {kpubdata-0.2.2 → kpubdata-0.3.0}/docs/datago-api-reference.md +0 -0
  313. {kpubdata-0.2.2 → kpubdata-0.3.0}/docs/product-family-architecture.md +0 -0
  314. {kpubdata-0.2.2 → kpubdata-0.3.0}/docs/providers/bok.md +0 -0
  315. {kpubdata-0.2.2 → kpubdata-0.3.0}/docs/providers/kosis.md +0 -0
  316. {kpubdata-0.2.2 → kpubdata-0.3.0}/docs/quickstart.md +0 -0
  317. {kpubdata-0.2.2 → kpubdata-0.3.0}/docs/tutorial-ai-agent-workflow.md +0 -0
  318. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/core/__init__.py +0 -0
  319. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/core/models.py +0 -0
  320. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/core/protocol.py +0 -0
  321. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/core/representation.py +0 -0
  322. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/exceptions.py +0 -0
  323. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/__init__.py +0 -0
  324. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/_common.py +0 -0
  325. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/bok/__init__.py +0 -0
  326. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/bok/catalogue.json +0 -0
  327. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/datago/__init__.py +0 -0
  328. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/kosis/__init__.py +0 -0
  329. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/kosis/catalogue.json +0 -0
  330. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/lofin/__init__.py +0 -0
  331. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/providers/lofin/catalogue.json +0 -0
  332. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/py.typed +0 -0
  333. {kpubdata-0.2.2 → kpubdata-0.3.0}/src/kpubdata/transport/retry.py +0 -0
  334. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/__init__.py +0 -0
  335. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/contract/__init__.py +0 -0
  336. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/contract/provider_adapter.py +0 -0
  337. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/contract/test_bok.py +0 -0
  338. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/contract/test_datago.py +0 -0
  339. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/contract/test_kosis.py +0 -0
  340. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/contract/test_lofin.py +0 -0
  341. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/bok/error_auth.json +0 -0
  342. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/bok/success_empty.json +0 -0
  343. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/bok/success_single_page.json +0 -0
  344. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/error_auth_30.json +0 -0
  345. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/error_invalid_request_10.json +0 -0
  346. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/error_rate_limit_22.json +0 -0
  347. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/error_service_unavailable_01.json +0 -0
  348. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/error_xml_auth_30.xml +0 -0
  349. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/success_apt_trade.json +0 -0
  350. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/success_empty.json +0 -0
  351. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/success_multi_page_1.json +0 -0
  352. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/success_multi_page_2.json +0 -0
  353. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/success_single_item.json +0 -0
  354. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/success_single_page.json +0 -0
  355. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/success_string_numerics.json +0 -0
  356. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/success_xml.xml +0 -0
  357. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/datago/success_xml_single_item.xml +0 -0
  358. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/kosis/error_auth.json +0 -0
  359. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/kosis/success_empty.json +0 -0
  360. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/kosis/success_single_page.json +0 -0
  361. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/lofin/error_auth.json +0 -0
  362. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/lofin/success_fiacrv.json +0 -0
  363. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/fixtures/lofin/success_single_page.json +0 -0
  364. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/integration/__init__.py +0 -0
  365. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/integration/test_bok_live.py +0 -0
  366. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/integration/test_client_flow.py +0 -0
  367. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/integration/test_exception_propagation.py +0 -0
  368. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/integration/test_kosis_live.py +0 -0
  369. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/integration/test_lofin_live.py +0 -0
  370. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/integration/test_transport_http.py +0 -0
  371. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/__init__.py +0 -0
  372. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/core/__init__.py +0 -0
  373. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/core/test_dataset.py +0 -0
  374. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/core/test_dataset_coverage.py +0 -0
  375. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/core/test_exceptions.py +0 -0
  376. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/core/test_exceptions_coverage.py +0 -0
  377. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/core/test_models.py +0 -0
  378. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/core/test_models_fixtures.py +0 -0
  379. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/core/test_to_pandas.py +0 -0
  380. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/providers/__init__.py +0 -0
  381. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/providers/datago/__init__.py +0 -0
  382. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/providers/datago/conftest.py +0 -0
  383. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/providers/datago/test_adapter_coverage.py +0 -0
  384. {kpubdata-0.2.2/tests/unit/transport → kpubdata-0.3.0/tests/unit/providers/localdata}/__init__.py +0 -0
  385. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/test_catalog.py +0 -0
  386. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/test_catalog_coverage.py +0 -0
  387. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/test_catalogue_validation.py +0 -0
  388. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/test_client_coverage.py +0 -0
  389. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/test_config_coverage.py +0 -0
  390. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/test_registry.py +0 -0
  391. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/test_registry_coverage.py +0 -0
  392. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/transport/test_decode.py +0 -0
  393. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/transport/test_decode_coverage.py +0 -0
  394. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/transport/test_http_coverage.py +0 -0
  395. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/transport/test_http_coverage_extra.py +0 -0
  396. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/transport/test_retry.py +0 -0
  397. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/transport/test_retry_after.py +0 -0
  398. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/transport/test_retry_coverage.py +0 -0
  399. {kpubdata-0.2.2 → kpubdata-0.3.0}/tests/unit/transport/test_transport_requirements.py +0 -0
@@ -35,3 +35,8 @@ Thumbs.db
35
35
  # Environment
36
36
  .env
37
37
  .env.local
38
+
39
+ # Agent / scratch artifacts
40
+ .sisyphus/
41
+ .playwright-mcp/
42
+ tmp/
@@ -17,15 +17,33 @@ client = Client(
17
17
  "seoul": "...",
18
18
  },
19
19
  timeout=10.0,
20
+ cache=True,
21
+ cache_ttl_seconds=3600,
20
22
  )
21
23
  ```
22
24
 
25
+ `Client(...)` supports these transport/cache options:
26
+
27
+ - `timeout: float = 30.0`
28
+ - `max_retries: int = 3`
29
+ - `cache: bool | ResponseCache = False`
30
+ - `False`: disable cache (default)
31
+ - `True`: use default disk cache directory
32
+ - `ResponseCache(...)`: use a caller-supplied cache instance
33
+ - `cache_ttl_seconds: int = 86400`
34
+
23
35
  ### Environment construction
24
36
 
25
37
  ```python
26
38
  client = Client.from_env()
27
39
  ```
28
40
 
41
+ `Client.from_env()` additionally honors:
42
+
43
+ - `KPUBDATA_CACHE=1`
44
+ - `KPUBDATA_CACHE_DIR=/custom/cache/path`
45
+ - `KPUBDATA_CACHE_TTL=3600`
46
+
29
47
  ## 3. Discovery API
30
48
 
31
49
  ```python
@@ -58,6 +76,10 @@ for batch in dataset.list_all(lawd_code="11680", deal_ym="202503"):
58
76
  `list_all()` yields one `RecordBatch` per page and follows `next_page`
59
77
  automatically until pagination is exhausted.
60
78
 
79
+ Dataset metadata may expose provider-specific pagination styles through
80
+ `DatasetRef.query_support.pagination`, including `offset`, `cursor`, and
81
+ index-window based `index` pagination.
82
+
61
83
  ### Schema
62
84
 
63
85
  ```python
@@ -149,6 +171,17 @@ Discouraged as the main public entry point:
149
171
  client.call_provider_endpoint("seoul", "SearchSTNTimeTableByIDService", ...)
150
172
  ```
151
173
 
174
+ ## 10. CLI
175
+
176
+ 설치 후에는 콘솔 스크립트 `kpubdata`를 사용할 수 있습니다.
177
+
178
+ - 데이터셋 목록: `kpubdata datasets list`
179
+ - 메타데이터 확인: `kpubdata datasets show <dataset_id>`
180
+ - 정규화 조회: `kpubdata fetch <dataset_id> ...`
181
+ - Raw 호출: `kpubdata raw <dataset_id> <operation> ...`
182
+
183
+ 상세 사용법, 출력 형식, 종료 코드, 환경 변수 연동은 [docs/cli.md](./docs/cli.md)를 참고하세요.
184
+
152
185
  ---
153
186
 
154
187
  ## 관련 문서
@@ -7,6 +7,18 @@ 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
11
+
12
+ ### Added
13
+ - `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)
14
+ - `sgis` provider adapter for administrative boundary GeoJSON datasets:
15
+ - `sgis.boundary.sido`
16
+ - `sgis.boundary.sigungu`
17
+ - `sgis.boundary.emd`
18
+ - SGIS access-token authentication flow (`consumer_key` + `consumer_secret`) with in-memory token cache and refresh-on-auth-failure behavior
19
+ - Unit and contract tests plus SGIS fixture responses for boundary and auth/error scenarios
20
+ - Full fixture, unit test, and contract test coverage for all 195 localdata datasets
21
+
10
22
  ## [0.2.0] - 2025-04-17
11
23
 
12
24
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kpubdata
3
- Version: 0.2.2
3
+ Version: 0.3.0
4
4
  Summary: Dialect-inspired Python access framework for Korean public data
5
5
  Author: Yeongseon Choe
6
6
  License: MIT
@@ -161,6 +161,26 @@ KPubData가 지원하는 각 기관의 API 키를 발급받아 [환경 변수](h
161
161
  - **SSL 참고**: 서버의 TLS 설정 특성상, KPubData가 내부적으로 SSL 설정을 자동 조정합니다.
162
162
  - **환경 변수**: `KPUBDATA_LOFIN_API_KEY`
163
163
 
164
+ #### 지방행정인허가 (data.go.kr) — `localdata`
165
+ - **가입 URL**: [https://www.data.go.kr](https://www.data.go.kr)
166
+ - **절차**: 회원가입 → 지방행정인허가 Open API(일반음식점/휴게음식점) 활용신청 → 승인 후 인증키 확인
167
+ - **환경 변수**: `KPUBDATA_LOCALDATA_API_KEY`
168
+
169
+ #### 서울 열린데이터광장 (data.seoul.go.kr) — `seoul`
170
+ - **가입 URL**: [https://data.seoul.go.kr/](https://data.seoul.go.kr/)
171
+ - **절차**: 회원가입 → 원하는 Open API 페이지에서 인증키 신청/확인 → 마이페이지에서 발급 키 확인
172
+ - **참고**: 서울 Open API는 인증키를 쿼리스트링이 아니라 URL 경로 세그먼트로 전달합니다.
173
+ - **환경 변수**: `KPUBDATA_SEOUL_API_KEY`
174
+
175
+ #### 통계청 통계지리정보서비스 (sgis.kostat.go.kr) — `sgis`
176
+ - **가입 URL**: [https://sgis.kostat.go.kr/developer/html/main.html](https://sgis.kostat.go.kr/developer/html/main.html)
177
+ - **절차**: 회원가입 → 개발지원센터에서 서비스 ID/Secret 발급 → 인증 API로 accessToken 교환
178
+ - **인증 방식**: `consumer_key` + `consumer_secret` 2단계
179
+ - **환경 변수**:
180
+ - `KPUBDATA_SGIS_API_KEY` (`consumer_key`)
181
+ - `KPUBDATA_SGIS_CONSUMER_SECRET` (`consumer_secret`)
182
+ - **대안 입력**: 코드에서 `provider_keys["sgis"]`에 `"consumer_key:consumer_secret"` 형태를 직접 전달 가능
183
+
164
184
  #### 환경 변수 설정 예시
165
185
  ```bash
166
186
  # 공공데이터포털 (data.go.kr)
@@ -174,6 +194,16 @@ export KPUBDATA_KOSIS_API_KEY="your-kosis-api-key"
174
194
 
175
195
  # 지방재정365
176
196
  export KPUBDATA_LOFIN_API_KEY="your-lofin-api-key"
197
+
198
+ # 지방행정인허가
199
+ export KPUBDATA_LOCALDATA_API_KEY="your-localdata-service-key"
200
+
201
+ # 서울 열린데이터광장
202
+ export KPUBDATA_SEOUL_API_KEY="your-seoul-api-key"
203
+
204
+ # 통계청 SGIS
205
+ export KPUBDATA_SGIS_API_KEY="your-sgis-consumer-key"
206
+ export KPUBDATA_SGIS_CONSUMER_SECRET="your-sgis-consumer-secret"
177
207
  ```
178
208
 
179
209
  ### 2. 클라이언트 생성
@@ -190,6 +220,9 @@ client = Client(provider_keys={
190
220
  "bok": "YOUR_BOK_API_KEY",
191
221
  "kosis": "YOUR_KOSIS_API_KEY",
192
222
  "lofin": "YOUR_LOFIN_API_KEY",
223
+ "localdata": "YOUR_DATA_GO_KR_API_KEY",
224
+ "seoul": "YOUR_SEOUL_API_KEY",
225
+ "sgis": "YOUR_SGIS_CONSUMER_KEY:YOUR_SGIS_CONSUMER_SECRET",
193
226
  })
194
227
  ```
195
228
 
@@ -205,6 +238,14 @@ for ds in client.datasets.search("예보"):
205
238
  print(ds.id, ds.name, ds.operations)
206
239
  ```
207
240
 
241
+ ### CLI로 즉시 사용하기
242
+
243
+ 설치가 끝나면 `kpubdata` 명령이 함께 등록됩니다. 간단한 탐색이나 파라미터 실험은 스크립트 없이 바로 실행할 수 있습니다.
244
+
245
+ ```bash
246
+ kpubdata fetch bok.base_rate -p start_date=202401 -p end_date=202403 --format table
247
+ ```
248
+
208
249
  ### 4. 레코드 조회
209
250
 
210
251
  ```python
@@ -297,7 +338,18 @@ for item in result.items[:5]:
297
338
  # ...
298
339
  ```
299
340
 
300
- ### 9. 전체 페이지 자동 조회 (list_all)
341
+ ### 9. 지방행정인허가 조회 (Localdata)
342
+
343
+ ```python
344
+ # 지방행정인허가 (Localdata) - 일반음식점
345
+ client = Client(provider_keys={"localdata": "YOUR_DATA_GO_KR_API_KEY"})
346
+ ds = client.dataset("localdata.general_restaurant")
347
+ result = ds.list(page_size=10)
348
+ for item in result.items:
349
+ print(item["BPLC_NM"], item["ROAD_NM_ADDR"])
350
+ ```
351
+
352
+ ### 10. 전체 페이지 자동 조회 (list_all)
301
353
 
302
354
  대량의 데이터를 페이지 단위로 자동 순회하려면 `list_all()`을 사용합니다.
303
355
 
@@ -311,7 +363,7 @@ for batch in ds.list_all(fyr="2024"):
311
363
  print(item)
312
364
  ```
313
365
 
314
- ### 10. pandas DataFrame 변환
366
+ ### 11. pandas DataFrame 변환
315
367
 
316
368
  조회 결과를 pandas DataFrame으로 변환하여 분석할 수 있습니다.
317
369
 
@@ -340,6 +392,24 @@ print(df.head())
340
392
  | 공공데이터포털 (`datago`) | 버스도착정보 (`bus_arrival`) | 지원 |
341
393
  | 공공데이터포털 (`datago`) | 병원정보 (`hospital_info`) | 지원 |
342
394
  | 공공데이터포털 (`datago`) | 아파트매매 실거래가 (`apt_trade`) | 지원 |
395
+ | 공공데이터포털 (`datago`) | 아파트 전월세 실거래가 (`apt_rent`) | 지원 |
396
+ | 공공데이터포털 (`datago`) | 오피스텔 매매 실거래가 (`offi_trade`) | 지원 |
397
+ | 공공데이터포털 (`datago`) | 오피스텔 전월세 실거래가 (`offi_rent`) | 지원 |
398
+ | 공공데이터포털 (`datago`) | 연립다세대 매매 실거래가 (`rh_trade`) | 지원 |
399
+ | 공공데이터포털 (`datago`) | 연립다세대 전월세 실거래가 (`rh_rent`) | 지원 |
400
+ | 공공데이터포털 (`datago`) | 단독/다가구 매매 실거래가 (`sh_trade`) | 지원 |
401
+ | 공공데이터포털 (`datago`) | 단독/다가구 전월세 실거래가 (`sh_rent`) | 지원 |
402
+ | 공공데이터포털 (`datago`) | 한국관광공사 지역기반 관광정보 (`tour_kor_area`) | 지원 |
403
+ | 공공데이터포털 (`datago`) | 한국관광공사 위치기반 관광정보 (`tour_kor_location`) | 지원 |
404
+ | 공공데이터포털 (`datago`) | 한국관광공사 키워드 검색 (`tour_kor_keyword`) | 지원 |
405
+ | 공공데이터포털 (`datago`) | 한국관광공사 행사정보 (`tour_kor_festival`) | 지원 |
406
+ | 공공데이터포털 (`datago`) | 서울교통공사 실시간 운임정보 (`metro_fare`) | 지원 |
407
+ | 공공데이터포털 (`datago`) | 서울교통공사 최단경로 이동정보 (`metro_path`) | 지원 |
408
+ | 서울 열린데이터광장 (`seoul`) | 지하철 실시간 도착정보 (`subway_realtime_arrival`) | 지원 |
409
+ | 서울 열린데이터광장 (`seoul`) | 따릉이 월별 이용정보 (`bike_rent_month`) | 지원 |
410
+ | 통계청 통계지리정보서비스 (`sgis`) | 시도 행정구역 경계 (`boundary.sido`) | 지원 |
411
+ | 통계청 통계지리정보서비스 (`sgis`) | 시군구 행정구역 경계 (`boundary.sigungu`) | 지원 |
412
+ | 통계청 통계지리정보서비스 (`sgis`) | 읍면동 행정구역 경계 (`boundary.emd`) | 지원 |
343
413
  | 한국은행 ECOS (`bok`) | 기준금리 (`base_rate`) | 지원 |
344
414
  | 통계청 KOSIS (`kosis`) | 인구이동 (`population_migration`) | 지원 |
345
415
  | 지방재정365 (`lofin`) | 세출결산총괄 (`expenditure_budget`) | 지원 |
@@ -351,6 +421,16 @@ print(df.head())
351
421
 
352
422
  > 검증 수준 및 실API 최종 검증일 등 상세 정보는 [SUPPORTED_DATA.md](./SUPPORTED_DATA.md)를 참고하세요.
353
423
 
424
+ ### 비상구 (Escape Hatches)
425
+
426
+ 정규화된 데이터셋이 아닌, 미등록 endpoint를 즉시 호출할 수 있게 해주는 raw 비상구입니다. 정규화·페이지네이션·스키마 보장이 없으며 호출자가 원본 응답을 직접 처리해야 합니다.
427
+
428
+ | Provider | 비상구 키 | 용도 |
429
+ |---|---|---|
430
+ | 공공데이터포털 (`datago`) | `datago.generic` | 카탈로그에 없는 임의의 data.go.kr API를 `call_raw(operation, _base_url=..., **params)`로 호출 |
431
+
432
+ 자세한 사용법은 [docs/providers/datago.md](./docs/providers/datago.md#generic-범용-엔드포인트)와 [SUPPORTED_DATA.md](./SUPPORTED_DATA.md#비상구--고급-기능-escape-hatches)를 참고하세요.
433
+
354
434
  ## 문서 가이드 (Document Guide)
355
435
 
356
436
  KPubData의 설계 철학과 사용 방법을 안내하는 문서 목록입니다.
@@ -376,6 +456,9 @@ KPubData의 설계 철학과 사용 방법을 안내하는 문서 목록입니
376
456
 
377
457
  ### 상세 참고 자료
378
458
  - [quickstart.md](./docs/quickstart.md): **처음 사용자를 위한 단계별 빠른 시작 가이드**
459
+ - [cli.md](./docs/cli.md): **CLI 설치 확인, 서브커맨드, 출력 형식, 종료 코드**
460
+ - [caching.md](./docs/caching.md): **디스크 기반 응답 캐시 활성화, TTL, 정리 방법**
461
+ - [logging.md](./docs/logging.md): **로깅 활성화 및 로거 이름 규칙**
379
462
  - [product-family-architecture.md](./docs/product-family-architecture.md): **KPubData 제품군 전체 시스템 아키텍처** (3개 저장소 관계도)
380
463
  - [architecture-diagrams.md](./docs/architecture-diagrams.md): 아키텍처 시각화 다이어그램
381
464
  - [datago-api-reference.md](./docs/datago-api-reference.md): 공공데이터포털(data.go.kr) API 연동 참고 자료
@@ -412,4 +495,3 @@ KPubData의 설계 철학과 사용 방법을 안내하는 문서 목록입니
412
495
 
413
496
  ### v0.3
414
497
  - 표준 코어를 기반으로 한 경량 [MCP](https://modelcontextprotocol.io/)(Model Context Protocol — AI 모델이 외부 도구를 사용하는 표준 규약) 어댑터 지원
415
-
@@ -124,6 +124,26 @@ KPubData가 지원하는 각 기관의 API 키를 발급받아 [환경 변수](h
124
124
  - **SSL 참고**: 서버의 TLS 설정 특성상, KPubData가 내부적으로 SSL 설정을 자동 조정합니다.
125
125
  - **환경 변수**: `KPUBDATA_LOFIN_API_KEY`
126
126
 
127
+ #### 지방행정인허가 (data.go.kr) — `localdata`
128
+ - **가입 URL**: [https://www.data.go.kr](https://www.data.go.kr)
129
+ - **절차**: 회원가입 → 지방행정인허가 Open API(일반음식점/휴게음식점) 활용신청 → 승인 후 인증키 확인
130
+ - **환경 변수**: `KPUBDATA_LOCALDATA_API_KEY`
131
+
132
+ #### 서울 열린데이터광장 (data.seoul.go.kr) — `seoul`
133
+ - **가입 URL**: [https://data.seoul.go.kr/](https://data.seoul.go.kr/)
134
+ - **절차**: 회원가입 → 원하는 Open API 페이지에서 인증키 신청/확인 → 마이페이지에서 발급 키 확인
135
+ - **참고**: 서울 Open API는 인증키를 쿼리스트링이 아니라 URL 경로 세그먼트로 전달합니다.
136
+ - **환경 변수**: `KPUBDATA_SEOUL_API_KEY`
137
+
138
+ #### 통계청 통계지리정보서비스 (sgis.kostat.go.kr) — `sgis`
139
+ - **가입 URL**: [https://sgis.kostat.go.kr/developer/html/main.html](https://sgis.kostat.go.kr/developer/html/main.html)
140
+ - **절차**: 회원가입 → 개발지원센터에서 서비스 ID/Secret 발급 → 인증 API로 accessToken 교환
141
+ - **인증 방식**: `consumer_key` + `consumer_secret` 2단계
142
+ - **환경 변수**:
143
+ - `KPUBDATA_SGIS_API_KEY` (`consumer_key`)
144
+ - `KPUBDATA_SGIS_CONSUMER_SECRET` (`consumer_secret`)
145
+ - **대안 입력**: 코드에서 `provider_keys["sgis"]`에 `"consumer_key:consumer_secret"` 형태를 직접 전달 가능
146
+
127
147
  #### 환경 변수 설정 예시
128
148
  ```bash
129
149
  # 공공데이터포털 (data.go.kr)
@@ -137,6 +157,16 @@ export KPUBDATA_KOSIS_API_KEY="your-kosis-api-key"
137
157
 
138
158
  # 지방재정365
139
159
  export KPUBDATA_LOFIN_API_KEY="your-lofin-api-key"
160
+
161
+ # 지방행정인허가
162
+ export KPUBDATA_LOCALDATA_API_KEY="your-localdata-service-key"
163
+
164
+ # 서울 열린데이터광장
165
+ export KPUBDATA_SEOUL_API_KEY="your-seoul-api-key"
166
+
167
+ # 통계청 SGIS
168
+ export KPUBDATA_SGIS_API_KEY="your-sgis-consumer-key"
169
+ export KPUBDATA_SGIS_CONSUMER_SECRET="your-sgis-consumer-secret"
140
170
  ```
141
171
 
142
172
  ### 2. 클라이언트 생성
@@ -153,6 +183,9 @@ client = Client(provider_keys={
153
183
  "bok": "YOUR_BOK_API_KEY",
154
184
  "kosis": "YOUR_KOSIS_API_KEY",
155
185
  "lofin": "YOUR_LOFIN_API_KEY",
186
+ "localdata": "YOUR_DATA_GO_KR_API_KEY",
187
+ "seoul": "YOUR_SEOUL_API_KEY",
188
+ "sgis": "YOUR_SGIS_CONSUMER_KEY:YOUR_SGIS_CONSUMER_SECRET",
156
189
  })
157
190
  ```
158
191
 
@@ -168,6 +201,14 @@ for ds in client.datasets.search("예보"):
168
201
  print(ds.id, ds.name, ds.operations)
169
202
  ```
170
203
 
204
+ ### CLI로 즉시 사용하기
205
+
206
+ 설치가 끝나면 `kpubdata` 명령이 함께 등록됩니다. 간단한 탐색이나 파라미터 실험은 스크립트 없이 바로 실행할 수 있습니다.
207
+
208
+ ```bash
209
+ kpubdata fetch bok.base_rate -p start_date=202401 -p end_date=202403 --format table
210
+ ```
211
+
171
212
  ### 4. 레코드 조회
172
213
 
173
214
  ```python
@@ -260,7 +301,18 @@ for item in result.items[:5]:
260
301
  # ...
261
302
  ```
262
303
 
263
- ### 9. 전체 페이지 자동 조회 (list_all)
304
+ ### 9. 지방행정인허가 조회 (Localdata)
305
+
306
+ ```python
307
+ # 지방행정인허가 (Localdata) - 일반음식점
308
+ client = Client(provider_keys={"localdata": "YOUR_DATA_GO_KR_API_KEY"})
309
+ ds = client.dataset("localdata.general_restaurant")
310
+ result = ds.list(page_size=10)
311
+ for item in result.items:
312
+ print(item["BPLC_NM"], item["ROAD_NM_ADDR"])
313
+ ```
314
+
315
+ ### 10. 전체 페이지 자동 조회 (list_all)
264
316
 
265
317
  대량의 데이터를 페이지 단위로 자동 순회하려면 `list_all()`을 사용합니다.
266
318
 
@@ -274,7 +326,7 @@ for batch in ds.list_all(fyr="2024"):
274
326
  print(item)
275
327
  ```
276
328
 
277
- ### 10. pandas DataFrame 변환
329
+ ### 11. pandas DataFrame 변환
278
330
 
279
331
  조회 결과를 pandas DataFrame으로 변환하여 분석할 수 있습니다.
280
332
 
@@ -303,6 +355,24 @@ print(df.head())
303
355
  | 공공데이터포털 (`datago`) | 버스도착정보 (`bus_arrival`) | 지원 |
304
356
  | 공공데이터포털 (`datago`) | 병원정보 (`hospital_info`) | 지원 |
305
357
  | 공공데이터포털 (`datago`) | 아파트매매 실거래가 (`apt_trade`) | 지원 |
358
+ | 공공데이터포털 (`datago`) | 아파트 전월세 실거래가 (`apt_rent`) | 지원 |
359
+ | 공공데이터포털 (`datago`) | 오피스텔 매매 실거래가 (`offi_trade`) | 지원 |
360
+ | 공공데이터포털 (`datago`) | 오피스텔 전월세 실거래가 (`offi_rent`) | 지원 |
361
+ | 공공데이터포털 (`datago`) | 연립다세대 매매 실거래가 (`rh_trade`) | 지원 |
362
+ | 공공데이터포털 (`datago`) | 연립다세대 전월세 실거래가 (`rh_rent`) | 지원 |
363
+ | 공공데이터포털 (`datago`) | 단독/다가구 매매 실거래가 (`sh_trade`) | 지원 |
364
+ | 공공데이터포털 (`datago`) | 단독/다가구 전월세 실거래가 (`sh_rent`) | 지원 |
365
+ | 공공데이터포털 (`datago`) | 한국관광공사 지역기반 관광정보 (`tour_kor_area`) | 지원 |
366
+ | 공공데이터포털 (`datago`) | 한국관광공사 위치기반 관광정보 (`tour_kor_location`) | 지원 |
367
+ | 공공데이터포털 (`datago`) | 한국관광공사 키워드 검색 (`tour_kor_keyword`) | 지원 |
368
+ | 공공데이터포털 (`datago`) | 한국관광공사 행사정보 (`tour_kor_festival`) | 지원 |
369
+ | 공공데이터포털 (`datago`) | 서울교통공사 실시간 운임정보 (`metro_fare`) | 지원 |
370
+ | 공공데이터포털 (`datago`) | 서울교통공사 최단경로 이동정보 (`metro_path`) | 지원 |
371
+ | 서울 열린데이터광장 (`seoul`) | 지하철 실시간 도착정보 (`subway_realtime_arrival`) | 지원 |
372
+ | 서울 열린데이터광장 (`seoul`) | 따릉이 월별 이용정보 (`bike_rent_month`) | 지원 |
373
+ | 통계청 통계지리정보서비스 (`sgis`) | 시도 행정구역 경계 (`boundary.sido`) | 지원 |
374
+ | 통계청 통계지리정보서비스 (`sgis`) | 시군구 행정구역 경계 (`boundary.sigungu`) | 지원 |
375
+ | 통계청 통계지리정보서비스 (`sgis`) | 읍면동 행정구역 경계 (`boundary.emd`) | 지원 |
306
376
  | 한국은행 ECOS (`bok`) | 기준금리 (`base_rate`) | 지원 |
307
377
  | 통계청 KOSIS (`kosis`) | 인구이동 (`population_migration`) | 지원 |
308
378
  | 지방재정365 (`lofin`) | 세출결산총괄 (`expenditure_budget`) | 지원 |
@@ -314,6 +384,16 @@ print(df.head())
314
384
 
315
385
  > 검증 수준 및 실API 최종 검증일 등 상세 정보는 [SUPPORTED_DATA.md](./SUPPORTED_DATA.md)를 참고하세요.
316
386
 
387
+ ### 비상구 (Escape Hatches)
388
+
389
+ 정규화된 데이터셋이 아닌, 미등록 endpoint를 즉시 호출할 수 있게 해주는 raw 비상구입니다. 정규화·페이지네이션·스키마 보장이 없으며 호출자가 원본 응답을 직접 처리해야 합니다.
390
+
391
+ | Provider | 비상구 키 | 용도 |
392
+ |---|---|---|
393
+ | 공공데이터포털 (`datago`) | `datago.generic` | 카탈로그에 없는 임의의 data.go.kr API를 `call_raw(operation, _base_url=..., **params)`로 호출 |
394
+
395
+ 자세한 사용법은 [docs/providers/datago.md](./docs/providers/datago.md#generic-범용-엔드포인트)와 [SUPPORTED_DATA.md](./SUPPORTED_DATA.md#비상구--고급-기능-escape-hatches)를 참고하세요.
396
+
317
397
  ## 문서 가이드 (Document Guide)
318
398
 
319
399
  KPubData의 설계 철학과 사용 방법을 안내하는 문서 목록입니다.
@@ -339,6 +419,9 @@ KPubData의 설계 철학과 사용 방법을 안내하는 문서 목록입니
339
419
 
340
420
  ### 상세 참고 자료
341
421
  - [quickstart.md](./docs/quickstart.md): **처음 사용자를 위한 단계별 빠른 시작 가이드**
422
+ - [cli.md](./docs/cli.md): **CLI 설치 확인, 서브커맨드, 출력 형식, 종료 코드**
423
+ - [caching.md](./docs/caching.md): **디스크 기반 응답 캐시 활성화, TTL, 정리 방법**
424
+ - [logging.md](./docs/logging.md): **로깅 활성화 및 로거 이름 규칙**
342
425
  - [product-family-architecture.md](./docs/product-family-architecture.md): **KPubData 제품군 전체 시스템 아키텍처** (3개 저장소 관계도)
343
426
  - [architecture-diagrams.md](./docs/architecture-diagrams.md): 아키텍처 시각화 다이어그램
344
427
  - [datago-api-reference.md](./docs/datago-api-reference.md): 공공데이터포털(data.go.kr) API 연동 참고 자료
@@ -375,4 +458,3 @@ KPubData의 설계 철학과 사용 방법을 안내하는 문서 목록입니
375
458
 
376
459
  ### v0.3
377
460
  - 표준 코어를 기반으로 한 경량 [MCP](https://modelcontextprotocol.io/)(Model Context Protocol — AI 모델이 외부 도구를 사용하는 표준 규약) 어댑터 지원
378
-