85 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
Convienence utilities for building nginx configs
 | 
						|
"""
 | 
						|
from multiprocessing import cpu_count
 | 
						|
 | 
						|
from .api import Config, Location, Section
 | 
						|
from .api.blocks import EmptyBlock
 | 
						|
 | 
						|
 | 
						|
def dumps(config_list):
 | 
						|
    """ Dumps a string representation of a config. Accepts a list of config objects.
 | 
						|
 | 
						|
    :param list config_list: A list of config objects from this module
 | 
						|
    :rtype: str
 | 
						|
    """
 | 
						|
    return ''.join([str(element) for element in config_list])
 | 
						|
 | 
						|
 | 
						|
def duplicate_options(key, values):
 | 
						|
    """ There are many cases when building configs that you may have duplicate keys
 | 
						|
 | 
						|
    This function will produce an EmptyBlock object with duplicate keys but unique values
 | 
						|
 | 
						|
    Example::
 | 
						|
 | 
						|
        from nginx.config.helpers import duplicate_options
 | 
						|
        from nginx.config.api import Location
 | 
						|
        loc = Location(
 | 
						|
            '/',
 | 
						|
            duplicate_options('uwsgi_cache_valid', (['404', '5s'], ['200', '60s'])),
 | 
						|
        )
 | 
						|
 | 
						|
    Which would produce::
 | 
						|
 | 
						|
        location / {
 | 
						|
            uwsgi_cache_valid 200 60s;
 | 
						|
            uwsgi_cache_valid 404 5s;
 | 
						|
        }
 | 
						|
 | 
						|
    """
 | 
						|
    duplicates = EmptyBlock()
 | 
						|
 | 
						|
    for value in values:
 | 
						|
        duplicates.sections.add(EmptyBlock(**{key: value}))
 | 
						|
 | 
						|
    return duplicates
 | 
						|
 | 
						|
 | 
						|
def simple_configuration(port=8080):
 | 
						|
    """ Returns a simple nginx config.
 | 
						|
 | 
						|
    Also serves as an example of how to build configs using this module.
 | 
						|
 | 
						|
    :param int port: A port to populate the 'listen' paramter of the server block
 | 
						|
    :rtype str:
 | 
						|
    """
 | 
						|
 | 
						|
    http = Section(
 | 
						|
        'http',
 | 
						|
        access_log=['logs/access.log', 'combined'],
 | 
						|
    )
 | 
						|
 | 
						|
    http.sections.server = Section(
 | 
						|
        'server',
 | 
						|
        Location('/'),
 | 
						|
        listen=port,
 | 
						|
    )
 | 
						|
 | 
						|
    events = Section(
 | 
						|
        'events',
 | 
						|
        worker_connections=4096
 | 
						|
    )
 | 
						|
 | 
						|
    top = EmptyBlock(
 | 
						|
        worker_processes=cpu_count(),
 | 
						|
        error_log='logs/error.log'
 | 
						|
    )
 | 
						|
 | 
						|
    config = Config(
 | 
						|
        top,
 | 
						|
        events,
 | 
						|
        http,
 | 
						|
    )
 | 
						|
 | 
						|
    return config
 |