radboy 0.0.712__py3-none-any.whl → 0.0.714__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 radboy might be problematic. Click here for more details.

radboy/FB/FormBuilder.py CHANGED
@@ -13,6 +13,7 @@ from datetime import date,time,datetime
13
13
  from radboy.FB.FBMTXT import *
14
14
  from copy import copy
15
15
  from radboy.DB import db as DB
16
+ from decimal import localcontext
16
17
 
17
18
  def findAndSelectKey(options=None):
18
19
  if options is None:
@@ -64,309 +65,311 @@ def findAndSelectKey(options=None):
64
65
  print(e)
65
66
 
66
67
  def FormBuilder(data,extra_tooling=False,passThruText=None):
67
- if passThruText != None:
68
- passThruText=f"{Fore.light_green}{passThruText}: {Fore.light_yellow}"
69
- GOTOK=None
70
- def keys_index(data):
71
- for num,k in enumerate(data.keys()):
72
- msg=f"{Fore.light_cyan}{num}/{Fore.light_magenta}{num+1}{Fore.light_steel_blue} of {Fore.light_red}{len(data.keys())}{Fore.medium_violet_red} as {Fore.light_green}{k}:{Fore.cyan}{data[k]['type']}={Fore.magenta}{data[k]['default']}{Style.reset}"
73
- print(msg)
68
+ with localcontext() as ctx:
69
+ ctx.prec=ROUNDTO=int(db.detectGetOrSet("lsbld ROUNDTO default",4,setValue=False,literal=True))
70
+ if passThruText != None:
71
+ passThruText=f"{Fore.light_green}{passThruText}: {Fore.light_yellow}"
72
+ GOTOK=None
73
+ def keys_index(data):
74
+ for num,k in enumerate(data.keys()):
75
+ msg=f"{Fore.light_cyan}{num}/{Fore.light_magenta}{num+1}{Fore.light_steel_blue} of {Fore.light_red}{len(data.keys())}{Fore.medium_violet_red} as {Fore.light_green}{k}:{Fore.cyan}{data[k]['type']}={Fore.magenta}{data[k]['default']}{Style.reset}"
76
+ print(msg)
74
77
 
75
- def setGOTOK(GOTOK):
76
- gotoi=Prompt.__init2__(None,func=FormBuilderMkText,ptext="What index do you wish to goto?",helpText=f"please type an integer between 0 to {len(data.keys())-1}",data="integer")
77
- if gotoi in [None,]:
78
- return
79
- elif gotoi in ['d',]:
80
- pass
81
- else:
82
- try:
83
- keys=data.keys()
84
- GOTOK=list(keys)[gotoi]
85
- print(GOTOK)
86
- return GOTOK
87
- except Exception as e:
88
- print(e)
89
- print(f"Index {gotoi} not found in {data} in its keys-list indexes: {data.keys()}")
90
-
91
- def setGOTOK_str(data):
92
- while True:
93
- gotoi=Prompt.__init2__(None,func=FormBuilderMkText,ptext="What key do you wish to goto?",helpText=f"please type the key you want to goto",data="string")
78
+ def setGOTOK(GOTOK):
79
+ gotoi=Prompt.__init2__(None,func=FormBuilderMkText,ptext="What index do you wish to goto?",helpText=f"please type an integer between 0 to {len(data.keys())-1}",data="integer")
94
80
  if gotoi in [None,]:
95
81
  return
96
82
  elif gotoi in ['d',]:
97
83
  pass
98
84
  else:
99
85
  try:
100
- test=data[gotoi]
101
- return gotoi
86
+ keys=data.keys()
87
+ GOTOK=list(keys)[gotoi]
88
+ print(GOTOK)
89
+ return GOTOK
102
90
  except Exception as e:
103
91
  print(e)
