vos-data-utils 0.0.2__py3-none-any.whl → 0.0.4__py3-none-any.whl

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.

Potentially problematic release.


This version of vos-data-utils might be problematic. Click here for more details.

@@ -0,0 +1,247 @@
1
+ import os
2
+ import sys
3
+ import unittest
4
+ import logging
5
+ from typing import Pattern
6
+ sys.path.append(os.getcwd())
7
+ from vdutils.vid import Vid
8
+
9
+
10
+ class TestClass(unittest.TestCase):
11
+
12
+ @classmethod
13
+ def setUp(cls):
14
+ "Hook method for setting fixture before running tests in the class"
15
+ cls.driver = 'test'
16
+ cls.instance = Vid()
17
+
18
+
19
+ @classmethod
20
+ def tearDown(cls):
21
+ "Hook method for deconstructing the class fixture after running all tests in the class"
22
+
23
+
24
+ def test_class_initialization_type(self):
25
+ """
26
+ 클래스 인스턴스 초기 생성자 타입 테스트 메소드
27
+
28
+ - 클래스 인스턴스 초기 생성자 객체의 값의 타입이 지정된 타입과 일치하는지 확인하는 테스트
29
+ - __init__.logger 객체 테스트
30
+ - __init__.is_pnu_valid_regex 객체 테스트
31
+ """
32
+
33
+ self.assertTrue(self.instance.logger, logging.Logger)
34
+ self.assertTrue(self.instance.is_pnu_valid_regex, Pattern[str]) # default False
35
+
36
+
37
+ def test_class_initialization_not_empty(self):
38
+ """
39
+ 클래스 인스턴스 초기 생성자 객체 테스트 메소드
40
+
41
+ - 클래스 인스턴스 초기 생성자 객체의 값이 None이 아닌지(IsNotNone) 확인하는 테스트
42
+ - __init__.logger 객체 테스트
43
+ - __init__.is_pnu_valid_regex 객체 테스트
44
+
45
+ - 클래스 인스턴스 초기 생성자 객체의 Length가 0이 아닌지 확인하는 테스트
46
+ - __init__.logger 객체 테스트 (logging.Logger pass)
47
+ - __init__.is_pnu_valid_regex 객체 테스트 (pattern pass)
48
+ """
49
+
50
+ self.assertIsNotNone(self.instance.logger)
51
+ self.assertIsNotNone(self.instance.is_pnu_valid_regex)
52
+
53
+ # self.assertNotEqual(len(self.instance.logger), 0)
54
+ # self.assertNotEqual(len(self.instance.is_pnu_valid_regex), 0)
55
+
56
+
57
+ def test_generate_registration_vid(self):
58
+ """
59
+ generate_registration_vid 함수 테스트 메소드
60
+
61
+ - generate_registration_vid 함수 리턴값 테스트(올바른 입력값 제공)
62
+ - generate_registration_vid 함수 리턴값 타입 테스트
63
+ - generate_registration_vid 함수 리턴값 None 이 아닌지 테스트
64
+ - generate_registration_vid 함수 리턴값 리스트 첫번째 객체값 타입 테스트
65
+ - generate_registration_vid 함수 리턴값 리스트 첫번째 객체값 None 이 아닌지 테스트
66
+ - generate_registration_vid 함수 리턴값 리스트 두번째 객체값 타입 테스트
67
+ - generate_registration_vid 함수 리턴값 리스트 두번째 객체값 None 이 아닌지 테스트
68
+ - generate_registration_vid 함수 리턴값 리스트 세번째 객체값 타입 테스트
69
+ - generate_registration_vid 함수 리턴값 리스트 세번째 객체값 None 이 아닌지 테스트
70
+ - generate_registration_vid 함수 리턴값 일치 테스트
71
+
72
+ - generate_registration_vid 함수 리턴값 테스트(올바르지 않은 입력값 제공)
73
+ - generate_registration_vid 함수 리턴값 타입 테스트
74
+ - generate_registration_vid 함수 리턴값 None 이 아닌지 테스트
75
+ - generate_registration_vid 함수 리턴값 리스트 첫번째 객체값 타입 테스트
76
+ - generate_registration_vid 함수 리턴값 리스트 첫번째 객체값 None 이 아닌지 테스트
77
+ - generate_registration_vid 함수 리턴값 리스트 두번째 객체값 타입 테스트 (None pass)
78
+ - generate_registration_vid 함수 리턴값 리스트 두번째 객체값 None 이 맞는지 테스트
79
+ - generate_registration_vid 함수 리턴값 리스트 세번째 객체값 타입 테스트 (None pass)
80
+ - generate_registration_vid 함수 리턴값 리스트 세번째 객체값 None 이 맞는지 테스트
81
+ - generate_registration_vid 함수 리턴값 일치 테스트
82
+ """
83
+
84
+ res = self.instance.generate_registration_vid(
85
+ pnu='1234567890123456789',
86
+ contract_ymd='20240101',
87
+ price=100,
88
+ unit_ar=100.1,
89
+ lot_ar=100.1,
90
+ seller='seller',
91
+ buyer='buyer',
92
+ )
93
+ self.assertIsInstance(res, list)
94
+ self.assertIsNotNone(res)
95
+ self.assertIsInstance(res[0], str)
96
+ self.assertIsNotNone(res[0])
97
+ self.assertIsInstance(res[1], str)
98
+ self.assertIsNotNone(res[1])
99
+ self.assertIsInstance(res[2], str)
100
+ self.assertIsNotNone(res[2])
101
+ self.assertEqual(res, [
102
+ 'R_1234567890_581e28e445_0000',
103
+ '581e28e4457103048784572e858c5ed1297cf8747169a8454e98a19233036f55',
104
+ '1234567890123456789_20240101_100_100.1_100.1_seller_buyer'
105
+ ])
106
+
107
+ res = self.instance.generate_registration_vid(
108
+ pnu='1234567890123456789',
109
+ contract_ymd='20240101',
110
+ price='100',
111
+ unit_ar='100.1',
112
+ lot_ar='100.1',
113
+ seller='seller',
114
+ buyer='buyer',
115
+ )
116
+ self.assertIsInstance(res, list)
117
+ self.assertIsNotNone(res)
118
+ self.assertIsInstance(res[0], str)
119
+ self.assertIsNotNone(res[0])
120
+ self.assertIsInstance(res[1], str)
121
+ self.assertIsNotNone(res[1])
122
+ self.assertIsInstance(res[2], str)
123
+ self.assertIsNotNone(res[2])
124
+ self.assertEqual(res, [
125
+ 'R_1234567890_581e28e445_0000',
126
+ '581e28e4457103048784572e858c5ed1297cf8747169a8454e98a19233036f55',
127
+ '1234567890123456789_20240101_100_100.1_100.1_seller_buyer'
128
+ ])
129
+
130
+ res = self.instance.generate_registration_vid(
131
+ pnu='12345678901234567890', # 19자리 형식에 맞지 않는 잘못된 입력값 제공
132
+ contract_ymd='20240101',
133
+ price=100,
134
+ unit_ar=100.1,
135
+ lot_ar=100.1,
136
+ seller='seller',
137
+ buyer='buyer',
138
+ )
139
+ self.assertIsInstance(res, list)
140
+ self.assertIsNotNone(res)
141
+ self.assertIsInstance(res[0], str)
142
+ self.assertIsNotNone(res[0])
143
+ # self.assertIsInstance(res[1], None) # (None pass)
144
+ self.assertIsNone(res[1])
145
+ # self.assertIsInstance(res[2], None) # (None pass)
146
+ self.assertIsNone(res[2])
147
+ self.assertEqual(res, [
148
+ 'R_pnu10dhead_hashstring_0000',
149
+ None,
150
+ None
151
+ ])
152
+
153
+ res = self.instance.generate_registration_vid(
154
+ pnu='1234567890123456789',
155
+ contract_ymd='2024-01-01', # YYYYMMDD 형식에 맞지 않는 잘못된 입력값 제공
156
+ price=100,
157
+ unit_ar=100.1,
158
+ lot_ar=100.1,
159
+ seller='seller',
160
+ buyer='buyer',
161
+ )
162
+ self.assertIsInstance(res, list)
163
+ self.assertIsNotNone(res)
164
+ self.assertIsInstance(res[0], str)
165
+ self.assertIsNotNone(res[0])
166
+ # self.assertIsInstance(res[1], None) # (None pass)
167
+ self.assertIsNone(res[1])
168
+ # self.assertIsInstance(res[2], None) # (None pass)
169
+ self.assertIsNone(res[2])
170
+ self.assertEqual(res, [
171
+ 'R_1234567890_hashstring_0000',
172
+ None,
173
+ None
174
+ ])
175
+
176
+ res = self.instance.generate_registration_vid(
177
+ pnu='1234567890123456789',
178
+ contract_ymd='20240101',
179
+ price=-100, # 음수 잘못된 입력값 제공
180
+ unit_ar=100.1,
181
+ lot_ar=100.1,
182
+ seller='seller',
183
+ buyer='buyer',
184
+ )
185
+ self.assertIsInstance(res, list)
186
+ self.assertIsNotNone(res)
187
+ self.assertIsInstance(res[0], str)
188
+ self.assertIsNotNone(res[0])
189
+ # self.assertIsInstance(res[1], None) # (None pass)
190
+ self.assertIsNone(res[1])
191
+ # self.assertIsInstance(res[2], None) # (None pass)
192
+ self.assertIsNone(res[2])
193
+ self.assertEqual(res, [
194
+ 'R_1234567890_hashstring_0000',
195
+ None,
196
+ None
197
+ ])
198
+
199
+ res = self.instance.generate_registration_vid(
200
+ pnu='1234567890123456789',
201
+ contract_ymd='20240101',
202
+ price=100,
203
+ unit_ar='a', # 숫자 혹은 숫자문자열이 아닌 문자열 입력값 제공
204
+ lot_ar=100.1,
205
+ seller='seller',
206
+ buyer='buyer',
207
+ )
208
+ self.assertIsInstance(res, list)
209
+ self.assertIsNotNone(res)
210
+ self.assertIsInstance(res[0], str)
211
+ self.assertIsNotNone(res[0])
212
+ # self.assertIsInstance(res[1], None) # (None pass)
213
+ self.assertIsNone(res[1])
214
+ # self.assertIsInstance(res[2], None) # (None pass)
215
+ self.assertIsNone(res[2])
216
+ self.assertEqual(res, [
217
+ 'R_1234567890_hashstring_0000',
218
+ None,
219
+ None
220
+ ])
221
+
222
+ res = self.instance.generate_registration_vid(
223
+ pnu='1234567890123456789',
224
+ contract_ymd='20240101',
225
+ price=100,
226
+ unit_ar=100.1,
227
+ lot_ar=100.1,
228
+ seller=1, # 문자열 아닌 숫자 입력값 제공
229
+ buyer='buyer',
230
+ )
231
+ self.assertIsInstance(res, list)
232
+ self.assertIsNotNone(res)
233
+ self.assertIsInstance(res[0], str)
234
+ self.assertIsNotNone(res[0])
235
+ # self.assertIsInstance(res[1], None) # (None pass)
236
+ self.assertIsNone(res[1])
237
+ # self.assertIsInstance(res[2], None) # (None pass)
238
+ self.assertIsNone(res[2])
239
+ self.assertEqual(res, [
240
+ 'R_1234567890_hashstring_0000',
241
+ None,
242
+ None
243
+ ])
244
+
245
+
246
+ if __name__ == "__main__":
247
+ unittest.main()
vdutils/tests/tests.py CHANGED
@@ -1,18 +1,28 @@
1
1
  import unittest
