giovedì 22 novembre 2012

Script per rimuovere un modulo in Magento

Questo è uno script Python molto utile per rimuovere un modulo specifico da Magento se si dispone di una copia di tale modulo.
La copia deve essere nel formato canonico, cioé avere l'albero delle cartelle a partire da /app e /skin.

es.
myModuleRoot/app/code/local/myModule/...
myModuleRoot/skin/frontend/default/default/myModule/...

Qui è disponibile un archivio con lo script e il necessario un esempio di utilizzo: link
Facendo riferimento al contenuto dell'archivio, per lanciare lo script è sufficiente il comando:
python ./magento_module_script.py    path/myDir    path/myTarget

Segue il codice dello script.

import os
import sys


def walk_in_deep(dir):
    elementList = [] # pool

    if not os.path.exists(dir):
        print "ERR: dir not exists: " + dir
        return [];
    
    if os.walk(dir) != None:
        # extract folder content
        root, subFolders, files = os.walk(dir).next()

        # walk in subfolders
        for subFolder in subFolders:
            pathSubFolder = os.path.join(root,subFolder)
            elementList.extend(walk_in_deep(pathSubFolder)) # recursive call
            elementList.append(pathSubFolder)

        for file in files:
            elementList.append(os.path.join(root,file))

    return elementList


def delete_module(rootdir, targetdir):
    elementList = walk_in_deep(rootdir) # paths array
    
    for elem in elementList:
        elem = targetdir + elem[len(rootdir):]
        
        if os.path.isdir(elem): # if is a directory path
            try:
                os.rmdir(elem)
            except:
                pass # ignore
        else: # if is a file path
            try:
                os.remove(elem)
            except:
                pass # ignore
            

if __name__ == "__main__": # exec only if it's main script
    rootdir = sys.argv[1]
    targetdir = sys.argv[2]
    if (len(sys.argv)!=3): # validation check
        print sys.argv
        print 'Insert module root and magento root.'
    else: # exec routine
        delete_module(rootdir, targetdir)

0 commenti: