def create_site(site_name, install_erpnext, mysql_password, admin_password, key): verify_whitelisted_call() commands = [ "bench new-site --mariadb-root-password {mysql_password} --admin-password {admin_password} --no-mariadb-socket {site_name}" .format(site_name=site_name, admin_password=admin_password, mysql_password=mysql_password) ] if install_erpnext == "true": with open("apps.txt", "r") as f: app_list = f.read() if "erpnext" not in app_list: commands.append("bench get-app erpnext") commands.append("bench --site {site_name} install-app erpnext".format( site_name=site_name)) frappe.enqueue( "bench_manager.bench_manager.utils.run_command", commands=commands, doctype="Bench Settings", key=key, ) all_sites = safe_decode(check_output("ls")).strip("\n").split("\n") while site_name not in all_sites: time.sleep(2) print("waiting for site creation...") all_sites = safe_decode(check_output("ls")).strip("\n").split("\n") doc = frappe.get_doc({ "doctype": "Site", "site_name": site_name, "app_list": "frappe", "developer_flag": 1 }) doc.insert() frappe.db.commit()
def create_site(site_name, install_epaas, mysql_password, admin_password, key): verify_whitelisted_call() commands = [ "bench new-site --mariadb-root-password {mysql_password} --admin-password {admin_password} {site_name}" .format(site_name=site_name, admin_password=admin_password, mysql_password=mysql_password) ] if install_epaas == "true": with open('apps.txt', 'r') as f: app_list = f.read() if 'epaas' not in app_list: commands.append("bench get-app epaas") commands.append("bench --site {site_name} install-app epaas".format( site_name=site_name)) dataent.enqueue('bench_manager.bench_manager.utils.run_command', commands=commands, doctype="Bench Settings", key=key) all_sites = safe_decode(check_output("ls")).strip('\n').split('\n') while site_name not in all_sites: time.sleep(2) print("waiting for site creation...") all_sites = safe_decode(check_output("ls")).strip('\n').split('\n') doc = dataent.get_doc({ 'doctype': 'Site', 'site_name': site_name, 'app_list': 'dataent', 'developer_flag': 1 }) doc.insert() dataent.db.commit()
def get_installed_apps(self): list_apps = check_output(shlex.split( "bench --site {site_name} list-apps".format( site_name=self.site_name)), cwd='..') if 'dataent' not in safe_decode(list_apps): list_apps = "dataent" return safe_decode(list_apps).strip('\n').split('\n')
def update_app_details(self): pkg_info_file = os.path.join('..', 'apps', self.app_name, '{app_name}.egg-info'.format(app_name=self.app_name), 'PKG-INFO') if os.path.isfile(pkg_info_file): app_data_path = pkg_info_file with open(app_data_path, 'r') as f: app_data = f.readlines() app_data = dataent.as_unicode(''.join(app_data)).split('\n') if '' in app_data: app_data.remove('') app_data = [x+'\n' for x in app_data] for data in app_data: if 'Version:' in data: self.version = ''.join(re.findall('Version: (.*?)\\n', data)) elif 'Summary:' in data: self.app_description = ''.join(re.findall('Summary: (.*?)\\n', data)) elif 'Author:' in data: self.app_publisher = ''.join(re.findall('Author: (.*?)\\n', data)) elif 'Author-email:' in data: self.app_email = ''.join(re.findall('Author-email: (.*?)\\n', data)) self.app_title = self.app_name self.app_title = self.app_title.replace('-', ' ') self.app_title = self.app_title.replace('_', ' ') if os.path.isdir(os.path.join('..', 'apps', self.app_name, '.git')): self.current_git_branch = safe_decode(check_output("git rev-parse --abbrev-ref HEAD".split(), cwd=os.path.join('..', 'apps', self.app_name))).strip('\n') self.is_git_repo = True else: self.current_git_branch = None self.is_git_repo = False else: dataent.throw("Hey developer, the app you're trying to create an \ instance of doesn't actually exist. You could consider setting \ developer flag to 0 to actually create the app")
def get_remotes(docname): command = "git branch -r" remotes = safe_decode( check_output(shlex.split(command), cwd=os.path.join('..', 'apps', docname))).strip('\n').split('\n ') remotes = [remote for remote in remotes if 'HEAD' not in remote] return remotes
def get_remotes(docname): command = "git branch -r" remotes = (safe_decode( check_output(shlex.split(command), cwd=os.path.join("..", "apps", docname))).strip("\n").split("\n ")) remotes = [remote for remote in remotes if "HEAD" not in remote] return remotes
def get_installed_apps(self): all_sites = safe_decode(check_output("ls")).strip("\n").split("\n") retry = 0 while self.site_name not in all_sites and retry < 3: time.sleep(2) print("waiting for site creation...") retry += 1 all_sites = safe_decode(check_output("ls")).strip("\n").split("\n") if retry == 3 and self.site_name not in all_sites: list_apps = "frappe" else: list_apps = check_output( shlex.split("bench --site {site_name} list-apps".format( site_name=self.site_name)), cwd="..", ) if "frappe" not in safe_decode(list_apps): list_apps = "frappe" return safe_decode(list_apps).strip("\n").split("\n")
def update_backup_list(): all_sites = [] archived_sites = [] sites = [] for root, dirs, files in os.walk("../archived_sites/", topdown=True): archived_sites.extend(dirs) break archived_sites = ["../archived_sites/" + x for x in archived_sites] all_sites.extend(archived_sites) for root, dirs, files in os.walk("../sites/", topdown=True): for site in dirs: if os.path.isfile("../sites/{}/site_config.json".format(site)): sites.append(site) break sites = ["../sites/" + x for x in sites] all_sites.extend(sites) response = [] backups = [] for site in all_sites: backup_path = os.path.join(site, "private", "backups") try: backup_files = safe_decode( check_output( shlex.split("ls ./{backup_path}".format( backup_path=backup_path)))).strip('\n').split('\n') backup_files = [ file for file in backup_files if "database.sql" in file ] for backup_file in backup_files: inner_response = {} date_time_hash = backup_file.rsplit('_', 1)[0] file_path = backup_path + '/' + date_time_hash inner_response['site_name'] = site.split('/')[2] inner_response['date'] = get_date(date_time_hash) inner_response['time'] = get_time(date_time_hash) inner_response['stored_location'] = site.split('/')[1] inner_response['private_file_backup'] = os.path.isfile(backup_path+\ '/'+date_time_hash+"_private_files.tar") inner_response['public_file_backup'] = os.path.isfile(backup_path+\ '/'+date_time_hash+"_files.tar") inner_response['hash'] = get_hash(date_time_hash) inner_response['file_path'] = file_path[3:] response.append(inner_response) except: pass # frappe.msgprint('There are no backups to sync!') return response
def update_app_details(self): pkg_info_file = os.path.join( "..", "apps", self.app_name, "{app_name}.egg-info".format(app_name=self.app_name), "PKG-INFO", ) if os.path.isfile(pkg_info_file): app_data_path = pkg_info_file with open(app_data_path, "r") as f: app_data = f.readlines() app_data = frappe.as_unicode("".join(app_data)).split("\n") if "" in app_data: app_data.remove("") app_data = [x + "\n" for x in app_data] for data in app_data: if "Version:" in data: self.version = "".join( re.findall("Version: (.*?)\\n", data)) elif "Summary:" in data: self.app_description = "".join( re.findall("Summary: (.*?)\\n", data)) elif "Author:" in data: self.app_publisher = "".join( re.findall("Author: (.*?)\\n", data)) elif "Author-email:" in data: self.app_email = "".join( re.findall("Author-email: (.*?)\\n", data)) self.app_title = self.app_name self.app_title = self.app_title.replace("-", " ") self.app_title = self.app_title.replace("_", " ") if os.path.isdir(os.path.join("..", "apps", self.app_name, ".git")): self.current_git_branch = safe_decode( check_output( "git rev-parse --abbrev-ref HEAD".split(), cwd=os.path.join("..", "apps", self.app_name), )).strip("\n") self.is_git_repo = True else: self.current_git_branch = None self.is_git_repo = False else: frappe.throw("Hey developer, the app you're trying to create an \ instance of doesn't actually exist. You could consider setting \ developer flag to 0 to actually create the app")
def update_git_details(self): self.frappe_git_branch = safe_decode( check_output("git rev-parse --abbrev-ref HEAD".split(), cwd=os.path.join('..', 'apps', 'frappe'))).strip('\n')
def update_git_details(self): self.frappe_git_branch = safe_decode( check_output("git rev-parse --abbrev-ref HEAD".split(), cwd=os.path.join("..", "apps", "frappe"))).strip("\n")
def create_site(site_name, install_erpnext, mysql_password, admin_password, key, email=None, doc=None): verify_whitelisted_call() commands = [ "bench new-site --mariadb-root-password {mysql_password} --admin-password {admin_password} {site_name}" .format(site_name=site_name, admin_password=admin_password, mysql_password=mysql_password) ] if install_erpnext == "true": with open('apps.txt', 'r') as f: app_list = f.read() if 'erpnext' not in app_list: commands.append("bench get-app erpnext") commands.append("bench --site {site_name} install-app erpnext".format( site_name=site_name)) if 'lite' in app_list: commands.append("bench --site {site_name} install-app lite".format( site_name=site_name)) if 'mawred_theme' in app_list: commands.append( "bench --site {site_name} install-app mawred_theme".format( site_name=site_name)) sits_list = frappe.get_list("Site Request", {"email": email}) if sits_list: doc = frappe.get_doc("Site Request", {"email": email}) a = "bench --site pas.com.sa execute bench_manager.api.add_data_to_site --kwargs \"{'site':'" + site_name + "','full_name': '" + doc.full_name + "','company_name': '" + doc.association_name + "','email': '" + doc.email + "'}\"" commands.append(a) if 'loginapp' in app_list: commands.append( "bench --site {site_name} install-app loginapp".format( site_name=site_name)) settings = frappe.get_single('SAAS Settings') domain = settings.main_domain alias = settings.alias_domain alias_site_name = doc.subdomain + "." + alias commands.append( "bench setup add-domain {site_name} --site {site_name} --ssl-certificate /etc/letsencrypt/live/{domain}/fullchain.pem --ssl-certificate-key /etc/letsencrypt/live/{domain}/privkey.pem " .format(site_name=site_name, domain=domain)) if alias: commands.append( "bench setup add-domain {alias_site_name} --site {site_name} --ssl-certificate /etc/letsencrypt/live/{alias_domain}/fullchain.pem --ssl-certificate-key /etc/letsencrypt/live/{alias_domain}/privkey.pem " .format(site_name=site_name, alias_domain=alias, alias_site_name=alias_site_name)) commands.append("bench setup nginx --yes") commands.append("sudo service nginx restart") frappe.enqueue('bench_manager.bench_manager.utils.run_command', commands=commands, doctype="Bench Settings", key=key, timeout=1200) all_sites = safe_decode(check_output("ls")).strip('\n').split('\n') while site_name not in all_sites: time.sleep(2) print("waiting for site creation...") all_sites = safe_decode(check_output("ls")).strip('\n').split('\n') doc = frappe.get_doc({ 'doctype': 'Site', 'site_name': site_name, 'app_list': 'frappe', 'developer_flag': 1 }) doc.insert() frappe.db.commit() if email: sits_list = frappe.get_list("Site Request", {"email": email}) if sits_list: site = frappe.get_doc("Site Request", {"email": email}) email_args = { "recipients": site.email, "sender": None, "subject": "Your New site created " + site_name, "message": "site :" + site_name + "<br>" + "user :"******"administrator" + "<br>" + "passwored :" + admin_password, "now": True, } enqueue(method=frappe.sendmail, queue='short', timeout=300, is_async=True, **email_args)