def test_pickleshare(tmpdir):
    db = PickleShareDB(tmpdir)
    db.clear()
    print("Should be empty:",db.items())
    assert len(db) == 0
    db['hello'] = 15
    assert db['hello'] == 15
    db['aku ankka'] = [1,2,313]
    assert db['aku ankka'] == [1,2,313]
    db['paths/nest/ok/keyname'] = [1,(5,46)]
    assert db['paths/nest/ok/keyname'] == [1,(5,46)]

    db.hset('hash', 'aku', 12)
    db.hset('hash', 'ankka', 313)
    assert db.hget('hash', 'aku') == 12
    assert db.hget('hash', 'ankka') == 313

    print("all hashed",db.hdict('hash'))
    print(db.keys())
    print(db.keys('paths/nest/ok/k*'))
    print(dict(db)) # snapsot of whole db
    db.uncache() # frees memory, causes re-reads later

    # shorthand for accessing deeply nested files
    lnk = db.getlink('myobjects/test')
    lnk.foo = 2
    lnk.bar = lnk.foo + 5
    assert lnk.bar == 7
Exemple #2
0
def test_pickleshare(tmpdir):
    db = PickleShareDB(tmpdir)
    db.clear()
    print("Should be empty:", db.items())
    assert len(db) == 0
    db['hello'] = 15
    assert db['hello'] == 15
    db['aku ankka'] = [1, 2, 313]
    assert db['aku ankka'] == [1, 2, 313]
    db['paths/nest/ok/keyname'] = [1, (5, 46)]
    assert db['paths/nest/ok/keyname'] == [1, (5, 46)]

    db.hset('hash', 'aku', 12)
    db.hset('hash', 'ankka', 313)
    assert db.hget('hash', 'aku') == 12
    assert db.hget('hash', 'ankka') == 313

    print("all hashed", db.hdict('hash'))
    print(db.keys())
    print(db.keys('paths/nest/ok/k*'))
    print(dict(db))  # snapsot of whole db
    db.uncache()  # frees memory, causes re-reads later

    # shorthand for accessing deeply nested files
    lnk = db.getlink('myobjects/test')
    lnk.foo = 2
    lnk.bar = lnk.foo + 5
    assert lnk.bar == 7
Exemple #3
0
def registrar_BD(username, password):
    db = PickleShareDB('miBD')
    if username in db.keys():
        return "Incorrecto"
    else:
        session['logged'] = True
        session['username'] = username
        db[username] = {'pass': password}
        return "Correcto"
Exemple #4
0
def registBD(username, password):
    db = PickleShareDB('miBD')
    if username in db.keys():
        return False
    else:
        session['logged'] = True
        session['username'] = username
        db[username] = {'pass': password}
        return True
Exemple #5
0
def login_BD(username, password):
    db = PickleShareDB('miBD')

    if username in db.keys(
    ) and db[username] and password == db[username]["pass"]:
        session['logged'] = True
        session['username'] = username
        return "Credenciales correctas"
    else:
        return "Credenciales incorrectas"
Exemple #6
0
def login():
    form = LoginForm()
    if form.validate_on_submit():
        db = PickleShareDB('miBD')
        try:
            if db.keys().index(f'{form.username.data}') != ValueError and form.password.data == db[f'{form.username.data}']['pass']:
                flash(f'Hi {form.username.data}!', 'success')
                session['username'] = f'{form.username.data}'
                return redirect(url_for('home'))
            else:
                raise ValueError
        except ValueError:
            flash('Login Unsuccessful. Please check username and password', 'danger')
    return render_template('login.html', title='Login', form = form)
Exemple #7
0
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        db = PickleShareDB('miBD')
        try:
            if db.keys().index(f'{form.username.data}') != ValueError:
                flash('User already exist', 'danger')
            else:
                raise ValueError
        except ValueError:
            flash(f'Account created for {form.username.data}!', 'success')
            db[f'{form.username.data}'] = { 'pass' : f'{form.password.data}' }
            return redirect(url_for('home'))
    return render_template('register.html', title='Register', form = form)
