Skip to content

Commit

Permalink
added links portability to NodeshotOld interoperability class + minor…
Browse files Browse the repository at this point in the history
… improvements to interoperability
  • Loading branch information
nemesisdesign committed Dec 28, 2012
1 parent 6f31320 commit 9b6c051
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 16 deletions.
5 changes: 5 additions & 0 deletions nodeshot/core/zones/resources.py
Expand Up @@ -7,8 +7,10 @@
from nodeshot.core.base.resources import BaseSlugResource
from models import Zone, ZoneExternal


class ZoneResource(BaseSlugResource):
""" Zone API description """

class Meta:
# retrieves only published zones
queryset = Zone.objects.published().select_related()
Expand All @@ -32,6 +34,9 @@ def dehydrate(self, bundle):
bundle.data['nodes'] = '%snodes/' % self.get_slug_detail_uri(bundle)
elif bundle.obj.external.interoperability != 'None':
bundle.data['nodes'] = '%sexternal/nodes/%s.json' % (settings.MEDIA_URL, bundle.obj.slug)
# links for Nodeshot 0.9
if 'NodeshotOld' in bundle.obj.external.interoperability:
bundle.data['links'] = '%sexternal/links/%s.json' % (settings.MEDIA_URL, bundle.obj.slug)

return bundle

Expand Down
13 changes: 6 additions & 7 deletions nodeshot/extra/interoperability/BaseInterop.py
Expand Up @@ -7,7 +7,7 @@
import simplejson


class BaseConverter:
class BaseConverter(object):
""" Base interoperability class that converts an XML file to JSON format and saves it in ''{{ MEDIA_ROOT }}/external/nodes/<zone_slug>.json'' """

mandatory = ['url']
Expand All @@ -27,7 +27,7 @@ def process(self):
self.retrieve_content()
self.parse()
json = self.convert_nodes()
message = self.save_nodes(json)
message = self.save_file(self.zone.slug, json)
# return message as a list because more than one messages might be returned
return [message]

Expand All @@ -39,12 +39,11 @@ def parse(self):
""" parse XML data """
self.parsed_content = minidom.parseString(self.content)

def save_nodes(self, content):
""" save node list file on server's hard drive """
# convenience variables for readability
file_name = '%s.json' % self.zone.slug
def save_file(self, name, content, resource_name='nodes'):
""" save json file on server's hard drive """
file_name = '%s.json' % name
file_contents = ContentFile(content)
path = '%sexternal/nodes/%s' % (settings.MEDIA_ROOT, file_name)
path = '%sexternal/%s/%s' % (settings.MEDIA_ROOT, resource_name, file_name)
# delete file if already exists
if default_storage.exists(path):
default_storage.delete(path)
Expand Down
5 changes: 3 additions & 2 deletions nodeshot/extra/interoperability/GeoRSS.py
@@ -1,4 +1,4 @@
from nodeshot.core.base.choices import NODE_STATUS_NAME
from nodeshot.core.nodes.models.choices import NODE_STATUS
from BaseInterop import BaseConverter
import simplejson
from dateutil import parser
Expand Down Expand Up @@ -29,7 +29,7 @@ def convert_nodes(self):

node = {
'name': name,
'status': NODE_STATUS_NAME.get('active'),
'status': NODE_STATUS.get('active'),
'lat': lat,
'lng': lng,
'is_hotspot': True,
Expand All @@ -42,6 +42,7 @@ def convert_nodes(self):
'meta': {
'total_count': len(items)
},
'status': NODE_STATUS,
'objects': nodes
}
# return json formatted string
Expand Down
46 changes: 41 additions & 5 deletions nodeshot/extra/interoperability/NodeshotOld.py
@@ -1,11 +1,19 @@
from nodeshot.core.base.choices import NODE_STATUS_NAME
from nodeshot.core.nodes.models.choices import NODE_STATUS
from nodeshot.core.links.choices import LINK_STATUS, LINK_TYPE
from BaseInterop import BaseConverter
import simplejson


class NodeshotOld(BaseConverter):
""" Nodeshot 0.9.x interoperability class """

def process(self):
""" this is the method that does everything automatically (at least attempts to) """
messages = super(NodeshotOld, self).process()
links_json = self.convert_links()
links_message = self.save_file(self.zone.slug, links_json, 'links')
return messages + [links_message]

def parse(self):
""" parse JSON data """
self.parsed_content = simplejson.loads(self.content)
Expand All @@ -24,10 +32,10 @@ def convert_nodes(self):
""" convert old Nodeshot JSON into Nodeshot 2 compatible JSON file """
# status converter dictionary
STATUS = {
'a': NODE_STATUS_NAME.get('active'),
'p': NODE_STATUS_NAME.get('potential'),
'h': NODE_STATUS_NAME.get('active'),
'ah': NODE_STATUS_NAME.get('active'),
'a': NODE_STATUS.get('active'),
'p': NODE_STATUS.get('potential'),
'h': NODE_STATUS.get('active'),
'ah': NODE_STATUS.get('active'),
}
# shortener alias
data = self.parsed_content
Expand All @@ -52,7 +60,35 @@ def convert_nodes(self):
'meta': {
'total_count': len(items)
},
'status': NODE_STATUS,
'objects': nodes
}
# return json formatted string
return simplejson.dumps(json_dict)

def convert_links(self):
""" convert old Nodeshot JSON links into Nodeshot 2 compatible JSON links file """
items = self.parsed_content.get('links')
# init empty list
links = []
# loop over all items
for item in items:
link = {
'status': LINK_STATUS.get('active'),
'type': LINK_TYPE.get('radio'),
'from': [item.get('from_lat'), item.get('from_lng')],
'to': [item.get('to_lat'), item.get('to_lng')]
}
# fill link list container
links.append(link)
# dictionary that will be converted to json
json_dict = {
'meta': {
'total_count': len(items)
},
'status': LINK_STATUS,
'types': LINK_TYPE,
'links': links
}
# return json formatted string
return simplejson.dumps(json_dict)
5 changes: 3 additions & 2 deletions nodeshot/extra/interoperability/ProvinciaWIFI.py
@@ -1,4 +1,4 @@
from nodeshot.core.base.choices import NODE_STATUS_NAME
from nodeshot.core.nodes.models.choices import NODE_STATUS
from BaseInterop import BaseConverter
import simplejson

Expand All @@ -16,7 +16,7 @@ def convert_nodes(self):
for item in items:
node = {
'name': self.get_text(item, 'Denominazione'),
'status': NODE_STATUS_NAME.get('active'),
'status': NODE_STATUS.get('active'),
'lat': self.get_text(item, 'Latitudine'),
'lng': self.get_text(item, 'longitudine'),
'is_hotspot': True,
Expand All @@ -33,6 +33,7 @@ def convert_nodes(self):
'meta': {
'total_count': len(items)
},
'status': NODE_STATUS,
'objects': nodes
}
# return json formatted string
Expand Down

0 comments on commit 9b6c051

Please sign in to comment.