diff --git a/.gitignore b/.gitignore index 7ddd909..8e0867d 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,7 @@ lib/ lib64 include/ build/ + +# Ropeproject ignore +.ropeproject/ +.bak diff --git a/setup.py b/setup.py index 12ca842..9946d13 100644 --- a/setup.py +++ b/setup.py @@ -1,10 +1,17 @@ -import ez_setup, sys, shutil, os, os.path, subprocess +import ez_setup +import sys +import shutil +import os +import os.path +import subprocess + ez_setup.use_setuptools() from setuptools import setup, find_packages from setuptools.command.install import install from distutils.dir_util import copy_tree + class CustomInstall(install): """ We subclass the install command to add some more mojo @@ -14,20 +21,20 @@ class CustomInstall(install): # Now we do our own magic if sys.platform != 'win32' and sys.platform != 'darwin': try: - print "Creating shared directory..." - os.mkdir("/usr/local/share/jsoninspector", 0755) + print("Creating shared directory...") + os.mkdir("/usr/local/share/jsoninspector", 0o755) except: if not os.path.exists("/usr/local/share/jsoninspector"): - print "Warning: Couldn't create /usr/local/share/jsoninspector" + print("Warning: Couldn't create /usr/local/share/jsoninspector") # Copy the translations try: - print "Installing translations..." + print("Installing translations...") copy_tree('locale/po/', '/usr/share/locale/') except: - print "Warning: error copying translation files." + print("Warning: error copying translation files.") # Generate the icons try: @@ -37,67 +44,68 @@ class CustomInstall(install): result = 1 if result != 0: - print "Warning: Error generating icons" - + print("Warning: Error generating icons") + # Copy the icons - print "Installing application icons..." - for icon_size in ['{sz}x{sz}'.format(sz = x) for x in ['16', '22','24', '32', '36', '48', '64', '72', '96', '128', '192']]: + print("Installing application icons...") + for icon_size in ['{sz}x{sz}'.format(sz=x) for x in ['16', '22', '24', '32', '36', '48', '64', '72', '96', '128', '192']]: try: - shutil.copyfile('res/jsoninspector' + icon_size + ".png", + shutil.copyfile('res/jsoninspector' + icon_size + ".png", '/usr/share/icons/hicolor/' + icon_size + "/apps/jsoninspector.png") except: - print "Warning: error copying icon {size}.".format(size = icon_size) + print("Warning: error copying icon {size}.".format(size=icon_size)) try: shutil.copyfile('res/jsoninspector48x48.png', '/usr/share/pixmaps/jsoninspector.png') except: - print "Warning: error copying icon to pixmaps directory." + print("Warning: error copying icon to pixmaps directory.") try: - shutil.copyfile('res/jsoninspector.svg' ,'/usr/share/icons/hicolor/scalable/apps/jsoninspector.svg') + shutil.copyfile('res/jsoninspector.svg', '/usr/share/icons/hicolor/scalable/apps/jsoninspector.svg') except: - print "Warning: error copying svg to scalable." + print("Warning: error copying svg to scalable.") - print "Updating icon cache..." + print("Updating icon cache...") try: result = subprocess.call(['/usr/bin/gtk-update-icon-cache /usr/share/icons/hicolor/']) except: result = 1 - + if result != 0: - print "Warning: Error updating hicolor icon cache." + print("Warning: Error updating hicolor icon cache.") try: - print "Installing glade file..." + print("Installing glade file...") shutil.copyfile('res/jsoninspector.glade', '/usr/local/share/jsoninspector/jsoninspector.glade') except: - print "Warning: error copying .glade file." + print("Warning: error copying .glade file.") try: - print "Installing desktop entry..." + print("Installing desktop entry...") shutil.copyfile('res/jsoninspector.desktop', '/usr/share/applications/jsoninspector.desktop') except: - print "Warning: error copying .desktop entry." + print("Warning: error copying .desktop entry.") + setup( - name = "Jsoninspector", - version = "2.0", - packages = find_packages('src', exclude = ['ez_setup']), - entry_points = { 'gui_scripts' : [ 'jsoninspector = jsoninspector:main_start' ] }, - package_dir = { '' : 'src' }, + name="Jsoninspector", + version="2.0", + packages=find_packages('src', exclude=['ez_setup']), + entry_points={'gui_scripts': ['jsoninspector=jsoninspector:main_start']}, + package_dir={'': 'src'}, # metadata for upload to PyPI - author = "Jose Carlos Cuevas", - author_email = "reset.reboot@gmail.com", - description = "JSON Inspector is a simple application to study JSON code", - license = "GPLv3", - keywords = "json inspect gtk gnome", - url = "https://github.com/resetreboot/jsoninspector", # project home page, if any - cmdclass = { 'install' : CustomInstall } + author="Jose Carlos Cuevas", + author_email="reset.reboot@gmail.com", + description="JSON Inspector is a simple application to study JSON code", + license="GPLv3", + keywords="json inspect gtk gnome", + url="https://eonbeta.servegame.com/git/resetreboot/jsoninspector", # project home page, if any + cmdclass={'install': CustomInstall} ) diff --git a/src/jsoninspector/jsoninspector.py b/src/jsoninspector/jsoninspector.py index 0bc65fe..760ec24 100644 --- a/src/jsoninspector/jsoninspector.py +++ b/src/jsoninspector/jsoninspector.py @@ -1,9 +1,13 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import gi +gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gio -import json, sys, os.path +import json +import sys +import os.path # Internationalization support import gettext @@ -11,7 +15,7 @@ import locale APP = "jsoninspector" -if os.path.exists('../locale/po') and os.path.exists('../../res'): +if os.path.exists('../../locale/po') and os.path.exists('../../res'): # We're in the development tree DIR = "../../locale/po/" RESOURCES = "../../res/" @@ -39,15 +43,15 @@ class MainWindowMethods(Gtk.Application): Main Application object with the main window signals """ def __init__(self, logic): - Gtk.Application.__init__(self, application_id = "apps.gnome.jsoninspector", - flags = Gio.ApplicationFlags.FLAGS_NONE) + Gtk.Application.__init__(self, application_id="apps.gnome.jsoninspector", + flags=Gio.ApplicationFlags.FLAGS_NONE) # We store the reference to the app logic self.logicObj = logic self.connect("activate", self.on_app_start) - def on_app_start(self, data = None): + def on_app_start(self, data=None): """ Loads the MainWindow widgets, shows it up and starts the main loop """ @@ -100,14 +104,14 @@ class MainWindowMethods(Gtk.Application): # We update the statusbar accordingly to what has happened if self.logicObj.loadjson(filename): - + label.set_text(filename) treeStore = self.builder.get_object("treestore1") treeStore.clear() self.logicObj.loadTree(treeStore) - + else: - + label.set_text(_("No JSON loaded.")) # We finish the dialog @@ -154,8 +158,8 @@ class MainWindowMethods(Gtk.Application): treestore.clear() if self.logicObj.loadJSONText(jsonText): - - status_label = self.builder.get_object("StatusLabel") + + status_label = self.builder.get_object("StatusLabel") status_label.set_text(_("Loaded from the clipboard.")) self.logicObj.loadTree(treestore) @@ -186,10 +190,10 @@ class MainWindowMethods(Gtk.Application): """ pass - def onAboutDialogClose(self, widget, event = None): + def onAboutDialogClose(self, widget, event=None): pass - def onAboutDialogDeleteEvent(self, widget, event = None): + def onAboutDialogDeleteEvent(self, widget, event=None): pass @@ -209,7 +213,7 @@ class LogicObject(object): try: self.json = json.loads(f.read()) except ValueError: - print _("Not valid JSON!\n") + print(_("Not valid JSON!\n")) self.json = None f.close() @@ -225,9 +229,9 @@ class LogicObject(object): try: self.json = json.loads(text) except ValueError: - print _("Not valid JSON") + print(_("Not valid JSON")) self.json = None - + return False return True @@ -236,23 +240,22 @@ class LogicObject(object): """ Carga el JSON en el tree store para mostrarlo """ - for key_val in self.json.keys(): + for key_val in list(self.json.keys()): self.process_node(treestore, self.json[key_val], key_val) - def _loadTreeRec(self, treestore, elems, parent_node): """ Adición recursiva de elementos al árbol """ - for key_val in elems.keys(): + for key_val in list(elems.keys()): self.process_node(treestore, elems[key_val], key_val, parent_node) - def process_node(self, treestore, node, node_key, parent_node = None): + def process_node(self, treestore, node, node_key, parent_node=None): # Si el elemento contiene un diccionario if type(node) is dict: # Añadimos el nodo, y obtenemos la referencia - new_node = treestore.append(parent_node, [unicode(node_key), u"", u""]) + new_node = treestore.append(parent_node, [str(node_key), "", ""]) # De manera recursiva, entramos en el diccionario y obtenemos # los nodos, añadidos como hijos de este self._loadTreeRec(treestore, node, new_node) @@ -260,20 +263,20 @@ class LogicObject(object): elif type(node) is list: count = 0 # Añadimos el nodo, y obtenemos la referencia - new_node = treestore.append(parent_node, - [unicode(node_key), + new_node = treestore.append(parent_node, + [str(node_key), "", ""]) for elem in node: if type(elem) is dict: another_node = treestore.append(new_node, - [unicode(node_key) + u"[" + unicode(count) + u"]", - "", unicode(type(elem))]) + [str(node_key) + "[" + str(count) + "]", + "", str(type(elem))]) self._loadTreeRec(treestore, elem, another_node) else: - treestore.append(new_node, [unicode(node_key) + u"[" + unicode(count) + u"]", - unicode(elem), - unicode(type(elem))]) + treestore.append(new_node, [str(node_key) + "[" + str(count) + "]", + str(elem), + str(type(elem))]) count += 1 @@ -281,16 +284,14 @@ class LogicObject(object): # Tenemos un nodo hoja, obtenemos el valor y el tipo y lo # añadimos - treestore.append(parent_node, [unicode(node_key), - unicode(node), - unicode(type(node))]) - - + treestore.append(parent_node, [str(node_key), + str(node), + str(type(node))]) # Main procedure if __name__ == "__main__": - + logicObject = LogicObject() mainWindow = MainWindowMethods(logicObject)