Changeset 1096

Show
Ignore:
Timestamp:
03/24/08 11:47:06
Author:
mylan
Message:

Update install/uninstall for generated skin.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • qPloneSkinDump/branches/plone_3.0/skin_template/config.py

    r999 r1096  
    111111from Globals import package_home 
    112112PRODUCTS_PATH = os.sep.join(package_home(GLOBALS).split(os.sep)[:-1]) 
     113 
     114## GenericSetup constants 
     115GS_INSTALL_PROFILE      = "profile-Products.%(product_name)s:default" 
     116GS_AFTERINSTALL_PROFILE = "profile-Products.%(product_name)s:afterinstall" 
     117GS_UNINSTALL_PROFILE    = "profile-Products.%(product_name)s:uninstall" 
  • qPloneSkinDump/branches/plone_3.0/skin_template/profiles.zcml

    r935 r1096  
    1212      /> 
    1313 
     14  <genericsetup:registerProfile 
     15      name="afterinstall" 
     16      title="%(product_name)s:afterinstall" 
     17      directory="profiles/afterinstall" 
     18      description="Extension profile for install zexps and other dependent objects of %(product_name)s." 
     19      provides="Products.GenericSetup.interfaces.EXTENSION" 
     20      /> 
     21 
     22  <genericsetup:registerProfile 
     23      name="uninstall" 
     24      title="%(product_name)s:uninstall" 
     25      directory="profiles/uninstall" 
     26      description="Extension profile for UNINSTALL %(product_name)s." 
     27      provides="Products.GenericSetup.interfaces.EXTENSION" 
     28      /> 
     29 
    1430</configure> 
  • qPloneSkinDump/branches/plone_3.0/skin_template/setuphandlers.py

    r1010 r1096  
     1import sys 
     2from logging import getLogger 
     3 
     4from BTrees.OOBTree import OOBTree 
     5from persistent.list import PersistentList 
     6 
    17from zope.dottedname.resolve import resolve 
    28from zope.component import getUtility, getSiteManager, getMultiAdapter 
     
    1521from Products.%(product_name)s.config import * 
    1622from Products.%(product_name)s.utils import * 
     23from Products.%(product_name)s.utilsPortlets import dumpPortlets 
    1724 
    18 import sys 
    19 from logging import getLogger 
    2025logger = getLogger('%(product_name)s') 
    2126 
     
    5661        manager = managers.get(name, None) 
    5762        if manager is not None: 
     63            # set portlet assignments 
     64            mapping = getMultiAdapter((context, manager), IPortletAssignmentMapping, context=context) 
     65 
     66            # purge mapping 
     67            mapping._data = OOBTree() 
     68            mapping._order = PersistentList() 
     69 
    5870            if info['assignments']: 
    5971                # set portlet assignments 
    60                 mapping = getMultiAdapter((context, manager), IPortletAssignmentMapping, context=context) 
    6172                for assignment in info['assignments']: 
    6273                    assignPortlet(mapping, assignment) 
     
    6778                    localassignmentmanager.setBlacklistStatus(category, status) 
    6879 
     80 
     81def saveBeforeInstallPortlets(context): 
     82    # Save information about portlets before installation 
     83 
     84    beforeInstall = dumpPortlets(context=context, dump_policy='root', dump_portlets_selection=[] ) 
     85 
     86    # update properties list 
     87    pp = getToolByName(context, 'portal_properties') 
     88    skin_props = pp._getOb('%(product_name_lowercase)s_properties') 
     89    skin_props._updateProperty('portlets_before_install', str(beforeInstall) ) 
     90 
     91 
    6992def importPortlets(context): 
     93 
     94    if context.readDataFile("%(afterinstall_profile_marker)s") is None: 
     95        return 
     96 
    7097    site = context.getSite() 
     98 
     99    saveBeforeInstallPortlets(site) 
    71100 
    72101    components = getSiteManager(site) 
     
    94123 
    95124def importZexps(context): 
     125 
     126    if context.readDataFile("%(afterinstall_profile_marker)s") is None: 
     127        return 
     128 
    96129    site = context.getSite() 
    97130    if checkIfImport(): 
     
    99132 
    100133def importVarious(context): 
     134 
     135    if context.readDataFile("%(afterinstall_profile_marker)s") is None: 
     136        return 
     137 
    101138    site = context.getSite() 
    102139    out = StringIO() 
     
    105142 
    106143def importCustomViews(context): 
     144 
     145    if context.readDataFile("%(afterinstall_profile_marker)s") is None: 
     146        return 
     147 
    107148    site = context.getSite() 
    108149 
  • qPloneSkinDump/branches/plone_3.0/utils.py

    r1026 r1096  
    346346            copyDir(src_path, dst_path, productName) 
    347347 
    348 def fsDirectoryViewsXML(folder_names, product_name): 
     348def fsDirectoryViewsXML(folder_names, product_name, remove=False): 
    349349    pattern = """ <object name="%(folder_name)s" meta_type="Filesystem Directory View" 
    350        directory="Products.%(product_name)s:skins/%(folder_name)s"/>\n""" 
     350       directory="Products.%(product_name)s:skins/%(folder_name)s" %(remove)s/>\n""" 
    351351    xml = '' 
    352352    if type(folder_names) not in (type([]), type(())): 
    353353        folder_names = [folder_names,] 
    354354    for name in folder_names: 
    355        xml += pattern % {'product_name' : product_name, 'folder_name' : name} 
     355       xml += pattern % {'product_name' : product_name, \ 
     356                         'folder_name'  : name, \ 
     357                         'remove'       : remove and 'remove="True"' or '', \ 
     358                        } 
    356359    return xml 
    357360 
     
    368371        os.mkdir(productPath) 
    369372    files_to_remove = [] 
     373    files_to_add    = [] 
    370374    # Form CSS and JS importing list and regestry data (looking in subdir too) for Plone 2.1.0+  
    371375    stylesheets_xml = '' 
     
    405409    # Prepare XML strings for add to skins.xml 
    406410    skin_layers = buildSkinLayers(context, zmi_base_skin_name) 
     411 
     412    # Prepare profiles 
     413    default_marker, afterinstall_marker, uninstall_marker = {}, {}, {} 
     414    profiles = ['default', 'afterinstall', 'uninstall'] 
     415    profiles_path = ospJoin(products_path, productName, 'profiles') 
     416    for profile in profiles: 
     417        varname = "%s_marker" % profile 
     418        file_name = "%s_%s.txt" % (productName.lower(), profile) 
     419        locals()[varname].update({'fname' : file_name, \ 
     420                                  'fpath' : ospJoin(profiles_path, profile, file_name), \ 
     421                                  'fdata' : "# Marker file for %s profile of %s skin" % \ 
     422                                            (profile, productName) }) 
     423        files_to_add.append(locals()[varname]) 
    407424 
    408425    # dump customized objects from portal_view_customization 
     
    442459                ,"skin_layers" : skin_layers \ 
    443460                ,"custom_views" : str(custom_views) \ 
    444                 ,"directory_views_xml" : fsDirectoryViewsXML(zmi_skin_names, productName)} 
     461                ,"directory_views_xml" : fsDirectoryViewsXML(zmi_skin_names, productName) \ 
     462                ,"remove_directory_views_xml" : fsDirectoryViewsXML(zmi_skin_names, productName, remove=True) \ 
     463                ,"creation_date" : time.strftime('%d/%m/%Y') \ 
     464                ,"install_profile_marker" : default_marker['fname'] \ 
     465                ,"afterinstall_profile_marker" : afterinstall_marker['fname'] \ 
     466                ,"uninstall_profile_marker" : uninstall_marker['fname'] \ 
     467    } 
    445468    sp_updated_files = ['config.py' \ 
    446469                       ,'README.txt' \ 
     470                       ,'HISTORY.txt' \ 
    447471                       ,'setuphandlers.py' \ 
     472                       ,'uninstallhandlers.py' \ 
    448473                       ,'profiles.zcml' \ 
    449474                       ,'utils.py' \ 
    450475                       ,'configure.zcml' \ 
    451476                       ,'skins.zcml' \ 
     477                       ,ospJoin('Extensions', 'Install.py')\ 
    452478                       ,ospJoin('browser', 'interfaces.py')\ 
    453479                       ,ospJoin('browser', 'viewlets.zcml')\ 
    454480                       ,ospJoin('browser', 'configure.zcml')\ 
    455                        ,ospJoin('profiles', 'default', 'import_steps.xml')\ 
    456481                       ,ospJoin('profiles', 'default', 'skins.xml')\ 
    457482                       ,ospJoin('profiles', 'default', 'cssregistry.xml')\ 
    458483                       ,ospJoin('profiles', 'default', 'jsregistry.xml')\ 
    459                        ,ospJoin('browser', 'configure.zcml') 
     484                       ,ospJoin('profiles', 'default', 'propertiestool.xml')\ 
     485                       ,ospJoin('profiles', 'afterinstall', 'import_steps.xml')\ 
     486                       ,ospJoin('profiles', 'uninstall', 'import_steps.xml')\ 
     487                       ,ospJoin('profiles', 'uninstall', 'skins.xml')\ 
     488                       ,ospJoin('browser', 'configure.zcml') \ 
     489                       #,ospJoin('profiles', 'uninstall', 'cssregistry.xml')\ 
     490                       #,ospJoin('profiles', 'uninstall', 'jsregistry.xml')\ 
    460491                       ] 
    461492    for fp in sp_updated_files: 
     
    463494    for fp in files_to_remove: 
    464495        os.remove(ospJoin(productPath,fp)) 
     496    for data in files_to_add: 
     497        f = file(data['fpath'],'w') 
     498        f.write(data['fdata']) 
     499        f.close()