-
Notifications
You must be signed in to change notification settings - Fork 3
/
utils.py
114 lines (96 loc) · 3.44 KB
/
utils.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
import datetime
import os
import random
import string
from django.utils import timezone
from django.utils.text import slugify
def get_last_month_data(today):
"""
Simple method to get the datetime objects for the
start and end of last month
:return: last_month_start, last_month_end
"""
this_month_start = datetime.datetime(today.year, today.month, 1)
last_month_end = this_month_start - datetime.timedelta(days=1)
last_month_start = datetime.datetime(last_month_end.year, last_month_end.month, 1)
return last_month_start, last_month_end
def get_month_data_range(months_ago=1, include_this_month=False):
"""
A method that generates a list of dictionaries
that describe any given amount of monthly data.
:param months_ago:
:param include_this_month:
:return: dates_
"""
today = datetime.datetime.now().today()
dates_ = []
if include_this_month:
# get next month`s data with:
next_month = today.replace(day=28) + datetime.timedelta(days=4)
# use next month`s data to get this month`s data breakdown
start, end = get_last_month_data(next_month)
dates_.insert(0, {
'start': start.timestamp(),
'start_json': start.isoformat(),
'end': end.timestamp(),
'end_json': end.isoformat(),
'timesince': 0,
'year': start.year,
'month': str(start.strftime("%B")),
})
for x in range(0, months_ago):
start, end = get_last_month_data(today)
today = start
dates_.insert(0, {
'start': start.timestamp(),
'start_json': start.isoformat(),
'end': end.timestamp(),
'end_json': end.isoformat(),
'timesince': int((datetime.datetime.now() - end).total_seconds()),
'year': start.year,
'month': str(start.strftime("%B"))
})
return dates_
def get_filename(path): # abc/filename.mp3
return os.path.basename(path)
def random_string_generator(size=10, chars=string.ascii_lowercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
def unique_order_id_generator(instance):
"""
This is for a Django project with an order_id field
"""
order_new_id = random_string_generator().upper()
_Class = instance.__class__
qs_exists = _Class.objects.filter(order_id=order_new_id).exists()
if qs_exists:
return unique_slug_generator(instance)
return order_new_id
def unique_slug_generator(instance, new_slug=None):
"""
This is for a Django project and it assumes your instance
has a model with a slug field and a title character (char) field.
"""
if new_slug is not None:
slug = new_slug
else:
slug = slugify(instance.title)
_Class = instance.__class__
qs_exists = _Class.objects.filter(slug=slug).exists()
if qs_exists:
new_slug = '{slug}-{randstr}'.format(
slug=slug,
randstr=random_string_generator(size=4)
)
return unique_slug_generator(instance, new_slug=new_slug)
return slug
def unique_key_generator(instance):
"""
This is for a Django project with a key field
"""
size = random.randint(30, 45)
key = random_string_generator(size=size)
_Class = instance.__class__
qs_exists = _Class.objects.filter(key=key).exists()
if qs_exists:
return unique_slug_generator(instance)
return key