104
- print(f"Key {gotoi} not found in {data} in its keys {data.keys()}")
105
- index=None
106
- item={}
107
- for num,k in enumerate(data.keys()):
108
- item[k]=data[k]['default']
109
- review=False
110
- finalize=False
111
- finish=False
112
- while True:
113
- if finalize:
114
- break
92
+ print(f"Index {gotoi} not found in {data} in its keys-list indexes: {data.keys()}")
93
+
94
+ def setGOTOK_str(data):
95
+ while True:
96
+ gotoi=Prompt.__init2__(None,func=FormBuilderMkText,ptext="What key do you wish to goto?",helpText=f"please type the key you want to goto",data="string")
97
+ if gotoi in [None,]:
98
+ return
99
+ elif gotoi in ['d',]:
100
+ pass
101
+ else:
102
+ try:
103
+ test=data[gotoi]
104
+ return gotoi
105
+ except Exception as e:
106
+ print(e)
107
+ print(f"Key {gotoi} not found in {data} in its keys {data.keys()}")
108
+ index=None
109
+ item={}
110
+ for num,k in enumerate(data.keys()):
111
+ item[k]=data[k]['default']
112
+ review=False
113
+ finalize=False
114
+ finish=False
115
115
  while True:
116
116
  if finalize:
117
117
  break