2
- from test_convaddr import TestClass as TestClass1
3
- from test_cordate import TestClass as TestClass2
2
+ from test_convaddr import TestClass as TestClassConvAddr
3
+ from test_cordate import TestClass as TestClassCordate
4
+ from test_genpnu import TestClass as TestClassGenPnu
5
+ from test_vid import TestClass as TestClassVid
4
6
 
5
7
 
6
8
  def suite():
7
9
  test_loader = unittest.TestLoader()
8
10
  test_suite = unittest.TestSuite()
9
11
 
10
- test_suite.addTest(test_loader.loadTestsFromTestCase(TestClass1))
11
- test_suite.addTest(test_loader.loadTestsFromTestCase(TestClass2))
12
+ test_suite.addTest(test_loader.loadTestsFromTestCase(TestClassConvAddr))
13
+ test_suite.addTest(test_loader.loadTestsFromTestCase(TestClassCordate))
14
+ test_suite.addTest(test_loader.loadTestsFromTestCase(TestClassGenPnu))
15
+ test_suite.addTest(test_loader.loadTestsFromTestCase(TestClassVid))
12
16
 
13
17
  return test_suite
14
18
 
15
- if __name__ == '__main__':
19
+ def __run_test__():
16
20
  runner = unittest.TextTestRunner(verbosity=2)
