Skip to content

Commit

Permalink
Fix capacity extraction for generators
Browse files Browse the repository at this point in the history
Also add hstore text representation parser
  • Loading branch information
bdw committed Jun 12, 2016
1 parent cc2ed99 commit e11dd6e
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 24 deletions.
2 changes: 1 addition & 1 deletion entsoe/abstraction.sql
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ insert into network_link (link_id, src_bus_id, dst_bus_id, voltage, circuits, dc
insert into network_generator (generator_id, bus_id, symbol, capacity, tags, geometry)
select g.generator_id,
(select network_bus_id from station_terminal t where g.station_id = t.station_id order by voltage asc limit 1),
p.tags->'symbol', (p.tags->'capacity')::numeric, p.tags - array['symbol','numeric'],
p.tags->'symbol', (p.tags->'mw')::numeric, p.tags - array['symbol','mw'],
st_astext(st_transform(p.location, 4326))
from topology_generators g
join power_generator p on p.generator_id = g.generator_id;
Expand Down
23 changes: 0 additions & 23 deletions entsoe/electric-transformers.sql

This file was deleted.

48 changes: 48 additions & 0 deletions util/hstore.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import re

class hstore(dict):
class parser(object):
word = re.compile(r'"([^"]+)"')
arrow = re.compile(r'\s*=>\s*')
comma = re.compile(r',\s*')

def __init__(self, text):
self.position = 0
self.text = text

def __iter__(self):
while self.peek(self.word):
key = self.read(self.word, 1)
self.read(self.arrow)
value = self.read(self.word, 1)
yield key, value
if self.peek(self.comma):
self.read(self.comma)
else:
break

def read(self, expect, group=0):
match = expect.match(self.text, self.position)
if match is None:
raise Exception('parse error at ' + position)
self.position = match.end()
return match.group(group)

def peek(self, expect):
return expect.match(self.text, self.position) is not None

def __init__(self, text):
super(hstore,self).__init__(self.parser(text))

def __str__(self):
return ', '.join('"{0}"=>"{1}"'.format(k,v) for k,v in self.items())

def _main():
hstore_str = '"foo" => "bar"'
hstore_dct = hstore(hstore_str)
assert hstore_dct['foo'] == 'bar'
assert str(hstore_dct) == '"foo"=>"bar"'
assert repr(hstore_dct) == "{'foo': 'bar'}"

if __name__ == '__main__':
_main()

0 comments on commit e11dd6e

Please sign in to comment.