Skip to content

Commit

Permalink
Add Mapcss plugin for power osm-fr#272
Browse files Browse the repository at this point in the history
  • Loading branch information
frodrigo committed Sep 2, 2018
1 parent d704bbe commit 60952cf
Show file tree
Hide file tree
Showing 2 changed files with 146 additions and 0 deletions.
41 changes: 41 additions & 0 deletions plugins/Power.mapcss
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/**************************************************************************
** **
** Copyrights François Lacombe 2018 **
** Copyrights Frédéric Rodrigo 2018 **
** **
** This program is free software: you can redistribute it and/or modify **
** it under the terms of the GNU General Public License as published by **
** the Free Software Foundation, either version 3 of the License, or **
** (at your option) any later version. **
** **
** This program is distributed in the hope that it will be useful, **
** but WITHOUT ANY WARRANTY; without even the implied warranty of **
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the **
** GNU General Public License for more details. **
** **
** You should have received a copy of the GNU General Public License **
** along with this program. If not, see <http://www.gnu.org/licenses/>. **
** **
**************************************************************************/

way[power=transformer],
relation[power=transformer] {
throwWarning: tr("Power Transformers should always be on a node");
osmoseItemClassLevel: "9100/91001/2";
osmoseTags: list("geom", "power");
}

node[power=transformer][voltage] {
throwWarning: tr("On Power Transformers use voltage:primary=* and voltage:secondary=* in place of voltage");
osmoseItemClassLevel: "9100/91002/2";
osmoseTags: list("power");
}

node[power=transformer][!frequency] {
throwWarning: tr("Power Transformers should have a frequency tag");
osmoseItemClassLevel: "9100/91003/3";
osmoseTags: list("power");

assertMatch: "node power=transformer";
assertNoMatch: "node power=transformer frequency=50";
}
105 changes: 105 additions & 0 deletions plugins/Power.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
#-*- coding: utf-8 -*-
import modules.mapcss_lib as mapcss
import regex as re

from plugins.Plugin import Plugin, with_options

class Power(Plugin):


def init(self, logger):
Plugin.init(self, logger)
tags = capture_tags = {}
self.errors[91001] = {'item': 9100, 'level': 2, 'tag': mapcss.list_(u'geom', u'power'), 'desc': mapcss.tr(u'Power Transformers should always be on a node', capture_tags)}
self.errors[91002] = {'item': 9100, 'level': 2, 'tag': mapcss.list_(u'power'), 'desc': mapcss.tr(u'On Power Transformers use voltage:primary=* and voltage:secondary=* in place of voltage', capture_tags)}
self.errors[91003] = {'item': 9100, 'level': 3, 'tag': mapcss.list_(u'power'), 'desc': mapcss.tr(u'On Power Transformers define the frequency tag', capture_tags)}



def node(self, data, tags, *args):
capture_tags = {}
keys = tags.keys()
err = []


# node[power=transformer][voltage]
if u'power' in keys:
match = False
try: match = match or ((mapcss._tag_capture(capture_tags, 0, tags, u'power') == mapcss._value_capture(capture_tags, 0, u'transformer') and mapcss._tag_capture(capture_tags, 1, tags, u'voltage')))
except mapcss.RuleAbort: pass
if match:
# osmoseTags:list("power")
# osmoseItemClassLevel:"9100/91002/2"
# throwWarning:tr("On Power Transformers use voltage:primary=* and voltage:secondary=* in place of voltage")
err.append({'class': 91002, 'subclass': 0, 'text': mapcss.tr(u'On Power Transformers use voltage:primary=* and voltage:secondary=* in place of voltage', capture_tags)})

# node[power=transformer][!frequency]
if u'power' in keys:
match = False
try: match = match or ((mapcss._tag_capture(capture_tags, 0, tags, u'power') == mapcss._value_capture(capture_tags, 0, u'transformer') and not mapcss._tag_capture(capture_tags, 1, tags, u'frequency')))
except mapcss.RuleAbort: pass
if match:
# osmoseTags:list("power")
# osmoseItemClassLevel:"9100/91003/3"
# throwWarning:tr("On Power Transformers define the frequency tag")
# assertNoMatch:"node power=transformer frequency=50"
# assertMatch:"node power=transformer"
err.append({'class': 91003, 'subclass': 0, 'text': mapcss.tr(u'On Power Transformers define the frequency tag', capture_tags)})

return err

def way(self, data, tags, *args):
capture_tags = {}
keys = tags.keys()
err = []


# way[power=transformer]
if u'power' in keys:
match = False
try: match = match or ((mapcss._tag_capture(capture_tags, 0, tags, u'power') == mapcss._value_capture(capture_tags, 0, u'transformer')))
except mapcss.RuleAbort: pass
if match:
# osmoseTags:list("geom","power")
# osmoseItemClassLevel:"9100/91001/2"
# throwWarning:tr("Power Transformers should always be on a node")
err.append({'class': 91001, 'subclass': 0, 'text': mapcss.tr(u'Power Transformers should always be on a node', capture_tags)})

return err

def relation(self, data, tags, *args):
capture_tags = {}
keys = tags.keys()
err = []


# relation[power=transformer]
if u'power' in keys:
match = False
try: match = match or ((mapcss._tag_capture(capture_tags, 0, tags, u'power') == mapcss._value_capture(capture_tags, 0, u'transformer')))
except mapcss.RuleAbort: pass
if match:
# osmoseTags:list("geom","power")
# osmoseItemClassLevel:"9100/91001/2"
# throwWarning:tr("Power Transformers should always be on a node")
err.append({'class': 91001, 'subclass': 0, 'text': mapcss.tr(u'Power Transformers should always be on a node', capture_tags)})

return err


from plugins.Plugin import TestPluginCommon


class Test(TestPluginCommon):
def test(self):
n = Power(None)
class _config:
options = {"country": None, "language": None}
class father:
config = _config()
n.father = father()
n.init(None)
data = {'id': 0, 'lat': 0, 'lon': 0}

self.check_not_err(n.node(data, {u'frequency': u'50', u'power': u'transformer'}), expected={'class': 91003, 'subclass': 0})
self.check_err(n.node(data, {u'power': u'transformer'}), expected={'class': 91003, 'subclass': 0})

0 comments on commit 60952cf

Please sign in to comment.