Beispiel #1
0
def usage(args):
    """List this help"""
    if args:
        std_error_message('ERROR: ' + args + '\n')
    for key in sorted(COMMANDS):
        std_error_message('%10s: %s' % (key, COMMANDS[key].__doc__.strip()))
    sys.exit(1)
Beispiel #2
0
def usage(args):
    """List this help"""
    if args:
        std_error_message('ERROR: ' + args + '\n')
    for key in sorted(COMMANDS):
        std_error_message('%10s: %s' % (key, COMMANDS[key].__doc__.strip()))
    sys.exit(1)
Beispiel #3
0
def start_server(config):
    """
    Start a simple webserver, from ``wsgiref``, to run our app.
    """

    import sys
    from wsgiref.simple_server import make_server, WSGIRequestHandler

    class NoLogRequestHandler(WSGIRequestHandler):
        def log_request(self, code='-', size='-'):
            pass

    hostname = config['server_host']['host']
    port = int(config['server_host']['port'])
    scheme = config['server_host']['scheme']
    httpd = make_server(hostname, port, load_app(),
            handler_class=NoLogRequestHandler)

    LOGGER.debug('starting wsgi server at %s://%s:%s',
            scheme, hostname, port)
    std_error_message("starting wsgi server at %s://%s:%s"
            % (scheme, hostname, port))
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        sys.exit(0)
Beispiel #4
0
def usage(args):
    """List this help"""
    if args:
        std_error_message("ERROR: " + args + "\n")
    for key in sorted(COMMANDS):
        std_error_message("%10s: %s" % (key, COMMANDS[key].description))
    sys.exit(1)
Beispiel #5
0
def usage(*args):
    """List this help"""
    if args:
        std_error_message('ERROR: ' + ' '.join(args) + '\n')
    for key in sorted(COMMANDS):
        std_error_message('%10s: %s' % (key, COMMANDS[key].description))
    sys.exit(1)
Beispiel #6
0
def start_server(config):
    """
    Start a simple webserver, from ``wsgiref``, to run our app.
    """

    import sys
    from wsgiref.simple_server import make_server, WSGIRequestHandler

    class NoLogRequestHandler(WSGIRequestHandler):
        def log_request(self, code='-', size='-'):
            pass

    hostname = config['server_host']['host']
    port = int(config['server_host']['port'])
    scheme = config['server_host']['scheme']
    httpd = make_server(hostname,
                        port,
                        load_app(),
                        handler_class=NoLogRequestHandler)

    LOGGER.debug('starting wsgi server at %s://%s:%s', scheme, hostname, port)
    std_error_message("starting wsgi server at %s://%s:%s" %
                      (scheme, hostname, port))
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        sys.exit(0)
def cache_tiddlers(package_name):
    """
    Stores instance tiddlers in the package.

    reads store_contents from <package>.instance

    tiddler files are stored in <package>/resources/store
    """
    instance_module = __import__('%s.instance' % package_name, None, None,
        ['instance'])
    store_contents = instance_module.store_contents

    target_store = Store('tiddlywebplugins.pkgstore',
            {'package': package_name, 'read_only': False}, {})

    sources = {}
    for bag, uris in store_contents.items():
        sources[bag] = []
        for uri in uris:
            if uri.endswith('.recipe'):
                urls = recipe_to_urls(uri)
                sources[bag].extend(urls)
            else:
                sources[bag].append(uri)

    for bag_name, uris in sources.items():
        bag = Bag(bag_name)
        target_store.put(bag)

        for uri in uris:
            std_error_message('retrieving %s' % uri)
            tiddler = url_to_tiddler(uri)
            tiddler.bag = bag.name
            target_store.put(tiddler)
Beispiel #8
0
def start_cherrypy():
    """
    Start a cherrypy webserver to run our app.
    """
    from cherrypy import wsgiserver
    hostname = config['server_host']['host']
    port = int(config['server_host']['port'])
    app = load_app(prefix=config['server_prefix'])
    server = wsgiserver.CherryPyWSGIServer((hostname, port), app)
    try:
        logging.debug('starting cherrypy at %s:%s', hostname, port)
        std_error_message("Starting CherryPy at %s:%s" % (hostname, port))
        server.start()
    except KeyboardInterrupt:
        server.stop()
def start_server(config):
    from cheroot.wsgi import Server as WSGIServer
    hostname = config['server_host']['host']
    port = int(config['server_host']['port'])
    scheme = config['server_host']['scheme']
    app = load_app()
    server = WSGIServer((hostname, port), app)
    try:
        LOGGER.debug('starting Cheroot at %s://%s:%s',
                scheme, hostname, port)
        std_error_message("Starting Cheroot at %s://%s:%s"
                % (scheme, hostname, port))
        server.start()
    except KeyboardInterrupt:
        server.stop()
        sys.exit(0)
Beispiel #10
0
def start_cherrypy(config):
    """
    Start a cherrypy webserver to run our app.
    """
    from cherrypy import wsgiserver
    hostname = config['server_host']['host']
    port = int(config['server_host']['port'])
    scheme = config['server_host']['scheme']
    app = load_app()
    server = wsgiserver.CherryPyWSGIServer((hostname, port), app)
    try:
        logging.debug('starting cherrypy at %s://%s:%s', scheme, hostname,
                      port)
        std_error_message("Starting CherryPy at %s://%s:%s" %
                          (scheme, hostname, port))
        server.start()
    except KeyboardInterrupt:
        server.stop()
