def check_local_db_connection(log): """Verify that the local Postgres server is running.""" try: log("Checking your local Postgres database connection...") db.check_connection() except Exception: log("There was a problem connecting!") raise
def setup_experiment(log, debug=True, verbose=False, app=None, exp_config=None): """Checks the experiment's python dependencies, then prepares a temp directory with files merged from the custom experiment and Dallinger. The resulting directory includes all the files necessary to deploy to Heroku. """ # Verify that the Postgres server is running. try: db.check_connection() except Exception: log("There was a problem connecting to the Postgres database!") raise # Check that the demo-specific requirements are satisfied. try: with open("requirements.txt", "r") as f: dependencies = [r for r in f.readlines() if r[:3] != "-e "] except (OSError, IOError): dependencies = [] pkg_resources.require(dependencies) # Generate a unique id for this experiment. from dallinger.experiment import Experiment generated_uid = public_id = Experiment.make_uuid(app) # If the user provided an app name, use it everywhere that's user-facing. if app: public_id = str(app) log("Experiment id is " + public_id + "") # Load and update the config config = get_config() if not config.ready: config.load() # if exp_config: config.extend(exp_config) config.extend({"id": six.text_type(generated_uid)}) temp_dir = assemble_experiment_temp_dir(config) log("Deployment temp directory: {}".format(temp_dir), chevrons=False) # Zip up the temporary directory and place it in the cwd. if not debug: log("Freezing the experiment package...") shutil.make_archive( os.path.join(os.getcwd(), "snapshots", public_id + "-code"), "zip", temp_dir) return (public_id, temp_dir)
def setup_experiment(log, debug=True, verbose=False, app=None, exp_config=None): """Checks the experiment's python dependencies, then prepares a temp directory with files merged from the custom experiment and Dallinger. The resulting directory includes all the files necessary to deploy to Heroku. """ # Verify that the Postgres server is running. try: db.check_connection() except Exception: log("There was a problem connecting to the Postgres database!") raise # Check that the demo-specific requirements are satisfied. try: with open("requirements.txt", "r") as f: dependencies = [r for r in f.readlines() if r[:3] != "-e "] except (OSError, IOError): dependencies = [] pkg_resources.require(dependencies) # Generate a unique id for this experiment. from dallinger.experiment import Experiment experiment_uid = heroku_app_id = Experiment.make_uuid(app) log("Experiment UID: {}".format(experiment_uid)) # Load and update the config config = get_config() if not config.ready: config.load() # if exp_config: config.extend(exp_config) # If the user provided an app name, store it. We'll use it as the basis for # the Heroku app ID. We still have a fair amount of ambiguity around what # this value actually represents (it's not used as _only_ the Heroku app ID). if app: heroku_app_id = str(app) log("Using custom Heroku ID root: {}".format(heroku_app_id)) config.extend({ "id": six.text_type(experiment_uid), "heroku_app_id_root": six.text_type(heroku_app_id), }) if not config.get("dashboard_password", None): config.set("dashboard_password", fake.password(length=20, special_chars=False)) temp_dir = assemble_experiment_temp_dir(config) log("Deployment temp directory: {}".format(temp_dir), chevrons=False) # Zip up the temporary directory and place it in the cwd. if not debug: log("Freezing the experiment package...") shutil.make_archive( os.path.join(os.getcwd(), "snapshots", heroku_app_id + "-code"), "zip", temp_dir, ) return (heroku_app_id, temp_dir)