118
- for num,k in enumerate(data.keys()):
119
- if GOTOK != None:
120
- print(k,GOTOK)
121
- if k != GOTOK:
122
- continue
123
- else:
124
- GOTOK=None
125
- if isinstance(index,int):
126
- if num < index:
127
- continue
118
+ while True:
119
+ if finalize:
120
+ break
121
+ for num,k in enumerate(data.keys()):
122
+ if GOTOK != None:
123
+ print(k,GOTOK)
124
+ if k != GOTOK:
125
+ continue
126
+ else:
127
+ GOTOK=None
128
+ if isinstance(index,int):
129
+ if num < index:
130
+ continue
131
+ else:
132
+ index=None
133
+ ht=''
134
+ if data[k]['type'].lower() in ['date','datetime','time']:
135
+ ht="type 'y' or 'n' to start"
136
+ elif data[k]['type'].lower() in ['list']:
137
+ ht="type your $DELIMITED list, the you will be asked for $DELIMITED character to use!"
138
+ elif data[k]['type'].lower() in ['bool','boolean']:
139
+ ht="type y|yes|t|true|1 for yes/True, and n|no|0|false|f for no/False"
140
+ ht2=f"""{Style.bold}{Fore.dark_blue}{Back.grey_70} FormBuilder {Fore.dark_red_1}Options {Style.reset}
141
+ {Fore.light_yellow}#b{Fore.light_green} will restart {Fore.light_red}[If it is wired to, might be reverse of 'b']{Style.reset}
142
+ {Fore.light_yellow}b{Fore.light_green} will return to previous menu{Fore.light_red}[If it is wired to, might be reverse of '#b']{Style.reset}
143
+ {Fore.light_yellow}f{Fore.light_green} will proceeds to review, where 'f' finishes,'y/yes/1' will review,'<Enter>/<Return>/n/f/0' will act as finish{Style.reset}
144
+ {Fore.light_yellow}p{Fore.light_green} at field filling lines goes to previous field{Style.reset}
145
+ {Fore.light_yellow}d{Fore.light_green} use default{Style.reset}
146
+ {Fore.light_yellow}m{Fore.light_green} use manually entered data present under m key option{Style.reset}
147
+ {Fore.light_yellow}#done#{Fore.light_green} to finish a str+(MultiLine) Input{Style.reset}
148
+ {Fore.grey_70}*{Fore.light_cyan}{num}/{Fore.light_magenta}{num+1}{Fore.light_steel_blue} of {Fore.light_red}{len(data.keys())}{Fore.medium_violet_red} as {Fore.light_green}{k}:{Fore.cyan}{data[k]['type']}={Fore.magenta}{data[k]['default']}{Style.reset}
149
+ {Fore.grey_70}*{Fore.light_yellow}goto {Fore.light_cyan}i{Fore.light_yellow}/goto{Fore.light_cyan}i{Fore.light_green} - go to {Fore.light_cyan}index{Style.reset}
150
+ {Fore.grey_70}*{Fore.light_yellow}goto{Fore.light_cyan}k{Fore.light_yellow},goto {Fore.light_cyan}k{Fore.light_green} goto {Fore.light_cyan}key{Fore.light_green} for field in Form {Style.reset}
151
+ {Fore.grey_70}*{Fore.light_yellow}showkeys{Fore.light_green} to see indexes refering to form keys{Style.reset}
152
+ {Fore.grey_70}*{Fore.light_yellow}'schk','search keys','sch ky{Fore.light_green} to search select and goto key{Style.reset}
153
+ {Fore.grey_70}* {Fore.grey_50}These cmds only work with fields that return str/VARCHAR/TEXT/str+/list of str's, i.e. [str,]
154
+ {Fore.grey_70}*{Fore.grey_50}['na','not_a_number','nan']{Fore.light_green}set a field to None{Style.reset}
155
+ {Style.reset}"""
156
+ print(ht2)
157
+ FormBuilderHelpText()
158
+ cmd=None
159
+ if data[k]['type']=='str+':
160
+ done=False
161
+ while not done:
162
+ lines=[]
163
+ skip_review=False
164
+ while True:
165
+ line=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}You(m):{item.get(k)}|Default(d):{data[k]['default']} Field:{str(k)}",helpText=f'{ht}\nuse {Fore.light_red}{Style.bold}{Back.grey_50}#done#{Style.reset} to stop.',data=data[k]['type'][:-1])
166
+ if line in [None,]:
167
+ return
168
+ elif line.lower() in ['#done#',]:
169
+ break
170
+ elif isinstance(line,list) and [i.lower() for i in line] in [['gotoi',],['goto i']]:
171
+ GOTOK=setGOTOK(data)
172
+ while GOTOK not in list(data.keys()):
173
+ GOTOK=setGOTOK(data)
174
+ if GOTOK in [None,]:
175
+ return
176
+ done=True
177
+ finalize=True
178
+ skip_review=True
179
+ break
180
+ elif isinstance(line,list) and [i.lower() for i in line] in [['gotok',],['goto k']]:
181
+ GOTOK=setGOTOK_str(data)
182
+ while GOTOK not in list(data.keys()):
183
+ GOTOK=setGOTOK_str(data)
184
+ if GOTOK in [None,]:
185
+ return
186
+ done=True
187
+ finalize=True
188
+ skip_review=True
189
+ break
190
+ elif isinstance(line,str) and line.lower() in ['gotoi','goto i']:
191
+ GOTOK=setGOTOK(GOTOK)
192
+ while GOTOK not in list(data.keys()):
193
+ GOTOK=setGOTOK(GOTOK)
194
+ if GOTOK in [None,]:
195
+ return
196
+ done=True
197
+ finalize=True
198
+ skip_review=True
199
+ break
200
+ elif isinstance(line,str) and line.lower() in ['gotok','goto k']:
201
+ GOTOK=setGOTOK_str(data)
202
+ while GOTOK not in list(data.keys()):
203
+ GOTOK=setGOTOK(GOTOK)
204
+ if GOTOK in [None,]:
205
+ return
206
+ done=True
207
+ finalize=True
208
+ skip_review=True
209
+ break
210
+ elif isinstance(line,str) and line.lower() in ['schk','search keys','sch ky']:
211
+ DATA={str(i):{'cmds':[i,],'desc':''} for i in data}
212
+ GOTOK=findAndSelectKey(options=DATA)
213
+ while GOTOK not in list(data.keys()):
214
+ GOTOK=setGOTOK_str(GOTOK)
215
+ if GOTOK in [None,]:
216
+ return
217
+ done=True
218
+ finalize=True
219
+ skip_review=True
220
+ break
221
+ elif isinstance(line,str) and line.lower() in ['showkeys','show keys']:
222
+ keys_index(data)
223
+ '''
224
+ done=True
225
+ finalize=True
226
+ skip_review=True
227
+ '''
228
+ continue
229
+ elif line.lower() == 'd':
230
+ line='\n'
231
+ else:
232
+ if len(line) in [i for i in range(7,14)]:
233
+ with Session(ENGINE) as session:
234
+ possible=session.query(Entry).filter(or_(Entry.Barcode==line,Entry.Barcode.icontains(line),Entry.Code==line,Entry.Code.icontains(line))).all()
235
+ if len(possible) > 0:
236
+ line+="\nBarcode/Code Matches found Below\n"+f"{'-'*len('Barcode/Code Matches found Below')}\n"
237
+ for num,i in enumerate(possible):
238
+ line+=i.seeShortRaw()+"\n"
239
+
240
+ lines.append(line)
241
+ cmd='\n'.join(lines)
242
+ if not skip_review:
243
+ use=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}{cmd}\nUse? [y/n]",helpText="type something that can be represented as a boolean, this includes boolean formulas used in if/if-then statements(True=y/1/t/true/yes/1==1,False=n/no/0/f/false/1==0)",data="boolean")
244
+ if use in [None,]:
245
+ return
246
+ elif use:
247
+ done=True
248
+ finalize=True
249
+ break
250
+ else:
251
+ continue
128
252
  else:
