Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
 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')
Exemple #4
0
	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")
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
    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")
Exemple #8
0
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
Exemple #9
0
    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")
Exemple #10
0
 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")
Exemple #12
0
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)