-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathspace.py
98 lines (81 loc) · 3.11 KB
/
space.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
from django.db import models
from django.utils import timezone
import logging
# get instance of a logger
logger = logging.getLogger(__name__)
class SpaceManager(models.Manager):
def active_spaces(self):
return super(SpaceManager, self).get_queryset().filter(status="Active") | \
super(SpaceManager, self).get_queryset().filter(status="Starting")
def inactive_spaces(self):
return super(SpaceManager, self).get_queryset().filter(status="Defunct") | \
super(SpaceManager, self).get_queryset().filter(status="Suspended")
def as_json(self):
return {'spaces': list(
super(SpaceManager, self).get_queryset().values('name', 'lat', 'lng',
'main_website_url', 'logo_image_url', 'status')
)}
def as_geojson(self):
results = self.all()
geo = {
"type": "FeatureCollection",
"features": []
}
for space in results:
if space.valid_location():
geo['features'].append(space.as_geojson_feature())
return geo
class Space(models.Model):
STATUS_CHOICES = (
("Active", "Active"),
("Starting", "Starting"),
("Suspended", "Suspended"),
("Defunct", "DEFUNCT"),
)
COUNTRY_CHOICES = (
("England", "England"),
("Guernsey", "Guernsey"),
("Ireland", "Ireland"),
("Scotland", "Scotland"),
("Wales", "Wales"),
)
name = models.CharField(max_length=100)
town = models.CharField(max_length=100, blank=True)
country = models.CharField(max_length=50, choices=COUNTRY_CHOICES, default='ENGLAND')
region = models.CharField(max_length=100, blank=True)
have_premises = models.BooleanField(default=False)
address_first_line = models.CharField(max_length=250, blank=True)
postcode = models.CharField(max_length=9, blank=True)
lat = models.DecimalField('latitude', max_digits=10, decimal_places=7)
lng = models.DecimalField('longitude', max_digits=10, decimal_places=7)
main_website_url = models.URLField(blank=True)
logo_image_url = models.URLField(blank=True)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='ACTIVE')
changed_date = models.DateTimeField(default=timezone.now)
email = models.CharField(max_length=200, blank=True)
objects = SpaceManager()
class Meta:
ordering = ["name"]
db_table = 'space'
app_label = 'main'
def publish(self):
self.changed_date = timezone.now()
self.save()
def __str__(self):
return self.name
def valid_location(self):
return (self.lng != 0 and self.lat != 0)
def as_geojson_feature(self):
return {
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [float(self.lng), float(self.lat)]
},
"properties": {
"name": self.name,
"url": self.main_website_url,
"status": self.status,
"logo": self.logo_image_url
}
}