|
- # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
- # MIT License. See license.txt
-
- from __future__ import unicode_literals
- """
- Sync's doctype and docfields from txt files to database
- perms will get synced only if none exist
- """
- import webnotes
- import os, sys
- from webnotes.modules.import_file import import_file_by_path
- from webnotes.utils import get_path, cstr
-
- def sync_all(force=0):
- for app in webnotes.get_installed_apps():
- sync_for(app, force)
- webnotes.clear_cache()
-
- def sync_for(app_name, force=0, sync_everything = False, verbose=False):
- for module_name in webnotes.local.app_modules[app_name]:
- folder = os.path.dirname(webnotes.get_module(app_name + "." + module_name).__file__)
- walk_and_sync(folder, force, sync_everything, verbose=verbose)
-
- def walk_and_sync(start_path, force=0, sync_everything = False, verbose=False):
- """walk and sync all doctypes and pages"""
-
- modules = []
-
- document_type = ['doctype', 'page', 'report']
-
- for path, folders, files in os.walk(start_path):
- # sort folders so that doctypes are synced before pages or reports
-
- for dontwalk in (".git", "locale", "public"):
- if dontwalk in folders:
- folders.remove(dontwalk)
-
- folders.sort()
-
- if sync_everything or (os.path.basename(os.path.dirname(path)) in document_type):
- for f in files:
- f = cstr(f)
- if f.endswith(".txt"):
- doc_name = f.split(".txt")[0]
- if doc_name == os.path.basename(path):
-
- module_name = path.split(os.sep)[-3]
- doctype = path.split(os.sep)[-2]
- name = path.split(os.sep)[-1]
-
- if import_file_by_path(os.path.join(path, f), force=force) and verbose:
- print module_name + ' | ' + doctype + ' | ' + name
-
- webnotes.conn.commit()
-
- return modules
|