def handle(self, website=None, sourcedir='static', **options): if not options['noinput'] and ask_boolean("Are you sure? This will override all files remotely!", default=True) == 'false': return printer = Printer(int(options['verbosity']), logfile='djeese.log') if not website: raise CommandError("You must provide the name of the website from which you want to push the static files as first argument") if not os.path.exists(sourcedir): raise CommandError("Source directory %r not found" % sourcedir) url = self.get_absolute_url('/api/v1/io/static/push/') username, password = self.get_auth(options['noinput']) session = requests.session() login_url = self.get_absolute_url(LOGIN_PATH) response = session.post(login_url, {'username': username, 'password': password}) if response.status_code != 204: printer.error("Login failed") return data = {'name': website} files = {'static': self.build_tarball(sourcedir, printer)} response = session.post(url, data=data, files=files) if response.status_code == 204: printer.always("Sucess") elif response.status_code == 400: self.handle_bad_request(response, printer) printer.always("Push failed: Bad request") elif response.status_code == 403: printer.error("Authentication failed") printer.always("Push failed") elif response.status_code == 502: printer.error("Temporarily unavailable") printer.always("Push failed") else: printer.error("Unexpected response: %s" % response.status_code) printer.log_only(response.content) printer.always("Push failed, check djeese.log for more details")
def handle(self, website=None, outputdir='static', **options): if not options['noinput'] and ask_boolean("Are you sure? This will override all files in %s!" % outputdir, default=True) == 'false': return printer = Printer(int(options['verbosity']), logfile='djeese.log') if not website: raise CommandError("You must provide the name of the website from which you want to clone the static files as first argument") url = self.get_absolute_url('/api/v1/io/static/clone/') username, password = self.get_auth(options['noinput']) session = requests.session() login_url = self.get_absolute_url(LOGIN_PATH) response = session.post(login_url, {'username': username, 'password': password}) if response.status_code != 204: printer.error("Login failed") return data = {'name': website} response = session.get(url, params=data) if response.status_code == 200: self.finish_clone(response, outputdir, printer) elif response.status_code == 400: self.handle_bad_request(response, printer) printer.always("Clone failed: Bad request") elif response.status_code == 403: printer.error("Authentication failed") printer.always("Clone failed") elif response.status_code == 502: printer.error("Temporarily unavailable") printer.always("Clone failed") else: printer.error("Unexpected response: %s" % response.status_code) printer.log_only(response.content) printer.always("Clone failed, check djeese.log for more details")
def run(self, boilerplatefile, session, printer, **options): printer = Printer(int(options['verbosity']), logfile='djeese.log') config = BoilerplateConfiguration(printer=printer) config.read(boilerplatefile) bundle = bundle_boilerplate(config) boilerplatename = config['boilerplate']['name'] response = self.upload(boilerplatename, bundle, session, printer) if response.status_code == 201: printer.always("Upload successful (created)") elif response.status_code == 204: printer.always("Upload successful (updated)") elif response.status_code == 400: self.handle_bad_request(response, printer) printer.always("Upload failed") elif response.status_code == 403: printer.error("Authentication failed") printer.always("Upload failed") self.clear_auth() elif response.status_code == 502: printer.error("Temporarily unavailable") printer.always("Upload failed") else: printer.error("Unexpected response: %s" % response.status_code) printer.log_only(response.content) printer.always("Upload failed, check djeese.log for more details")
def handle(self, boilerplatefile=None, **options): if not boilerplatefile: raise CommandError("You must provide the path to your boilerplatefile file as first argument") if not os.path.exists(boilerplatefile): raise CommandError("Could not find boilerplatefile at %r" % boilerplatefile) printer = Printer(int(options['verbosity']), logfile='djeese.log') session = self.login(printer, options['noinput']) if not session: return self.run(boilerplatefile, session, printer, **options)
def run_from_argv(self, argv): """ Given arguments, run this command. """ parser = self.create_parser(argv[0], argv[1]) options, args = parser.parse_args(argv[2:]) self.printer = Printer(int(options.verbosity)) try: self.handle(*args, **options.__dict__) except CommandError, e: sys.stderr.write('%s\n' % e) sys.exit(1)
def handle(self, url=None, staticfolder='static', **options): if not url: raise CommandError( "You must provide the url to your website file as first argument" ) if not os.path.exists(staticfolder): raise CommandError("Static folder %r not found." % staticfolder) server_address = ('', int(options['port'])) printer = Printer(int(options['verbosity'])) print "Open http://localhost:%s in your browser" % options['port'] print "Use ctrl+c to stop the server" httpd = StaticServer(server_address, StaticHandler, url, staticfolder, printer) try: httpd.serve_forever() except KeyboardInterrupt: printer.always("Server shut down")
def handle(self, setupfile=None, appfile=None, **options): if not setupfile: raise CommandError( "You must provide the path to your apps setup.py as first argument" ) if not appfile: raise CommandError( "You must provide the path to your app file as second argument" ) if not os.path.exists(setupfile): raise CommandError("Could not find setup.py at %r" % setupfile) if not os.path.exists(appfile): raise CommandError("Could not find app file at %r" % appfile) printer = Printer(int(options['verbosity']), logfile='djeese.log') session = self.login(printer, options['noinput']) if not session: return self.run(setupfile, appfile, session, printer, **options)
def handle(self, website=None, outputdir='static', **options): if not options['noinput'] and ask_boolean( "Are you sure? This will override all files in %s!" % outputdir, default=True) == 'false': return printer = Printer(int(options['verbosity']), logfile='djeese.log') if not website: raise CommandError( "You must provide the name of the website from which you want to clone the static files as first argument" ) url = self.get_absolute_url('/api/v1/io/static/clone/') session = self.login(printer, options['noinput']) if not session: return data = {'name': website} response = session.get(url, params=data) if response.status_code == 200: stage = tempfile.mkdtemp() try: self.finish_clone(response, outputdir, stage, printer) finally: shutil.rmtree(stage, ignore_errors=True) elif response.status_code == 400: self.handle_bad_request(response, printer) printer.always("Clone failed: Bad request") elif response.status_code == 403: printer.error("Authentication failed") printer.always("Clone failed") elif response.status_code == 502: printer.error("Temporarily unavailable") printer.always("Clone failed") else: printer.error("Unexpected response: %s" % response.status_code) printer.log_only(response.content) printer.always("Clone failed, check djeese.log for more details")
def run(self, setupfile, appfile, username, password, **options): printer = Printer(int(options['verbosity']), logfile='djeese.log') config = AppConfiguration(printer=printer) config.read(appfile) bundle = bundle_app(setupfile, config) appname = config['app']['name'] response = self.upload(appname, bundle, username, password) if response.status_code == 201: printer.always("Upload successful (created)") elif response.status_code == 204: printer.always("Upload successful (updated)") elif response.status_code == 400: self.handle_bad_request(response, printer) printer.always("Upload failed") elif response.status_code == 403: printer.error("Authentication failed") printer.always("Upload failed") elif response.status_code == 502: printer.error("Temporarily unavailable") printer.always("Upload failed") else: printer.error("Unexpected response: %s" % response.status_code) printer.log_only(response.content) printer.always("Upload failed, check djeese.log for more details")
def __init__(self, verbosity=1, printer=None): self.parser = SafeConfigParser() self.printer = printer or Printer(verbosity)