17
21
  test_suite = suite()
18
22
  result = runner.run(test_suite)
23
+
24
+ # python -m unittest vdutils.tests.tests
25
+ if __name__ == '__main__':
26
+ runner = unittest.TextTestRunner(verbosity=2)
27
+ test_suite = suite()
28
+ result = runner.run(test_suite)
vdutils/vid.py CHANGED
@@ -1,119 +1,177 @@
1
1
  import re
2
2
  import hashlib
3
3
  from datetime import date
4
- from typing import Union
4
+ from typing import (
5
+ List,
6
+ Union
7
+ )
8
+ from dataclasses import dataclass
9
+ from vdutils.library import Log
10
+
11
+
12
+ @dataclass
13
+ class Vid():
14
+
15
+
16
+ def __init__(self):
17
+ self.logger = Log('Vid').stream_handler("INFO")
18
+ self.is_pnu_valid_regex = re.compile("^\d{19}$")
19
+
20
+
21
+ @staticmethod
22
+ def _remove_comma(value: str) -> str:
23
+ return value.replace(",", "")
24
+
25
+
26
+ @staticmethod
27
+ def _format_float_string(float_str: str) -> str:
28
+ if float_str:
29
+ dot_split = float_str.split(".")
30
+ if len(dot_split) == 1:
31
+ return float_str
32
+ elif len(dot_split) == 2:
33
+ part_int, part_float = dot_split
34
+ float_numbers = list(part_float)
35
+ for i in range(len(part_float) - 1, -1, -1):
36
+ number = float_numbers[i]
37
+ if number != "0":
38
+ break
39
+ else:
40
+ float_numbers.pop()
41
+ no_trailing_zero_float_part = "".join(float_numbers)
42
+ if no_trailing_zero_float_part:
43
+ return ".".join([part_int, no_trailing_zero_float_part])
44
+ else:
45
+ return part_int
46
+ else:
47
+ return float_str
48
+ else:
49
+ return ""
5
50
 
