lyrpy 0.0.2__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.
lyr/LUParserARG.py ADDED
@@ -0,0 +1,365 @@
1
+ """LUParserARG.py"""
2
+ # -*- coding: UTF-8 -*-
3
+ __annotations__ = """
4
+ =======================================================
5
+ Copyright (c) 2023-2024
6
+ Author:
7
+ Lisitsin Y.R.
8
+ Project:
9
+ LU_PY
10
+ Python (LU)
11
+ Module:
12
+ LUParserARG.py
13
+
14
+ =======================================================
15
+ """
16
+
17
+ #------------------------------------------
18
+ # БИБЛИОТЕКИ python
19
+ #------------------------------------------
20
+ import sys
21
+ import argparse
22
+ import logging
23
+
24
+ # re - Regular expression operations
25
+ import re
26
+
27
+ #------------------------------------------
28
+ # БИБЛИОТЕКИ сторонние
29
+ #------------------------------------------
30
+
31
+ #------------------------------------------
32
+ # БИБЛИОТЕКА LU
33
+ #------------------------------------------
34
+ import lyr.LULog as LULog
35
+
36
+ #------------------------------------------
37
+ # Разбор аргументов
38
+ #------------------------------------------
39
+ cSwitchChars = ('-', '/')
40
+
41
+ class TArgParser (argparse.ArgumentParser):
42
+ """TArgParser"""
43
+ luClassName = 'TArgParser'
44
+
45
+ #--------------------------------------------------
46
+ # constructor
47
+ #--------------------------------------------------
48
+ def __init__ (self, **kwargs):
49
+ """ Constructor """
50
+ #beginfunction
51
+ super ().__init__ (**kwargs)
52
+ self.__FArgs: argparse.Namespace = None
53
+ self.__FArgsUnknown: argparse.Namespace = None
54
+ self.__FArgsDICT = {}
55
+ ...
56
+ #endfunction
57
+
58
+ #--------------------------------------------------
59
+ # destructor
60
+ #--------------------------------------------------
61
+ def __del__ (self):
62
+ """ destructor """
63
+ #beginfunction
64
+ LClassName = self.__class__.__name__
65
+ s = '{} уничтожен'.format (LClassName)
66
+ # LULog.LoggerTOOLS_AddLevel (LULog.DEBUGTEXT, s)
67
+ #print (s)
68
+ #endfunction
69
+
70
+ #--------------------------------------------------
71
+ # @property ArgParser
72
+ #--------------------------------------------------
73
+ # getter
74
+ @property
75
+ def ArgParser(self):
76
+ #beginfunction
77
+ return self
78
+ #endfunction
79
+
80
+ #--------------------------------------------------
81
+ # @property ArgsDICT
82
+ #--------------------------------------------------
83
+ @property
84
+ # getter
85
+ def ArgsDICT (self):
86
+ #beginfunction
87
+ return self.__FArgsDICT
88
+ #endfunction
89
+ @ArgsDICT.setter
90
+ def ArgsDICT (self, Value):
91
+ #beginfunction
92
+ self.__FArgsDICT = Value
93
+ #endfunction
94
+
95
+ #--------------------------------------------------
96
+ # @property Args
97
+ #--------------------------------------------------
98
+ @property
99
+ # getter
100
+ def Args (self) -> argparse.Namespace:
101
+ #beginfunction
102
+ return self.__FArgs
103
+ #endfunction
104
+ @Args.setter
105
+ def Args (self, Value: argparse.Namespace):
106
+ #beginfunction
107
+ self.__FArgs = Value
108
+ #endfunction
109
+
110
+ #--------------------------------------------------
111
+ # @property ArgsUnknown
112
+ #--------------------------------------------------
113
+ @property
114
+ # getter
115
+ def ArgsUnknown (self) -> argparse.Namespace:
116
+ #beginfunction
117
+ return self.__FArgsUnknown
118
+ #endfunction
119
+ @ArgsUnknown.setter
120
+ def ArgsUnknown (self, Value: argparse.Namespace):
121
+ #beginfunction
122
+ self.__FArgsUnknown = Value
123
+ #endfunction
124
+
125
+ def Clear (self):
126
+ #beginfunction
127
+ ...
128
+ #endfunction
129
+
130
+ def ReadARGS (self, AARGS: dict):
131
+
132
+ def GetARG (AARGName, AARGValue):
133
+ #beginfunction
134
+ LResult = AARGS.get (AARGName).get (AARGValue)
135
+ # try:
136
+ # LResult = AARGS [AARGName] [AARGValue]
137
+ # except:
138
+ # LResult = None
139
+ # #endtry
140
+ return LResult
141
+ #endfunction
142
+
143
+ #beginfunction
144
+ for name, value in AARGS.items ():
145
+ # s = f"{name}={value}"
146
+ #print (s)
147
+ LArg = self.add_argument (GetARG (name, 'name'),
148
+ dest = GetARG (name, 'dest'),
149
+ type = GetARG (name, 'type'),
150
+ default = GetARG (name, 'default'),
151
+ help = GetARG (name, 'help'),
152
+ action = GetARG (name, 'action'),
153
+ choices = GetARG (name, 'choices')
154
+ )
155
+ #endfor
156
+
157
+ # GArgParser.Args = GArgParser.ArgParser.parse_args (['-ld', '1'], namespace = C)
158
+
159
+ # self.Args = self.ArgParser.parse_args ()
160
+ self.Args, self.ArgsUnknown = self.parse_known_args ()
161
+ #print (self.Args)
162
+
163
+ self.ArgsDICT = vars (self.Args)
164
+ #print (self.ArgsDICT)
165
+
166
+ # for item in self.Args:
167
+ # ...
168
+ # GArgParser.ArgsDICT = {'-ld': GArgParser.Args.ld, '-lf': GArgParser.Args.lf,
169
+ # '-lfj': GArgParser.Args.lfj, '-ini': GArgParser.Args.ini}
170
+
171
+ #endfunction
172
+ #endclass
173
+
174
+ """
175
+ --------------------------------------
176
+ ArgumentParser objects
177
+ --------------------------------------
178
+ class argparse.ArgumentParser(prog=None, usage=None, description=None,
179
+ epilog=None, parents=[], formatter_class=argparse.HelpFormatter,
180
+ prefix_chars='-', fromfile_prefix_chars=None, argument_default=None,
181
+ conflict_handler='error', add_help=True, allow_abbrev=True, exit_on_error=True)
182
+
183
+ prog - имя программы (по умолчанию: os.path.basename(sys.argv[0]))
184
+ usage - Строка, описывающая использование программы (по умолчанию: генерируется из аргументов, добавленных в парсер)
185
+ description - текст для отображения перед аргументом help (по умолчанию без текста)
186
+ epilog - текст для отображения после справки аргумента (по умолчанию без текста)
187
+ parents - список объектов ArgumentParser, чьи аргументы также должны быть включены
188
+ formatter_class - класс для настройки вывода справки
189
+ prefix_chars - набор символов, которые предшествуют необязательным аргументам (по умолчанию: «-»).
190
+ fromfile_prefix_chars - набор символов, которые префиксируют файлы,
191
+ из которых должны быть прочитаны дополнительные аргументы (по умолчанию: нет)
192
+ argument_default - глобальное значение по умолчанию для аргументов (по умолчанию: None)
193
+ conflict_handler - стратегия разрешения конфликтующих опций (обычно ненужных)
194
+ add_help - добавить параметр -h/--help в парсер (по умолчанию: True)
195
+ allow_abbrev - позволяет сокращать длинные параметры, если аббревиатура недвусмысленна. (по умолчанию: Истина)
196
+ exit_on_error - определяет, завершается ли ArgumentParser с информацией об ошибке при возникновении ошибки.
197
+ (по умолчанию: Истина)
198
+ """
199
+
200
+ """
201
+ --------------------------------------
202
+ The add_argument() method
203
+ ArgumentParser.add_argument(name or flags...[, action][, nargs]
204
+ [, const][, default][, type][, choices][, required][, help][, metavar][, dest])
205
+ --------------------------------------
206
+ name or flags - либо имя, либо список строк параметров, например. foo или -f, --foo.
207
+ action - основной тип действия, которое необходимо предпринять, когда этот аргумент встречается в командной строке.
208
+ 'store', 'store_const', 'store_true', 'append', 'append_const', 'count', 'help', 'version'
209
+ nargs - количество аргументов командной строки, которые следует использовать.
210
+ int, '?', '*', '+', or argparse.REMAINDER
211
+ const - постоянное значение, необходимое для выбора некоторых действий и nargs.
212
+ default - значение, создаваемое, если аргумент отсутствует в командной строке и если он
213
+ отсутствует в объекте пространства имен. Defaults to None.
214
+ type - Тип, в который должен быть преобразован аргумент командной строки.
215
+ int, float, argparse.FileType('w'), or callable function
216
+ choices - последовательность допустимых значений аргумента.
217
+ ['foo', 'bar'], range(1, 10), or Container instance
218
+ required - можно ли опустить параметр командной строки (только необязательные параметры).
219
+ True or False
220
+ help - Краткое описание того, что делает аргумент.
221
+ metavar - имя аргумента в сообщениях об использовании.
222
+ dest - имя атрибута, который будет добавлен к объекту, возвращаемому функцией parse_args().
223
+
224
+ LArg = GArgParser.add_argument (
225
+ '-ld', dest='ld',
226
+ type=str, default='',
227
+ help = 'log dir',
228
+
229
+ action='store', required=True,
230
+ # action='store_const', const=True
231
+ # action='store_true',
232
+ # action='store_false',
233
+
234
+ nargs = '+',
235
+ # nargs = '?', const='',
236
+
237
+ # choices=[],
238
+ metavar = 'LDM'
239
+ )
240
+ """
241
+
242
+ """
243
+ --------------------------------------
244
+ The parse_args() method
245
+ --------------------------------------
246
+ ArgumentParser.parse_args(args=None, namespace=None)
247
+ args - Список строк для разбора. Значение по умолчанию берется из sys.argv.
248
+ namespace - Объект для получения атрибутов. По умолчанию используется новый пустой объект пространства имен.
249
+ ----------------------------------
250
+ """
251
+
252
+ #------------------------------------------------------
253
+ """ Работа со параметрами программы """
254
+ #------------------------------------------------------
255
+
256
+ #------------------------------------------------------
257
+ # __GetCmdLineArg
258
+ #------------------------------------------------------
259
+ def __GetCmdLineArg (ASwitch: str, ASwitchChars: (), AIgnoreCase: bool) -> str:
260
+ """__GetCmdLineArg"""
261
+ #beginfunction
262
+ i = 0
263
+ for s in sys.argv:
264
+ i = i + 1
265
+ if len(ASwitchChars) == 0 or ((s[0] in ASwitchChars) and (len(s) > 1)):
266
+ s = re.split('|'.join(ASwitchChars), s)[1]
267
+ if AIgnoreCase:
268
+ if s.upper() == ASwitch.upper():
269
+ if i < len(sys.argv):
270
+ s = sys.argv[i]
271
+ if s[0] in ASwitchChars:
272
+ return ''
273
+ else:
274
+ return s
275
+ #endif
276
+ #endif
277
+ #endif
278
+ else:
279
+ if s == ASwitch:
280
+ i = i + 1
281
+ if i <= len(sys.argv):
282
+ s = sys.argv[i]
283
+ if s[0] in ASwitchChars:
284
+ return ''
285
+ else:
286
+ return s
287
+ #endif
288
+ #endif
289
+ #endif
290
+ #endif
291
+ #endfor
292
+ return ''
293
+ #endfunction
294
+
295
+ #------------------------------------------------------
296
+ # FindCmdLineSwitch
297
+ #------------------------------------------------------
298
+ def FindCmdLineSwitch (ASwitch: str, ASwitchChars: (), AIgnoreCase: bool) -> bool:
299
+ """FindCmdLineSwitch"""
300
+ #beginfunction
301
+ i = 0
302
+ for s in sys.argv:
303
+ i = i + 1
304
+ if len(ASwitchChars) == 0 or ((s[0] in ASwitchChars) and (len(s) > 1)):
305
+ s = re.split('|'.join(ASwitchChars), s)[1]
306
+ if AIgnoreCase:
307
+ if s.upper() == ASwitch.upper():
308
+ return True
309
+ #endif
310
+ else:
311
+ if s == ASwitch:
312
+ return True
313
+ #endif
314
+ #endif
315
+ #endif
316
+ #endfor
317
+ return False
318
+ #endfunction
319
+
320
+ #---------------------------------------------------------
321
+ # GetParam
322
+ #---------------------------------------------------------
323
+ def GetParam (AParamName: str, ADefaultValue: str) -> str:
324
+ """GetParam"""
325
+ #beginfunction
326
+ LResult = ADefaultValue
327
+ if FindCmdLineSwitch (AParamName, cSwitchChars, True):
328
+ LParamValue: str = __GetCmdLineArg (AParamName, cSwitchChars, True)
329
+ LResult = LParamValue
330
+ #endif
331
+ return LResult
332
+ #endfunction
333
+
334
+ #---------------------------------------------------------
335
+ # CreateTArgParser
336
+ #---------------------------------------------------------
337
+ def CreateTArgParser (AProg: str, ADescrption: str) -> TArgParser:
338
+ """CreateTArgParser"""
339
+ #beginfunction
340
+ LResult = TArgParser (prog = AProg, description=ADescrption, prefix_chars='-/',
341
+ usage = None, epilog = None, parents = [], formatter_class = argparse.HelpFormatter,
342
+ fromfile_prefix_chars = None, argument_default = None,
343
+ conflict_handler = 'error', add_help = True, allow_abbrev = True, exit_on_error = True)
344
+ return LResult
345
+ #endfunction
346
+
347
+ GArgParser = CreateTArgParser ('LUArgParser', 'Параметры')
348
+
349
+ #---------------------------------------------------------
350
+ # main
351
+ #---------------------------------------------------------
352
+ def main ():
353
+ #beginfunction
354
+ ...
355
+ #endfunction
356
+
357
+ #------------------------------------------
358
+ #
359
+ #------------------------------------------
360
+ #beginmodule
361
+ if __name__ == "__main__":
362
+ main()
363
+ #endif
364
+
365
+ #endmodule