🚀 Big News:Socket Has Acquired Secure Annex.Learn More
Socket
Book a DemoSign in
Socket

lru-dict

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lru-dict - pypi Package Compare versions

Comparing version
1.1.6
to
1.1.7
+5
-2
lru_dict.egg-info/PKG-INFO
Metadata-Version: 1.1
Name: lru-dict
Version: 1.1.6
Version: 1.1.7
Summary: An Dict like LRU container.

@@ -9,3 +9,6 @@ Home-page: https://github.com/amitdev/lru-dict

License: MIT
Description: LRU Dict
Description: .. image:: https://travis-ci.com/amitdev/lru-dict.svg?branch=master
:target: https://travis-ci.com/amitdev/lru-dict
LRU Dict
========

@@ -12,0 +15,0 @@

+94
-0

@@ -393,2 +393,57 @@ #include <Python.h>

static PyObject *
LRU_setdefault(LRU *self, PyObject *args)
{
PyObject *key;
PyObject *default_obj = NULL;
PyObject *result;
if (!PyArg_ParseTuple(args, "O|O", &key, &default_obj))
return NULL;
result = lru_subscript(self, key);
PyErr_Clear();
if (result)
return result;
if (!default_obj)
default_obj = Py_None;
if (lru_ass_sub(self, key, default_obj) != 0)
return NULL;
Py_INCREF(default_obj);
return default_obj;
}
static PyObject *
LRU_pop(LRU *self, PyObject *args)
{
PyObject *key;
PyObject *default_obj = NULL;
PyObject *result;
if (!PyArg_ParseTuple(args, "O|O", &key, &default_obj))
return NULL;
/* Trying to access the item by key. */
result = lru_subscript(self, key);
if (result)
/* result != NULL, delete it from dict by key */
lru_ass_sub(self, key, NULL);
else if (default_obj) {
/* result == NULL, i.e. key missing, and default_obj given */
PyErr_Clear();
Py_INCREF(default_obj);
result = default_obj;
}
/* Otherwise (key missing, and default_obj not given [i.e. == NULL]), the
* call to lru_subscript (at the location marked by "Trying to access the
* item by key" in the comments) has already generated the appropriate
* exception. */
return result;
}
static PyObject *
LRU_peek_first_item(LRU *self)

