Differences between tepache and sweettepache
Jump to navigation
Jump to search
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