Differences between tepache and sweettepache

From OLPC
Revision as of 03:45, 21 February 2008 by Tony37 (talk | contribs) (Output of svn diff)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Index: sweettepache.py

=======================================================

--- sweettepache.py (revision 1) +++ sweettepache.py (revision 2) @@ -113,6 +113,7 @@

        self.indent = 4 * " "

    def write(self, output_file=None):

+ global options, status

        module_code = ""
        if output_file:
            self.data["module"] = self.output_file = output_file

@@ -146,7 +147,64 @@

        except IOError, e:
            printerr(e)
            return False

+ + if not options.no_sugar:

+ activity_file = self.output_file[:-3] + 'Activity.py' + if os.path.isfile(activity_file): + shutil.copy(activity_file, activity_file + '.bak') + activity_code = sugar_activity_format % self.data + + + try: + self.output = codecs.open(activity_file, "w", "utf-8") + self.output.write(activity_code) + self.output.close() + except IOError, e: + printerr(e) + return False + + #write setup.py format + setup_code = setup_format % self.data + try: + self.output = codecs.open("setup.py", "w", "utf-8") + self.output.write(setup_code) + self.output.close() + except IOError, e: + printerr(e) + return False + + if not os.path.isdir('activity'): + #mkdir nameActivity.activity/activity + os.makedirs('activity') + os.chdir("activity") + + if not options.no_icon: + #write nameActivity.activity/activity/activity-name.svg + icon_code = icon_format + icon_file = 'activity-' + self.output_file[:-3] + '.svg' + try: + self.output = codecs.open(icon_file, "w", "utf-8") + self.output.write(icon_code) + self.output.close() + + except IOError, e: + printerr(e) + return False + + #write nameActivity.activity/activity/activity.info + info_code = activity_info_format %self.data + info_file = 'activity.info' + try: + self.output = codecs.open(info_file, "w", "utf-8") + self.output.write(info_code) + self.output.close() + except IOError, e: + printerr(e) + return False + + os.chdir(os.pardir) +

        return True

    def parse(self):

@@ -347,60 +405,60 @@

        open(source_filename, "w").write(normalized_source_data)


-def get_binaries_path():

- binaries_path_list = os.environ["PATH"].split(os.pathsep)

- if __WIN32__:

- try:

- import win32con

- import win32api

- import pywintypes

- gnu_path = ""

+def get_binaries_path(): + binaries_path_list = os.environ["PATH"].split(os.pathsep) + if __WIN32__: + try: + import win32con + import win32api + import pywintypes + gnu_path = ""

            try:
                winreg_key = win32con.HKEY_LOCAL_MACHINE

- winreg_subkey = "SOFTWARE\\GnuWin32"

- h = win32api.RegOpenKey(winreg_key, winreg_subkey)

- gnu_path = win32api.RegQueryValueEx(h, "InstallPath")[0]

- win32api.RegCloseKey(h)

- gnu_path_bin = os.path.join(gnu_path, "bin")

- binaries_path_list.insert(0, gnu_path_bin)

- except pywintypes.error, e:

- printerr("You haven't installed any GnuWin32 program.")

- except ImportError:

- printerr("I can't look for programs in the win32 registry")

- printerr("The pywin32 extension should be installed")

- printerr("Download it from %s\n" % pywin32_home)

- return binaries_path_list

-

-def get_programs_paths(programs_list):

- if __WIN32__:

- exe_ext = ".exe"

- else:

- exe_ext = ""

- path_list = get_binaries_path()

+ winreg_subkey = "SOFTWARE\\GnuWin32" + h = win32api.RegOpenKey(winreg_key, winreg_subkey) + gnu_path = win32api.RegQueryValueEx(h, "InstallPath")[0] + win32api.RegCloseKey(h) + gnu_path_bin = os.path.join(gnu_path, "bin") + binaries_path_list.insert(0, gnu_path_bin) + except pywintypes.error, e: + printerr("You haven't installed any GnuWin32 program.") + except ImportError: + printerr("I can't look for programs in the win32 registry") + printerr("The pywin32 extension should be installed") + printerr("Download it from %s\n" % pywin32_home) + return binaries_path_list + +def get_programs_paths(programs_list): + if __WIN32__: + exe_ext = ".exe" + else: + exe_ext = "" + path_list = get_binaries_path()

    programs_paths = [None,]*len(programs_list)

