diff --git a/eea/climateadapt/restapi/countryprofile.py b/eea/climateadapt/restapi/countryprofile.py
index 0f664814f..c54a46537 100644
--- a/eea/climateadapt/restapi/countryprofile.py
+++ b/eea/climateadapt/restapi/countryprofile.py
@@ -3,7 +3,6 @@
from plone.restapi.interfaces import IExpandableElement
from zope.interface import implementer
from zope.interface import Interface
-import json
import lxml.html
from lxml import etree
@@ -19,102 +18,164 @@ def __init__(self, context, request):
self.context = context
self.request = request
- def __call__(self, **kw):
- # import pdb; pdb.set_trace()
- data = {'menu':[],'content':[],'html':None,'updated':None,'message_top':None, 'top_accordeon':None}
- if self.context.getId().lower() in ['turkiye','turkey']:
+ def __call__(self, expand=False):
+ data = {
+ "menu": [],
+ "content": [],
+ "html": None,
+ "updated": None,
+ "message_top": None,
+ "top_accordeon": None,
+ }
+ if self.context.getId().lower() in ["turkiye", "turkey"]:
for annot in list(self.context.__annotations__):
- if 'plone.tiles.data.' in annot and 'text' in self.context.__annotations__[annot] and None == self.context.__annotations__[annot]['title']:
- html = self.context.__annotations__[annot]['text'].output
- elif self.context.getId().lower() in ['norway','liechtenstein']:
+ if (
+ "plone.tiles.data." in annot
+ and "text" in self.context.__annotations__[annot]
+ and None == self.context.__annotations__[annot]["title"]
+ ):
+ html = self.context.__annotations__[annot]["text"].output
+ elif self.context.getId().lower() in ["norway", "liechtenstein"]:
for annot in list(self.context.__annotations__):
- if 'plone.tiles.data.' in annot and 'text' in self.context.__annotations__[annot] and 'main content' == self.context.__annotations__[annot]['title']:
- html = self.context.__annotations__[annot]['text'].output
+ if (
+ "plone.tiles.data." in annot
+ and "text" in self.context.__annotations__[annot]
+ and "main content" == self.context.__annotations__[annot]["title"]
+ ):
+ html = self.context.__annotations__[annot]["text"].output
else:
- view = getMultiAdapter((self.context, self.request), name="country-profile")
- html = view().replace('', '').replace('', '')
+ view = getMultiAdapter(
+ (self.context, self.request), name="country-profile")
+ html = view().replace("", "").replace("", "")
e = lxml.html.fromstring(html)
- if self.context.getId().lower() in ['turkiye','turkey','norway','liechtenstein']:
- menus = e.xpath('//div[contains(@class,"sweet-tabs")]//ul[contains(@class,"nav-tabs")]//a')
+ if self.context.getId().lower() in [
+ "turkiye",
+ "turkey",
+ "norway",
+ "liechtenstein",
+ ]:
+ menus = e.xpath(
+ '//div[contains(@class,"sweet-tabs")]//ul[contains(@class,"nav-tabs")]//a'
+ )
for menu in menus:
- data['menu'].append({'id':menu.attrib['href'][1:], 'name':menu.text})
+ data["menu"].append(
+ {"id": menu.attrib["href"][1:], "name": menu.text})
# Check top accordeon, old Turkie page
- contents = e.xpath('//div[contains(@class,"sweet-tabs")]/div/div[contains(@class,"panel panel-default")]')
- accordeon = [];
+ contents = e.xpath(
+ '//div[contains(@class,"sweet-tabs")]/div/div[contains(@class,"panel panel-default")]'
+ )
+ accordeon = []
for content in contents:
- aer= content.xpath('.//div[contains(@class,"panel-body")]')
- accordeon.append({
- 'title':content.xpath('./div[contains(@class,"panel-heading")]//a/span')[0].text,
- 'value':''.join([etree.tostring(child) for child in aer[0].iterchildren()])
- })
+ aer = content.xpath('.//div[contains(@class,"panel-body")]')
+ accordeon.append(
+ {
+ "title": content.xpath(
+ './div[contains(@class,"panel-heading")]//a/span'
+ )[0].text,
+ "value": "".join(
+ [etree.tostring(child)
+ for child in aer[0].iterchildren()]
+ ),
+ }
+ )
if len(accordeon):
- data['top_accordeon'] = accordeon
+ data["top_accordeon"] = accordeon
# Check alert top message
_tmp = e.xpath('//div[contains(@class,"alert-warning")]/p/text()')
- # import pdb; pdb.set_trace()
- if type(_tmp) == list and len(_tmp):
- data['message_top'] = _tmp[0]
+ if isinstance(_tmp, list) and len(_tmp):
+ data["message_top"] = _tmp[0]
else:
menus = e.xpath('//ul[contains(@id,"third-level-menu")]//a')
for menu in menus:
- data['menu'].append({'id':menu.attrib['href'][1:], 'name':menu.text})
+ data["menu"].append(
+ {"id": menu.attrib["href"][1:], "name": menu.text})
# Check last updated
- _tmp = e.xpath("//strong[contains(text(),'Reporting updated until: ')]/../span/text()")
+ _tmp = e.xpath(
+ "//strong[contains(text(),'Reporting updated until: ')]/../span/text()"
+ )
- if type(_tmp) == list and len(_tmp):
- data['updated'] = _tmp[0]
+ if isinstance(_tmp, list) and len(_tmp):
+ data["updated"] = _tmp[0]
- # import pdb; pdb.set_trace()
- for menu in data['menu']:
- # import pdb; pdb.set_trace()
- contents = e.xpath('//div[@id="'+menu['id']+'"]/*')
- menuContent = [];
- accordeon = [];
+ for menu in data["menu"]:
+ contents = e.xpath('//div[@id="' + menu["id"] + '"]/*')
+ menuContent = []
+ accordeon = []
for content in contents:
- if content.tag == 'h2':
+ if content.tag == "h2":
if len(accordeon):
- menuContent.append({'type':'accordeon', 'value':accordeon})
+ menuContent.append(
+ {"type": "accordeon", "value": accordeon})
accordeon = []
- menuContent.append({'type':'h2', 'value':content.text})
- elif content.tag == 'table':
+ menuContent.append({"type": "h2", "value": content.text})
+ elif content.tag == "table":
if len(accordeon):
- menuContent.append({'type':'accordeon', 'value':accordeon})
+ menuContent.append(
+ {"type": "accordeon", "value": accordeon})
accordeon = []
- aer= content.xpath('./*')
- menuContent.append({'type':'table', 'value':''.join(map(etree.tostring,aer))})
- elif content.tag == 'div' and 'class' in content.attrib and content.attrib['class'] == 'panel panel-default':
- # import pdb; pdb.set_trace()
- aer= content.xpath('.//div[contains(@class,"panel-body")]')
- accordeon.append({
- 'title':content.xpath('./div[contains(@class,"panel-heading")]//a/span')[0].text,
- 'value':''.join([etree.tostring(child) for child in aer[0].iterchildren()])
- })
- elif content.tag == 'div':
+ menuContent.append(
+ {"type": "table", "value": etree.tostring(content)}
+ )
+ elif (
+ content.tag == "div"
+ and "class" in content.attrib
+ and content.attrib["class"] == "panel panel-default"
+ ):
+ aer = content.xpath(
+ './/div[contains(@class,"panel-body")]')
+ accordeon.append(
+ {
+ "title": content.xpath(
+ './div[contains(@class,"panel-heading")]//a/span'
+ )[0].text,
+ "value": "".join(
+ [
+ etree.tostring(child)
+ for child in aer[0].iterchildren()
+ ]
+ ),
+ }
+ )
+ elif content.tag == "div":
if len(accordeon):
- menuContent.append({'type':'accordeon', 'value':accordeon})
+ menuContent.append(
+ {"type": "accordeon", "value": accordeon})
accordeon = []
- aer= content.xpath('./*')
- menuContent.append({'type':'div', 'value':''.join(map(etree.tostring,aer))})
+ aer = content.xpath("./*")
+ menuContent.append(
+ {"type": "div", "value": "".join(
+ map(etree.tostring, aer))}
+ )
# for norway and lichenstein
- elif content.tag == 'h3':
+ elif content.tag == "h3":
if len(accordeon):
- menuContent.append({'type':'accordeon', 'value':accordeon})
+ menuContent.append(
+ {"type": "accordeon", "value": accordeon})
accordeon = []
- menuContent.append({'type':'h3', 'value':content.text})
- elif content.tag == 'p':
+ menuContent.append({"type": "h3", "value": content.text})
+ elif content.tag == "p":
if len(accordeon):
- menuContent.append({'type':'accordeon', 'value':accordeon})
+ menuContent.append(
+ {"type": "accordeon", "value": accordeon})
accordeon = []
- aer= content.xpath('./*')
+ aer = content.xpath("./*")
# menuContent.append({'type':'p', 'value':''.join(map(etree.tostring,aer))})
- menuContent.append({'type':'p', 'value':''.join([etree.tostring(child) for child in content.iterchildren()])})
+ menuContent.append(
+ {
+ "type": "p",
+ "value": "".join(
+ [
+ etree.tostring(child)
+ for child in content.iterchildren()
+ ]
+ ),
+ }
+ )
if len(accordeon):
- menuContent.append({'type':'accordeon', 'value':accordeon})
- data['content'].append(menuContent)
-
- # import pdb; pdb.set_trace()
+ menuContent.append({"type": "accordeon", "value": accordeon})
+ data["content"].append(menuContent)
result = {
"countryprofile": {