rom/util.py
def _script_load(script):
    '''
    Borrowed/modified from my book, Redis in Action:
    https://github.com/josiahcarlson/redis-in-action/blob/master/python/ch11_listing_source.py

    Used for Lua scripting support when writing against Redis 2.6+ to allow
    for multiple unique columns per model.
    '''
    script = script.encode('utf-8') if isinstance(script, six.text_type) else script
    sha = [None, sha1(script).hexdigest()]
    def call(conn, keys=[], args=[], force_eval=False):
        keys = tuple(keys)
        args = tuple(args)
        if not force_eval:
            if not sha[0]:
                try:
                    # executing the script implicitly loads it
                    return conn.execute_command(
                        'EVAL', script, len(keys), *(keys + args))
                finally:
                    # thread safe by re-using the GIL ;)
                    del sha[:-1]

            try:
                return conn.execute_command(
                    "EVALSHA", sha[0], len(keys), *(keys+args))

            except redis.exceptions.ResponseError as msg:
                if not any(msg.args[0].startswith(nsm) for nsm in NO_SCRIPT_MESSAGES):
                    raise

        return conn.execute_command(
            "EVAL", script, len(keys), *(keys+args))

    return call
def _script_load(script):
    '''
    Borrowed/modified from my book, Redis in Action:
    https://github.com/josiahcarlson/redis-in-action/blob/master/python/ch11_listing_source.py

    Used for Lua scripting support when writing against Redis 2.6+ to allow
    for multiple unique columns per model.
    '''
    script = script.encode('utf-8') if isinstance(script, six.text_type) else script
    sha = [None, sha1(script).hexdigest()]
    def call(conn, keys=[], args=[], force_eval=False):
        keys = tuple(keys)
        args = tuple(args)
        if not force_eval:
            if not sha[0]:
                try:
                    # executing the script implicitly loads it
                    return conn.execute_command(
                        'EVAL', script, len(keys), *(keys + args))
                finally:
                    # thread safe by re-using the GIL ;)
                    del sha[:-1]

            try:
                return conn.execute_command(
                    "EVALSHA", sha[0], len(keys), *(keys+args))

            except redis.exceptions.ResponseError as msg:
                if not any(msg.args[0].startswith(nsm) for nsm in NO_SCRIPT_MESSAGES):
                    raise

        return conn.execute_command(
            "EVAL", script, len(keys), *(keys+args))

    return call
def _script_load ( script ) : script = script . encode ( 'utf-8' ) if isinstance ( script , six . text_type ) else script sha = [ None , sha1 ( script ) . hexdigest ( ) ] def call ( conn , keys = [ ] , args = [ ] , force_eval = False ) : keys = tuple ( keys ) args = tuple ( args ) if not force_eval : if not sha [ 0 ] : try : # executing the script implicitly loads it return conn . execute_command ( 'EVAL' , script , len ( keys ) , * ( keys + args ) ) finally : # thread safe by re-using the GIL ;) del sha [ : - 1 ] try : return conn . execute_command ( "EVALSHA" , sha [ 0 ] , len ( keys ) , * ( keys + args ) ) except redis . exceptions . ResponseError as msg : if not any ( msg . args [ 0 ] . startswith ( nsm ) for nsm in NO_SCRIPT_MESSAGES ) : raise return conn . execute_command ( "EVAL" , script , len ( keys ) , * ( keys + args ) ) return call
Borrowed/modified from my book, Redis in Action:
    https://github.com/josiahcarlson/redis-in-action/blob/master/python/ch11_listing_source.py

    Used for Lua scripting support when writing against Redis 2.6+ to allow
    for multiple unique columns per model.
Borrowed / modified from my book Redis in Action : https : // github . com / josiahcarlson / redis - in - action / blob / master / python / ch11_listing_source . py