smartpush 1.4.6__py3-none-any.whl → 1.4.8__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.
File without changes
@@ -0,0 +1,679 @@
1
+ from faker import Faker
2
+ from user_agents import parse
3
+ import random
4
+
5
+ # 中文类型faker
6
+ fake = Faker(locale='zh_CN')
7
+ fake_en = Faker(locale='en_US')
8
+
9
+
10
+ # print("可以fake的内容:",dir(fake))
11
+
12
+ # """地理信息类"""
13
+ # city_suffix = fake.city_suffix() # 生成市、县的后缀,例如:'市'
14
+ # country = fake.country() # 生成国家名称,例如:'中国'
15
+ # country_code = fake.country_code() # 生成国家编码,例如:'CN'
16
+ # district = fake.district() # 生成区的名称,例如:'朝阳区'
17
+ # geo_coordinate = fake.geo_coordinate() # 生成地理坐标,例如:'(31.692720, 88.092434)'
18
+ # latitude = fake.latitude() # 生成纬度,例如:31.692720
19
+ # longitude = fake.longitude() # 生成经度,例如:88.092434
20
+ # postcode = fake.postcode() # 生成邮编,例如:'100000'
21
+ # province = fake.province() # 生成省份名称,例如:'北京市'
22
+ # address = fake.address() # 生成详细地址,例如:'北京市朝阳区'
23
+ # street_address = fake.street_address() # 生成街道地址,例如:'人民路123号'
24
+ # street_name = fake.street_name() # 生成街道名,例如:'人民路'
25
+ # street_suffix = fake.street_suffix() # 生成街、路的后缀,例如:'路'
26
+
27
+ # """基础信息类"""
28
+ # ssn = fake.ssn() # 生成身份证号,例如:'510181199503077777'
29
+ # bs = fake.bs() # 随机公司服务名,例如:'技术支持'
30
+ # company = fake.company() # 随机公司名(长),例如:'北京百度在线网络技术有限公司'
31
+ # company_prefix = fake.company_prefix() # 随机公司名(短),例如:'百度'
32
+ # company_suffix = fake.company_suffix() # 公司性质,例如:'信息有限公司'
33
+ # credit_card_expire = fake.credit_card_expire() # 随机信用卡到期日,例如:'12/25'
34
+ # credit_card_full = fake.credit_card_full() # 生成完整信用卡信息,例如:'VISA 16 digits 04/24 CVV:022'
35
+ # credit_card_number = fake.credit_card_number() # 信用卡号,例如:'4539853637484'
36
+ # credit_card_provider = fake.credit_card_provider() # 信用卡类型,例如:'VISA 16 digit'
37
+ # credit_card_security_code = fake.credit_card_security_code() # 信用卡安全码,例如:'356'
38
+ # job = fake.job() # 随机职位,例如:'市场营销经理'
39
+ # first_name_female = fake.first_name_female() # 女性名,例如:'丽娜'
40
+ # first_name_male = fake.first_name_male() # 男性名,例如:'伟'
41
+ # last_name_female = fake.last_name_female() # 女姓,例如:'王'
42
+ # last_name_male = fake.last_name_male() # 男姓,例如:'张'
43
+ # name = fake.name() # 随机生成全名,例如:'张丽'
44
+ # name_female = fake.name_female() # 男性全名,例如:'杨丽'
45
+ # name_male = fake.name_male() # 女性全名,例如:'王伟'
46
+ # phone_number = fake.phone_number() # 随机生成手机号,例如:'13912345678'
47
+ # phonenumber_prefix = fake.phonenumber_prefix() # 随机生成手机号段,例如:'139'
48
+
49
+ # """计算机基础、Internet信息类、Email"""
50
+ # ascii_company_email = fake.ascii_company_email() # 随机ASCII公司邮箱名,例如:'example_company'
51
+ # ascii_email = fake.ascii_email() # 随机ASCII邮箱,例如:'example@example.com'
52
+ # company_email = fake.company_email() # 随机公司邮箱
53
+ # email = fake.email() # 随机邮箱
54
+ # safe_email = fake.safe_email() # 安全邮箱
55
+
56
+
57
+ # """网络基础信息类"""
58
+ # domain_name = fake.domain_name() # 生成域名,例如:'smith.com'
59
+ # domain_word = fake.domain_word() # 生成域词(即,不包含后缀),例如:'example'
60
+ # ipv4 = fake.ipv4() # 随机IP4地址,例如:'192.168.1.1'
61
+ # ipv6 = fake.ipv6() # 随机IP6地址,例如:'2001:0db8:85a3:0000:0000:8a2e:0370:7334'
62
+ # mac_address = fake.mac_address() # 随机MAC地址,例如:'5e:ff:56:8c:13:5f'
63
+ # tld = fake.tld() # 网址域名后缀(.com,.net.cn,等等,不包括.),例如:'com'
64
+ # uri = fake.uri() # 随机URI地址,例如:'http://www.example.com/path/to/page'
65
+ # uri_extension = fake.uri_extension() # 网址文件后缀,例如:'.html'
66
+ # uri_page = fake.uri_page() # 网址文件(不包含后缀),例如:'index'
67
+ # uri_path = fake.uri_path() # 网址文件路径(不包含文件名),例如:'/path/to'
68
+ # url = fake.url() # 随机URL地址,例如:'http://www.example.com'
69
+ # user_name = fake.user_name() # 随机用户名,例如:'john_doe'
70
+ # image_url = fake.image_url() # 随机URL地址,例如:'http://www.example.com/image.jpg'
71
+
72
+ # """
73
+ # 浏览器信息类
74
+ # """
75
+ # chrome = fake.chrome() # 随机生成Chrome的浏览器user_agent信息
76
+ # firefox = fake.firefox() # 随机生成FireFox的浏览器user_agent信息
77
+ # internet_explorer = fake.internet_explorer() # 随机生成IE的浏览器user_agent信息
78
+ # opera = fake.opera() # 随机生成Opera的浏览器user_agent信息
79
+ # safari = fake.safari() # 随机生成Safari的浏览器user_agent信息
80
+ # linux_platform_token = fake.linux_platform_token() # 随机Linux信息
81
+ # user_agent = fake.user_agent() # 随机user_agent信息
82
+
83
+ # """
84
+ # 数字类
85
+ # """
86
+ # numerify = fake.numerify() # 三位随机数字,例如:'123'
87
+ # random_digit = fake.random_digit() # 0~9随机数,例如:'7'
88
+ # random_digit_not_null = fake.random_digit_not_null() # 1~9的随机数,例如:'3'
89
+ # random_int = fake.random_int() # 随机数字,默认0~9999,可以通过设置min,max来设置,例如:'567'
90
+ # random_number = fake.random_number(digits=5) # 随机数字,参数digits设置生成的数字位数,例如:'12345'
91
+ # pyint = fake.pyint() # 随机Int数字,例如:'987'
92
+ # pyfloat = fake.pyfloat(left_digits=5, right_digits=2, positive=True) # 随机Float数字,例如:'12345.67'
93
+ # pydecimal = fake.pydecimal() # 随机Decimal数字,例如:Decimal('123.45')
94
+
95
+ # """
96
+ # 文本、加密类
97
+ # """
98
+ # pystr = fake.pystr() # 随机字符串,例如:'abc123'
99
+ # random_element = fake.random_element() # 随机字母,例如:'a'
100
+ # random_letter = fake.random_letter() # 随机字母,例如:'b'
101
+ # paragraph = fake.paragraph() # 随机生成
102
+
103
+ # """时间信息类"""
104
+ # date = fake.date() # 随机日期
105
+ # date_between = fake.date_between(start_date='-30y', end_date='today') # 随机生成指定范围内日期,例如:datetime.date(1998, 4, 3)
106
+ # date_object = fake.date_object() # 随机生产从1970-1-1到指定日期的随机日期,例如:datetime.date(1985, 3, 19)
107
+ # date_time = fake.date_time() # 随机生成指定时间(1970年1月1日至今),例如:datetime.datetime(2003, 5, 23, 16, 45, 40)
108
+ # date_time_ad = fake.date_time_ad() # 生成公元1年到现在的随机时间,例如:datetime.datetime(2005, 12, 2, 19, 25, 46)
109
+ # date_time_between = fake.date_time_between(start_date='-30y', end_date='now') # 随机生成指定范围内日期,用法同dates
110
+ # future_date = fake.future_date(end_date='+30d') # 未来日期,例如:datetime.date(2023, 2, 17)
111
+ # future_datetime = fake.future_datetime(end_date='+30d') # 未来时间,例如:datetime.datetime(2023, 2, 17, 20, 48, 35)
112
+ # month = fake.month() # 随机月份,例如:'04'
113
+ # month_name = fake.month_name() # 随机月份(英文),例如:'December'
114
+ # past_date = fake.past_date(start_date='-30d') # 随机生成已经过去的日期,例如:datetime.date(2023, 1, 18)
115
+ # past_datetime = fake.past_datetime(start_date='-30d') # 随机生成已经过去的时间,例如:datetime.datetime(2023, 1, 18, 20, 48, 35)
116
+ # time = fake.time() # 随机24小时时间,例如:datetime.time(13, 20, 10)
117
+ # timedelta = fake.time_delta() # 随机获取时间差,例如:datetime.timedelta(days=3, seconds=86254)
118
+ # time_object = fake.time_object() # 随机24小时时间,time对象,例如:datetime.time(21, 47)
119
+ # time_series = fake.time_series() # 随机TimeSeries对象,例如:<faker.providers.date_time.Provider object at 0x7fc4bca6d9d0>
120
+ # timezone = fake.timezone() # 随机时区,例如:'Asia/Shanghai'
121
+ # unix_time = fake.unix_time() # 随机Unix时间,例如:659312340
122
+ # year = fake.year() # 随机年份,例如:'1998'
123
+ class FakeDataGenerator:
124
+
125
+ def __init__(self, seed=None, locale='zh_CN'):
126
+ """初始化Faker实例并设置本地化"""
127
+ Faker.seed(seed)
128
+ self.fake = Faker(locale)
129
+ # fake.seed(seed)
130
+ self.fake_en = Faker('en_US') # 用于生成英文国家名
131
+
132
+ # 生成用户代理并解析
133
+ self._user_agent = self.fake.user_agent()
134
+ self._parsed_ua = parse(self._user_agent)
135
+
136
+ @property
137
+ def user_agent(self):
138
+ return self._user_agent
139
+
140
+ @property
141
+ def fake_currency(self):
142
+ return self.fake.currency()[0]
143
+
144
+ @property
145
+ def fake_city(self):
146
+ return self.fake.city()
147
+
148
+ @property
149
+ def fake_city_suffix(self):
150
+ return self.fake.city_suffix()
151
+
152
+ @property
153
+ def fake_country(self):
154
+ return self.fake_en.country()
155
+
156
+ @property
157
+ def fake_country_code(self):
158
+ return self.fake.country_code()
159
+
160
+ @property
161
+ def fake_district(self):
162
+ return self.fake.district()
163
+
164
+ @property
165
+ def fake_latitude(self):
166
+ return self.fake.latitude()
167
+
168
+ @property
169
+ def fake_longitude(self):
170
+ return self.fake.longitude()
171
+
172
+ @property
173
+ def fake_postcode(self):
174
+ return self.fake.postcode()
175
+
176
+ @property
177
+ def fake_province(self):
178
+ return self.fake.province()
179
+
180
+ @property
181
+ def fake_address(self):
182
+ return self.fake.address()
183
+
184
+ @property
185
+ def fake_street_address(self):
186
+ return self.fake.street_address()
187
+
188
+ @property
189
+ def fake_street_name(self):
190
+ return self.fake.street_name()
191
+
192
+ @property
193
+ def fake_street_suffix(self):
194
+ return self.fake.street_suffix()
195
+
196
+ @property
197
+ def fake_ssn(self):
198
+ return self.fake.ssn()
199
+
200
+ @property
201
+ def fake_bs(self):
202
+ return self.fake.bs()
203
+
204
+ @property
205
+ def fake_company(self):
206
+ return self.fake.company()
207
+
208
+ @property
209
+ def fake_company_prefix(self):
210
+ return self.fake.company_prefix()
211
+
212
+ @property
213
+ def fake_company_suffix(self):
214
+ return self.fake.company_suffix()
215
+
216
+ @property
217
+ def fake_credit_card_expire(self):
218
+ return self.fake.credit_card_expire()
219
+
220
+ @property
221
+ def fake_credit_card_full(self):
222
+ return str(self.fake.credit_card_full())
223
+
224
+ @property
225
+ def fake_credit_card_number(self):
226
+ return self.fake.credit_card_number()
227
+
228
+ @property
229
+ def fake_credit_card_provider(self):
230
+ return self.fake.credit_card_provider()
231
+
232
+ @property
233
+ def fake_credit_card_security_code(self):
234
+ return self.fake.credit_card_security_code()
235
+
236
+ @property
237
+ def fake_job(self):
238
+ return self.fake.job()
239
+
240
+ @property
241
+ def fake_gender(self):
242
+ return random.choice(["u", "f", "m"])
243
+
244
+ @property
245
+ def fake_first_name_female(self):
246
+ return "AutoTest-" + self.fake.first_name_female()
247
+
248
+ @property
249
+ def fake_first_name_male(self):
250
+ return "AutoTest-" + self.fake.first_name_male()
251
+
252
+ @property
253
+ def fake_last_name_female(self):
254
+ return "AutoTest-" + self.fake.last_name_female()
255
+
256
+ @property
257
+ def fake_last_name_male(self):
258
+ return "AutoTest-" + self.fake.last_name_male()
259
+
260
+ @property
261
+ def fake_name(self):
262
+ return "AutoTest-" + self.fake.name()
263
+
264
+ @property
265
+ def fake_name_female(self):
266
+ return "AutoTest-" + self.fake.name_female()
267
+
268
+ @property
269
+ def fake_name_male(self):
270
+ return "AutoTest-" + self.fake.name_male()
271
+
272
+ @property
273
+ def fake_phone_number(self):
274
+ return self.fake.phone_number()
275
+
276
+ @property
277
+ def fake_phonenumber_prefix(self):
278
+ return self.fake.phonenumber_prefix()
279
+
280
+ @property
281
+ def fake_ascii_company_email(self):
282
+ return self.fake.ascii_company_email()
283
+
284
+ @property
285
+ def fake_ascii_email(self):
286
+ return self.fake.ascii_email()
287
+
288
+ @property
289
+ def fake_company_email(self):
290
+ return self.fake.company_email()
291
+
292
+ @property
293
+ def fake_email(self):
294
+ return "AutoTest-" + self.fake.email()
295
+
296
+ @property
297
+ def fake_safe_email(self):
298
+ return self.fake.safe_email()
299
+
300
+ @property
301
+ def fake_domain_name(self):
302
+ return self.fake.domain_name()
303
+
304
+ @property
305
+ def fake_domain_word(self):
306
+ return self.fake.domain_word()
307
+
308
+ @property
309
+ def fake_ipv4(self):
310
+ return self.fake.ipv4()
311
+
312
+ @property
313
+ def fake_ipv6(self):
314
+ return self.fake.ipv6()
315
+
316
+ @property
317
+ def fake_mac_address(self):
318
+ return self.fake.mac_address()
319
+
320
+ @property
321
+ def fake_port_number(self):
322
+ return self.fake.port_number()
323
+
324
+ @property
325
+ def fake_tld(self):
326
+ return self.fake.tld()
327
+
328
+ @property
329
+ def fake_uri(self):
330
+ return self.fake.uri()
331
+
332
+ @property
333
+ def fake_uri_extension(self):
334
+ return self.fake.uri_extension()
335
+
336
+ @property
337
+ def fake_uri_page(self):
338
+ return self.fake.uri_page()
339
+
340
+ @property
341
+ def fake_uri_path(self):
342
+ return self.fake.uri_path()
343
+
344
+ @property
345
+ def fake_url(self):
346
+ return self.fake.url()
347
+
348
+ @property
349
+ def fake_user_name(self):
350
+ return "AutoTest-" + self.fake.user_name()
351
+
352
+ @property
353
+ def fake_image_url(self):
354
+ return self.fake.image_url()
355
+
356
+ @property
357
+ def fake_linux_platform_token(self):
358
+ return self.fake.linux_platform_token()
359
+
360
+ @property
361
+ def fake_browser(self):
362
+ return self._parsed_ua.browser.family
363
+
364
+ @property
365
+ def fake_browser_version(self):
366
+ return '.'.join(map(str, self._parsed_ua.browser.version[:2]))
367
+
368
+ @property
369
+ def fake_os(self):
370
+ return self._parsed_ua.os.family
371
+
372
+ @property
373
+ def fake_os_version(self):
374
+ return '.'.join(map(str, self._parsed_ua.os.version[:2]))
375
+
376
+ @property
377
+ def fake_device_type(self):
378
+ return random.choice(["desktop", "mobile"])
379
+
380
+ @property
381
+ def fake_network(self):
382
+ return random.choice(["4g", "3g", "2g"])
383
+
384
+ @property
385
+ def fake_numerify(self):
386
+ return self.fake.numerify()
387
+
388
+ @property
389
+ def fake_random_digit(self):
390
+ return self.fake.random_digit()
391
+
392
+ @property
393
+ def fake_random_digit_not_null(self):
394
+ return self.fake.random_digit_not_null()
395
+
396
+ @property
397
+ def fake_random_int(self):
398
+ return self.fake.random_int()
399
+
400
+ @property
401
+ def fake_random_number(self):
402
+ return self.fake.random_number(digits=5)
403
+
404
+ @property
405
+ def fake_random_long_number(self):
406
+ return self.fake.random_number(digits=26)
407
+
408
+ @property
409
+ def fake_random_ten_number(self):
410
+ return self.fake.random_number(digits=10)
411
+
412
+ @property
413
+ def fake_pyint(self):
414
+ return self.fake.pyint()
415
+
416
+ @property
417
+ def fake_pyfloat(self):
418
+ return self.fake.pyfloat(left_digits=5, right_digits=4, positive=True)
419
+
420
+ @property
421
+ def fake_pydecimal(self):
422
+ return self.fake.pydecimal()
423
+
424
+ @property
425
+ def fake_pystr(self):
426
+ return self.fake.pystr()
427
+
428
+ @property
429
+ def fake_version(self):
430
+ return f"AutoTest-1.1.{self.fake.pyfloat(left_digits=8, right_digits=4, positive=True)}{self.fake.pyfloat(left_digits=6, right_digits=8, positive=True)}"
431
+
432
+ @property
433
+ def fake_random_element(self):
434
+ return self.fake.random_element()
435
+
436
+ @property
437
+ def fake_random_letter(self):
438
+ return self.fake.random_letter()
439
+
440
+ @property
441
+ def fake_paragraph(self):
442
+ return self.fake.paragraph()
443
+
444
+ @property
445
+ def fake_sentence(self):
446
+ return self.fake.sentence()
447
+
448
+ @property
449
+ def fake_word(self):
450
+ return self.fake.word()
451
+
452
+ @property
453
+ def fake_boolean(self):
454
+ return self.fake.boolean()
455
+
456
+ @property
457
+ def fake_language(self):
458
+ return self.fake.language_code()
459
+
460
+ @property
461
+ def fake_locale_language(self):
462
+ return self.fake.locale()
463
+
464
+ @property
465
+ def fake_md5(self):
466
+ return self.fake.md5()
467
+
468
+ @property
469
+ def fake_password(self):
470
+ return self.fake.password()
471
+
472
+ @property
473
+ def fake_sha1(self):
474
+ return self.fake.sha1()
475
+
476
+ @property
477
+ def fake_sha256(self):
478
+ return self.fake.sha256()
479
+
480
+ @property
481
+ def fake_uuid4(self):
482
+ return self.fake.uuid4()
483
+
484
+ @property
485
+ def fake_date(self):
486
+ return self.fake.date()
487
+
488
+ @property
489
+ def fake_date_between(self):
490
+ return self.fake.date_between(start_date='-30y', end_date='today')
491
+
492
+ @property
493
+ def fake_date_object(self):
494
+ return self.fake.date_object()
495
+
496
+ @property
497
+ def fake_date_time(self):
498
+ return self.fake.date_time()
499
+
500
+ @property
501
+ def fake_date_time_ad(self):
502
+ return self.fake.date_time_ad()
503
+
504
+ @property
505
+ def fake_date_time_between(self):
506
+ return self.fake.date_time_between(start_date='-30y', end_date='now')
507
+
508
+ @property
509
+ def fake_future_date(self):
510
+ return self.fake.future_date(end_date='+30d')
511
+
512
+ @property
513
+ def fake_future_datetime(self):
514
+ return self.fake.future_datetime(end_date='+30d')
515
+
516
+ @property
517
+ def fake_month(self):
518
+ return self.fake.month()
519
+
520
+ @property
521
+ def fake_month_name(self):
522
+ return self.fake.month_name()
523
+
524
+ @property
525
+ def fake_past_date(self):
526
+ return self.fake.past_date(start_date='-30d')
527
+
528
+ @property
529
+ def fake_past_datetime(self):
530
+ return self.fake.past_datetime(start_date='-30d')
531
+
532
+ @property
533
+ def fake_time(self):
534
+ return self.fake.time()
535
+
536
+ @property
537
+ def fake_timedelta(self):
538
+ return self.fake.time_delta()
539
+
540
+ @property
541
+ def fake_time_object(self):
542
+ return self.fake.time_object()
543
+
544
+ @property
545
+ def fake_timezone(self):
546
+ return self.fake.timezone()
547
+
548
+ @property
549
+ def fake_unix_time(self):
550
+ return self.fake.unix_time()
551
+
552
+ @property
553
+ def fake_year(self):
554
+ return self.fake.year()
555
+
556
+ @property
557
+ def fake_width(self):
558
+ return random.randint(800, 4000)
559
+
560
+ @property
561
+ def fake_height(self):
562
+ return random.randint(600, 2500)
563
+
564
+ def generate_user_data(self):
565
+ """
566
+ 生成完整的用户测试数据
567
+ """
568
+ user_agent = self.fake.user_agent()
569
+ parsed_ua = parse(user_agent)
570
+
571
+ return {
572
+ 'user_agent': user_agent,
573
+ 'fake_currency': self.fake.currency()[0],
574
+ 'fake_city': self.fake.city(),
575
+ 'fake_city_suffix': self.fake.city_suffix(),
576
+ 'fake_country': self.fake_en.country(),
577
+ 'fake_country_code': self.fake.country_code(),
578
+ 'fake_district': self.fake.district(),
579
+ 'fake_latitude': self.fake.latitude(),
580
+ 'fake_longitude': self.fake.longitude(),
581
+ 'fake_postcode': self.fake.postcode(),
582
+ 'fake_province': self.fake.province(),
583
+ 'fake_address': self.fake.address(),
584
+ 'fake_street_address': self.fake.street_address(),
585
+ 'fake_street_name': self.fake.street_name(),
586
+ 'fake_street_suffix': self.fake.street_suffix(),
587
+ 'fake_ssn': self.fake.ssn(),
588
+ 'fake_bs': self.fake.bs(),
589
+ 'fake_company': self.fake.company(),
590
+ 'fake_company_prefix': self.fake.company_prefix(),
591
+ 'fake_company_suffix': self.fake.company_suffix(),
592
+ 'fake_credit_card_expire': self.fake.credit_card_expire(),
593
+ 'fake_credit_card_full': str(self.fake.credit_card_full()),
594
+ 'fake_credit_card_number': self.fake.credit_card_number(),
595
+ 'fake_credit_card_provider': self.fake.credit_card_provider(),
596
+ 'fake_credit_card_security_code': self.fake.credit_card_security_code(),
597
+ 'fake_job': self.fake.job(),
598
+ 'fake_gender': random.choice(["u", "f", "m"]),
599
+ 'fake_first_name_female': "AutoTest-" + self.fake.first_name_female(),
600
+ 'fake_first_name_male': "AutoTest-" + self.fake.first_name_male(),
601
+ 'fake_last_name_female': "AutoTest-" + self.fake.last_name_female(),
602
+ 'fake_last_name_male': "AutoTest-" + self.fake.last_name_male(),
603
+ 'fake_name': "AutoTest-" + self.fake.name(),
604
+ 'fake_name_female': "AutoTest-" + self.fake.name_female(),
605
+ 'fake_name_male': "AutoTest-" + self.fake.name_male(),
606
+ 'fake_phone_number': self.fake.phone_number(),
607
+ 'fake_phonenumber_prefix': self.fake.phonenumber_prefix(),
608
+ 'fake_ascii_company_email': self.fake.ascii_company_email(),
609
+ 'fake_ascii_email': self.fake.ascii_email(),
610
+ 'fake_company_email': self.fake.company_email(),
611
+ 'fake_email': "AutoTest-" + self.fake.email(),
612
+ 'fake_safe_email': self.fake.safe_email(),
613
+ 'fake_domain_name': self.fake.domain_name(),
614
+ 'fake_domain_word': self.fake.domain_word(),
615
+ 'fake_ipv4': self.fake.ipv4(),
616
+ 'fake_ipv6': self.fake.ipv6(),
617
+ 'fake_mac_address': self.fake.mac_address(),
618
+ 'fake_port_number': self.fake.port_number(),
619
+ 'fake_tld': self.fake.tld(),
620
+ 'fake_uri': self.fake.uri(),
621
+ 'fake_uri_extension': self.fake.uri_extension(),
622
+ 'fake_uri_page': self.fake.uri_page(),
623
+ 'fake_uri_path': self.fake.uri_path(),
624
+ 'fake_url': self.fake.url(),
625
+ 'fake_user_name': "AutoTest-" + self.fake.user_name(),
626
+ 'fake_image_url': self.fake.image_url(),
627
+ 'fake_linux_platform_token': self.fake.linux_platform_token(),
628
+ 'fake_browser': parsed_ua.browser.family,
629
+ 'fake_browser_version': '.'.join(map(str, parsed_ua.browser.version[:2])),
630
+ 'fake_os': parsed_ua.os.family,
631
+ 'fake_os_version': '.'.join(map(str, parsed_ua.os.version[:2])),
632
+ 'fake_device_type': random.choice(["desktop", "mobile"]),
633
+ 'fake_network': random.choice(["4g", "3g", "2g"]),
634
+ 'fake_numerify': self.fake.numerify(),
635
+ 'fake_random_digit': self.fake.random_digit(),
636
+ 'fake_random_digit_not_null': self.fake.random_digit_not_null(),
637
+ 'fake_random_int': self.fake.random_int(),
638
+ 'fake_random_number': self.fake.random_number(digits=5),
639
+ 'fake_random_long_number': self.fake.random_number(digits=26),
640
+ 'fake_random_ten_number': self.fake.random_number(digits=10),
641
+ 'fake_pyint': self.fake.pyint(),
642
+ 'fake_pyfloat': self.fake.pyfloat(left_digits=5, right_digits=4, positive=True),
643
+ 'fake_pydecimal': self.fake.pydecimal(),
644
+ 'fake_pystr': self.fake.pystr(),
645
+ 'fake_version': f"AutoTest-1.1.{self.fake.pyfloat(left_digits=8, right_digits=4, positive=True)}{self.fake.pyfloat(left_digits=6, right_digits=8, positive=True)}",
646
+ 'fake_random_element': self.fake.random_element(),
647
+ 'fake_random_letter': self.fake.random_letter(),
648
+ 'fake_paragraph': self.fake.paragraph(),
649
+ 'fake_sentence': self.fake.sentence(),
650
+ 'fake_word': self.fake.word(),
651
+ 'fake_boolean': self.fake.boolean(),
652
+ 'fake_language': self.fake.language_code(),
653
+ 'fake_locale_language': self.fake.locale(),
654
+ 'fake_md5': self.fake.md5(),
655
+ 'fake_password': self.fake.password(),
656
+ 'fake_sha1': self.fake.sha1(),
657
+ 'fake_sha256': self.fake.sha256(),
658
+ 'fake_uuid4': self.fake.uuid4(),
659
+ 'fake_date': self.fake.date(),
660
+ 'fake_date_between': self.fake.date_between(start_date='-30y', end_date='today'),
661
+ 'fake_date_object': self.fake.date_object(),
662
+ 'fake_date_time': self.fake.date_time(),
663
+ 'fake_date_time_ad': self.fake.date_time_ad(),
664
+ 'fake_date_time_between': self.fake.date_time_between(start_date='-30y', end_date='now'),
665
+ 'fake_future_date': self.fake.future_date(end_date='+30d'),
666
+ 'fake_future_datetime': self.fake.future_datetime(end_date='+30d'),
667
+ 'fake_month': self.fake.month(),
668
+ 'fake_month_name': self.fake.month_name(),
669
+ 'fake_past_date': self.fake.past_date(start_date='-30d'),
670
+ 'fake_past_datetime': self.fake.past_datetime(start_date='-30d'),
671
+ 'fake_time': self.fake.time(),
672
+ 'fake_timedelta': self.fake.time_delta(),
673
+ 'fake_time_object': self.fake.time_object(),
674
+ 'fake_timezone': self.fake.timezone(),
675
+ 'fake_unix_time': self.fake.unix_time(),
676
+ 'fake_year': self.fake.year(),
677
+ 'fake_width': random.randint(800, 4000),
678
+ 'fake_height': random.randint(600, 2500)
679
+ }
@@ -0,0 +1,22 @@
1
+ import requests
2
+
3
+
4
+ class RequestBase:
5
+ def __init__(self, host, headers):
6
+ """
7
+
8
+ :param headers: 头,cookie
9
+ :param host: 域名
10
+ """
11
+ self.host = host
12
+ self.headers = headers
13
+ self.request = requests.Request(headers=self.headers)
14
+ self.post = requests.Request("POST", headers=self.headers)
15
+ self.get = requests.Request("GET", headers=self.headers)
16
+
17
+
18
+ class FormRequestBase(RequestBase):
19
+ def __init__(self, form_id, host, headers):
20
+ super().__init__(host, headers)
21
+ self.form_id = form_id
22
+
@@ -0,0 +1,30 @@
1
+ from enum import Enum, unique
2
+
3
+
4
+ @unique
5
+ class URL(Enum):
6
+ """
7
+ :type:表单报告
8
+ """
9
+ pageFormReportDetail = '/formReport/detail/pageFormReportDetail', 'POST' # 获取表单收集数据
10
+ getFormReportDetail = '/formReport/getFormReportDetail', 'POST' # 获取表单报告数据(曝光/点击)
11
+ getFormPerformanceTrend = 'formReport/getFormPerformanceTrend', 'POST'
12
+
13
+ """
14
+ :type 群组
15
+ """
16
+ editCrowdPackage = '/crowdPackage/editCrowdPackage', 'POST'
17
+ crowdPersonList = '/crowdPackage/crowdPersonList', 'POST'
18
+
19
+ @property
20
+ def method(self):
21
+ return self.value[1]
22
+
23
+ @property
24
+ def url(self):
25
+ return self.value[0]
26
+
27
+
28
+ if __name__ == '__main__':
29
+ print(URL.pageFormReportDetail.method)
30
+ print(URL.getFormReportDetail.url)
@@ -285,6 +285,68 @@ def check_excel_header(actual, expected, **kwargs):
285
285
  return False, f"表头校验异常 {e}"