129
- index=None
130
- ht=''
131
- if data[k]['type'].lower() in ['date','datetime','time']:
132
- ht="type 'y' or 'n' to start"
133
- elif data[k]['type'].lower() in ['list']:
134
- ht="type your $DELIMITED list, the you will be asked for $DELIMITED character to use!"
135
- elif data[k]['type'].lower() in ['bool','boolean']:
136
- ht="type y|yes|t|true|1 for yes/True, and n|no|0|false|f for no/False"
137
- ht2=f"""{Style.bold}{Fore.dark_blue}{Back.grey_70} FormBuilder {Fore.dark_red_1}Options {Style.reset}
138
- {Fore.light_yellow}#b{Fore.light_green} will restart {Fore.light_red}[If it is wired to, might be reverse of 'b']{Style.reset}
139
- {Fore.light_yellow}b{Fore.light_green} will return to previous menu{Fore.light_red}[If it is wired to, might be reverse of '#b']{Style.reset}
140
- {Fore.light_yellow}f{Fore.light_green} will proceeds to review, where 'f' finishes,'y/yes/1' will review,'<Enter>/<Return>/n/f/0' will act as finish{Style.reset}
141
- {Fore.light_yellow}p{Fore.light_green} at field filling lines goes to previous field{Style.reset}
142
- {Fore.light_yellow}d{Fore.light_green} use default{Style.reset}
143
- {Fore.light_yellow}m{Fore.light_green} use manually entered data present under m key option{Style.reset}
144
- {Fore.light_yellow}#done#{Fore.light_green} to finish a str+(MultiLine) Input{Style.reset}
145
- {Fore.grey_70}*{Fore.light_cyan}{num}/{Fore.light_magenta}{num+1}{Fore.light_steel_blue} of {Fore.light_red}{len(data.keys())}{Fore.medium_violet_red} as {Fore.light_green}{k}:{Fore.cyan}{data[k]['type']}={Fore.magenta}{data[k]['default']}{Style.reset}
146
- {Fore.grey_70}*{Fore.light_yellow}goto {Fore.light_cyan}i{Fore.light_yellow}/goto{Fore.light_cyan}i{Fore.light_green} - go to {Fore.light_cyan}index{Style.reset}
147
- {Fore.grey_70}*{Fore.light_yellow}goto{Fore.light_cyan}k{Fore.light_yellow},goto {Fore.light_cyan}k{Fore.light_green} goto {Fore.light_cyan}key{Fore.light_green} for field in Form {Style.reset}
148
- {Fore.grey_70}*{Fore.light_yellow}showkeys{Fore.light_green} to see indexes refering to form keys{Style.reset}
149
- {Fore.grey_70}*{Fore.light_yellow}'schk','search keys','sch ky{Fore.light_green} to search select and goto key{Style.reset}
150
- {Fore.grey_70}* {Fore.grey_50}These cmds only work with fields that return str/VARCHAR/TEXT/str+/list of str's, i.e. [str,]
151
- {Fore.grey_70}*{Fore.grey_50}['na','not_a_number','nan']{Fore.light_green}set a field to None{Style.reset}
152
- {Style.reset}"""
153
- print(ht2)
154
- FormBuilderHelpText()
155
- cmd=None
156
- if data[k]['type']=='str+':
157
- done=False
158
- while not done:
159
- lines=[]
160
- skip_review=False
253
+ if_continue=False
161
254
  while True:
162
- line=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}You(m):{item.get(k)}|Default(d):{data[k]['default']} Field:{str(k)}",helpText=f'{ht}\nuse {Fore.light_red}{Style.bold}{Back.grey_50}#done#{Style.reset} to stop.',data=data[k]['type'][:-1])
163
- if line in [None,]:
255
+ passThru=['gotoi','goto i','gotok','goto k','showkeys','show keys','ff','finalize','finish','schk','search keys','sch ky']
256
+ cmd=Prompt.__init2__(None,func=lambda text,data:FormBuilderMkText(text,data,passThru=passThru,PassThru=True),ptext=f"{passThruText} You(m):{item.get(k)}|Default(d):{data[k]['default']} Field:{str(k)}",helpText=f'{ht}',data=data[k]['type'])
257
+ if cmd in [None,]:
164
258
  return
165
- elif line.lower() in ['#done#',]:
166
- break
167
- elif isinstance(line,list) and [i.lower() for i in line] in [['gotoi',],['goto i']]:
259
+ elif isinstance(cmd,list) and [i.lower() for i in cmd] in [['gotoi',],['goto i']]:
168
260
  GOTOK=setGOTOK(data)
169
261
  while GOTOK not in list(data.keys()):
170
262
  GOTOK=setGOTOK(data)
171
- if GOTOK in [None,]:
172
- return
173
- done=True
174
- finalize=True
175
- skip_review=True
263
+ if_continue=True
176
264
  break
177
- elif isinstance(line,list) and [i.lower() for i in line] in [['gotok',],['goto k']]:
265
+
266
+ elif isinstance(cmd,list) and [i.lower() for i in cmd] in [['gotok',],['goto k']]:
178
267
  GOTOK=setGOTOK_str(data)
179
268
  while GOTOK not in list(data.keys()):
180
269
  GOTOK=setGOTOK_str(data)
181
- if GOTOK in [None,]:
182
- return
183
- done=True
184
- finalize=True
185
- skip_review=True
270
+ if_continue=True
186
271
  break
187
- elif isinstance(line,str) and line.lower() in ['gotoi','goto i']:
272
+
273
+ elif isinstance(cmd,str) and cmd.lower() in ['gotoi','goto i']:
188
274
  GOTOK=setGOTOK(GOTOK)
189
275
  while GOTOK not in list(data.keys()):
190
276
  GOTOK=setGOTOK(GOTOK)
191
- if GOTOK in [None,]:
192
- return
193
- done=True
194
- finalize=True
195
- skip_review=True
277
+ if_continue=True
196
278
  break
197
- elif isinstance(line,str) and line.lower() in ['gotok','goto k']:
279
+
280
+ elif isinstance(cmd,str) and cmd.lower() in ['gotok','goto k']:
198
281
  GOTOK=setGOTOK_str(data)
199
282
  while GOTOK not in list(data.keys()):
200
- GOTOK=setGOTOK(GOTOK)
201
- if GOTOK in [None,]:
202
- return
203
- done=True
204
- finalize=True
205
- skip_review=True
283
+ GOTOK=setGOTOK_str(data)
284
+ if_continue=True
206
285
  break