Beispiel #11
0
def assetcopy(args):
    """
    Copy BFW's static assets into specified target directory
    """
    from pkg_resources import resource_filename

    if len(args) != 1:
        std_error_message('ERROR: invalid target directory')
        sys.exit(1)

    target_dir = args[0]

    assets_path = resource_filename('tiddlywebplugins.bfw', 'assets')
    try:
        shutil.copytree(assets_path, target_dir)
    except OSError:
        std_error_message('ERROR: target directory already exists - aborted')
        sys.exit(2)
Beispiel #12
0
def start_cherrypy(config):
    """
    Start a CherryPy webserver to run our app.
    """
    from cherrypy.wsgiserver import CherryPyWSGIServer
    hostname = config['server_host']['host']
    port = int(config['server_host']['port'])
    scheme = config['server_host']['scheme']
    app = load_app()
    server = CherryPyWSGIServer((hostname, port), app)
    try:
        LOGGER.debug('starting CherryPy at %s://%s:%s',
                scheme, hostname, port)
        std_error_message("Starting CherryPy at %s://%s:%s"
                % (scheme, hostname, port))
        server.start()
    except KeyboardInterrupt:
        server.stop()
Beispiel #13
0
 def deltiddler(args):
     """Delete a tiddler from a bag: <bag> <title>"""
     from tiddlyweb.model.tiddler import Tiddler
     from tiddlyweb.store import NoTiddlerError
     from tiddlyweb.util import std_error_message
     bag, title = args
     prompt = 'deleting tiddler %s from bag %s - enter "yes" to confirm' % (
         title, bag)
     if raw_input('%s\n' % prompt) == 'yes':
         store = get_store(config)
         tiddler = Tiddler(title, bag)
         try:
             store.delete(tiddler)
         except NoTiddlerError:
             std_error_message('error deleting tiddler %s from bag %s: %s' %
                               (title, bag, 'no such tiddler'))
         return True
     else:
         std_error_message('aborted')
         return False
Beispiel #14
0
 def deltiddler(args):
     """Delete a tiddler from a bag: <bag> <title>"""
     from tiddlyweb.model.tiddler import Tiddler
     from tiddlyweb.store import NoTiddlerError
     from tiddlyweb.util import std_error_message
     bag, title = args
     prompt = 'deleting tiddler %s from bag %s - enter "yes" to confirm' % (
             title, bag)
     if raw_input('%s\n' % prompt) == 'yes':
         store = get_store(config)
         tiddler = Tiddler(title, bag)
         try:
             store.delete(tiddler)
         except NoTiddlerError:
             std_error_message(
                     'error deleting tiddler %s from bag %s: %s' % (
                         title, bag, 'no such tiddler'))
         return True
     else:
         std_error_message('aborted')
         return False
def cache_tiddlers(package_name):
    """
    creates local cache of instance tiddlers to be included in distribution

    reads store_contents from <package>.instance

    tiddler files are stored in <package>/resources/<bag>
    a complete index is stored in <package>/resources
    """
    instance_module = __import__("%s.instance" % package_name, None, None,
        ["instance"]) # XXX: unnecessarily convoluted and constraining!?
    store_contents = instance_module.store_contents
    package_path = os.path.join(*package_name.split("."))

    sources = {}
    for bag, uris in store_contents.items():
        sources[bag] = []
        for uri in uris:
            if uri.endswith(".recipe"):
                urls = recipe_to_urls(uri)
                sources[bag].extend(urls)
            else:
                sources[bag].append(uri)
        metas = []
        for uri in sources[bag]:
            metas.append("%s.meta" % uri)
        sources[bag].extend(metas)

    resources_path = os.path.join(package_path, "resources")
    try:
        os.mkdir(resources_path)
    except OSError: # directory exists
        pass

    for bag, uris in sources.items():
        bag_path = os.path.join(resources_path, bag)
        try:
            os.mkdir(bag_path)
        except OSError: # directory exists
            pass

        for uri in uris:
            filepath = os.path.join(bag_path, os.path.basename(uri))
            std_error_message("retrieving %s" % uri)
            try: # XXX: duplication of tiddlywebplugins.twimport._get_url_handle
                try:
                    content = urlopen(uri).read()
                except (URLError, OSError):
                    scheme, netloc, path, params, query, fragment = urlparse.urlparse(uri)
                    path = quote(path)
                    uri = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
                    content = urlopen(uri).read()
                try:
                    content = unicode(content, "utf-8")
                    write_utf8_file(filepath, content)
                except UnicodeDecodeError: # assume binary
                    f = open(filepath, "wb")
                    f.write(content)
                    f.close()
            except (URLError, OSError):
                if uri.endswith(".meta"):
                    std_error_message("no meta file found for %s" % uri[:-5])
                else:
                    raise

    tiddler_index = "tiddlers.index"
    tiddler_paths = []
    for base_dir, dirs, files in os.walk(resources_path):
        bag = os.path.basename(base_dir)
        if bag in store_contents:
            filepaths = (os.path.join(bag, filename) for filename in files
                if not filename.endswith(".meta") and not filename == tiddler_index)
            tiddler_paths.extend(filepaths)
    filepath = "/".join([resources_path, tiddler_index])
    std_error_message("creating %s" % filepath)
    write_utf8_file(filepath, "\n".join(tiddler_paths))