286
286
 
287
287
 
288
+ def check_excel_header_by_list(actual, expected, **kwargs):
289
+ """
290
+ 比较导出表头是否一致是否一致
291
+ @param actual: 可以传oss链接
292
+ @param expected:期望的表头list
293
+ @return:
294
+ @return:
295
+ """
296
+
297
+ global diff
298
+ try:
299
+ if not isinstance(actual, io.BytesIO):
300
+ actual = read_excel_from_oss(actual)
301
+ actual1, expected1 = read_excel_header(actual, **kwargs)[0], get_header_map_data(
302
+ expected)
303
+ actual1.sort()
304
+ try:
305
+ diff = compare_lists(actual1, expected1)
306
+ assert not diff # 为空则错误
307
+ return True, "表头校验值与顺序一致"
308
+ except AssertionError as e:
309
+ print("actual:", actual1)
310
+ print("expected:", expected1)
311
+ return False, f"表头校验值与顺序失败 {diff}"
312
+ except Exception as e:
313
+ return False, e
314
+
315
+
316
+ def get_header_map_data(name_list):
317
+ """
318
+ 获取头映射关系--中文
319
+ :param name_list:
320
+ :return:
321
+ """
322
+ header_dict_zh_cn = {
323
+ "sendTypeName": "活动类型",
324
+ "activityName": "活动名称",
325
+ "sendTotal": "发送数",
326
+ "deliveryTotal": "送达数",
327
+ "deliveryRate": "送达率",
328
+ "openRate": ["打开率(打开数/送达数)", "打开数"],
329
+ "noRepeatOpenRate": ["不重复打开率", "不重复打开"],
330
+ "clickRate": ["点击率(点击数/送达数)", "点击数"],
331
+ "noRepeatClickRate": ["不重复点击率", "不重复点击"],
332
+ "salesPriceTotal": "销售额",
333
+ "orderTotal": "订单数",
334
+ "averageOrderValue": "平均订单价值",
335
+ "conversionRate": "转化率",
336
+ "unsubTotal": "退订数",
337
+ "unsubRate": "退订率",
338
+ "complainRate": "弹回率",
339
+ "bounceRate": "投诉率",
340
+ "sendStartTime": "发送时间"
341
+ }
342
+ header_list = []
343
+ for key, value in header_dict_zh_cn.items():
344
+ if key in name_list:
345
+ header_list.append(value) if not isinstance(value, list) else header_list.extend(value)
346
+ header_list.sort()
347
+ return header_list
348
+
349
+
288
350
  def del_temp_file(file_name=""):