207
- elif isinstance(line,str) and line.lower() in ['schk','search keys','sch ky']:
286
+ elif isinstance(cmd,str) and cmd.lower() in ['schk','search keys','sch ky']:
208
287
  DATA={str(i):{'cmds':[i,],'desc':''} for i in data}
209
288
  GOTOK=findAndSelectKey(options=DATA)
289
+ print(GOTOK)
210
290
  while GOTOK not in list(data.keys()):
211
- GOTOK=setGOTOK_str(GOTOK)
291
+ GOTOK=findAndSelectKey(options=DATA)
292
+ #GOTOK=setGOTOK_str(GOTOK)
212
293
  if GOTOK in [None,]:
213
294
  return
214
- done=True
215
- finalize=True
216
- skip_review=True
295
+ if_continue=True
217
296
  break
218
- elif isinstance(line,str) and line.lower() in ['showkeys','show keys']:
297
+ elif isinstance(cmd,str) and cmd.lower() in ['showkeys','show keys']:
219
298
  keys_index(data)
220
- '''
221
- done=True
222
- finalize=True
223
- skip_review=True
224
- '''
225
- continue
226
- elif line.lower() == 'd':
227
- line='\n'
228
- else:
229
- if len(line) in [i for i in range(7,14)]:
230
- with Session(ENGINE) as session:
231
- possible=session.query(Entry).filter(or_(Entry.Barcode==line,Entry.Barcode.icontains(line),Entry.Code==line,Entry.Code.icontains(line))).all()
232
- if len(possible) > 0:
233
- line+="\nBarcode/Code Matches found Below\n"+f"{'-'*len('Barcode/Code Matches found Below')}\n"
234
- for num,i in enumerate(possible):
235
- line+=i.seeShortRaw()+"\n"
236
-
237
- lines.append(line)
238
- cmd='\n'.join(lines)
239
- if not skip_review:
240
- use=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}{cmd}\nUse? [y/n]",helpText="type something that can be represented as a boolean, this includes boolean formulas used in if/if-then statements(True=y/1/t/true/yes/1==1,False=n/no/0/f/false/1==0)",data="boolean")
241
- if use in [None,]:
242
- return
243
- elif use:
244
- done=True
245
- finalize=True
246
- break
247
- else:
248
299
  continue
249
- else:
250
- if_continue=False
251
- while True:
252
- passThru=['gotoi','goto i','gotok','goto k','showkeys','show keys','ff','finalize','finish','schk','search keys','sch ky']
253
- cmd=Prompt.__init2__(None,func=lambda text,data:FormBuilderMkText(text,data,passThru=passThru,PassThru=True),ptext=f"{passThruText} You(m):{item.get(k)}|Default(d):{data[k]['default']} Field:{str(k)}",helpText=f'{ht}',data=data[k]['type'])
254
- if cmd in [None,]:
255
- return
256
- elif isinstance(cmd,list) and [i.lower() for i in cmd] in [['gotoi',],['goto i']]:
257
- GOTOK=setGOTOK(data)
258
- while GOTOK not in list(data.keys()):
259
- GOTOK=setGOTOK(data)
260
- if_continue=True
261
300
  break
262
-
263
- elif isinstance(cmd,list) and [i.lower() for i in cmd] in [['gotok',],['goto k']]:
264
- GOTOK=setGOTOK_str(data)
265
- while GOTOK not in list(data.keys()):
266
- GOTOK=setGOTOK_str(data)
267
- if_continue=True
301
+ if if_continue:
302
+ continue
303
+ if cmd in [None,]:
304
+ return
305
+ elif isinstance(cmd,str):
306
+ if cmd.lower() in ['p',]:
307
+ if num == 0:
308
+ index=len(data.keys())-1
309
+ else:
310
+ index=num-1
268
311
  break
269
-
270
- elif isinstance(cmd,str) and cmd.lower() in ['gotoi','goto i']:
271
- GOTOK=setGOTOK(GOTOK)
272
- while GOTOK not in list(data.keys()):
273
- GOTOK=setGOTOK(GOTOK)
274
- if_continue=True
312
+ elif cmd.lower() in ['d',]:
313
+ item[k]=data[k]['default']
314
+ elif cmd.lower() in ['f','finalize']:
315
+ finalize=True
275
316
  break
