def am_runtests(annroot, options): """ Run Annalist server tests. annroot is the root directory for the annalist software installation. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ options.configuration = "runtests" testsettings = am_get_settings(annroot, "/nouser/", options) if not testsettings: print("Settings not found (%s)"%("runtests"), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) > 0: print("Unexpected arguments for %s: (%s)"%(options.command, " ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS status = am_errors.AM_SUCCESS log.debug("annalist_root: %s"%(annroot)) with ChangeCurrentDir(annroot): # For some reason, tests are not discovered unless run from here cmd = "test" subprocess_command = ( "django-admin %s --pythonpath=%s --settings=%s --top-level-directory=%s"% (cmd, annroot, testsettings.modulename, annroot) ) log.debug("am_initialize subprocess: %s"%subprocess_command) # OLD: status = os.system(subprocess_command) status = subprocess.call(subprocess_command.split()) log.debug("am_initialize subprocess status: %s"%status) return status
def am_sitedirectory(annroot, userhome, options): """ Print name of Annalist site directory to standard output annroot is the root directory for the Annalist software installation. userhome is the home directory for the host system user issuing the command. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)" % (options.configuration), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) > 0: print("Unexpected arguments for %s: (%s)" % (options.command, " ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS status = am_errors.AM_SUCCESS with SuppressLogging(logging.INFO): sitesettings = importlib.import_module(settings.modulename) sitedirectory = sitesettings.BASE_SITE_DIR print(sitedirectory) # with open(sitedirectory, "r") as logfile: # shutil.copyfileobj(logfile, sys.stdout) return status
def am_runtests(annroot, options): """ Run Annalist server tests. annroot is the root directory for the annalist software installation. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ options.configuration = "runtests" testsettings = am_get_settings(annroot, "/nouser/", options) if not testsettings: print("Settings not found (%s)" % ("runtests"), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) > 0: print("Unexpected arguments for %s: (%s)" % (options.command, " ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS status = am_errors.AM_SUCCESS log.debug("annalist_root: %s" % (annroot)) with ChangeCurrentDir(annroot): # For some reason, tests are not discovered unless run from here cmd = "test" subprocess_command = ( "django-admin %s --pythonpath=%s --settings=%s --top-level-directory=%s" % (cmd, annroot, testsettings.modulename, annroot)) log.debug("am_initialize subprocess: %s" % subprocess_command) # OLD: status = os.system(subprocess_command) status = subprocess.call(subprocess_command.split()) log.debug("am_initialize subprocess status: %s" % status) return status
def am_settingsmodule(annroot, userhome, options): """ Print name of Annalist settings module to standard output annroot is the root directory for the Annalist software installation. userhome is the home directory for the host system user issuing the command. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)" % (options.configuration), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) > 0: print("Unexpected arguments for %s: (%s)" % (options.command, " ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS status = am_errors.AM_SUCCESS settingsmodule = settings.modulename print(settingsmodule) return status
def am_runserver(annroot, userhome, options): """ Run Annalist server. annroot is the root directory for the Annalist software installation. userhome is the home directory for the host system user issuing the command. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)" % (options.configuration), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) > 0: print("Unexpected arguments for %s: (%s)" % (options.command, " ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS status = am_errors.AM_SUCCESS with ChangeCurrentDir(annroot): cmd = "runserver 0.0.0.0:8000" subprocess_command = "django-admin %s --pythonpath=%s --settings=%s" % ( cmd, annroot, settings.modulename) log.debug("am_initialize subprocess: %s" % subprocess_command) status = subprocess.call(subprocess_command.split()) log.debug("am_initialize subprocess status: %s" % status) return status
def get_settings_site(annroot, userhome, options): """ Get settings and site data based on command line options provided returns: (status, settings, site) where 'settings' and/or 'site' are None if not found. """ status = am_errors.AM_SUCCESS settings = am_get_settings(annroot, userhome, options) site = None if not settings: print("Settings not found (%s)" % (options.configuration), file=sys.stderr) status = am_errors.AM_NOSETTINGS if status == am_errors.AM_SUCCESS: sitesettings = am_get_site_settings(annroot, userhome, options) if not sitesettings: print("Site settings not found (%s)" % (options.configuration), file=sys.stderr) status = am_errors.AM_NOSETTINGS if status == am_errors.AM_SUCCESS: site = am_get_site(sitesettings) return (status, settings, site)
def am_initialize(annroot, userhome, userconfig, options): """ Initialize Annalist server data, database, etc. annroot is the root directory for theannalist software installation. userhome is the home directory for the host system user issuing the initialize command. userconfig is the directory used for user-specific configuration files. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)"%(options.configuration), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) != 0: print("Unexpected arguments for initialize: (%s)"%(" ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS # Get config base directory from settings, and make sure it exists with SuppressLogging(logging.INFO): sitesettings = importlib.import_module(settings.modulename) providersdir = os.path.join(sitesettings.CONFIG_BASE, "providers") databasedir = os.path.dirname(sitesettings.DATABASES['default']['NAME']) ensure_dir(providersdir) ensure_dir(databasedir) # Initialze the database status = am_errors.AM_SUCCESS subprocess_command = "django-admin migrate --pythonpath=%s --settings=%s"%(annroot, settings.modulename) log.debug("am_initialize subprocess: %s"%subprocess_command) # OLD: status = os.system(subprocess_command) status = subprocess.call(subprocess_command.split()) log.debug("am_initialize subprocess status: %s"%status) return status
def am_sitedirectory(annroot, userhome, options): """ Print name of Annalist site directory to standard output annroot is the root directory for the Annalist software installation. userhome is the home directory for the host system user issuing the command. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)"%(options.configuration), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) > 0: print("Unexpected arguments for %s: (%s)"%(options.command, " ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS status = am_errors.AM_SUCCESS with SuppressLogging(logging.INFO): sitesettings = importlib.import_module(settings.modulename) sitedirectory = sitesettings.BASE_SITE_DIR print(sitedirectory) # with open(sitedirectory, "r") as logfile: # shutil.copyfileobj(logfile, sys.stdout) return status
def am_runserver(annroot, userhome, options): """ Run Annalist server. annroot is the root directory for the Annalist software installation. userhome is the home directory for the host system user issuing the command. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)"%(options.configuration), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) > 0: print("Unexpected arguments for %s: (%s)"%(options.command, " ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS status = am_errors.AM_SUCCESS with ChangeCurrentDir(annroot): cmd = "runserver 0.0.0.0:8000" subprocess_command = "django-admin %s --pythonpath=%s --settings=%s"%(cmd, annroot, settings.modulename) log.debug("am_initialize subprocess: %s"%subprocess_command) status = subprocess.call(subprocess_command.split()) log.debug("am_initialize subprocess status: %s"%status) return status
def get_site_settings(annroot, userhome, options): """ Access site settings, set up correspondingh django configuration and return the settings module """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)"%(options.configuration), file=sys.stderr) return None with SuppressLogging(logging.INFO): os.environ['DJANGO_SETTINGS_MODULE'] = settings.modulename django.setup() site_settings = importlib.import_module(settings.modulename) return site_settings
def _x_get_site_settings(annroot, userhome, options): """ Access site settings, set up corresponding django configuration and return the settings module """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)"%(options.configuration), file=sys.stderr) return None with SuppressLogging(logging.INFO): os.environ['DJANGO_SETTINGS_MODULE'] = settings.modulename django.setup() site_settings = importlib.import_module(settings.modulename) return site_settings
def am_updatesite(annroot, userhome, options): """ Update site data, leaving user data alone annroot is the root directory for the Annalist software installation. userhome is the home directory for the host system user issuing the command. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)" % (options.configuration), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) > 0: print("Unexpected arguments for %s: (%s)" % (options.command, " ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS status = am_errors.AM_SUCCESS with SuppressLogging(logging.INFO): sitesettings = importlib.import_module(settings.modulename) sitebasedir = os.path.join(sitesettings.BASE_DATA_DIR, "annalist_site") # Test if site exists if not os.path.exists(sitebasedir): print("Site %s not found" % (sitebasedir), file=sys.stderr) return am_errors.AM_NOTEXISTS # --- Copy built-in types and views data to target area site_layout = Layout(sitesettings.BASE_DATA_DIR) sitedatasrc = os.path.join(annroot, "annalist/sitedata") sitedatatgt = os.path.join(sitebasedir, site_layout.SITEDATA_DIR) print("Copy Annalist site data from %s to %s" % (sitedatasrc, sitedatatgt)) for sdir in ("types", "lists", "views", "groups", "fields", "enums"): s = os.path.join(sitedatasrc, sdir) d = os.path.join(sitedatatgt, sdir) print("- %s => %s" % (sdir, d)) replacetree(s, d) for sdir in ("users", ): s = os.path.join(sitedatasrc, sdir) d = os.path.join(sitedatatgt, sdir) print("- %s +> %s" % (sdir, d)) updatetree(s, d) return status
def am_settingsmodule(annroot, userhome, options): """ Print name of Annalist settings module to standard output annroot is the root directory for the Annalist software installation. userhome is the home directory for the host system user issuing the command. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)"%(options.configuration), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) > 0: print("Unexpected arguments for %s: (%s)"%(options.command, " ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS status = am_errors.AM_SUCCESS settingsmodule = settings.modulename print(settingsmodule) return status
def get_settings_site(annroot, userhome, options): """ Get settings and site data based on command line options provided returns: (status, settings, site) where 'settings' and/or 'site' are None if not found. """ status = am_errors.AM_SUCCESS settings = am_get_settings(annroot, userhome, options) site = None if not settings: print("Settings not found (%s)"%(options.configuration), file=sys.stderr) status = am_errors.AM_NOSETTINGS if status == am_errors.AM_SUCCESS: sitesettings = am_get_site_settings(annroot, userhome, options) if not sitesettings: print("Site settings not found (%s)"%(options.configuration), file=sys.stderr) status = am_errors.AM_NOSETTINGS if status == am_errors.AM_SUCCESS: site = am_get_site(sitesettings) return (status, settings, site)
def am_createsite(annroot, userhome, options): """ Create Annalist empty site data. annroot is the root directory for the Annalist software installation. userhome is the home directory for the host system user issuing the command. options contains options parsed from the command line. returns 0 if all is well, or a non-zero status code. This value is intended to be used as an exit status code for the calling program. """ settings = am_get_settings(annroot, userhome, options) if not settings: print("Settings not found (%s)" % (options.configuration), file=sys.stderr) return am_errors.AM_NOSETTINGS options.configuration = "runtests" testsettings = am_get_settings(annroot, "/nouser/", options) if not testsettings: print("Settings not found (%s)" % ("runtests"), file=sys.stderr) return am_errors.AM_NOSETTINGS if len(options.args) > 0: print("Unexpected arguments for %s: (%s)" % (options.command, " ".join(options.args)), file=sys.stderr) return am_errors.AM_UNEXPECTEDARGS status = am_errors.AM_SUCCESS emptysitedir = os.path.join(annroot, "sampledata/empty/annalist_site") with SuppressLogging(logging.INFO): sitesettings = importlib.import_module(settings.modulename) sitebasedir = os.path.join(sitesettings.BASE_DATA_DIR, "annalist_site") # Test if old site exists if os.path.exists(sitebasedir): if options.force: # --- Remove old site data from target area print("Removing old Annalist site at %s" % (sitebasedir)) log.info("rmtree: %s" % (sitebasedir)) removetree(sitebasedir) else: print( "Old data already exists at %s (use --force lor -f to overwrite)" % (sitebasedir), file=sys.stderr) return am_errors.AM_EXISTS # --- Copy empty site data to target area print("Initializing Annalist site in %s" % (sitebasedir)) log.info("copytree: %s to %s" % (emptysitedir, sitebasedir)) shutil.copytree(emptysitedir, sitebasedir) # --- Copy built-in types and views data to target area site_layout = Layout(sitesettings.BASE_DATA_DIR) sitedatasrc = os.path.join(annroot, "annalist/sitedata") sitedatatgt = os.path.join(sitebasedir, site_layout.SITEDATA_DIR) print("Copy Annalist site data from %s to %s" % (sitedatasrc, sitedatatgt)) for sdir in ("types", "lists", "views", "groups", "fields", "enums", "users"): s = os.path.join(sitedatasrc, sdir) d = os.path.join(sitedatatgt, sdir) print("- %s -> %s" % (sdir, d)) shutil.copytree(s, d) return status