289
351
  """删除temp下临时文件"""
290
352
  file_path = os.path.join(os.path.dirname(os.getcwd()) + "/temp_file/" + file_name)
@@ -378,12 +440,14 @@ def check_field_format(actual_oss, **kwargs):
378
440
  if kwargs["fileds"][key][filed_key] == "email":
379
441
  fool = DataTypeUtils.DataTypeUtils().check_email_format(email=row[filed_key])
380
442
  if not fool:
381
- errors.append(f"{actual_dict_key[key]} 表, 第{num}行{filed_key}列{kwargs['fileds'][key][filed_key]}格式不符合规范, 值为:{row[filed_key]}")
443
+ errors.append(
444
+ f"{actual_dict_key[key]} 表, 第{num}行{filed_key}列{kwargs['fileds'][key][filed_key]}格式不符合规范, 值为:{row[filed_key]}")
382
445
  elif kwargs["fileds"][key][filed_key] == "time":
383
- fool = DataTypeUtils.DataTypeUtils().check_time_format(time_str=row[filed_key], precision=kwargs.get('precision', 's'))
446
+ fool = DataTypeUtils.DataTypeUtils().check_time_format(time_str=row[filed_key],
447
+ precision=kwargs.get('precision', 's'))
384
448
  if not fool:
385
449
  errors.append(
386
450
  f"{actual_dict_key[key]} 表, 第{num}行{filed_key}列{kwargs['fileds'][key][filed_key]}格式不符合规范, 值为:{row[filed_key]}")