276
-
277
- elif isinstance(cmd,str) and cmd.lower() in ['gotok','goto k']:
278
- GOTOK=setGOTOK_str(data)
279
- while GOTOK not in list(data.keys()):
280
- GOTOK=setGOTOK_str(data)
281
- if_continue=True
317
+ elif cmd.lower() in ['ff','finish']:
318
+ finalize=True
319
+ finish=True
282
320
  break
283
- elif isinstance(cmd,str) and cmd.lower() in ['schk','search keys','sch ky']:
284
- DATA={str(i):{'cmds':[i,],'desc':''} for i in data}
285
- GOTOK=findAndSelectKey(options=DATA)
286
- print(GOTOK)
287
- while GOTOK not in list(data.keys()):
288
- GOTOK=findAndSelectKey(options=DATA)
289
- #GOTOK=setGOTOK_str(GOTOK)
290
- if GOTOK in [None,]:
291
- return
292
- if_continue=True
293
- break
294
- elif isinstance(cmd,str) and cmd.lower() in ['showkeys','show keys']:
295
- keys_index(data)
296
- continue
297
- break
298
- if if_continue:
299
- continue
300
- if cmd in [None,]:
301
- return
302
- elif isinstance(cmd,str):
303
- if cmd.lower() in ['p',]:
304
- if num == 0:
305
- index=len(data.keys())-1
321
+ elif cmd.lower() in ['na','not_a_number','nan']:
322
+ item[k]=None
323
+ elif cmd.lower() in ['m',]:
324
+ print(f"Not changing User set value '{k}':'{item.get(k)}'")
325
+ pass
306
326
  else:
307
- index=num-1
308
- break
309
- elif cmd.lower() in ['d',]:
310
- item[k]=data[k]['default']
311
- elif cmd.lower() in ['f','finalize']:
312
- finalize=True
313
- break
314
- elif cmd.lower() in ['ff','finish']:
315
- finalize=True
316
- finish=True
317
- break
318
- elif cmd.lower() in ['na','not_a_number','nan']:
319
- item[k]=None
320
- elif cmd.lower() in ['m',]:
321
- print(f"Not changing User set value '{k}':'{item.get(k)}'")
322
- pass
327
+ item[k]=cmd
323
328
  else:
324
329
  item[k]=cmd
330
+ if not finish:
331
+ review=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}review?",helpText="",data="bool")
332
+ #print(review)
333
+ if review in ['f',]:
334
+ review=False
335
+ if review in [None,]:
336
+ return
337
+ elif review in [True,'d']:
338
+ finalize=False
339
+ continue
325
340
  else:
326
- item[k]=cmd
327
- if not finish:
328
- review=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}review?",helpText="",data="bool")
329
- #print(review)
330
- if review in ['f',]:
331
- review=False
332
- if review in [None,]:
333
- return
334
- elif review in [True,'d']:
335
- finalize=False
336
- continue
341
+ break
337
342
  else:
343
+ review=False
338
344
  break
339
- else:
340
- review=False
341
- break
342
345
 