- for i,program in enumerate(programs_list):

+ for i,program in enumerate(programs_list):

        for path in path_list:
            program_path = os.path.join(path, program) + exe_ext

- if os.path.isfile(program_path):

- if " " in program_path:

+ if os.path.isfile(program_path): + if " " in program_path:

                    program_path = '"%s"' % program_path
                programs_paths[i] = program_path

- return programs_paths

+ return programs_paths

def get_required_programs():

- program_names = ["diff", "patch"]

- package_names = ["diffutils", "patch"]

-

- programs_paths = get_programs_paths(program_names)

- for i,program_path in enumerate(programs_paths):

+ program_names = ["diff", "patch"] + package_names = ["diffutils", "patch"] + + programs_paths = get_programs_paths(program_names) + for i,program_path in enumerate(programs_paths):

        if not program_path:

- program, package = program_names[i], package_names[i]

- printerr("Required program %s could not be found" % program)

- printerr("Is the package %s installed?" % package)

- if __WIN32__:

+ program, package = program_names[i], package_names[i] + printerr("Required program %s could not be found" % program) + printerr("Is the package %s installed?" % package) + if __WIN32__:

                printerr("Download it from %s" % gnuwin32_home)
            return None

- return programs_paths

+ return programs_paths

def get_options_status():
    usage = "usage: %prog [options] [GLADE_FILE] [OUTPUT_FILE]"

@@ -409,6 +467,9 @@

    version = "1.0"
    parser = optparse.OptionParser(usage=usage, version=version,
                                      description=description)

