Refactored
This commit is contained in:
94
wo/cli/plugins/sync.py
Normal file
94
wo/cli/plugins/sync.py
Normal file
@@ -0,0 +1,94 @@
|
||||
from cement.core.controller import CementBaseController, expose
|
||||
from cement.core import handler, hook
|
||||
from wo.core.fileutils import WOFileUtils
|
||||
from wo.cli.plugins.sitedb import *
|
||||
from wo.core.mysql import *
|
||||
from wo.core.logging import Log
|
||||
|
||||
|
||||
def wo_sync_hook(app):
|
||||
pass
|
||||
|
||||
|
||||
class WOSyncController(CementBaseController):
|
||||
class Meta:
|
||||
label = 'sync'
|
||||
stacked_on = 'base'
|
||||
stacked_type = 'nested'
|
||||
description = 'synchronize the WordOps database'
|
||||
|
||||
@expose(hide=True)
|
||||
def default(self):
|
||||
self.sync()
|
||||
|
||||
@expose(hide=True)
|
||||
def sync(self):
|
||||
"""
|
||||
1. reads database information from wp/wo-config.php
|
||||
2. updates records into wo database accordingly.
|
||||
"""
|
||||
Log.info(self, "Synchronizing wo database, please wait...")
|
||||
sites = getAllsites(self)
|
||||
if not sites:
|
||||
pass
|
||||
for site in sites:
|
||||
if site.site_type in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']:
|
||||
wo_site_webroot = site.site_path
|
||||
# Read config files
|
||||
configfiles = glob.glob(wo_site_webroot + '/*-config.php')
|
||||
|
||||
#search for wp-config.php inside htdocs/
|
||||
if not configfiles:
|
||||
Log.debug(self, "Config files not found in {0}/ "
|
||||
.format(wo_site_webroot))
|
||||
if site.site_type != 'mysql':
|
||||
Log.debug(self, "Searching wp-config.php in {0}/htdocs/ "
|
||||
.format(wo_site_webroot))
|
||||
configfiles = glob.glob(wo_site_webroot + '/htdocs/wp-config.php')
|
||||
|
||||
if configfiles:
|
||||
if WOFileUtils.isexist(self, configfiles[0]):
|
||||
wo_db_name = (WOFileUtils.grep(self, configfiles[0],
|
||||
'DB_NAME').split(',')[1]
|
||||
.split(')')[0].strip().replace('\'', ''))
|
||||
wo_db_user = (WOFileUtils.grep(self, configfiles[0],
|
||||
'DB_USER').split(',')[1]
|
||||
.split(')')[0].strip().replace('\'', ''))
|
||||
wo_db_pass = (WOFileUtils.grep(self, configfiles[0],
|
||||
'DB_PASSWORD').split(',')[1]
|
||||
.split(')')[0].strip().replace('\'', ''))
|
||||
wo_db_host = (WOFileUtils.grep(self, configfiles[0],
|
||||
'DB_HOST').split(',')[1]
|
||||
.split(')')[0].strip().replace('\'', ''))
|
||||
|
||||
# Check if database really exist
|
||||
try:
|
||||
if not WOMysql.check_db_exists(self, wo_db_name):
|
||||
# Mark it as deleted if not exist
|
||||
wo_db_name = 'deleted'
|
||||
wo_db_user = 'deleted'
|
||||
wo_db_pass = 'deleted'
|
||||
except StatementExcecutionError as e:
|
||||
Log.debug(self, str(e))
|
||||
except Exception as e:
|
||||
Log.debug(self, str(e))
|
||||
|
||||
if site.db_name != wo_db_name:
|
||||
# update records if any mismatch found
|
||||
Log.debug(self, "Updating wo db record for {0}"
|
||||
.format(site.sitename))
|
||||
updateSiteInfo(self, site.sitename,
|
||||
db_name=wo_db_name,
|
||||
db_user=wo_db_user,
|
||||
db_password=wo_db_pass,
|
||||
db_host=wo_db_host)
|
||||
else:
|
||||
Log.debug(self, "Config files not found for {0} "
|
||||
.format(site.sitename))
|
||||
|
||||
|
||||
def load(app):
|
||||
# register the plugin class.. this only happens if the plugin is enabled
|
||||
handler.register(WOSyncController)
|
||||
# register a hook (function) to run after arguments are parsed.
|
||||
hook.register('post_argument_parsing', wo_sync_hook)
|
||||
Reference in New Issue
Block a user