343
- if extra_tooling == True:
344
- tmp_item={str(num):item[i] for num,i in enumerate(item)}
345
- #ask if extra data is needed
346
- count=len(tmp_item)
347
- while True:
348
- nkv=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}New Key:Value Pair",helpText="yes or no",data="boolean")
349
- if nkv in ['d',True]:
350
- key=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}default[{count}] Key",helpText="yes or no",data="string")
351
- if key in [None,]:
352
- continue
353
- elif key in ['d',]:
354
- key=str(count)
355
- value=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}Value",helpText="data text",data="string")
356
- if value in [None,]:
357
- continue
358
- tmp_item[key]=value
359
- count+=1
360
- else:
361
- break
362
- #loop through lines for removal
363
- final_result={}
364
- for k in tmp_item:
365
- keep=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}['{tmp_item[k]}'] keep?",helpText="yes or no",data="boolean")
366
- if keep in ['d',True]:
367
- final_result[k]=tmp_item[k]
368
- return final_result
369
- return item
346
+ if extra_tooling == True:
347
+ tmp_item={str(num):item[i] for num,i in enumerate(item)}
348
+ #ask if extra data is needed
349
+ count=len(tmp_item)
350
+ while True:
351
+ nkv=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}New Key:Value Pair",helpText="yes or no",data="boolean")
352
+ if nkv in ['d',True]:
353
+ key=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}default[{count}] Key",helpText="yes or no",data="string")
354
+ if key in [None,]:
355
+ continue
356
+ elif key in ['d',]:
357
+ key=str(count)
358
+ value=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}Value",helpText="data text",data="string")
359
+ if value in [None,]:
360
+ continue
361
+ tmp_item[key]=value
362
+ count+=1
363
+ else:
364
+ break
365
+ #loop through lines for removal
366
+ final_result={}
367
+ for k in tmp_item:
368
+ keep=Prompt.__init2__(None,func=FormBuilderMkText,ptext=f"{passThruText}['{tmp_item[k]}'] keep?",helpText="yes or no",data="boolean")
369
+ if keep in ['d',True]:
370
+ final_result[k]=tmp_item[k]
371
+ return final_result
372
+ return item
370
373
 
371
374
  '''
372
375
  form=FormBuilder(data=fm_data)
radboy/__init__.py CHANGED
@@ -1 +1 @@
1
- VERSION='0.0.712'
1
+ VERSION='0.0.714'
Binary file
@@ -462,6 +462,40 @@ Here:
462
462
  'desc':f'multiply a (price+crv) times its tax rate plus (price+crv) and return the total',
463
463
  'exec':lambda: price_plus_crv_by_tax(total=True),
464
464
  },
465
+ f'{uuid1()}':{
466
+ 'cmds':['cylinder volume radius','cylvolrad','cyl vol rad'],
467
+ 'desc':f'obtain the volume of a cylinder using radius',
468
+ 'exec':lambda: volumeCylinderRadius(),
469
+ },
470
+ f'{uuid1()}':{
471
+ 'cmds':['cylinder volume diameter','cylvoldiam','cyl vol diam'],
472
+ 'desc':f'obtain the volume of a cylinder using diameter',
473
+ 'exec':lambda: volumeCylinderDiameter(),
474
+ },
475
+ f'{uuid1()}':{
476
+ 'cmds':['cone volume radius','conevolrad','cone vol rad'],
477
+ 'desc':f'obtain the volume of a cone using radius, a code is 1/3 of a cylinder at the same height and radius',
478
+ 'exec':lambda: volumeConeRadius(),
479
+ },
480
+ f'{uuid1()}':{
481
+ 'cmds':['cone volume diameter','conevoldiam','cone vol diam'],
482
+ 'desc':f'obtain the volume of a cone using diameter, a code is 1/3 of a cylinder at the same height and diameter',
483
+ 'exec':lambda: volumeConeDiameter(),
484
+ },
485
+ f'{uuid1()}':{
486
+ 'cmds':['herons formula','hrns fmla'],
487
+ 'desc':f'''
488
+ Heron's formula calculates the area of any
489
+ triangle given only the lengths of its
490
+ three sides (a, b, and c). The formula is:
491
+ Area = √(s(s-a)(s-b)(s-c)). To use it, first
492
+ calculate the semi-perimeter, s = (a + b
493
+ + c) / 2, and then substitute this value
494
+ and the side lengths into the formula to
495
+ find the area.
496
+ ''',
497
+ 'exec':lambda: heronsFormula(),
498
+ },
465
499
  f'{uuid1()}':{
466
500
  'cmds':['tax add',],
467
501
  'desc':'''AddNewTaxRate() -> None