6
51
 
7
- removeComma = lambda s: s.replace(",", "")
52
+ def _format_float(
53
+ self,
54
+ float_num: str
55
+ ) -> str:
56
+ return self._format_float_string(self._remove_comma(str(float_num)))
8
57
 
9
- formatFloat = lambda float_num: format_float_string(removeComma(str(float_num)))
10
58
 
11
- isPnuValid = lambda pnu: re.compile("^\d{19}$").match(pnu)
59
+ def _is_number_valid(
60
+ self,
61
+ number: Union[float, int, str, None]
62
+ ) -> bool:
63
+ try:
64
+ ff = self._format_float(number)
65
+ if (
66
+ not ff
67
+ or len(ff.split(".")) > 2
68
+ or not re.compile("^\d*$").match(ff.replace(".", ""))
69
+ ):
70
+ return False
71
+ else:
72
+ return True
73
+ except:
74
+ return False
12
75
 
13
- def format_float_string(float_str: str) -> str:
14
- if float_str:
15
- dot_split = float_str.split(".")
16
- if len(dot_split) == 1:
17
- return float_str
18
76
 
19
- elif len(dot_split) == 2:
20
- part_int, part_float = dot_split
77
+ def _is_pnu_valid(
78
+ self,
79
+ pnu: str
80
+ ):
81
+ return self.is_pnu_valid_regex.match(pnu)
82
+
83
+
84
+ @staticmethod
85
+ def _is_contract_date_valid(
86
+ contract_ymd: Union[str, int, None]
87
+ ) -> bool:
88
+ if type(contract_ymd) != str:
89
+ contract_ymd = str(contract_ymd)
90
+ if len(contract_ymd) == 8 and re.compile("^\d{8}$").match(contract_ymd):
91
+ try:
92
+ d = date.fromisoformat(
93
+ f"{contract_ymd[:4]}-{contract_ymd[4:6]}-{contract_ymd[6:]}"
94
+ )
95
+ return True
96
+ except:
97
+ return False
98
+ return False
21
99
 