+ parser.add_option("-i", "--no-icon", dest = "no_icon", + action="store_true", + help="I already have an activity icon")

    parser.add_option("-g", "--glade", dest="glade_file",
                      help="file to parse")
    parser.add_option("-o", "--output", dest="output_file",

@@ -416,6 +477,9 @@

    parser.add_option("-n", "--no-helper", dest="no_helper",
                      action="store_true",
                      help="Do not write the helper module")

+ parser.add_option('-s', "--without-sugar", dest = "no_sugar", + action="store_true", + help="No sweetening needed")

    parser.add_option("-t", "--use-tabs", dest="use_tabs",
                      action="store_true",
                      help="\

@@ -434,10 +498,11 @@

    return options, status

def main():

- programs_paths = get_required_programs()

- if not programs_paths: - return -1

- diff_bin, patch_bin = programs_paths

+ #programs_paths = get_required_programs() + #if not programs_paths: + # return -1 + #diff_bin, patch_bin = programs_paths + global options, status

    options, status = get_options_status()
    if not status:

@@ -459,37 +524,35 @@

    exists_output_file = os.path.exists(output_file)
    exists_output_file_orig = os.path.exists(output_file_orig)

+ if exists_output_file: + #back up the original + shutil.copy(output_file, output_file_bak) +

    if not exists_output_file_orig and exists_output_file:

- printerr('File "%s" exists' % short_f) - printerr('but "%s" does not.' % short_f_orig) - printerr("That means your custom code would be overwritten.") - printerr('Please manually remove "%s"' % short_f) - printerr("from this directory.") - printerr("Anyway, I\'ll create a backup for you in") - printerr('"%s"' % short_f_bak) - shutil.copy(output_file, output_file_bak) - return -1 + shutil.copy(output_file, output_file_orig) + exists_output_file_orig = True +

    if options.use_tabs:
        code_writer.indent = "\t"
    if exists_output_file_orig and exists_output_file:
        if not options.use_tabs:
            normalize_indentation(output_file_orig)
            normalize_indentation(output_file)

- diff_command = "%s -U1 %s %s > %s" - diff_args = (diff_bin, output_file_orig, output_file, diff_file) - os.system(diff_command % diff_args) - shutil.copy(output_file, output_file_bak)

        if not code_writer.write(output_file):
            os.remove(diff_file)
            return -1

+ diff_command = "%s -U3 %s %s > %s" + diff_bin = "diff" + diff_args = (diff_bin, output_file, output_file_orig, diff_file) + os.system(diff_command % diff_args)

        orig_callbacks = get_callbacks_from_code(output_file_orig)
        callbacks = get_callbacks_from_code(output_file)
        renamed_symbols = get_renamed_symbols(orig_callbacks, callbacks)
        if renamed_symbols:
            diff_apply_renamed_symbols(diff_file, renamed_symbols)

- shutil.copy(output_file, output_file_orig) - patch_command = "%s -fp0 < %s" - patch_args = (patch_bin, diff_file) + patch_command = "%s -fp0 %s < %s" + patch_bin = "patch" + patch_args = (patch_bin, output_file, diff_file)

        if os.system(patch_command % patch_args):
            os.remove(diff_file)
            return -1

@@ -497,7 +560,6 @@

    else:
        if not code_writer.write(output_file):
            return -1

- shutil.copy(output_file, output_file_orig)

    os.chmod(output_file, 0755)
    if not options.no_helper and not os.path.isfile(helper_module):

@@ -592,6 +654,9 @@

instance_format = \
%(t)s%(instance)s = %(class)s()

+%(t)swidget = %(instance)s.get_widget('%(root)s') +%(t)swidget.connect("destroy", lambda w: gtk.main_quit()) +%(t)swidget.show()



run_format = \

@@ -604,6 +669,134 @@

#-- main }


+sugar_activity_format= """\ +import %(app_name)s + +from sugar.activity import activity + +class %(app_name)sActivity(activity.Activity): + def __init__(self, handle): + activity.Activity.__init__(self, handle) + + self.testname = '%(app_name)s' + self.set_title(self.testname) + + glade = %(app_name)s.%(class)s(root='vbox1') + self.vbox = glade.get_widget('vbox1') + widgets = self.get_children() + widget = widgets[0] + widget.pack_start(self.vbox) + + toolbox = activity.ActivityToolbox(self) + self.set_toolbox(toolbox) + toolbox.show() +""" + +setup_format= """\ +#!/usr/bin/env python +from sugar.activity import bundlebuilder +if __name__ == "__main__": + bundlebuilder.start("%(app_name)sActivity") +""" + +icon_format= """\ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="50" + height="50" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.45.1" + sodipodi:docname="activity-gui.svg" + sodipodi:docbase="/home/tony/Documents/Activities/GUIActivity.activity/activity" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <metadata + id="metadata9"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs7" /> + <sodipodi:namedview + inkscape:window-height="627" + inkscape:window-width="910" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + guidetolerance="10.0" + gridtolerance="10.0" + objecttolerance="10.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" + inkscape:zoom="8.14" + inkscape:cx="25" + inkscape:cy="25" + inkscape:window-x="0" + inkscape:window-y="25" + inkscape:current-layer="svg2" /> + <rect + x="0.26289925" + y="2.3513515" + width="48" + height="48" + style="fill:#ffffff;stroke:#000000;stroke-width:2" + id="rect4" /> + <text + xml:space="preserve" + style="font-size:8px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="8.7223587" + y="12.776413" + id="text2161"><tspan + sodipodi:role="line" + id="tspan2163" + x="8.7223587" + y="12.776413" /></text> + <text + xml:space="preserve" + style="font-size:14px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" + x="10.687961" + y="3.6855037" + id="text2165"><tspan + sodipodi:role="line" + x="10.687961" + y="3.6855037" + id="tspan2169"></tspan><tspan + sodipodi:role="line" + x="10.687961" + y="21.185504" + id="tspan2162">Test</tspan><tspan + sodipodi:role="line" + x="10.687961" + y="38.685504" + id="tspan2327">GUI</tspan></text> +</svg> +""" + +activity_info_format = """\ +[Activity] +name = %(app_name)s +service_name = org.laptop.%(app_name)sActivity +class = %(app_name)sActivity.%(app_name)sActivity +exec = sugar-activity %(app_name)sActivity.%(app_name)sActivity +icon = activity-%(app_name)s +activity_version = 1 +show_launcher = yes +""" +

SimpleGladeApp_content = \
"""
 SimpleGladeApp.py