387
451
  num += 1
388
452
  print(errors if len(errors) > 0 else "都校验成功")
389
- return False if len(errors) > 0 else True
453
+ return False if len(errors) > 0 else True
@@ -109,6 +109,22 @@ def mock_pulsar(mock_domain, pulsar, limit=1):
109
109
  return json.loads(result)
110
110
 
111
111
 
112
+ def disable_flow(host_domain, cookies, flow_ids, version):
113
+ """关闭flow"""
114
+ _url = host_domain + "flow/disableFlow"
115
+ headers = {
116
+ "cookie": cookies,
117
+ "Content-Type": "application/json"
118
+ }
119
+ for flow_id in flow_ids:
120
+ params = {
121
+ "flowId": flow_id,
122
+ "version": str(version),
123
+ "continueRun": False
124
+ }
125
+ result = requests.request(method="post", url=_url, headers=headers, json=params).text
126
+
127
+
112
128
  def check_flow(host_domain, cookies, mock_domain="", **kwargs):
113
129
  """
114
130
  完整触发流程
File without changes
@@ -0,0 +1,143 @@
1
+ import json
2
+ from tenacity import retry, stop_after_attempt, wait_fixed
3
+ from smartpush.base.request_base import RequestBase
4
+ from smartpush.base.url_enum import URL
5
+ from smartpush.export.basic.GetOssUrl import log_attempt
6
+
7
+
8
+ class FormAfter(RequestBase):
9
+ def __init__(self, form_id, headers, host):
10
+ super().__init__(headers, host)
11
+ self.form_id = form_id
12
+
13
+ @retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
14
+ def callPageFormReportDetail(self, reportDetailType, start_time=None, end_time=None):
15
+ """
16
+ 获取PageFormReportDetail数据
17
+ :param end_time:
18
+ :param start_time:
19
+ :param reportDetailType:
20
+ :return:
21
+ """
22
+ requestParam = {"page": 1, "pageSize": 20, "reportDetailType": reportDetailType, "formId": self.form_id}
23
+ if start_time is not None and end_time is not None:
24
+ requestParam["startTime"] = start_time
25
+ requestParam["endTime"] = end_time
26
+ result = self.post(url=self.host + URL.pageFormReportDetail.url, data=json.dumps(requestParam)).json()
27
+ result.raise_for_status()
28
+ persons_list = result["resultData"]["reportDetailData"]["datas"]
29
+ return persons_list
30
+
31
+ @retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
32
+ def callGetFormReportDetail(self):
33
+ requestParam = {"formId": self.form_id}
34
+ result = self.post(url=self.host + URL.getFormReportDetail.url, data=json.dumps(requestParam)).json()
35
+ result.raise_for_status()
36
+ resultData = result["resultData"]
37
+ return resultData
38
+
39
+ @retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
40
+ def callGetFormPerformanceTrend(self):
41
+ requestParam = {"formId": self.form_id}
42
+ result = self.post(url=self.host + URL.getFormPerformanceTrend.url, data=json.dumps(requestParam)).json()
43
+ result.raise_for_status()
44
+ resultData = result["resultData"]
45
+ return resultData
46
+
47
+ @retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
48
+ def callEditCrowdPackage(self, _id=None, groupRules=None, groupRelation="$AND"):
49
+ """
50
+ 更新群组条件id
51
+ :param _id:
52
+ :param groupRules:
53
+ :param groupRelation:
54
+ :return:
55
+ """
56
+ requestParam = {"id": _id, "crowdName": "表单查询群组-自动化", "groupRelation": groupRelation,
57
+ "groupRules": groupRules, "triggerStock": False}
58
+ result = self.post(url=self.host + URL.editCrowdPackage.url, data=json.dumps(requestParam)).json()
59
+ result.raise_for_status()
60
+ assert result.get("code") == 1
61
+ resultData = result["resultData"]
62
+ assert resultData.get("status") == 2
63
+ return resultData["id"]
64
+
65
+ def callCrowdPersonList(self, _id, page, pageSize, filter_type, filter_value):
66
+ requestParam = {"id": _id, "page": page, "pageSize": pageSize}
67
+ if filter_value is not None:
68
+ requestParam["filter"] = {filter_type: {"in": filter_value}}
69
+ result = self.post(url=self.host + URL.crowdPersonList.url, data=json.dumps(requestParam)).json()
70
+ result.raise_for_status()
71
+ return result['resultData']
72
+
73
+ # -------- 处理数据 --------------
74
+ def collectFormDetails(self, key, start_time=None, end_time=None):
75
+ """
76
+ 从表单收集明细中获取信息,判断是否收集成功
77
+ :param self:
78
+ :param key: 关键词
79
+ :param start_time: 开始时间
80
+ :param end_time: 结束时间
81
+ """
82
+ persons_list = self.callPageFormReportDetail("FORM_COLLECT", start_time, end_time)
83
+ if persons_list:
84
+ for person in persons_list:
85
+ if person['email'] == key:
86
+ return True, person
87
+ elif person['phone'] == key:
88
+ return True, person
89
+ else:
90
+ return False, None
91
+
92
+ def FormReportNumQuery(self, num_type="viewNum", assertNum=None):
93
+ """
94
+ 表单数据数据统计
95
+ :param assertNum:
96
+ :param num_type:viewNum/clickNum/collectNum/orderNum
97
+ """
98
+ data = self.callGetFormReportDetail()
99
+ if data is not None:
100
+ if assertNum is None:
101
+ var = data.get(num_type)
102
+ return var
103
+ else:
104
+ return data.get(num_type) == assertNum
105
+
106
+ def getFormAttributionSales(self, key, start_time=None, end_time=None):
107
+ """
108
+ 判断折扣码是否能正确归因
109
+ :param key:
110
+ :param start_time:
111
+ :param end_time:
112
+ :return:
113
+ """
114
+ order_list = self.callPageFormReportDetail("FORM_SALES", start_time, end_time)
115
+ if order_list:
116
+ for order in order_list:
117
+ if order['email'] == key:
118
+ return True, order
119
+ elif order['phone'] == key:
120
+ return True, order
121
+ elif order['orderId'] == key:
122
+ return True, order
123
+ else:
124
+ return False, None
125
+
126
+ def getFormLineChart(self, date=None, num_type="viewNum", assertNum=None):
127
+ """
128
+ 获取表单折线图
129
+ :param assertNum:
130
+ :param date:
131
+ :param num_type:viewNum/clickNum/collectNum
132
+ """
133
+ datas = dict(self.callGetFormPerformanceTrend())
134
+ if datas is not None:
135
+ for data in datas:
136
+ if data.get(date):
137
+ if assertNum is not None:
138
+ assert data.get(num_type) == assertNum
139
+ else:
140
+ return data.get(num_type)
141
+
142
+ def getCrowdPersonList(self, _id, page=1, pageSize=20, filter_type="email", filter_value=""):
143
+ self.callCrowdPersonList(self,_id,page,pageSize,filter_type,filter_value)
@@ -0,0 +1,17 @@
1
+ """
2
+ 获取在线有效表单列表,并判断是否触发对应的表单
3
+ """
4
+ from smartpush.base.request_base import FormRequestBase
5
+
6
+
7
+ class FormAssert(FormRequestBase):
8
+
9
+ def getValidForms(self):
10
+ self.post()
11
+
12
+
13
+
14
+ """
15
+ C端与B端数据比较
16
+ """
17
+
@@ -0,0 +1,9 @@
1
+ from smartpush.base.request_base import FormRequestBase
2
+
3
+
4
+ class FormBefore(FormRequestBase):
5
+ pass
6
+ """
7
+ 创建各种类型的表单,确保是上架状态
8
+ """
9
+
@@ -0,0 +1,19 @@
1
+ from smartpush.base.request_base import FormRequestBase
2
+
3
+
4
+ class FormClientOperation(FormRequestBase):
5
+ """
6
+ 表单曝光事件埋点上报
7
+ """
8
+
9
+ """
10
+ 表单点击事件埋点上报
11
+ """
12
+
13
+ """
14
+ 填写提交表单
15
+ """
16
+
17
+ """
18
+ C端使用表单折扣码进行下单
19
+ """
@@ -0,0 +1,34 @@
1
+ import base64
2
+ from Crypto.Cipher import AES
3
+ from Crypto.Util.Padding import pad, unpad
4
+
5
+
6
+ def aes_encrypt(data, key, iv):
7
+ """
8
+ 参数加密
9
+ :param data:
10
+ :param key:
11
+ :param iv:
12
+ :return:
13
+ """
14
+ key = key.encode('utf-8')
15
+ iv = iv.encode('utf-8')
16
+ cipher = AES.new(key, AES.MODE_CBC, iv)
17
+ ciphertext = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size))
18
+ return base64.b64encode(ciphertext).decode('utf-8')
19
+
20
+
21
+ def aes_decrypt(ciphertext, key, iv):
22
+ """
23
+ 参数解密
24
+ :param ciphertext:
25
+ :param key:
26
+ :param iv:
27
+ :return:
28
+ """
29
+ key = key.encode('utf-8')
30
+ iv = iv.encode('utf-8')
31
+ ciphertext = base64.b64decode(ciphertext)
32
+ cipher = AES.new(key, AES.MODE_CBC, iv)
33
+ decrypted_data = unpad(cipher.decrypt(ciphertext), AES.block_size)
34
+ return decrypted_data.decode('utf-8')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: smartpush
3
- Version: 1.4.6
3
+ Version: 1.4.8
4
4
  Summary: 用于smartpush自动化测试工具包
5
5
  Author: lulu、felix、long
6
6
 
@@ -0,0 +1,28 @@
1
+ smartpush/__init__.py,sha256=XJrl1vhGATHSeSVqKmPXxYqxyseriUpvY5tLIXir3EE,24
2
+ smartpush/get_jira_info.py,sha256=OYaDV6VPAmkGKYLlRnsi1ZyKHU8xEiVnjsYrc41ZR0U,17910
3
+ smartpush/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ smartpush/base/faker_data.py,sha256=TOd5EKVImxZpsKEW_dtKa2iqiUGqU7OBkOM8pvqKVUc,24643
5
+ smartpush/base/request_base.py,sha256=Fn1uPWgaZQZdu8yyi2n13nuiKPVeR95iwx99sG6XGVU,574
6
+ smartpush/base/url_enum.py,sha256=REHYP_aa0xumLg8El-yrNRpablLnPEQpss8ZNPdkNtg,787
7
+ smartpush/export/__init__.py,sha256=D9GbWcmwnetEndFDty5XbVienFK1WjqV2yYcQp3CM84,99
8
+ smartpush/export/basic/ExcelExportChecker.py,sha256=CFTytcowwf1xfoRE5DZayY8kKJqppYQ0smVIokfxitM,19833
9
+ smartpush/export/basic/GetOssUrl.py,sha256=LeF1y1_uJaYXth1KvO6mEDS29ezb9tliBv5SrbqYkXc,6136
10
+ smartpush/export/basic/ReadExcel.py,sha256=ZnG2mtYqLY-xuYx9SyulbdYUP_0E5jIeKDewfakAsTw,7342
11
+ smartpush/export/basic/__init__.py,sha256=6tcrS-2NSlsJo-UwEsnGUmwCf7jgOsh_UEbM0FD-gYE,70
12
+ smartpush/flow/MockFlow.py,sha256=MI8WIMZyKlxrV5QVs8rXX6iD07Ldl37_L5Yb5FWqHzU,8595
13
+ smartpush/flow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ smartpush/form/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ smartpush/form/form_after.py,sha256=a7d5G8Es3gRIzXiFDkI2McW_zq3FACfMxjRVBwSmK24,5866
16
+ smartpush/form/form_assert.py,sha256=wPIRfQHhr7lN1fFd-mp0z_qKMtF4jfrNxRWvp2xfqCg,257
17
+ smartpush/form/form_before.py,sha256=CCvAC_2yWPlnQGtjEA8LPLy9853Nq3nNjcL2GewFWIs,175
18
+ smartpush/form/form_client_operation.py,sha256=gg-5uHXCyMa_ypBSYPYFVxXdwZdYBJsNtUCqayknMBw,303
19
+ smartpush/utils/DataTypeUtils.py,sha256=BC7ioztO3vAfKd1EOoNvXdVuXYY8qjNskV1DP7LhW-M,1082
20
+ smartpush/utils/EmailUtlis.py,sha256=DAHd73bJ8hiJCLEXtD0xcwxPD7SOPSmBB7Jvlf6gN6s,11201
21
+ smartpush/utils/ListDictUtils.py,sha256=Fm5_d7UyY6xB8gySMPdl5jIFSRhXZcYXdYW-_L1alcE,1640
22
+ smartpush/utils/StringUtils.py,sha256=n8mo9k0JQN63MReImgv-66JxmmymOGknR8pH2fkQrAo,4139
23
+ smartpush/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ smartpush/utils/form_utils.py,sha256=ld-g_Dm_ZlnagQt7imYfUc87bcBRVlTctywuLtzmjXQ,849
25
+ smartpush-1.4.8.dist-info/METADATA,sha256=_Fh1DOsWYzvBYYvSbFzc98qbWwEGBrsGgC3RjmStBno,131
26
+ smartpush-1.4.8.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
27
+ smartpush-1.4.8.dist-info/top_level.txt,sha256=5_CXqu08EfbPaKLjuSAOAqCmGU6shiatwDU_ViBGCmg,10
28
+ smartpush-1.4.8.dist-info/RECORD,,
@@ -1,18 +0,0 @@
1
- smartpush/__init__.py,sha256=XJrl1vhGATHSeSVqKmPXxYqxyseriUpvY5tLIXir3EE,24
2
- smartpush/get_jira_info.py,sha256=OYaDV6VPAmkGKYLlRnsi1ZyKHU8xEiVnjsYrc41ZR0U,17910
3
- smartpush/export/__init__.py,sha256=D9GbWcmwnetEndFDty5XbVienFK1WjqV2yYcQp3CM84,99
4
- smartpush/export/basic/ExcelExportChecker.py,sha256=R_1gFy69vE2V5pY20zFsnhqWgJ42Vtf35zBtOPfhUpU,17590
5
- smartpush/export/basic/GetOssUrl.py,sha256=LeF1y1_uJaYXth1KvO6mEDS29ezb9tliBv5SrbqYkXc,6136
6
- smartpush/export/basic/ReadExcel.py,sha256=ZnG2mtYqLY-xuYx9SyulbdYUP_0E5jIeKDewfakAsTw,7342
7
- smartpush/export/basic/__init__.py,sha256=6tcrS-2NSlsJo-UwEsnGUmwCf7jgOsh_UEbM0FD-gYE,70
8
- smartpush/flow/MockFlow.py,sha256=T8tZuJ9FLF0arbdu0PvbwXk-Ca-wjH46P-HCEW5aq2Y,8124
9
- smartpush/flow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- smartpush/utils/DataTypeUtils.py,sha256=BC7ioztO3vAfKd1EOoNvXdVuXYY8qjNskV1DP7LhW-M,1082
11
- smartpush/utils/EmailUtlis.py,sha256=DAHd73bJ8hiJCLEXtD0xcwxPD7SOPSmBB7Jvlf6gN6s,11201
12
- smartpush/utils/ListDictUtils.py,sha256=Fm5_d7UyY6xB8gySMPdl5jIFSRhXZcYXdYW-_L1alcE,1640
13
- smartpush/utils/StringUtils.py,sha256=n8mo9k0JQN63MReImgv-66JxmmymOGknR8pH2fkQrAo,4139
14
- smartpush/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- smartpush-1.4.6.dist-info/METADATA,sha256=OCcDkSLig4J8-iAA82yLZGRdn5rc4XwmlqNsPQErhjE,131
16
- smartpush-1.4.6.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
17
- smartpush-1.4.6.dist-info/top_level.txt,sha256=5_CXqu08EfbPaKLjuSAOAqCmGU6shiatwDU_ViBGCmg,10
18
- smartpush-1.4.6.dist-info/RECORD,,