-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathMockdoo.py
318 lines (257 loc) · 51.2 KB
/
Mockdoo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
from ttkthemes import ThemedTk
from tkinter import *
from tkinter import ttk, messagebox
from collections import deque
from fake import TEMPLATES
from file import File
__author__ = "屈永飞"
__copyright__ = "Copyright (C) 2004 屈永飞"
__license__ = "Public Domain"
__version__ = "1.0"
Themes = [
'adapta', # 自适应式主题
'aquativo', # ?
'arc', #
'black',
'blue',
'breeze',
'clearlooks',
'elegance',
'equilux',
'itft1',
'keramik',
'kroc',
'plastik',
'radiance',
'scid themes',
'smog',
'winxpblue',
'yaru'
]
img = "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"
v_list = [k for k in TEMPLATES.keys()]
class App(object):
def __init__(self, root):
self.root = root
self.root.title("测试数据生成器")
self.root.geometry('1250x700+0+0')
self.root.resizable(0, 0)
self.input_queue = []
self.val = deque(maxlen=3)
# self.root.set_theme_advanced(pixmap_themes[0])
#
# self.root.attributes("-alpha", 1)
#----creat block save content disable
self.block_text = ttk.Entry(self.root, background='black')
self.block_text.place(x=10, y=10)
# block_text.pack()
self.style = ttk.Style()
self.style.configure('TEntry', selectbackground='#00B0FF')
# 背景图片
# self.bg = ImageTk.PhotoImage(file='bg.jpeg')
bg = Label(self.root, bg='#fff').place(x=0, y=0, relwidth=1, relheight=1)
# left img
self.left = PhotoImage(data=img)
Label(self.root, image=self.left).place(x=-180, y=-50, )
self.style.configure('TCombobox', padding=[0, 6.5, 0, 6.5], selectbackground='white', selectforeground='black')
# --------Register
Label(self.root, text='Register Here', font=("times new roman", 25, 'bold'), fg='#00B0FF').place(x=700, y=50)
Label(self.root, text='Field Name', font=("times new roman", 20, 'bold'), fg='gray').place(x=700, y=100)
Label(self.root, text='Type', font=("times new roman", 20, 'bold'), fg='gray').place(x=920, y=100)
Label(self.root, text='Options', font=("times new roman", 20, 'bold'), fg='gray').place(x=1100, y=100)
# -------Register Frame
frame1 = ttk.Frame(self.root) # FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT
frame1.place(x=700, y=130)
canvas = Canvas(frame1, bg='#fff', scrollregion=(0, 0, 1000, 1000)) #
vbar = ttk.Scrollbar(frame1, )
vbar.pack(side=RIGHT, fill=BOTH)
vbar.config(command=canvas.yview,)
canvas.config(width=480, height=415)
canvas.config(yscrollcommand=vbar.set)
canvas.pack(side=RIGHT, expand=True, fill=BOTH) # side=LEFT, expand=True, fill=BOTH
# ----------Row 1---------
self.field1 = ttk.Entry(frame1, font=('times new roman', 20)) # FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT
self.field1.insert(0, 'id')
self.type1 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list,style='TCombobox')
self.type1.current(0)
self.clear1 = ttk.Button(text='X', width=1)
self.clear1['command'] = lambda :self.clear(self.field1, self.type1)
# ----------Row 2----------
self.field2 = ttk.Entry(frame1, font=('times new roman', 20), )
self.field2.insert(0, 'first_name')
self.type2 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
self.type2.current(1)
# ----------Row 3----------
self.field3 = ttk.Entry(frame1, font=('times new roman', 20), )
self.field3.insert(0, 'last_name')
self.type3 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
self.type3.current(2)
# ----------Row 4----------
self.field4 = ttk.Entry(frame1, font=('times new roman', 20), )
self.field4.insert(0, 'email')
self.type4 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
self.type4.current(3)
# ----------Row 5----------
self.field5 = ttk.Entry(frame1, font=('times new roman', 20), )
self.field5.insert(0, 'gender')
self.type5 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
self.type5.current(4)
# ----------Row 6----------
self.field6 = ttk.Entry(frame1, font=('times new roman', 20), )
self.field6.insert(0, 'ip_adress')
self.type6 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
self.type6.current(5)
# ----------Row 7----------
self.field7 = ttk.Entry(frame1, font=('times new roman', 20))
self.type7 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
# ----------Row 8----------
self.field8 = ttk.Entry(frame1, font=('times new roman', 20), background='pink')
self.type8 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
# ----------Row 9----------
self.field9 = ttk.Entry(frame1, font=('times new roman', 20), )
self.type9 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
# ----------Row 10----------
self.field10 = ttk.Entry(frame1, font=('times new roman', 20), )
self.type10 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
# ----------Row 11----------
self.field11 = ttk.Entry(frame1, font=('times new roman', 20), )
self.type11 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
# ----------Row 12----------
self.field12 = ttk.Entry(frame1, font=('times new roman', 20), )
self.type12 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
# ----------Row 13----------
self.field13 = ttk.Entry(frame1, font=('times new roman', 20), )
self.type13 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
# ----------Row 14----------
self.field14 = ttk.Entry(frame1, font=('times new roman', 20), )
self.type14 = ttk.Combobox(frame1, font=('times new roman', 15), state='readonly', justify=CENTER, values=v_list)
# -------------------
canvas.create_window(110, 22, window=self.field1)
canvas.create_window(315, 22, window=self.type1)
canvas.create_window(430, 22, window=self.clear1)
canvas.create_window(110, 60, window=self.field2)
canvas.create_window(315, 60, window=self.type2)
canvas.create_window(110, 98, window=self.field3)
canvas.create_window(315, 98, window=self.type3)
canvas.create_window(110, 136, window=self.field4)
canvas.create_window(315, 136, window=self.type4)
canvas.create_window(110, 174, window=self.field5)
canvas.create_window(315, 174, window=self.type5)
canvas.create_window(110, 212, window=self.field6)
canvas.create_window(315, 212, window=self.type6)
canvas.create_window(110, 250, window=self.field7)
canvas.create_window(315, 250, window=self.type7)
canvas.create_window(110, 288, window=self.field8)
canvas.create_window(315, 288, window=self.type8)
canvas.create_window(110, 326, window=self.field9)
canvas.create_window(315, 326, window=self.type9)
canvas.create_window(110, 364, window=self.field10)
canvas.create_window(315, 364, window=self.type10)
canvas.create_window(110, 402, window=self.field11)
canvas.create_window(315, 402, window=self.type11)
canvas.create_window(110, 440, window=self.field12)
canvas.create_window(315, 440, window=self.type12)
canvas.create_window(110, 478, window=self.field13)
canvas.create_window(315, 478, window=self.type13)
canvas.create_window(110, 516, window=self.field14)
canvas.create_window(315, 516, window=self.type14)
# ----------
# ------------可变 ----------
name = ttk.Checkbutton(self.root, text='array', takefocus=0, variable=1)
name.place(x=905, y=575)
name.state(['selected'])
name.place_forget()
ttk.Label(self.root, text='Rows:', font=("times new roman", 20, 'bold')).place(x=500, y=575)
self.rows = ttk.Entry(self.root, font=('times new roman', 20,))
self.rows.insert(0, 1000)
self.rows.place(x=560, y=570, width=100)
ttk.Label(self.root, text='Format:', font=("times new roman", 20, 'bold')).place(x=670, y=575)
self.save_file_type = ttk.Combobox(self.root, font=('times new roman', 15), state='readonly', justify=CENTER,
)
self.save_file_type['values'] = ('JSON', 'SQL', 'CSV')
# self.save_file_type.current(0)
self.save_file_type.place(x=745, y=570, width=120)
self.save_file_type.bind('<<ComboboxSelected>>', self.callback)
# # ------Download button--------
btn = ttk.Button(self.root, text='Download', cursor='hand2', command=self.down)
btn.place(x=1040, y=600, width=150) # x=1040, y=640,
self.input_queue.extend([(self.field1, self.type1),
(self.field2, self.type2),
(self.field3, self.type3),
(self.field4, self.type4),
(self.field5, self.type5),
(self.field6, self.type6),
(self.field7, self.type7),
(self.field8, self.type8),
(self.field9, self.type8),
(self.field10, self.type10),
(self.field11, self.type11),
(self.field12, self.type12),
(self.field13, self.type13),
(self.field14, self.type14)]
)
def callback(self, event): # 905 575
#
if event.widget.get() == "JSON":
self.remove()
a = self.add_radio('array', 875, 575)
self.val.append(a)
elif event.widget.get() == "SQL":
self.remove()
label_name = self.add_label('Table Name:', 442, 636)
table_name = self.add_entry('MOCK_DATA', 560, 630)
table_name_raido = self.add_radio('include create table', 720, 636)
self.val.append(label_name)
self.val.append(table_name)
self.val.append(table_name_raido)
def add_entry(self, table_name, x, y):
field = ttk.Entry(self.root, font=('times new roman', 20)) # FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT
field.insert(0, table_name)
field.place(x=x, y=y, width=150)
return field
def add_radio(self, text, x, y):
name = ttk.Checkbutton(self.root, text=text, takefocus=0, variable=1)
name.place(x=x, y=y)
name.state(['selected'])
return name
def add_label(self, name, x, y):
label = ttk.Label(self.root, text=name, font=('Times New Roman', '20', 'bold'))
label.place(x=x, y=y)
return label
def remove(self):
if len(self.val) > 0:
for i in self.val:
i.destroy()
# logger.debug("{}>{}".format(type(i),isinstance(i, ttk.Label)))
def down(self):
save_field = {}
for obj in self.input_queue:
if obj[0].get() and obj[1].get():
'''利用faker库,生成数据写入相应的文件'''
save_field[obj[0].get()] = obj[1].get()
rows = self.rows.get()
down_type = self.save_file_type.get()
try:
if int(rows) > 0 and len(save_field) > 0:
if down_type == 'JSON':
if len(self.val[-1].state()) > 0:
File("MOCK_DATA").save_data_json(rows, save_field, status=True) # 保存为列表json
else:
File('MOCK_DATA').save_data_json(rows, save_field, status=False)
elif down_type == 'SQL':
table_name, _table_status = self.val[1].get(), self.val[-1].state()
if len(_table_status) > 0:
File(table_name).create_table_and_open_sql(rows, save_field, status=True)
else:
File(table_name).create_table_and_open_sql(rows, save_field, status=False)
else:
messagebox.showwarning(title='警告', message='请输入有效数字和字段/Enter Correct Number/Field')
except ValueError as e:
messagebox.showwarning(title='错误', message='"{}" is Illegal number/无效字符'.format(rows))
def clear(self, widget, sel_widget):
widget.delete(0, END)
sel_widget.delete(0, END)
if __name__ == '__main__':
root = ThemedTk(theme=Themes[2])
obj = App(root)
root.mainloop()