Exemple #8
0
class Task(object):
    """ A Task is a Pipe-like function that also propagates job information
        note: a task is pickleable
        TODO:
           * add memoization / conditional work
              This should not run the function if not necessary
    """

    def __init__(self, func, args=(), name=None, memoized=False, logger=None, **kwargs):
        if type(memoized) not in [ bool, str ]:
            raise ValueError('memoized value "{}" not understood. Expecting Boolean or str')
        self.memoized = memoized
        self.func = func
        self.name = name or func.__name__
        self.args = args
        self.kwargs = kwargs
        update_wrapper(self, func)
        self.__set_memoize_backend__()
        self.set_logger(logger)

    def set_logger(self, logger, **kwargs):
        """ set the logger backend """
        if isinstance(logger, Logger):
            self.logger = logger
        else:
            self.logger = Logger(out=logger, **kwargs)

    def memoize(self, val=None):
        if val is None:
            return self.memoized
        else:
            self.memoized = val
            self.__set_memoize_backend__()

    def clear_memoized(self):
        if self._cache is not None:
            self._cache.clear()

    def get_job_status(self, job_id, strict=True):
        """ Check if previous results are available
            if strict, unkown jobs will raise KeyError exceptions, otherwise
            return False
        """
        key = '{}/{}'.format(job_id, self.name)
        if self.memoized is False:
            return False
        elif (key in self._cache):
            return True
        else:
            if strict:
                raise KeyError('Job "{}" not found'.format(job_id))
            else:
                return False

    def get(self, job_id, strict=True):
        """ get the result from a previous memoized job
            See also get_job_status
        """
        if self.get_job_status(job_id, strict=strict):
            key = '{}/{}'.format(job_id, self.name)
            return self._cache[key]

    def __set_memoize_backend__(self):
        """ Defines the backend for memoization of the results """
        if self.memoized is False:
            self._cache = None
        elif self.memoized is True:
            self._cache = {}
        elif isinstance(self.memoized, str):
            self._cache = PickleShareDB(self.memoized)

    def run(self, key, val, *args, **kwargs):
        if hasattr(val, '__iter__'):
            _args = tuple(val) + args + self.args
        else:
            _args = (val, ) + args + self.args
        _kwargs = self.kwargs.copy()
        _kwargs.update(kwargs)
        if self.memoized is False:
            self.logger.write('Job {} -- started\n'.format(key))
            ret = self.func(*_args, **_kwargs)
            self.logger.write('Job {} -- ended\n'.format(key))
            return ret
        else:
            if (key not in self._cache.keys()):
                self.logger.write('Job {} -- started\n'.format(key))
                self._cache[key] = self.func(*_args, **_kwargs)
                self.logger.write('Job {} -- ended\n'.format(key))
                return self._cache[key]
            else:
                self.logger.write('Job {} -- existing result, skipped\n'.format(key))
                return self._cache[key]

    def __ror__(self, other):
        """ Used for the | operator """
        job_id = other[0]
        key = '{}/{}'.format(job_id, self.name)
        return job_id, self.run(key, other[1])

    def __call__(self, *args, **kwargs):
        if len(args) > 0:
            self.args = args
        if len(kwargs) > 0:
            self.memoized = kwargs.pop('memoized', self.memoized)
            self.logger = kwargs.pop('memoized', self.logger)
            self.kwargs = kwargs
        return self

    def __repr__(self):
        txt = 'Task: {}'.format(self.func.__repr__())
        if self.memoized:
            txt += '\n memoized {}'.format(object.__repr__(self._cache))
        if self.logger is not None:
            txt += '\n Logger {}'.format(self.logger.__repr__())
        return txt

    def __getitem__(self, job_id):
        return self.get(job_id)
Exemple #9
0
def editar_BD(username, password):
    db = PickleShareDB('miBD')
    if username in db.keys():
        del db[username]
    registrar_BD(username, password)