Skip to content

Commit

Permalink
Merge 13eb6a7 into 4295480
Browse files Browse the repository at this point in the history
  • Loading branch information
TalissaJoly committed Sep 3, 2014
2 parents 4295480 + 13eb6a7 commit 5686e93
Show file tree
Hide file tree
Showing 2 changed files with 226 additions and 1 deletion.
135 changes: 135 additions & 0 deletions crabpy/gateway/crab.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,19 @@ class CrabGateway(object):
'''
caches = {}

provincies = [
(10000, 'Antwerpen', 2),
(20001, 'Vlaams-Brabant', 2),
(30000, 'West-Vlaanderen', 2),
(40000, 'Oost-Vlaanderen', 2),
(70000, 'Limburg', 2),
(20002, 'Waals-Brabant', 3),
(50000, 'Henegouwen', 3),
(60000, 'Luik', 3),
(80000, 'Luxemburg', 3),
(90000, 'Namen', 3)
]

def __init__(self, client, **kwargs):
self.client = client
cache_regions = ['permanent', 'long', 'short']
Expand Down Expand Up @@ -126,11 +139,94 @@ def creator():
gewest = creator()
gewest.set_gateway(self)
return gewest

def list_provincies(self, gewest=2):
'''
List all `provincies` in a `gewest`.
:param gewest: The :class:`Gewest` for which the \
`provincies` are wanted.
:param integer sort: What field to sort on.
:rtype: A :class:`list` of :class:`Provincie`.
'''
try:
gewest_id = gewest.id
except AttributeError:
gewest_id = gewest

def creator():
return [Provincie(p[0], p[1], Gewest(p[2])) for p in self.provincies if p[2] == gewest_id]

if self.caches['permanent'].is_configured:
key = 'ListProvinciesByGewestId#%s' % gewest
provincies = self.caches['permanent'].get_or_create(key, creator)
else:
provincies = creator()
for p in provincies:
p.set_gateway(self)
return provincies

def get_provincie_by_id(self, niscode):
'''
Retrieve a `provincie` by the niscode.
:param integer niscode: The niscode of the provincie.
:rtype: :class:`Provincie`
'''
def creator():
for p in self.provincies:
if p[0] == niscode:
return Provincie(p[0], p[1], Gewest(p[2]))

if self.caches['permanent'].is_configured:
key = 'GetProvincieByProvincieNiscode#%s' % niscode
provincie = self.caches['permanent'].get_or_create(key, creator)
else:
provincie = creator()
provincie.set_gateway(self)
return provincie

def list_gemeenten_by_provincie(self, provincie, sort=2):
'''
List all `gemeenten` in a `provincie`.
:param provincie: The :class:`Provincie` for which the \
`gemeenten` are wanted.
:param integer sort: What field to sort on.
:rtype: A :class:`list` of :class:`Gemeente`.
'''
try:
provincie = self.get_provincie_by_id(provincie)
except AttributeError:
pass
provincie.set_gateway(self)
gewest = provincie.gewest

def creator():
gewest_gemeenten = self.list_gemeenten(gewest.id)
return[
Gemeente(
r.id,
r.naam,
r.niscode,
gewest
)for r in gewest_gemeenten if str(r.niscode)[0] == str(provincie.niscode)[0]
]

if self.caches['permanent'].is_configured:
key = 'GetGemeenteByProvincieId#%s' % provincie.id
gemeente = self.caches['long'].get_or_create(key, creator)
else:
gemeente = creator()
for g in gemeente:
g.set_gateway(self)
return gemeente

def list_gemeenten(self, gewest=2, sort=1):
'''
List all `gemeenten` in a `gewest`.
:param gewest: The :class:`Gewest` for which the
:param gewest: The :class:`Gewest` for which the \
`gemeenten` are wanted.
:param integer sort: What field to sort on.
Expand Down Expand Up @@ -1102,6 +1198,45 @@ def wrapper(*args):
return f(*args)
return wrapper


class Provincie(GatewayObject):
'''
The largest administrative unit within a :class:`Gewest`.
.. versionadded:: 0.4.0
'''
def __init__(
self, niscode, naam, gewest, **kwargs
):
self.id = self.niscode = int(niscode)
self.naam = naam
self.gewest = gewest

def set_gateway(self, gateway):
'''
:param crabpy.gateway.crab.CrabGateway gateway: Gateway to use.
'''
self.gateway = gateway
self.gewest.gateway = gateway

def clear_gateway(self):
'''
Clear the currently set CrabGateway.
'''
self.gateway = None
self.gewest.clear_gateway()

@property
def gemeenten(self):
self.check_gateway()
return self.gateway.list_gemeenten_by_provincie(self.niscode)

def __unicode__(self):
return "%s (%s)" % (self.naam, self.niscode)

def __repr__(self):
return "Provincie(%s, '%s', Gewest(%s))" % (self.niscode, self.naam, self.gewest.id)


