"""
Utilities for using modules
"""
transfer_types = ['Role', 'Print Format','DocType','Page','DocType Mapper','GL Mapper','Search Criteria', 'Patch']
[docs]def scrub(txt):
return txt.replace(' ','_').replace('-', '_').replace('/', '_').lower()
[docs]def scrub_dt_and_dn(dt, dn):
"""
Returns in lowercase and code friendly names of doctype and name for certain types
"""
ndt, ndn = dt, dn
if dt.lower() in ('doctype', 'search criteria', 'page'):
ndt, ndn = scrub(dt), scrub(dn)
return ndt, ndn
[docs]def get_item_file(module, dt, dn):
"""
Returns the path of the item file
"""
import os
ndt, ndn = scrub_dt_and_dn(dt, dn)
return os.path.join(get_module_path(module), ndt, ndn, ndn + '.txt')
[docs]def get_item_timestamp(module, dt, dn):
"""
Return ths timestamp of the given item (if exists)
"""
return get_file_timestamp(get_item_file(module, dt, dn))
[docs]def get_file_timestamp(fn):
"""
Returns timestamp of the given file
"""
import os
from webnotes.utils import cint
try:
return str(cint(os.stat(fn).st_mtime))
except OSError, e:
if e.args[0]!=2:
raise e
else:
return None
[docs]def get_module_path(module):
"""
Returns path of the given module (imports it and reads it from __file__)
"""
import webnotes.defs, os, os.path
try:
exec ('import ' + scrub(module)) in locals()
modules_path = eval(scrub(module) + '.__file__')
modules_path = os.path.sep.join(modules_path.split(os.path.sep)[:-1])
except ImportError, e:
# get module path by importing the module
modules_path = os.path.join(webnotes.defs.modules_path, scrub(module))
return modules_path
[docs]def switch_module(dt, dn, to, frm=None, export=None):
"""
Change the module of the given doctype, if export is true, then also export txt and copy
code files from src
"""
import os
webnotes.conn.sql("update `tab"+dt+"` set module=%s where name=%s", (to, dn))
if export:
export_doc(dt, dn)
# copy code files
if dt in ('DocType', 'Page', 'Search Criteria'):
from_path = os.path.join(get_module_path(frm), scrub(dt), scrub(dn), scrub(dn))
to_path = os.path.join(get_module_path(to), scrub(dt), scrub(dn), scrub(dn))
# make dire if exists
os.system('mkdir -p %s' % os.path.join(get_module_path(to), scrub(dt), scrub(dn)))
for ext in ('py','js','html','css'):
os.system('cp %s %s')