@@ -422,2 +477,35 @@ {

static PyObject *
LRU_popitem(LRU *self, PyObject *args, PyObject *kwds)
{
static char *kwlist[] = {"least_recent", NULL};
int pop_least_recent = 1;
PyObject *result;
#if PY_MAJOR_VERSION >= 3
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|p", kwlist, &pop_least_recent))
return NULL;
#else
{
PyObject *arg_ob = Py_True;
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O", kwlist, &arg_ob))
return NULL;
pop_least_recent = PyObject_IsTrue(arg_ob);
if (pop_least_recent == -1)
return NULL;
}
#endif
if (pop_least_recent)
result = LRU_peek_last_item(self);
else
result = LRU_peek_first_item(self);
if (result == Py_None) {
PyErr_SetString(PyExc_KeyError, "popitem(): LRU dict is empty");
return NULL;
}
lru_ass_sub(self, PyTuple_GET_ITEM(result, 0), NULL);
Py_INCREF(result);
return result;
}
static PyObject *
LRU_keys(LRU *self) {

@@ -539,2 +627,8 @@ return collect(self, get_key);

PyDoc_STR("L.get(key, instead) -> If L has key return its value, otherwise instead")},
{"setdefault", (PyCFunction)LRU_setdefault, METH_VARARGS,
PyDoc_STR("L.setdefault(key, default=None) -> If L has key return its value, otherwise insert key with a value of default and return default")},
{"pop", (PyCFunction)LRU_pop, METH_VARARGS,
PyDoc_STR("L.pop(key[, default]) -> If L has key return its value and remove it from L, otherwise return default. If default is not given and key is not in L, a KeyError is raised.")},
{"popitem", (PyCFunctionWithKeywords)LRU_popitem, METH_VARARGS | METH_KEYWORDS,
PyDoc_STR("L.popitem([least_recent=True]) -> Returns and removes a (key, value) pair. The pair returned is the least-recently used if least_recent is true, or the most-recently used if false.")},
{"set_size", (PyCFunction)LRU_set_size, METH_VARARGS,

@@ -541,0 +635,0 @@ PyDoc_STR("L.set_size() -> set size of LRU")},

Metadata-Version: 1.1
Name: lru-dict
Version: 1.1.6
Version: 1.1.7
Summary: An Dict like LRU container.

@@ -9,3 +9,6 @@ Home-page: https://github.com/amitdev/lru-dict

License: MIT
Description: LRU Dict
Description: .. image:: https://travis-ci.com/amitdev/lru-dict.svg?branch=master
:target: https://travis-ci.com/amitdev/lru-dict
LRU Dict
========

@@ -12,0 +15,0 @@

@@ -0,1 +1,4 @@

.. image:: https://travis-ci.com/amitdev/lru-dict.svg?branch=master
:target: https://travis-ci.com/amitdev/lru-dict
LRU Dict

@@ -2,0 +5,0 @@ ========

[egg_info]
tag_build =
tag_date = 0
tag_svn_revision = 0

@@ -7,3 +7,3 @@ from setuptools import setup, Extension

setup (name = 'lru-dict',
version = '1.1.6',
version = '1.1.7',
description = 'An Dict like LRU container.',

@@ -10,0 +10,0 @@ long_description = open('README.rst').read(),

@@ -12,2 +12,3 @@ import gc

class TestLRU(unittest.TestCase):

@@ -44,3 +45,3 @@

l[i] = str(i)
self._check_kvi(range(size-1,-1,-1), l)
self._check_kvi(range(size - 1, -1, -1), l)

@@ -52,6 +53,6 @@ def test_delete_multiple_within_size(self):

l[i] = str(i)
for i in range(0,size,2):
for i in range(0, size, 2):
del l[i]
self._check_kvi(range(size-1,0,-2), l)
for i in range(0,size,2):
self._check_kvi(range(size - 1, 0, -2), l)
for i in range(0, size, 2):
with self.assertRaises(KeyError):

@@ -63,12 +64,12 @@ l[i]

l = LRU(size)
n = size*2
n = size * 2
for i in range(n):
l[i] = str(i)
for i in range(size,n,2):
for i in range(size, n, 2):
del l[i]
self._check_kvi(range(n-1,size,-2), l)
for i in range(0,size):
self._check_kvi(range(n - 1, size, -2), l)
for i in range(0, size):
with self.assertRaises(KeyError):
l[i]
for i in range(size,n,2):
for i in range(size, n, 2):
with self.assertRaises(KeyError):

@@ -83,3 +84,3 @@ l[i]

l[size] = str(size)
self._check_kvi(range(size,0,-1), l)
self._check_kvi(range(size, 0, -1), l)

@@ -93,3 +94,3 @@ def test_access_within_size(self):

self.assertEqual(l[i], str(i))
self.assertEqual(l.get(i,None), str(i))
self.assertEqual(l.get(i, None), str(i))

@@ -110,8 +111,7 @@ def test_contains(self):

l[i] = str(i)
self._check_kvi(range(n-1,size-1,-1), l)
self._check_kvi(range(n - 1, size - 1, -1), l)
for i in range(size, n):
self.assertEqual(l[i], str(i))
self.assertEqual(l.get(i,None), str(i))
self.assertEqual(l.get(i, None), str(i))
def test_update(self):

@@ -129,3 +129,3 @@ l = LRU(2)

self.assertEqual(l['b'], 3)
l.update({'a':1, 'b':2})
l.update({'a': 1, 'b': 2})
self.assertEqual(('b', 2), l.peek_first_item())

@@ -139,3 +139,2 @@ self.assertEqual(l['a'], 1)

def test_peek_first_item(self):

@@ -165,6 +164,6 @@ l = LRU(2)

l = LRU(size)
for i in range(2*size):
for i in range(2 * size):
l[i] = str(i)
self.assertTrue(l.has_key(i))
for i in range(size, 2*size):
for i in range(size, 2 * size):
self.assertTrue(l.has_key(i))

@@ -182,12 +181,12 @@ for i in range(size):

l = LRU(size)
for i in range(size+5):
for i in range(size + 5):
l[i] = str(i)
l.set_size(size+10)
self.assertTrue(size+10 == l.get_size())
l.set_size(size + 10)
self.assertTrue(size + 10 == l.get_size())
self.assertTrue(len(l) == size)
for i in range(size+20):
for i in range(size + 20):
l[i] = str(i)
self.assertTrue(len(l) == size+10)
l.set_size(size+10-1)
self.assertTrue(len(l) == size+10-1)
self.assertTrue(len(l) == size + 10)
l.set_size(size + 10 - 1)
self.assertTrue(len(l) == size + 10 - 1)

@@ -205,3 +204,3 @@ def test_unhashable(self):

l = LRU(size)
for i in range(size+5):
for i in range(size + 5):
l[i] = str(i)

@@ -212,3 +211,3 @@ l.clear()

for i in range(size):
_ = l[random.randint(0, size-1)]
_ = l[random.randint(0, size - 1)]
l.clear()

@@ -228,2 +227,59 @@ self.assertTrue(len(l) == 0)

def test_setdefault(self):
l = LRU(2)
l[1] = '1'
val = l.setdefault(1)
self.assertEqual('1', val)
self.assertEqual((1, 0), l.get_stats())
val = l.setdefault(2, '2')
self.assertEqual('2', val)
self.assertEqual((1, 1), l.get_stats())
self.assertEqual(val, l[2])
l.clear()
val = 'long string' * 512
l.setdefault(1, val)
l[2] = '2'
l[3] = '3'
self.assertTrue(val)
def test_pop(self):
l = LRU(2)
v = '2' * 4096
l[1] = '1'
l[2] = v
val = l.pop(1)
self.assertEqual('1', val)
self.assertEqual((1, 0), l.get_stats())
val = l.pop(2, 'not used')
self.assertEqual(v, val)
del val
self.assertTrue(v)
self.assertEqual((2, 0), l.get_stats())
val = l.pop(3, '3' * 4096)
self.assertEqual('3' * 4096, val)
self.assertEqual((2, 1), l.get_stats())
self.assertEqual(0, len(l))
with self.assertRaises(KeyError) as ke:
l.pop(4)
self.assertEqual(4, ke.args[0])
self.assertEqual((2, 2), l.get_stats())
self.assertEqual(0, len(l))
with self.assertRaises(TypeError):
l.pop()
def test_popitem(self):
l = LRU(3)
l[1] = '1'
l[2] = '2'
l[3] = '3'
k, v = l.popitem()
self.assertEqual((1, '1'), (k, v))
k, v = l.popitem(least_recent=False)
self.assertEqual((3, '3'), (k, v))
self.assertEqual((2, '2'), l.popitem(True))
with self.assertRaises(KeyError) as ke:
l.popitem()
self.assertEqual('popitem(): LRU dict is empty', ke.args[0])
self.assertEqual((0, 0), l.get_stats())
def test_stats(self):

@@ -312,3 +368,2 @@ for size in SIZES:

l = LRU(1, callback=callback)

@@ -334,6 +389,7 @@ l[first_key] = first_value

l.set_size(1)
self.assertEqual(counter[0], 2) # callback invoked
self.assertEqual(counter[0], 2) # callback invoked
self.assertEqual(l.keys(), ['b'])
if __name__ == '__main__':
unittest.main()