class Gemeente(GatewayObject):
'''
Expand Down
92 changes: 91 additions & 1 deletion crabpy/tests/gateway/test_crab.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
Huisnummer, Postkanton,
Wegobject, Wegsegment,
Terreinobject, Perceel,
Gebouw, Metadata
Gebouw, Metadata, Provincie
)


Expand Down Expand Up @@ -81,6 +81,68 @@ def test_list_gemeenten_Vlaanderen(self):
self.assertIsInstance(res[0], Gemeente)
self.assertEqual(res[0].gewest.id, 2)

def test_list_provincies(self):
gewest = Gewest(1)
res = self.crab.list_provincies(gewest)
self.assertIsInstance(res, list)
gewest = Gewest(3)
res = self.crab.list_provincies(gewest)
self.assertIsInstance(res, list)
gewest = Gewest(2)
res = self.crab.list_provincies(gewest)
self.assertIsInstance(res, list)
self.assertIsInstance(res[0], Provincie)
self.assertEqual(res[0].gewest.id, 2)
gewest = 2
res = self.crab.list_provincies(gewest)
self.assertIsInstance(res, list)
self.assertIsInstance(res[0], Provincie)
self.assertEqual(res[0].gewest.id, 2)

def test_get_provincie_by_id(self):
res = self.crab.get_provincie_by_id(10000)
self.assertIsInstance(res, Provincie)
self.assertEqual(res.niscode, 10000)
res = self.crab.get_provincie_by_id(20001)
self.assertIsInstance(res, Provincie)
self.assertEqual(res.niscode, 20001)
res = self.crab.get_provincie_by_id(20002)
self.assertIsInstance(res, Provincie)
self.assertEqual(res.niscode, 20002)
res = self.crab.get_provincie_by_id(30000)
self.assertIsInstance(res, Provincie)
self.assertEqual(res.niscode, 30000)
res = self.crab.get_provincie_by_id(40000)
self.assertIsInstance(res, Provincie)
self.assertEqual(res.niscode, 40000)
res = self.crab.get_provincie_by_id(50000)
self.assertIsInstance(res, Provincie)
self.assertEqual(res.niscode, 50000)
res = self.crab.get_provincie_by_id(60000)
self.assertIsInstance(res, Provincie)
self.assertEqual(res.niscode, 60000)
res = self.crab.get_provincie_by_id(70000)
self.assertIsInstance(res, Provincie)
self.assertEqual(res.niscode, 70000)
res = self.crab.get_provincie_by_id(80000)
self.assertIsInstance(res, Provincie)
self.assertEqual(res.niscode, 80000)
res = self.crab.get_provincie_by_id(90000)
self.assertIsInstance(res, Provincie)
self.assertEqual(res.niscode, 90000)

def test_list_gemeenten_by_provincie(self):
provincie = Provincie(10000, 'Antwerpen', Gewest(2))
res = self.crab.list_gemeenten_by_provincie(provincie)
self.assertIsInstance(res, list)
self.assertIsInstance(res[0], Gemeente)
self.assertEqual(str(res[0].niscode)[0], '1')
provincie = 10000
res = self.crab.list_gemeenten_by_provincie(provincie)
self.assertIsInstance(res, list)
self.assertIsInstance(res[0], Gemeente)
self.assertEqual(str(res[0].niscode)[0], '1')

def test_get_gemeente_by_id(self):
res = self.crab.get_gemeente_by_id(1)
self.assertIsInstance(res, Gemeente)
Expand Down Expand Up @@ -356,6 +418,34 @@ def test_lazy_load(self):
self.assertEqual(g.bounding_box, (22279.17, 153050.23, 258873.3, 244022.31))


class ProvincieTests(unittest.TestCase):

def test_fully_initialised(self):
p = Provincie(20001, 'Vlaams-Brabant', Gewest(2))
self.assertEqual(p.niscode, 20001)
self.assertEqual(p.naam, 'Vlaams-Brabant')
self.assertEqual('Vlaams-Brabant (20001)', str(p))
self.assertEqual("Provincie(20001, 'Vlaams-Brabant', Gewest(2))", repr(p))


def test_check_gateway_not_set(self):
p = Provincie(20001, 'Vlaams-Brabant', Gewest(2))
self.assertRaises(RuntimeError, p.check_gateway)

@unittest.skipUnless(
run_crab_integration_tests(),
'No CRAB Integration tests required'
)
def test_gemeenten(self):
crab = CrabGateway(
crab_factory()
)
p = Provincie(20001, 'Vlaams-Brabant', Gewest(2))
p.set_gateway(crab)
gemeenten = p.gemeenten
self.assertIsInstance(gemeenten, list)


class GemeenteTests(unittest.TestCase):

def test_fully_initialised(self):
Expand Down

0 comments on commit 5686e93

Please sign in to comment.