22
- float_numbers = list(part_float)
23
100
 
24
- for i in range(len(part_float) - 1, -1, -1):
25
- number = float_numbers[i]
26
- if number != "0":
27
- break
28
- else:
29
- float_numbers.pop()
101
+ @staticmethod
102
+ def _is_string_valid(value) -> bool:
103
+ return isinstance(value, str)
30
104
 
31
- no_trailing_zero_float_part = "".join(float_numbers)
32
105
 
33
- if no_trailing_zero_float_part:
34
- return ".".join([part_int, no_trailing_zero_float_part])
35
- else:
36
- return part_int
106
+ @staticmethod
107
+ def _validate(validator, value, value_nm):
108
+ if value and not validator(value):
109
+ raise Exception(f"invalid {validator}, {value_nm}: {value}")
37
110
 
38
- else:
39
- return float_str
40
111
 
41
- else:
42
- return ""
112
+ @staticmethod
113
+ def _get_hash_raw(data_str: str) -> str:
114
+ return hashlib.sha256(data_str.encode("utf-8")).hexdigest()
43
115
 
44
- def is_contract_date_valid(contract_ymd):
45
- if type(contract_ymd) != str:
46
- contract_ymd = str(contract_ymd)
47
- if len(contract_ymd) == 8 and re.compile("^\d{8}$").match(contract_ymd):
48
- try:
49
- d = date.fromisoformat(
50
- f"{contract_ymd[:4]}-{contract_ymd[4:6]}-{contract_ymd[6:]}"
51
- )
52
- return True
53
- except:
54
- return False
55
- return False
56
-
57
- def is_number_valid(number):
58
- try:
59
- ff = formatFloat(number)
60
- if (
61
- not ff
62
- or len(ff.split(".")) > 2
63
- or not re.compile("^\d*$").match(ff.replace(".", ""))
64
- ):
65
- return False
66
- else:
67
- return True
68
- except:
69
- return False
70
116
 
