advdbg 0.2.5__py3-none-any.whl → 0.2.6__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.
- advdbg/__init__.py +1 -0
- advdbg/core.py +270 -207
- {advdbg-0.2.5.dist-info → advdbg-0.2.6.dist-info}/METADATA +4 -7
- advdbg-0.2.6.dist-info/RECORD +9 -0
- advdbg-0.2.5.dist-info/RECORD +0 -9
- {advdbg-0.2.5.dist-info → advdbg-0.2.6.dist-info}/WHEEL +0 -0
- {advdbg-0.2.5.dist-info → advdbg-0.2.6.dist-info}/licenses/LICENSE +0 -0
- {advdbg-0.2.5.dist-info → advdbg-0.2.6.dist-info}/top_level.txt +0 -0
advdbg/__init__.py
CHANGED
advdbg/core.py
CHANGED
|
@@ -8,215 +8,278 @@ from datetime import datetime
|
|
|
8
8
|
import random
|
|
9
9
|
from typing import Dict, Any, Optional, List
|
|
10
10
|
|
|
11
|
-
from .colors import Colors
|
|
11
|
+
# from .colors import Colors
|
|
12
|
+
class Colors:
|
|
13
|
+
WARN = ""
|
|
14
|
+
ERROR = ""
|
|
15
|
+
INFO = ""
|
|
16
|
+
SUCCESS = ""
|
|
12
17
|
|
|
13
18
|
listPhrases = ['Writting some lines.', "Don't forgot to define!", 'Waiting for your command.']
|
|
14
19
|
randomPhrase = random.choice(listPhrases)
|
|
15
20
|
|
|
16
21
|
class AdvDBG:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
22
|
+
_category_store: Dict[str, Dict[str, Any]] = {}
|
|
23
|
+
_defined_categories: Dict[str, 'AdvDBG'] = {}
|
|
24
|
+
|
|
25
|
+
def __init__(self, title='Debug', activated=False, notify=False, output: Optional[List[str]] = None, legacy=False):
|
|
26
|
+
if isinstance(title, str) and isinstance(activated, bool) and isinstance(notify, bool):
|
|
27
|
+
self.title = title
|
|
28
|
+
self.activated = False
|
|
29
|
+
self._defed = False
|
|
30
|
+
self.notify = notify
|
|
31
|
+
self.output = output or ['console']
|
|
32
|
+
self.legacy = legacy
|
|
33
|
+
else:
|
|
34
|
+
raise ValueError('Some parameters do not match required types')
|
|
35
|
+
|
|
36
|
+
# Валидация output
|
|
37
|
+
self._validate_output(self.output)
|
|
38
|
+
|
|
39
|
+
if title not in self._category_store:
|
|
40
|
+
self._category_store[title] = {}
|
|
41
|
+
if title not in self._defined_categories:
|
|
42
|
+
self._defined_categories[title] = self
|
|
43
|
+
|
|
44
|
+
def _validate_output(self, output_list: List[str]) -> None:
|
|
45
|
+
"""Валидирует список output"""
|
|
46
|
+
if output_list is None:
|
|
47
|
+
return
|
|
48
|
+
|
|
49
|
+
# Проверка на допустимые значения
|
|
50
|
+
allowed = {'console', 'file'}
|
|
51
|
+
for output_type in output_list:
|
|
52
|
+
if output_type not in allowed:
|
|
53
|
+
print(f"{Colors.ERROR} Error - AdvDBG | Error when reading the output type: Detected disallowed output. Please use console or file.\033[0m")
|
|
54
|
+
raise ValueError(f"Disallowed output type: {output_type}")
|
|
55
|
+
|
|
56
|
+
# Проверка на повторяющиеся значения
|
|
57
|
+
if len(output_list) != len(set(output_list)):
|
|
58
|
+
# Находим дубликаты
|
|
59
|
+
seen = set()
|
|
60
|
+
duplicates = set()
|
|
61
|
+
for item in output_list:
|
|
62
|
+
if item in seen:
|
|
63
|
+
duplicates.add(item)
|
|
64
|
+
else:
|
|
65
|
+
seen.add(item)
|
|
66
|
+
|
|
67
|
+
print(f"{Colors.ERROR} Error - AdvDBG | {len(duplicates)} repeating output types were found. Please, delete repeating types and try again.\033[0m")
|
|
68
|
+
raise ValueError(f"Repeating output types: {', '.join(duplicates)}")
|
|
69
|
+
|
|
70
|
+
@classmethod
|
|
71
|
+
def define(cls, title: str = 'Debug', activated: bool = True, notify: bool = False, output: Optional[List[str]] = None, legacy: bool = False):
|
|
72
|
+
'''Defines your debug category.
|
|
73
|
+
:param title: Title of your category
|
|
74
|
+
:param activated: Toggle availability of category
|
|
75
|
+
:param notify: Toggles notification if category is not activated
|
|
76
|
+
:param output: Where logger will save lines?
|
|
77
|
+
:param legacy: Use old style?'''
|
|
78
|
+
|
|
79
|
+
# Валидация перед созданием экземпляра
|
|
80
|
+
output = output or ['console']
|
|
81
|
+
|
|
82
|
+
# Проверка на допустимые значения
|
|
83
|
+
allowed = {'console', 'file'}
|
|
84
|
+
for output_type in output:
|
|
85
|
+
if output_type not in allowed:
|
|
86
|
+
print(f"{Colors.ERROR} Error - AdvDBG | Error when reading the output type: Detected disallowed output. Please use console or file.\033[0m")
|
|
87
|
+
raise ValueError(f"Disallowed output type: {output_type}")
|
|
88
|
+
|
|
89
|
+
# Проверка на повторяющиеся значения
|
|
90
|
+
if len(output) != len(set(output)):
|
|
91
|
+
# Находим дубликаты
|
|
92
|
+
seen = set()
|
|
93
|
+
duplicates = set()
|
|
94
|
+
for item in output:
|
|
95
|
+
if item in seen:
|
|
96
|
+
duplicates.add(item)
|
|
97
|
+
else:
|
|
98
|
+
seen.add(item)
|
|
99
|
+
|
|
100
|
+
print(f"{Colors.ERROR} Error - AdvDBG | {len(duplicates)} repeating output types were found. Please, delete repeating types and try again.\033[0m")
|
|
101
|
+
raise ValueError(f"Repeating output types: {', '.join(duplicates)}")
|
|
102
|
+
|
|
103
|
+
inst = cls(title, activated, notify, output, legacy)
|
|
104
|
+
inst.title = title
|
|
105
|
+
inst.activated = True
|
|
106
|
+
inst.notify = notify
|
|
107
|
+
inst.output = output
|
|
108
|
+
inst.legacy = legacy
|
|
109
|
+
inst._defed = True
|
|
110
|
+
|
|
111
|
+
cls._category_store[title] = {
|
|
112
|
+
'title': title,
|
|
113
|
+
'activated': activated,
|
|
114
|
+
'notify': notify,
|
|
115
|
+
'output': output,
|
|
116
|
+
'legacy': legacy,
|
|
117
|
+
'created_at': datetime.now()
|
|
118
|
+
}
|
|
119
|
+
cls._defined_categories[title] = inst
|
|
120
|
+
return inst
|
|
121
|
+
|
|
122
|
+
@classmethod
|
|
123
|
+
def get_category_settings(cls, category: str) -> Optional[Dict[str, Any]]:
|
|
124
|
+
if category in cls._category_store:
|
|
125
|
+
return cls._category_store[category].copy()
|
|
126
|
+
return None
|
|
127
|
+
|
|
128
|
+
@classmethod
|
|
129
|
+
def get_all_categories(cls) -> List[str]:
|
|
130
|
+
return list(cls._category_store.keys())
|
|
131
|
+
|
|
132
|
+
@classmethod
|
|
133
|
+
def export_all_data(cls) -> Dict[str, Any]:
|
|
134
|
+
return {
|
|
135
|
+
'categories': cls._category_store.copy(),
|
|
136
|
+
'total_categories': len(cls._category_store),
|
|
137
|
+
'export_timestamp': datetime.now().isoformat(),
|
|
138
|
+
'version': '1.0'
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
def _write_to_log(self, text, log_type='INFO'):
|
|
142
|
+
'''For-Module only method.'''
|
|
143
|
+
if not 'file' in self.output:
|
|
144
|
+
return
|
|
145
|
+
|
|
146
|
+
try:
|
|
147
|
+
# Creating logs directory relative to the current working directory
|
|
148
|
+
logs_dir = os.path.join(os.getcwd(), 'logs')
|
|
149
|
+
os.makedirs(logs_dir, exist_ok=True)
|
|
150
|
+
|
|
151
|
+
current_date = datetime.now().strftime("%d.%m.%Y")
|
|
152
|
+
filename = f"log_{current_date}.txt"
|
|
153
|
+
filepath = os.path.join(logs_dir, filename)
|
|
154
|
+
|
|
155
|
+
current_time = datetime.now().strftime("%H:%M:%S")
|
|
156
|
+
log_entry = f"{self.title} {current_time} | {text}\n"
|
|
157
|
+
|
|
158
|
+
file_exists = os.path.exists(filepath)
|
|
159
|
+
|
|
160
|
+
with open(filepath, 'a', encoding='utf-8') as f:
|
|
161
|
+
if not file_exists:
|
|
162
|
+
f.write(f"/// Advanced Debugger\n")
|
|
163
|
+
f.write(f"Category: {self.title}\n")
|
|
164
|
+
f.write(randomPhrase)
|
|
165
|
+
f.write("\n\n")
|
|
166
|
+
|
|
167
|
+
f.write(log_entry)
|
|
168
|
+
|
|
169
|
+
except Exception as e:
|
|
170
|
+
print(f"\033[33mWARNING\033[0m | Failed to write to log file: {e}")
|
|
171
|
+
|
|
172
|
+
def info(self, text):
|
|
173
|
+
"""Print debug information
|
|
174
|
+
Type: INFO
|
|
175
|
+
|
|
176
|
+
:param text: Text to show"""
|
|
177
|
+
if not isinstance(text, str):
|
|
178
|
+
try:
|
|
179
|
+
text = str(text)
|
|
180
|
+
except Exception as e:
|
|
181
|
+
text = f"Cannot convert to string format: {e}"
|
|
182
|
+
|
|
183
|
+
if self.activated:
|
|
184
|
+
if self.legacy and 'console' in self.output:
|
|
185
|
+
print(f'[\033[90mINFO \033[95m{self.title} at {datetime.now().strftime("%D, %H:%M:%S")}\033[0m] {text} \033[0m')
|
|
186
|
+
elif not self.legacy and 'console' in self.output:
|
|
187
|
+
print(f'{Colors.INFO} Info - {self.title} ({datetime.now().strftime("%D, %H:%M:%S")}) | {text}\033[0m')
|
|
188
|
+
if 'file' in self.output:
|
|
189
|
+
self._write_to_log(text, 'INFO')
|
|
190
|
+
elif self.notify:
|
|
191
|
+
print(f'Notification from {self.title}: Tried to output when disactivated.\n\033[93mTip: \033[0mIf you are did not want to saw these notifications, turn off NOTIFY property with using notify=False\033[0m')
|
|
192
|
+
else:
|
|
193
|
+
return
|
|
194
|
+
|
|
195
|
+
def warn(self, text):
|
|
196
|
+
if not isinstance(text, str):
|
|
197
|
+
try:
|
|
198
|
+
text = str(text)
|
|
199
|
+
except Exception as e:
|
|
200
|
+
text = f"Cannot convert to string format: {e}"
|
|
201
|
+
|
|
202
|
+
if self.activated:
|
|
203
|
+
if self.legacy and 'console' in self.output:
|
|
204
|
+
print(f'[\033[90mWARN \033[95m{self.title} at {datetime.now().strftime("%D, %H:%M:%S")}\033[0m] {text} \033[0m')
|
|
205
|
+
elif not self.legacy and 'console' in self.output:
|
|
206
|
+
print(f'{Colors.WARN} Warn - {self.title} ({datetime.now().strftime("%D, %H:%M:%S")}) | {text}\033[0m')
|
|
207
|
+
if 'file' in self.output:
|
|
208
|
+
self._write_to_log(text, 'WARN')
|
|
209
|
+
elif self.notify:
|
|
210
|
+
print(f'Notification from {self.title}: Tried to output when disactivated.\n\033[93mTip: \033[0mIf you are did not want to saw these notifications, turn off NOTIFY property with using notify=False')
|
|
211
|
+
else:
|
|
212
|
+
return
|
|
213
|
+
|
|
214
|
+
def success(self, text):
|
|
215
|
+
if not isinstance(text, str):
|
|
216
|
+
try:
|
|
217
|
+
text = str(text)
|
|
218
|
+
except Exception as e:
|
|
219
|
+
text = f"Cannot convert to string format: {e}"
|
|
220
|
+
|
|
221
|
+
if self.activated:
|
|
222
|
+
if self.legacy and 'console' in self.output:
|
|
223
|
+
print(f'[\033[90mSUCCESS \033[95m{self.title} at {datetime.now().strftime("%D, %H:%M:%S")}\033[0m] {text} \033[0m')
|
|
224
|
+
elif not self.legacy and 'console' in self.output:
|
|
225
|
+
print(f'{Colors.SUCCESS} Success - {self.title} ({datetime.now().strftime("%D, %H:%M:%S")}) | {text}\033[0m')
|
|
226
|
+
if 'file' in self.output:
|
|
227
|
+
self._write_to_log(text, 'SUCCESS')
|
|
228
|
+
elif self.notify:
|
|
229
|
+
print(f'Notification from {self.title}: Tried to output when disactivated.\n\033[93mTip: \033[0mIf you are did not want to saw these notifications, turn off NOTIFY property with using notify=False')
|
|
230
|
+
else:
|
|
231
|
+
return
|
|
232
|
+
|
|
233
|
+
def error(self, text):
|
|
234
|
+
if not isinstance(text, str):
|
|
235
|
+
try:
|
|
236
|
+
text = str(text)
|
|
237
|
+
except Exception as e:
|
|
238
|
+
text = f"Cannot convert to string format: {e}"
|
|
239
|
+
|
|
240
|
+
if self.activated:
|
|
241
|
+
if self.legacy:
|
|
242
|
+
print(f'[\033[33mERROR \033[95m{self.title} at {datetime.now().strftime("%D, %H:%M:%S")}\033[0m] {text} \033[0m')
|
|
243
|
+
elif not self.legacy:
|
|
244
|
+
print(f'{Colors.ERROR} Error - {self.title} ({datetime.now().strftime("%D, %H:%M:%S")}) | {text}\033[0m')
|
|
245
|
+
if 'file' in self.output:
|
|
246
|
+
self._write_to_log(text, 'ERROR')
|
|
247
|
+
elif self.notify:
|
|
248
|
+
print(f'Notification from {self.title}: Tried to output when disactivated.\n\033[93mTip: \033[0mIf you are did not want to saw these notifications, turn off NOTIFY property with using notify=False')
|
|
249
|
+
else:
|
|
250
|
+
return
|
|
251
|
+
|
|
252
|
+
def notification(self, text):
|
|
253
|
+
"""This type is deprecated."""
|
|
254
|
+
print('Type "Notification" is deprecated. Please, change it to another.')
|
|
255
|
+
|
|
256
|
+
def cfg(self, activated=None, title: str = 'Debug', notify: bool = True, output: Optional[List[str]] = None):
|
|
257
|
+
'''Configure existing category'''
|
|
258
|
+
output = output or ['console']
|
|
259
|
+
|
|
260
|
+
# Валидация нового output
|
|
261
|
+
self._validate_output(output)
|
|
262
|
+
|
|
263
|
+
if activated is not None:
|
|
264
|
+
self.activated = activated
|
|
265
|
+
if self.activated is False:
|
|
266
|
+
self.notify = notify
|
|
267
|
+
elif title is not None:
|
|
268
|
+
self.title = title
|
|
269
|
+
elif output is not None:
|
|
270
|
+
self.output = output
|
|
271
|
+
|
|
272
|
+
if self.title in self._category_store:
|
|
273
|
+
self._category_store[self.title]['activated'] = self.activated
|
|
274
|
+
self._category_store[self.title]["title"] = self.title
|
|
275
|
+
self._category_store[self.title]["output"] = self.output
|
|
276
|
+
|
|
277
|
+
return self
|
|
278
|
+
|
|
279
|
+
def __call__(self, text):
|
|
280
|
+
if not isinstance(text, str):
|
|
281
|
+
try:
|
|
282
|
+
text = str(text)
|
|
283
|
+
except Exception as e:
|
|
284
|
+
text = f"Cannot convert to string format: {e}"
|
|
285
|
+
self.info(text)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: advdbg
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.6
|
|
4
4
|
Summary: Minimalist colorful debug logger
|
|
5
5
|
Author-email: Darkey <weplayok3@gmail.com>, WinFun <placeholder@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -40,7 +40,7 @@ Available types:
|
|
|
40
40
|
`SUCCESS`
|
|
41
41
|
|
|
42
42
|
Returns:
|
|
43
|
-
Info - title of your debug (01.07.2026, 06:34:53) Text to debug!
|
|
43
|
+
Info - title of your debug (01.07.2026, 06:34:53) | Text to debug!
|
|
44
44
|
|
|
45
45
|
Configure existing category:
|
|
46
46
|
dbgVar.cfg(title='REQUEST')
|
|
@@ -48,12 +48,9 @@ dbgVar.cfg(title='REQUEST')
|
|
|
48
48
|
BEFORE: title of your debug
|
|
49
49
|
AFTER: REQUEST
|
|
50
50
|
|
|
51
|
-
## Change Log: v0.2.
|
|
51
|
+
## Change Log: v0.2.6
|
|
52
52
|
|
|
53
|
-
-
|
|
54
|
-
- Deleted "logging" parameter. Use "output" instead.
|
|
55
|
-
- Added new output types: "console" AND "file".
|
|
56
|
-
- Fixed colors
|
|
53
|
+
- Added a checker of output list.
|
|
57
54
|
|
|
58
55
|
## Requirements
|
|
59
56
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
advdbg/__init__.py,sha256=UzdMg1e_MsQPq_X4wVCeOHGFpXkr916BQX6Yw0nr7og,290
|
|
2
|
+
advdbg/analyze.py,sha256=eQ4aOBhTm1CUSbOjixzF-01yXSKH8eGP-AlOk4bfYYA,1562
|
|
3
|
+
advdbg/colors.py,sha256=VupEvIYoKgq2aqyApkPRN8HbIKr1DMNaIqj-2-DiZr0,223
|
|
4
|
+
advdbg/core.py,sha256=PAARli_HGyR0u6_8LDHDVGD9Ae6mJL3c_24BzxpRaE0,12023
|
|
5
|
+
advdbg-0.2.6.dist-info/licenses/LICENSE,sha256=tgtiy7agRoAxbOt3NAJk_KmNWkhC1Pr4oDQAjXaEhWw,1062
|
|
6
|
+
advdbg-0.2.6.dist-info/METADATA,sha256=84NBDFJ_fZ47LkXTK8B0u8qG_vfzmm5J0umTn5ffvJA,1307
|
|
7
|
+
advdbg-0.2.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
8
|
+
advdbg-0.2.6.dist-info/top_level.txt,sha256=oK_Jw0888nhPCLjrEGxdnJ5-5TaNjWeGbyEmjov62b0,7
|
|
9
|
+
advdbg-0.2.6.dist-info/RECORD,,
|
advdbg-0.2.5.dist-info/RECORD
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
advdbg/__init__.py,sha256=Wg0cXdTXIPTUTLpX-yPD78UsahCZ-lFNKSYoQ2jk_5Y,274
|
|
2
|
-
advdbg/analyze.py,sha256=eQ4aOBhTm1CUSbOjixzF-01yXSKH8eGP-AlOk4bfYYA,1562
|
|
3
|
-
advdbg/colors.py,sha256=VupEvIYoKgq2aqyApkPRN8HbIKr1DMNaIqj-2-DiZr0,223
|
|
4
|
-
advdbg/core.py,sha256=hd_j961jPlckCHOCvOUO18trGNWyIQvvT9kZ-2DKVuA,7774
|
|
5
|
-
advdbg-0.2.5.dist-info/licenses/LICENSE,sha256=tgtiy7agRoAxbOt3NAJk_KmNWkhC1Pr4oDQAjXaEhWw,1062
|
|
6
|
-
advdbg-0.2.5.dist-info/METADATA,sha256=Y-LkNpFcwgC2bprTLXjv6uiQgYdSf1kRGNfAZdvnYLg,1402
|
|
7
|
-
advdbg-0.2.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
8
|
-
advdbg-0.2.5.dist-info/top_level.txt,sha256=oK_Jw0888nhPCLjrEGxdnJ5-5TaNjWeGbyEmjov62b0,7
|
|
9
|
-
advdbg-0.2.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|