sodas-python-sdk 1.0.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.
- sodas_python_sdk-1.0.0/MANIFEST.in +4 -0
- sodas_python_sdk-1.0.0/PKG-INFO +197 -0
- sodas_python_sdk-1.0.0/README.md +173 -0
- sodas_python_sdk-1.0.0/pyproject.toml +65 -0
- sodas_python_sdk-1.0.0/setup.cfg +4 -0
- sodas_python_sdk-1.0.0/setup.py +3 -0
- sodas_python_sdk-1.0.0/sodas_python_sdk.egg-info/PKG-INFO +197 -0
- sodas_python_sdk-1.0.0/sodas_python_sdk.egg-info/SOURCES.txt +50 -0
- sodas_python_sdk-1.0.0/sodas_python_sdk.egg-info/dependency_links.txt +1 -0
- sodas_python_sdk-1.0.0/sodas_python_sdk.egg-info/requires.txt +3 -0
- sodas_python_sdk-1.0.0/sodas_python_sdk.egg-info/top_level.txt +1 -0
- sodas_python_sdk-1.0.0/sodas_sdk/__init__.py +52 -0
- sodas_python_sdk-1.0.0/sodas_sdk/core/__init__.py +0 -0
- sodas_python_sdk-1.0.0/sodas_sdk/core/auth.py +203 -0
- sodas_python_sdk-1.0.0/sodas_sdk/core/error.py +104 -0
- sodas_python_sdk-1.0.0/sodas_sdk/core/functionality_error.py +137 -0
- sodas_python_sdk-1.0.0/sodas_sdk/core/init.py +75 -0
- sodas_python_sdk-1.0.0/sodas_sdk/core/type.py +88 -0
- sodas_python_sdk-1.0.0/sodas_sdk/core/util.py +88 -0
- sodas_python_sdk-1.0.0/sodas_sdk/core/values.py +30 -0
- sodas_python_sdk-1.0.0/sodas_sdk/py.typed +1 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/DCAT/__init__.py +0 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/DCAT/data_service.py +70 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/DCAT/dataset.py +300 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/DCAT/dataset_series.py +180 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/DCAT/dcat_resource.py +473 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/DCAT/distribution.py +332 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/DCAT/version_info.py +112 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/__init__.py +0 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/dictionary/__init__.py +0 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/dictionary/term.py +185 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/dictionary/vocabulary.py +215 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/governance_class.py +187 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/profile_model.py +214 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/sodas_sdk_class.py +112 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/utility/create_default_templates.py +100 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/utility/default_templates/constraint.py +73 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/utility/default_templates/example.py +76 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/utility/default_templates/mapping.py +84 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/utility/default_templates/schema.py +109 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/utility/default_templates/specification.py +64 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/utility/default_templates/type.py +91 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/utility/default_templates/validation.py +64 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/utility/default_templates/vocabulary.py +100 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/validation/__init__.py +19 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/validation/quality.py +217 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/validation/template.py +412 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_class/validation/type.py +539 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_file/__init__.py +0 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_file/data_file.py +78 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_file/sodas_sdk_file.py +72 -0
- sodas_python_sdk-1.0.0/sodas_sdk/sodas_sdk_file/thumbnail_file.py +9 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sodas-python-sdk
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: SODAS 프레임워크를 위한 공식 Python SDK. DCAT 기반 데이터셋 메타데이터 관리.
|
|
5
|
+
Author: SODAS
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Repository, https://github.com/sodas/py-sodas-sdk
|
|
8
|
+
Project-URL: Documentation, https://github.com/sodas/py-sodas-sdk#readme
|
|
9
|
+
Keywords: sodas,sdk,dcat,metadata,data-catalog
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
|
+
Requires-Python: >=3.8
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
Requires-Dist: pydantic>=2.0.0
|
|
22
|
+
Requires-Dist: python-dateutil>=2.8.0
|
|
23
|
+
Requires-Dist: requests>=2.25.0
|
|
24
|
+
|
|
25
|
+
# 🛠️ SODAS TS SDK
|
|
26
|
+
|
|
27
|
+
dist/index.node.js : for node
|
|
28
|
+
dist/index.browser.js : for browser
|
|
29
|
+
dist/index.legacy.js : for webpack version 4 [ especially for governace portal ]
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 📜 SODAS_SDK_CLASS Policy
|
|
34
|
+
|
|
35
|
+
- 모든 **SODAS_SDK_CLASS**는 해당 클래스와 **DTO 인터페이스**를 가진다.
|
|
36
|
+
- 모든 **SODAS_SDK_CLASS** 인스턴스는 **CRUDL 기능**을 제공하며, 인터페이스는 다음과 같다:
|
|
37
|
+
- create_db_record
|
|
38
|
+
- get_db_record
|
|
39
|
+
- update_db_record
|
|
40
|
+
- delete_db_record
|
|
41
|
+
- list_db_records
|
|
42
|
+
- **time 필드**는 Backend API와의 통신 시 **iso_format**을 사용한다.
|
|
43
|
+
- **create_db_record** 메서드를 통해서만 **ID와 IRI**가 생성된다.
|
|
44
|
+
- **ID와 IRI**가 이미 존재하는 경우, **create_db_record** 호출이 불가능하며 **update_db_record**만 호출 가능하다.
|
|
45
|
+
- **delete_db_resource** 호출 시 해당 객체는 기본생성인스턴스가 된다.
|
|
46
|
+
- **DCAT_MODEL**의 경우 다음 필드들은 **백엔드 create API** 호출을 통해서만 생성된다:
|
|
47
|
+
- resource_type, ID, IRI, created_at, dcat_model_id (e.g., dataset_id 등)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### DCAT_RESOURCE - Thumbnail Policy
|
|
52
|
+
|
|
53
|
+
- 모든 **DCAT Resource CLASS**는 Thumbnail 프로퍼티를 가진다.
|
|
54
|
+
- Thumbnail 프로퍼티는 **SODAS_SDK_FILE** 클래스를 상속받은 **thumbnail_file** 클래스의 인스턴스이다.
|
|
55
|
+
- 이미 thumbnail_url이 있는 경우 Thumbnail 필드를 설정하면 thumbnail_url은 null로 설정된다.
|
|
56
|
+
- Thumbnail은 DCAT_RESOURCE 인스턴스의 create_db_record 메소드 호출 시 업로드된다. (단, Thumbnail의 업로드가 먼저 호출되므로 DCAT_RESOURCE.create_db_record에서 에러가 발생할 경우 Thumbnail만 업로드될 가능성이 있다.)
|
|
57
|
+
- 이미 db_record가 있으면서 Thumbnail을 설정한 경우에는 DCAT_RESOURCE 인스턴스의 update_db_record 메소드 호출 시 기존의 Thumbnail은 제거되고 새로운 Thumbnail을 연결한다.
|
|
58
|
+
- Thumbnail은 DCAT_RESOURCE 인스턴스의 삭제 시 삭제된다.
|
|
59
|
+
- SDK는 Thumbnail File의 생성요청의 책임을, SODAS_PROFILE 백엔드는 생성과 삭제의 책임을 가진다.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
### DCAT_RESOURCE - version_info Policy
|
|
64
|
+
|
|
65
|
+
- DCAT_RESOURCE 인스턴스는 create_db_record/get_db_record/update_db_record/list_db_records를 통해 관련된 version_info들을 불러온다.
|
|
66
|
+
- create_db_record/update_db_record/delete_db_record를 통해 새롭게 버전 정보가 변경돼도 인스턴스 간 version_info는 동기화되지 않는다. 따라서 의식적으로 get_db_record를 통한 동기화가 필요하다.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### Distribution - uploading_data Policy
|
|
71
|
+
|
|
72
|
+
- 모든 **DCAT Distribution CLASS**는 uploading_data 프로퍼티를 가진다.
|
|
73
|
+
- uploading_data 프로퍼티는 **SODAS_SDK_FILE** 클래스를 상속받은 **data_file** 클래스의 인스턴스이다.
|
|
74
|
+
- 이미 download_url 있는 경우 uploading_data 필드를 설정하면 download_url은 null로 설정된다.
|
|
75
|
+
- uploading_data는 Distribution 인스턴스의 create_db_record 메소드 호출 시 업로드된다. (단, Data의 업로드가 먼저 호출되므로 Distribution.create_db_record에서 에러가 발생할 경우 Data만 업로드될 가능성이 있다.)
|
|
76
|
+
- 이미 db_record가 있으면서 uploading_data를 설정한 경우 update_db_record 메소드 호출 시 기존의 Object File은 제거되고 새로운 Object File을 download_url과 연결한다.
|
|
77
|
+
- uploading_data의 실제 Object File은 Distribution 인스턴스 삭제 시 삭제된다.
|
|
78
|
+
- SDK는 Object File의 생성 요청의 책임을, SODAS_PROFILE 백엔드는 생성과 삭제의 책임을 가진다.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### Dataset - Distribution Policy
|
|
83
|
+
|
|
84
|
+
- Dataset의 메서드로 Dataset Instance와 연관된 Distributions를 만들 수 있다.
|
|
85
|
+
- Dataset.create_db_record를 통해 연관된 Distribution들의 create_db_record가 호출되며, 최종적으로 Dataset과 Distribution 모두 ID와 IRI를 가지게 된다.
|
|
86
|
+
- 이 시점에서 Distribution은 is_distribution_of를 연관된 Dataset의 ID로 가지게 된다.
|
|
87
|
+
- update_db_record 호출 시 하위 모든 Distribution의 update_db_record도 호출된다.
|
|
88
|
+
- 새롭게 추가된 Distribution은 레코드를 새롭게 만들고, 연결이 끊어진 Distribution은 삭제된다.
|
|
89
|
+
- delete_db_resource 호출 시 Dataset과 연관된 모든 Distribution은 DB에서 삭제되며 인스턴스들은 기본생성인스턴스가 된다.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### DatasetSeries - Dataset Policy
|
|
94
|
+
|
|
95
|
+
- DatasetSeries는 create_db_record/get_db_record/update_db_record/list_db_records를 통해 관련된 series_members(Dataset)들을 불러온다.
|
|
96
|
+
- DatasetSeries는 series_member_ids 필드로 Dataset의 순서와 관계를 관리한다.
|
|
97
|
+
- delete_db_record 호출 시 DatasetSeries만 DB에서 삭제되며, 관련된 Dataset 인스턴스는 기본생성인스턴스로 초기화된다.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 🧪 CRUDL Test Policy
|
|
102
|
+
|
|
103
|
+
### Test Levels
|
|
104
|
+
|
|
105
|
+
- **Small 테스트**: 클래스 자체의 메서드 테스트
|
|
106
|
+
- **Medium 테스트**: SDK와 백엔드의 통합 테스트
|
|
107
|
+
- **Big 테스트**: 사용자 시나리오 엔드투엔드 테스트 (현재는 없음)
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### 🟢 1. CREATE
|
|
112
|
+
|
|
113
|
+
#### ✅ 테스트 케이스:
|
|
114
|
+
|
|
115
|
+
- **foreign_key 필드**를 제외한 모든 필드 중 하나만 null 값으로 설정한 케이스를 테스트한다.
|
|
116
|
+
|
|
117
|
+
#### 📝 테스트 정책:
|
|
118
|
+
|
|
119
|
+
1. DTO를 기반으로 인스턴스를 세팅한다.
|
|
120
|
+
2. **create_db_record** 호출 후 **ID와 IRI** 생성 여부를 확인한다.
|
|
121
|
+
3. API 결과와 인스턴스를 비교한다.
|
|
122
|
+
4. **ID와 IRI**가 설정된 인스턴스에서 **create_db_record** 호출 시 에러 발생을 확인한다.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### 🟢 2. GET
|
|
127
|
+
|
|
128
|
+
#### ✅ 테스트 케이스:
|
|
129
|
+
|
|
130
|
+
- **foreign_key 필드**를 제외한 모든 필드 중 하나만 null 값으로 설정한 케이스를 테스트한다.
|
|
131
|
+
|
|
132
|
+
#### 📝 테스트 정책:
|
|
133
|
+
|
|
134
|
+
1. DTO를 기반으로 인스턴스를 세팅한다.
|
|
135
|
+
2. **create_db_record**로 인스턴스를 생성한다.
|
|
136
|
+
3. **get_db_record**로 생성된 인스턴스를 가져온다.
|
|
137
|
+
4. 생성 및 조회된 인스턴스를 비교한다.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 🟢 3. UPDATE
|
|
142
|
+
|
|
143
|
+
#### ✅ 테스트 케이스:
|
|
144
|
+
|
|
145
|
+
- **foreign_key 필드**를 제외한 모든 필드 중 하나만 null 값으로 설정한 케이스를 테스트한다.
|
|
146
|
+
|
|
147
|
+
#### 📝 테스트 정책:
|
|
148
|
+
|
|
149
|
+
1. 모든 필드가 채워진 인스턴스를 세팅한다.
|
|
150
|
+
2. **ID와 IRI**가 없는 인스턴스에서 **update_db_record** 호출 시 에러 발생을 확인한다.
|
|
151
|
+
3. **create_db_record**로 인스턴스를 생성한다.
|
|
152
|
+
4. DTO를 기반으로 인스턴스를 재설정한다.
|
|
153
|
+
5. **update_db_record**로 인스턴스를 업데이트한다.
|
|
154
|
+
6. API 결과와 인스턴스를 비교한다.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
### 🟢 4. DELETE
|
|
159
|
+
|
|
160
|
+
#### ✅ 테스트 케이스:
|
|
161
|
+
|
|
162
|
+
- **모든 필드가 채워진 케이스 하나**로 테스트한다.
|
|
163
|
+
|
|
164
|
+
#### 📝 테스트 정책:
|
|
165
|
+
|
|
166
|
+
1. 모든 필드가 채워진 인스턴스를 세팅한다.
|
|
167
|
+
2. **create_db_record**로 인스턴스를 생성한다.
|
|
168
|
+
3. 생성된 인스턴스를 복사한다.
|
|
169
|
+
4. **delete_db_record**로 인스턴스를 삭제한다.
|
|
170
|
+
5. 삭제된 인스턴스의 모든 필드가 null인지 확인한다.
|
|
171
|
+
6. 복사된 인스턴스에서 **delete_db_record** 호출 시 에러 발생을 확인한다.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
### 🟢 5. LIST
|
|
176
|
+
|
|
177
|
+
#### ✅ 테스트 케이스:
|
|
178
|
+
|
|
179
|
+
- **모든 필드가 채워진 인스턴스 12개**를 만들고, **페이지 수 5개**로 테스트한다.
|
|
180
|
+
|
|
181
|
+
#### 📝 테스트 정책:
|
|
182
|
+
|
|
183
|
+
1. 지정된 갯수만큼 인스턴스를 생성하고 저장한다.
|
|
184
|
+
2. **list_db_records**를 ASC 및 DESC 방식으로 호출하고 총 수량과 순서를 비교한다.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 🧪 SODAS_SDK_FILE Test Policy
|
|
189
|
+
|
|
190
|
+
#### 📝 테스트 정책:
|
|
191
|
+
|
|
192
|
+
1. **SODAS_SDK_FILE.upload()** 호출 후 파일을 업로드한다.
|
|
193
|
+
2. **get_download_url()**로 다운로드 URL을 확인하고, 원본 파일과 동일한지 확인한다.
|
|
194
|
+
3. **SODAS_SDK_FILE.remove()** 호출 후 삭제 및 URL 유효성 확인.
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
MANAGED BY HAZE1211
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# 🛠️ SODAS TS SDK
|
|
2
|
+
|
|
3
|
+
dist/index.node.js : for node
|
|
4
|
+
dist/index.browser.js : for browser
|
|
5
|
+
dist/index.legacy.js : for webpack version 4 [ especially for governace portal ]
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📜 SODAS_SDK_CLASS Policy
|
|
10
|
+
|
|
11
|
+
- 모든 **SODAS_SDK_CLASS**는 해당 클래스와 **DTO 인터페이스**를 가진다.
|
|
12
|
+
- 모든 **SODAS_SDK_CLASS** 인스턴스는 **CRUDL 기능**을 제공하며, 인터페이스는 다음과 같다:
|
|
13
|
+
- create_db_record
|
|
14
|
+
- get_db_record
|
|
15
|
+
- update_db_record
|
|
16
|
+
- delete_db_record
|
|
17
|
+
- list_db_records
|
|
18
|
+
- **time 필드**는 Backend API와의 통신 시 **iso_format**을 사용한다.
|
|
19
|
+
- **create_db_record** 메서드를 통해서만 **ID와 IRI**가 생성된다.
|
|
20
|
+
- **ID와 IRI**가 이미 존재하는 경우, **create_db_record** 호출이 불가능하며 **update_db_record**만 호출 가능하다.
|
|
21
|
+
- **delete_db_resource** 호출 시 해당 객체는 기본생성인스턴스가 된다.
|
|
22
|
+
- **DCAT_MODEL**의 경우 다음 필드들은 **백엔드 create API** 호출을 통해서만 생성된다:
|
|
23
|
+
- resource_type, ID, IRI, created_at, dcat_model_id (e.g., dataset_id 등)
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
### DCAT_RESOURCE - Thumbnail Policy
|
|
28
|
+
|
|
29
|
+
- 모든 **DCAT Resource CLASS**는 Thumbnail 프로퍼티를 가진다.
|
|
30
|
+
- Thumbnail 프로퍼티는 **SODAS_SDK_FILE** 클래스를 상속받은 **thumbnail_file** 클래스의 인스턴스이다.
|
|
31
|
+
- 이미 thumbnail_url이 있는 경우 Thumbnail 필드를 설정하면 thumbnail_url은 null로 설정된다.
|
|
32
|
+
- Thumbnail은 DCAT_RESOURCE 인스턴스의 create_db_record 메소드 호출 시 업로드된다. (단, Thumbnail의 업로드가 먼저 호출되므로 DCAT_RESOURCE.create_db_record에서 에러가 발생할 경우 Thumbnail만 업로드될 가능성이 있다.)
|
|
33
|
+
- 이미 db_record가 있으면서 Thumbnail을 설정한 경우에는 DCAT_RESOURCE 인스턴스의 update_db_record 메소드 호출 시 기존의 Thumbnail은 제거되고 새로운 Thumbnail을 연결한다.
|
|
34
|
+
- Thumbnail은 DCAT_RESOURCE 인스턴스의 삭제 시 삭제된다.
|
|
35
|
+
- SDK는 Thumbnail File의 생성요청의 책임을, SODAS_PROFILE 백엔드는 생성과 삭제의 책임을 가진다.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
### DCAT_RESOURCE - version_info Policy
|
|
40
|
+
|
|
41
|
+
- DCAT_RESOURCE 인스턴스는 create_db_record/get_db_record/update_db_record/list_db_records를 통해 관련된 version_info들을 불러온다.
|
|
42
|
+
- create_db_record/update_db_record/delete_db_record를 통해 새롭게 버전 정보가 변경돼도 인스턴스 간 version_info는 동기화되지 않는다. 따라서 의식적으로 get_db_record를 통한 동기화가 필요하다.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### Distribution - uploading_data Policy
|
|
47
|
+
|
|
48
|
+
- 모든 **DCAT Distribution CLASS**는 uploading_data 프로퍼티를 가진다.
|
|
49
|
+
- uploading_data 프로퍼티는 **SODAS_SDK_FILE** 클래스를 상속받은 **data_file** 클래스의 인스턴스이다.
|
|
50
|
+
- 이미 download_url 있는 경우 uploading_data 필드를 설정하면 download_url은 null로 설정된다.
|
|
51
|
+
- uploading_data는 Distribution 인스턴스의 create_db_record 메소드 호출 시 업로드된다. (단, Data의 업로드가 먼저 호출되므로 Distribution.create_db_record에서 에러가 발생할 경우 Data만 업로드될 가능성이 있다.)
|
|
52
|
+
- 이미 db_record가 있으면서 uploading_data를 설정한 경우 update_db_record 메소드 호출 시 기존의 Object File은 제거되고 새로운 Object File을 download_url과 연결한다.
|
|
53
|
+
- uploading_data의 실제 Object File은 Distribution 인스턴스 삭제 시 삭제된다.
|
|
54
|
+
- SDK는 Object File의 생성 요청의 책임을, SODAS_PROFILE 백엔드는 생성과 삭제의 책임을 가진다.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### Dataset - Distribution Policy
|
|
59
|
+
|
|
60
|
+
- Dataset의 메서드로 Dataset Instance와 연관된 Distributions를 만들 수 있다.
|
|
61
|
+
- Dataset.create_db_record를 통해 연관된 Distribution들의 create_db_record가 호출되며, 최종적으로 Dataset과 Distribution 모두 ID와 IRI를 가지게 된다.
|
|
62
|
+
- 이 시점에서 Distribution은 is_distribution_of를 연관된 Dataset의 ID로 가지게 된다.
|
|
63
|
+
- update_db_record 호출 시 하위 모든 Distribution의 update_db_record도 호출된다.
|
|
64
|
+
- 새롭게 추가된 Distribution은 레코드를 새롭게 만들고, 연결이 끊어진 Distribution은 삭제된다.
|
|
65
|
+
- delete_db_resource 호출 시 Dataset과 연관된 모든 Distribution은 DB에서 삭제되며 인스턴스들은 기본생성인스턴스가 된다.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### DatasetSeries - Dataset Policy
|
|
70
|
+
|
|
71
|
+
- DatasetSeries는 create_db_record/get_db_record/update_db_record/list_db_records를 통해 관련된 series_members(Dataset)들을 불러온다.
|
|
72
|
+
- DatasetSeries는 series_member_ids 필드로 Dataset의 순서와 관계를 관리한다.
|
|
73
|
+
- delete_db_record 호출 시 DatasetSeries만 DB에서 삭제되며, 관련된 Dataset 인스턴스는 기본생성인스턴스로 초기화된다.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 🧪 CRUDL Test Policy
|
|
78
|
+
|
|
79
|
+
### Test Levels
|
|
80
|
+
|
|
81
|
+
- **Small 테스트**: 클래스 자체의 메서드 테스트
|
|
82
|
+
- **Medium 테스트**: SDK와 백엔드의 통합 테스트
|
|
83
|
+
- **Big 테스트**: 사용자 시나리오 엔드투엔드 테스트 (현재는 없음)
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### 🟢 1. CREATE
|
|
88
|
+
|
|
89
|
+
#### ✅ 테스트 케이스:
|
|
90
|
+
|
|
91
|
+
- **foreign_key 필드**를 제외한 모든 필드 중 하나만 null 값으로 설정한 케이스를 테스트한다.
|
|
92
|
+
|
|
93
|
+
#### 📝 테스트 정책:
|
|
94
|
+
|
|
95
|
+
1. DTO를 기반으로 인스턴스를 세팅한다.
|
|
96
|
+
2. **create_db_record** 호출 후 **ID와 IRI** 생성 여부를 확인한다.
|
|
97
|
+
3. API 결과와 인스턴스를 비교한다.
|
|
98
|
+
4. **ID와 IRI**가 설정된 인스턴스에서 **create_db_record** 호출 시 에러 발생을 확인한다.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### 🟢 2. GET
|
|
103
|
+
|
|
104
|
+
#### ✅ 테스트 케이스:
|
|
105
|
+
|
|
106
|
+
- **foreign_key 필드**를 제외한 모든 필드 중 하나만 null 값으로 설정한 케이스를 테스트한다.
|
|
107
|
+
|
|
108
|
+
#### 📝 테스트 정책:
|
|
109
|
+
|
|
110
|
+
1. DTO를 기반으로 인스턴스를 세팅한다.
|
|
111
|
+
2. **create_db_record**로 인스턴스를 생성한다.
|
|
112
|
+
3. **get_db_record**로 생성된 인스턴스를 가져온다.
|
|
113
|
+
4. 생성 및 조회된 인스턴스를 비교한다.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### 🟢 3. UPDATE
|
|
118
|
+
|
|
119
|
+
#### ✅ 테스트 케이스:
|
|
120
|
+
|
|
121
|
+
- **foreign_key 필드**를 제외한 모든 필드 중 하나만 null 값으로 설정한 케이스를 테스트한다.
|
|
122
|
+
|
|
123
|
+
#### 📝 테스트 정책:
|
|
124
|
+
|
|
125
|
+
1. 모든 필드가 채워진 인스턴스를 세팅한다.
|
|
126
|
+
2. **ID와 IRI**가 없는 인스턴스에서 **update_db_record** 호출 시 에러 발생을 확인한다.
|
|
127
|
+
3. **create_db_record**로 인스턴스를 생성한다.
|
|
128
|
+
4. DTO를 기반으로 인스턴스를 재설정한다.
|
|
129
|
+
5. **update_db_record**로 인스턴스를 업데이트한다.
|
|
130
|
+
6. API 결과와 인스턴스를 비교한다.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### 🟢 4. DELETE
|
|
135
|
+
|
|
136
|
+
#### ✅ 테스트 케이스:
|
|
137
|
+
|
|
138
|
+
- **모든 필드가 채워진 케이스 하나**로 테스트한다.
|
|
139
|
+
|
|
140
|
+
#### 📝 테스트 정책:
|
|
141
|
+
|
|
142
|
+
1. 모든 필드가 채워진 인스턴스를 세팅한다.
|
|
143
|
+
2. **create_db_record**로 인스턴스를 생성한다.
|
|
144
|
+
3. 생성된 인스턴스를 복사한다.
|
|
145
|
+
4. **delete_db_record**로 인스턴스를 삭제한다.
|
|
146
|
+
5. 삭제된 인스턴스의 모든 필드가 null인지 확인한다.
|
|
147
|
+
6. 복사된 인스턴스에서 **delete_db_record** 호출 시 에러 발생을 확인한다.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
### 🟢 5. LIST
|
|
152
|
+
|
|
153
|
+
#### ✅ 테스트 케이스:
|
|
154
|
+
|
|
155
|
+
- **모든 필드가 채워진 인스턴스 12개**를 만들고, **페이지 수 5개**로 테스트한다.
|
|
156
|
+
|
|
157
|
+
#### 📝 테스트 정책:
|
|
158
|
+
|
|
159
|
+
1. 지정된 갯수만큼 인스턴스를 생성하고 저장한다.
|
|
160
|
+
2. **list_db_records**를 ASC 및 DESC 방식으로 호출하고 총 수량과 순서를 비교한다.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 🧪 SODAS_SDK_FILE Test Policy
|
|
165
|
+
|
|
166
|
+
#### 📝 테스트 정책:
|
|
167
|
+
|
|
168
|
+
1. **SODAS_SDK_FILE.upload()** 호출 후 파일을 업로드한다.
|
|
169
|
+
2. **get_download_url()**로 다운로드 URL을 확인하고, 원본 파일과 동일한지 확인한다.
|
|
170
|
+
3. **SODAS_SDK_FILE.remove()** 호출 후 삭제 및 URL 유효성 확인.
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
MANAGED BY HAZE1211
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61", "wheel", "pydantic"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "sodas-python-sdk"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "SODAS 프레임워크를 위한 공식 Python SDK. DCAT 기반 데이터셋 메타데이터 관리."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.8"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "SODAS" }
|
|
14
|
+
]
|
|
15
|
+
keywords = ["sodas", "sdk", "dcat", "metadata", "data-catalog"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 4 - Beta",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3.8",
|
|
21
|
+
"Programming Language :: Python :: 3.9",
|
|
22
|
+
"Programming Language :: Python :: 3.10",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
26
|
+
]
|
|
27
|
+
dependencies = [
|
|
28
|
+
"pydantic>=2.0.0",
|
|
29
|
+
"python-dateutil>=2.8.0",
|
|
30
|
+
"requests>=2.25.0",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
[project.urls]
|
|
34
|
+
Repository = "https://github.com/sodas/py-sodas-sdk"
|
|
35
|
+
Documentation = "https://github.com/sodas/py-sodas-sdk#readme"
|
|
36
|
+
|
|
37
|
+
[dependency-groups]
|
|
38
|
+
dev = [
|
|
39
|
+
"build>=1.0.0",
|
|
40
|
+
"twine>=5.0.0",
|
|
41
|
+
"pytest>=7.0.0",
|
|
42
|
+
"pytest-asyncio>=0.21.0",
|
|
43
|
+
"httpx>=0.25.0",
|
|
44
|
+
"black>=24.8.0",
|
|
45
|
+
"ruff>=0.15.1",
|
|
46
|
+
"mypy>=1.14.1",
|
|
47
|
+
"types-setuptools",
|
|
48
|
+
"types-requests",
|
|
49
|
+
"types-python-dateutil",
|
|
50
|
+
"types-assertpy",
|
|
51
|
+
"assertpy>=1.1",
|
|
52
|
+
"python-dotenv>=1.0.0",
|
|
53
|
+
"deepdiff>=6.0.0",
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
[tool.uv]
|
|
57
|
+
default-groups = ["dev"]
|
|
58
|
+
|
|
59
|
+
[tool.setuptools.packages.find]
|
|
60
|
+
where = ["."]
|
|
61
|
+
include = ["sodas_sdk*"]
|
|
62
|
+
exclude = ["sodas_sdk.tests"]
|
|
63
|
+
|
|
64
|
+
[tool.setuptools.package-data]
|
|
65
|
+
sodas_sdk = ["py.typed"]
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sodas-python-sdk
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: SODAS 프레임워크를 위한 공식 Python SDK. DCAT 기반 데이터셋 메타데이터 관리.
|
|
5
|
+
Author: SODAS
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Repository, https://github.com/sodas/py-sodas-sdk
|
|
8
|
+
Project-URL: Documentation, https://github.com/sodas/py-sodas-sdk#readme
|
|
9
|
+
Keywords: sodas,sdk,dcat,metadata,data-catalog
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
19
|
+
Requires-Python: >=3.8
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
Requires-Dist: pydantic>=2.0.0
|
|
22
|
+
Requires-Dist: python-dateutil>=2.8.0
|
|
23
|
+
Requires-Dist: requests>=2.25.0
|
|
24
|
+
|
|
25
|
+
# 🛠️ SODAS TS SDK
|
|
26
|
+
|
|
27
|
+
dist/index.node.js : for node
|
|
28
|
+
dist/index.browser.js : for browser
|
|
29
|
+
dist/index.legacy.js : for webpack version 4 [ especially for governace portal ]
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 📜 SODAS_SDK_CLASS Policy
|
|
34
|
+
|
|
35
|
+
- 모든 **SODAS_SDK_CLASS**는 해당 클래스와 **DTO 인터페이스**를 가진다.
|
|
36
|
+
- 모든 **SODAS_SDK_CLASS** 인스턴스는 **CRUDL 기능**을 제공하며, 인터페이스는 다음과 같다:
|
|
37
|
+
- create_db_record
|
|
38
|
+
- get_db_record
|
|
39
|
+
- update_db_record
|
|
40
|
+
- delete_db_record
|
|
41
|
+
- list_db_records
|
|
42
|
+
- **time 필드**는 Backend API와의 통신 시 **iso_format**을 사용한다.
|
|
43
|
+
- **create_db_record** 메서드를 통해서만 **ID와 IRI**가 생성된다.
|
|
44
|
+
- **ID와 IRI**가 이미 존재하는 경우, **create_db_record** 호출이 불가능하며 **update_db_record**만 호출 가능하다.
|
|
45
|
+
- **delete_db_resource** 호출 시 해당 객체는 기본생성인스턴스가 된다.
|
|
46
|
+
- **DCAT_MODEL**의 경우 다음 필드들은 **백엔드 create API** 호출을 통해서만 생성된다:
|
|
47
|
+
- resource_type, ID, IRI, created_at, dcat_model_id (e.g., dataset_id 등)
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### DCAT_RESOURCE - Thumbnail Policy
|
|
52
|
+
|
|
53
|
+
- 모든 **DCAT Resource CLASS**는 Thumbnail 프로퍼티를 가진다.
|
|
54
|
+
- Thumbnail 프로퍼티는 **SODAS_SDK_FILE** 클래스를 상속받은 **thumbnail_file** 클래스의 인스턴스이다.
|
|
55
|
+
- 이미 thumbnail_url이 있는 경우 Thumbnail 필드를 설정하면 thumbnail_url은 null로 설정된다.
|
|
56
|
+
- Thumbnail은 DCAT_RESOURCE 인스턴스의 create_db_record 메소드 호출 시 업로드된다. (단, Thumbnail의 업로드가 먼저 호출되므로 DCAT_RESOURCE.create_db_record에서 에러가 발생할 경우 Thumbnail만 업로드될 가능성이 있다.)
|
|
57
|
+
- 이미 db_record가 있으면서 Thumbnail을 설정한 경우에는 DCAT_RESOURCE 인스턴스의 update_db_record 메소드 호출 시 기존의 Thumbnail은 제거되고 새로운 Thumbnail을 연결한다.
|
|
58
|
+
- Thumbnail은 DCAT_RESOURCE 인스턴스의 삭제 시 삭제된다.
|
|
59
|
+
- SDK는 Thumbnail File의 생성요청의 책임을, SODAS_PROFILE 백엔드는 생성과 삭제의 책임을 가진다.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
### DCAT_RESOURCE - version_info Policy
|
|
64
|
+
|
|
65
|
+
- DCAT_RESOURCE 인스턴스는 create_db_record/get_db_record/update_db_record/list_db_records를 통해 관련된 version_info들을 불러온다.
|
|
66
|
+
- create_db_record/update_db_record/delete_db_record를 통해 새롭게 버전 정보가 변경돼도 인스턴스 간 version_info는 동기화되지 않는다. 따라서 의식적으로 get_db_record를 통한 동기화가 필요하다.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### Distribution - uploading_data Policy
|
|
71
|
+
|
|
72
|
+
- 모든 **DCAT Distribution CLASS**는 uploading_data 프로퍼티를 가진다.
|
|
73
|
+
- uploading_data 프로퍼티는 **SODAS_SDK_FILE** 클래스를 상속받은 **data_file** 클래스의 인스턴스이다.
|
|
74
|
+
- 이미 download_url 있는 경우 uploading_data 필드를 설정하면 download_url은 null로 설정된다.
|
|
75
|
+
- uploading_data는 Distribution 인스턴스의 create_db_record 메소드 호출 시 업로드된다. (단, Data의 업로드가 먼저 호출되므로 Distribution.create_db_record에서 에러가 발생할 경우 Data만 업로드될 가능성이 있다.)
|
|
76
|
+
- 이미 db_record가 있으면서 uploading_data를 설정한 경우 update_db_record 메소드 호출 시 기존의 Object File은 제거되고 새로운 Object File을 download_url과 연결한다.
|
|
77
|
+
- uploading_data의 실제 Object File은 Distribution 인스턴스 삭제 시 삭제된다.
|
|
78
|
+
- SDK는 Object File의 생성 요청의 책임을, SODAS_PROFILE 백엔드는 생성과 삭제의 책임을 가진다.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### Dataset - Distribution Policy
|
|
83
|
+
|
|
84
|
+
- Dataset의 메서드로 Dataset Instance와 연관된 Distributions를 만들 수 있다.
|
|
85
|
+
- Dataset.create_db_record를 통해 연관된 Distribution들의 create_db_record가 호출되며, 최종적으로 Dataset과 Distribution 모두 ID와 IRI를 가지게 된다.
|
|
86
|
+
- 이 시점에서 Distribution은 is_distribution_of를 연관된 Dataset의 ID로 가지게 된다.
|
|
87
|
+
- update_db_record 호출 시 하위 모든 Distribution의 update_db_record도 호출된다.
|
|
88
|
+
- 새롭게 추가된 Distribution은 레코드를 새롭게 만들고, 연결이 끊어진 Distribution은 삭제된다.
|
|
89
|
+
- delete_db_resource 호출 시 Dataset과 연관된 모든 Distribution은 DB에서 삭제되며 인스턴스들은 기본생성인스턴스가 된다.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### DatasetSeries - Dataset Policy
|
|
94
|
+
|
|
95
|
+
- DatasetSeries는 create_db_record/get_db_record/update_db_record/list_db_records를 통해 관련된 series_members(Dataset)들을 불러온다.
|
|
96
|
+
- DatasetSeries는 series_member_ids 필드로 Dataset의 순서와 관계를 관리한다.
|
|
97
|
+
- delete_db_record 호출 시 DatasetSeries만 DB에서 삭제되며, 관련된 Dataset 인스턴스는 기본생성인스턴스로 초기화된다.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 🧪 CRUDL Test Policy
|
|
102
|
+
|
|
103
|
+
### Test Levels
|
|
104
|
+
|
|
105
|
+
- **Small 테스트**: 클래스 자체의 메서드 테스트
|
|
106
|
+
- **Medium 테스트**: SDK와 백엔드의 통합 테스트
|
|
107
|
+
- **Big 테스트**: 사용자 시나리오 엔드투엔드 테스트 (현재는 없음)
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### 🟢 1. CREATE
|
|
112
|
+
|
|
113
|
+
#### ✅ 테스트 케이스:
|
|
114
|
+
|
|
115
|
+
- **foreign_key 필드**를 제외한 모든 필드 중 하나만 null 값으로 설정한 케이스를 테스트한다.
|
|
116
|
+
|
|
117
|
+
#### 📝 테스트 정책:
|
|
118
|
+
|
|
119
|
+
1. DTO를 기반으로 인스턴스를 세팅한다.
|
|
120
|
+
2. **create_db_record** 호출 후 **ID와 IRI** 생성 여부를 확인한다.
|
|
121
|
+
3. API 결과와 인스턴스를 비교한다.
|
|
122
|
+
4. **ID와 IRI**가 설정된 인스턴스에서 **create_db_record** 호출 시 에러 발생을 확인한다.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### 🟢 2. GET
|
|
127
|
+
|
|
128
|
+
#### ✅ 테스트 케이스:
|
|
129
|
+
|
|
130
|
+
- **foreign_key 필드**를 제외한 모든 필드 중 하나만 null 값으로 설정한 케이스를 테스트한다.
|
|
131
|
+
|
|
132
|
+
#### 📝 테스트 정책:
|
|
133
|
+
|
|
134
|
+
1. DTO를 기반으로 인스턴스를 세팅한다.
|
|
135
|
+
2. **create_db_record**로 인스턴스를 생성한다.
|
|
136
|
+
3. **get_db_record**로 생성된 인스턴스를 가져온다.
|
|
137
|
+
4. 생성 및 조회된 인스턴스를 비교한다.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 🟢 3. UPDATE
|
|
142
|
+
|
|
143
|
+
#### ✅ 테스트 케이스:
|
|
144
|
+
|
|
145
|
+
- **foreign_key 필드**를 제외한 모든 필드 중 하나만 null 값으로 설정한 케이스를 테스트한다.
|
|
146
|
+
|
|
147
|
+
#### 📝 테스트 정책:
|
|
148
|
+
|
|
149
|
+
1. 모든 필드가 채워진 인스턴스를 세팅한다.
|
|
150
|
+
2. **ID와 IRI**가 없는 인스턴스에서 **update_db_record** 호출 시 에러 발생을 확인한다.
|
|
151
|
+
3. **create_db_record**로 인스턴스를 생성한다.
|
|
152
|
+
4. DTO를 기반으로 인스턴스를 재설정한다.
|
|
153
|
+
5. **update_db_record**로 인스턴스를 업데이트한다.
|
|
154
|
+
6. API 결과와 인스턴스를 비교한다.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
### 🟢 4. DELETE
|
|
159
|
+
|
|
160
|
+
#### ✅ 테스트 케이스:
|
|
161
|
+
|
|
162
|
+
- **모든 필드가 채워진 케이스 하나**로 테스트한다.
|
|
163
|
+
|
|
164
|
+
#### 📝 테스트 정책:
|
|
165
|
+
|
|
166
|
+
1. 모든 필드가 채워진 인스턴스를 세팅한다.
|
|
167
|
+
2. **create_db_record**로 인스턴스를 생성한다.
|
|
168
|
+
3. 생성된 인스턴스를 복사한다.
|
|
169
|
+
4. **delete_db_record**로 인스턴스를 삭제한다.
|
|
170
|
+
5. 삭제된 인스턴스의 모든 필드가 null인지 확인한다.
|
|
171
|
+
6. 복사된 인스턴스에서 **delete_db_record** 호출 시 에러 발생을 확인한다.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
### 🟢 5. LIST
|
|
176
|
+
|
|
177
|
+
#### ✅ 테스트 케이스:
|
|
178
|
+
|
|
179
|
+
- **모든 필드가 채워진 인스턴스 12개**를 만들고, **페이지 수 5개**로 테스트한다.
|
|
180
|
+
|
|
181
|
+
#### 📝 테스트 정책:
|
|
182
|
+
|
|
183
|
+
1. 지정된 갯수만큼 인스턴스를 생성하고 저장한다.
|
|
184
|
+
2. **list_db_records**를 ASC 및 DESC 방식으로 호출하고 총 수량과 순서를 비교한다.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 🧪 SODAS_SDK_FILE Test Policy
|
|
189
|
+
|
|
190
|
+
#### 📝 테스트 정책:
|
|
191
|
+
|
|
192
|
+
1. **SODAS_SDK_FILE.upload()** 호출 후 파일을 업로드한다.
|
|
193
|
+
2. **get_download_url()**로 다운로드 URL을 확인하고, 원본 파일과 동일한지 확인한다.
|
|
194
|
+
3. **SODAS_SDK_FILE.remove()** 호출 후 삭제 및 URL 유효성 확인.
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
MANAGED BY HAZE1211
|