71
- def validate(validator, value, value_nm):
72
- if value and not validator(value):
73
- raise Exception(f"invalid {value_nm}: {value}")
74
-
75
- def get_hash_raw(data_str: str) -> str:
76
- return hashlib.sha256(data_str.encode("utf-8")).hexdigest()
77
-
78
- def generate_registration_vid(
79
- pnu: str,
80
- contract_ymd: str,
81
- price: Union[float, int, None] = None,
82
- unit_ar: Union[float, int, str, None] = None,
83
- lot_ar: Union[float, int, str, None] = None,
84
- seller: Union[str, None] = None,
85
- buyer: Union[str, None] = None,
86
- ) -> str:
87
- try:
88
- validate(isPnuValid, pnu, "pnu")
89
- validate(is_contract_date_valid, contract_ymd, "contract_ymd")
90
- validate(is_number_valid, price, "price")
91
- if not unit_ar == "-":
92
- validate(is_number_valid, unit_ar, "unit_ar")
93
- if not lot_ar == "-":
94
- validate(is_number_valid, lot_ar, "lot_ar")
95
- validate(lambda seller: type(seller) == str, seller, "seller")
96
- validate(lambda buyer: type(buyer) == str, buyer, "buyer")
97
-
98
- data_str = "_".join(
99
- [
100
- pnu,
101
- contract_ymd,
102
- formatFloat(price) if price else "",
103
- formatFloat(unit_ar) if price else "",
104
- formatFloat(lot_ar) if price else "",
105
- seller or "",
106
- buyer or "",
107
- ]
108
- )
109
-
110
- h = get_hash_raw(data_str)
111
-
112
- return [f"R_{pnu[:10]}_{h[:10]}_0000", h, data_str]
113
- except Exception as e:
114
- print(pnu, e)
115
- return [
116
- f"R_{pnu[:10] if isPnuValid(pnu) else 'pnu10dhead'}_{'hashstring'}_0000",
117
+ def generate_registration_vid(
118
+ self,
119
+ pnu: str,
120
+ contract_ymd: Union[str, int, None],
121
+ price: Union[float, int, None] = None,
122
+ unit_ar: Union[float, int, str, None] = None,
123
+ lot_ar: Union[float, int, str, None] = None,
124
+ seller: Union[str, None] = None,
125
+ buyer: Union[str, None] = None,
126
+ ) -> List[Union[str, None]]:
127
+
128
+ """
129
+ 주어진 입력값들을 문자열로 변환하여 SHA-256 해시값을 생성하여 반환\n
130
+ 입력값들의 타입정의 및 형식이 명확하지 않아, TypeError, ValueError 정의하지 않고 모든 오류에 대해 동일한 예외용 응답만을 반환
131
+
132
+ Args:
133
+ pnu (str): Represents the Parcel Numbering Unit, a 19-digit numeric string (10 digits for the administrative district code + 1 digit for the mountain code + 8 digits for the plot number).
134
+ contract_ymd (str): Transaction date in YYYYMMDD format, an 8-digit numeric string.
135
+ price (Union[float, int, None]): Transaction price.
136
+ unit_ar (Union[float, int, str, None]): Transaction unit area.
137
+ lot_ar (Union[float, int, str, None]): Transaction land area.
138
+ seller (Union[str, None]): Seller.
139
+ buyer (Union[str, None]): Buyer.
140
+
141
+ Returns: List[Union[str, None]]
142
+ """
143
+
144
+ except_response = [
145
+ f"R_{pnu[:10] if self._is_pnu_valid(pnu) else 'pnu10dhead'}_{'hashstring'}_0000",
117
146
  None,
118
147
  None,
119
148
  ]
149
+ try:
150
+ self._validate(self._is_pnu_valid, pnu, "pnu")
151
+ self._validate(self._is_contract_date_valid, contract_ymd, "contract_ymd")
152
+ self._validate(self._is_number_valid, price, "price")
153
+ if not unit_ar == "-":
154
+ self._validate(self._is_number_valid, unit_ar, "unit_ar")
155
+ if not lot_ar == "-":
156
+ self._validate(self._is_number_valid, lot_ar, "lot_ar")
157
+ self._validate(self._is_string_valid, seller, "seller")
158
+ self._validate(self._is_string_valid, buyer, "buyer")
159
+
160
+ data_str = "_".join(
161
+ [
162
+ pnu,
163
+ contract_ymd,
164
+ self._format_float(price) if price else "",
165
+ self._format_float(unit_ar) if price else "",
166
+ self._format_float(lot_ar) if price else "",
167
+ seller or "",
168
+ buyer or "",
169
+ ]
170
+ )
171
+ h = self._get_hash_raw(data_str)
172
+
173
+ return [f"R_{pnu[:10]}_{h[:10]}_0000", h, data_str]
174
+
175
+ except Exception as e:
176
+ self.logger.info(f"{pnu}, {e}")
177
+ return except_response
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vos-data-utils
3
- Version: 0.0.2
3
+ Version: 0.0.4
4
4
  Summary: description
5
- Author: vos
5
+ Author: ValueOfSpace
6
6
  Author-email: dev@valueofspace.com
7
7
  Classifier: Programming Language :: Python :: 3
8
8
  Classifier: License :: OSI Approved :: MIT License
@@ -11,6 +11,7 @@ Requires-Python: >=3.7
11
11
  Description-Content-Type: text/markdown
12
12
  Requires-Dist: symspellpy
13
13
  Requires-Dist: pandas
14
+ Requires-Dist: requests
14
15
 
15
16
  vos-data-utils <br>
16
17
  [![PyPI version](https://badge.fury.io/py/vos-data-utils.svg)](https://pypi.org/project/vos-data-utils/)
@@ -0,0 +1,21 @@
1
+ vdutils/__init__.py,sha256=yNZYpK5OcST5JsiWHL6NBM4HFWcf9__NZTQVy86nuXA,987
2
+ vdutils/bjd.py,sha256=77eqeKogpf7XVjmXlo6j08RGlAKXd7fVDO7nkScy_y4,20936
3
+ vdutils/bjdconnector.py,sha256=QpucOyXQ3mx1qQZXfyJWGkoVxqQZzmy5qG878eUNBVA,29437
4
+ vdutils/convaddr.py,sha256=E7ol9XRAHR10GEM6V8ci0jdW0Y0rBwK369M7hyylpW0,14264
5
+ vdutils/cordate.py,sha256=ednTBnSscr5w8gTDi98ldNtaLfAUAF1BjYV2D2f09so,13638
6
+ vdutils/genpnu.py,sha256=YcpGJ_4msLUP_StWIsdM0IA9nP73Qn6pTzMEtPBSjZc,21663
7
+ vdutils/vid.py,sha256=7ATGsKmXThB74TfENwUY9aF6XVkP6sUKL62TYQfTygg,5734
8
+ vdutils/data/__init__.py,sha256=cDlRzTe-SRJ4VhiQfd7Pi_3cvlnLAiyurA5uqnD7t5U,248
9
+ vdutils/library/__init__.py,sha256=mSEXZfovoMwimrm164NGx1CTXv2ufL-mjvDz_KSyNqk,1204
10
+ vdutils/library/data.py,sha256=tpQHukHuKSXKsyhN3EnqWTCXXWk0LN-ah_r2o7Mi_5E,206956
11
+ vdutils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ vdutils/tests/test_convaddr.py,sha256=jRSHAIXrEj8rpV1aWSMVuvS9OdcUMWpz0q7UMQYqyGo,7309
13
+ vdutils/tests/test_cordate.py,sha256=4vNbLugbgmko8a-SKaBvsWrfp_eMBfblLre4027krSQ,11950
14
+ vdutils/tests/test_genpnu.py,sha256=6qHsEm45h6Uzt5gG_DJRKhlCtZTvF87PlFz6DSAl7gU,71218
15
+ vdutils/tests/test_vid.py,sha256=ogyCJ29ac6qEPBp5pIdWZKiP-R103h-6gk8ga_U8xfI,9714
16
+ vdutils/tests/tests.py,sha256=bhwo2nABDatNXcu--EOMg3pONx2lpCvy-dQXEgjp-j0,957
17
+ vos_data_utils-0.0.4.dist-info/METADATA,sha256=VEdY1gvN4IMZpF3G-Sq_WViWZ_tL4oQQbC8hCVBvJZ8,34441
18
+ vos_data_utils-0.0.4.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
19
+ vos_data_utils-0.0.4.dist-info/entry_points.txt,sha256=TPB2LUYp5rOLabatv0O-Bg6bId3UWYUhIVGM0hLZY3g,97
20
+ vos_data_utils-0.0.4.dist-info/top_level.txt,sha256=HHg_xE8RoOT58ELEUeaUMbJaRTq7ry3gLSnC4vB4F4E,8
21
+ vos_data_utils-0.0.4.dist-info/RECORD,,