def main(argv=sys.argv, run_juicer=run_juicer, run_replace_url=run_replace_url, copy_images=copy_images, remove_file=os.remove): if len(argv) !=3: raise RuntimeError, 'Usage: rejuice inifile section_name' inifile = argv[1] section_name = argv[2] resolver = ResolverList(()) resolver.add_new_section(inifile, section_name, allow_filter_section_keys=True) for o in resolver: for resource in o.resources: prod_resource = resource prod_resource_path = os.path.join(o.filepath, prod_resource) devel_resources = o.resources[resource] devel_resource_path_list = [] has_import_resource = False for devel_resource_spec, extend_inifile, extend_section in devel_resources: if extend_inifile is not None: assert extend_section is not None extend_resource = o.sections.get((extend_inifile, extend_section), None) devel_resource_path = os.path.join(extend_resource.filepath, devel_resource_spec) # Is this a resource imported from another static tree? if extend_resource.filepath != o.filepath: has_import_resource = True else: assert extend_section is None devel_resource_path = os.path.join(o.filepath, devel_resource_spec) devel_resource_path_list.append(devel_resource_path) # Do we have to collect the images to this resource? if has_import_resource and prod_resource_path.endswith('css'): # import mode output = os.tmpnam() + '.css' try: run_juicer(tuple(devel_resource_path_list), output=output) images = run_replace_url(output, prod_resource_path) finally: try: remove_file(output) except (OSError, IOError): pass copy_images(images, prod_resource_path) else: # run external program to do the concatenation run_juicer(tuple(devel_resource_path_list), output=prod_resource_path) print "\n\n##### All files compressed OK"