lru-dict
Advanced tools
| Metadata-Version: 1.1 | ||
| Name: lru-dict | ||
| Version: 1.1.2 | ||
| Version: 1.1.3 | ||
| Summary: An Dict like LRU container. | ||
@@ -105,3 +105,4 @@ Home-page: https://github.com/amitdev/lru-dict | ||
| Classifier: Programming Language :: Python :: 2 | ||
| Classifier: Programming Language :: Python :: 3 | ||
| Classifier: Programming Language :: Python :: Implementation :: CPython | ||
| Classifier: Topic :: Software Development :: Libraries :: Python Modules |
+54
-14
@@ -34,5 +34,10 @@ #include <Python.h> | ||
| */ | ||
| #define GET_NODE(d, key) (Node *) (d)->ob_type->tp_as_mapping->mp_subscript((d), (key)) | ||
| #define PUT_NODE(d, key, node) (d)->ob_type->tp_as_mapping->mp_ass_subscript((d), (key), ((PyObject *)node)) | ||
| #ifndef Py_TYPE | ||
| #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) | ||
| #endif | ||
| #define GET_NODE(d, key) (Node *) Py_TYPE(d)->tp_as_mapping->mp_subscript((d), (key)) | ||
| #define PUT_NODE(d, key, node) Py_TYPE(d)->tp_as_mapping->mp_ass_subscript((d), (key), ((PyObject *)node)) | ||
| /* If someone figures out how to enable debug builds with setuptools, you can delete this */ | ||
@@ -78,4 +83,3 @@ #if 0 | ||
| static PyTypeObject NodeType = { | ||
| PyObject_HEAD_INIT(NULL) | ||
| 0, /* ob_size */ | ||
| PyVarObject_HEAD_INIT(NULL, 0) | ||
| "lru.Node", /* tp_name */ | ||
@@ -463,3 +467,4 @@ sizeof(Node), /* tp_basicsize */ | ||
| "An LRU dict behaves like a standard dict, except that it stores only fixed\n" | ||
| "set of elements. Once the size overflows, it evicts least recently used items.\n\n" | ||
| "set of elements. Once the size overflows, it evicts least recently used\n" | ||
| "items.\n\n" | ||
| "Eg:\n" | ||
@@ -471,7 +476,7 @@ ">>> l = LRU(3)\n" | ||
| "[2,3,4]\n\n" | ||
| "Note: An LRU(n) can be thought of as a dict that will have the most recently accessed n items.\n"); | ||
| "Note: An LRU(n) can be thought of as a dict that will have the most\n" | ||
| "recently accessed n items.\n"); | ||
| static PyTypeObject LRUType = { | ||
| PyObject_HEAD_INIT(NULL) | ||
| 0, /* ob_size */ | ||
| PyVarObject_HEAD_INIT(NULL, 0) | ||
| "lru.LRU", /* tp_name */ | ||
@@ -516,4 +521,18 @@ sizeof(LRU), /* tp_basicsize */ | ||
| PyMODINIT_FUNC | ||
| initlru(void) | ||
| #if PY_MAJOR_VERSION >= 3 | ||
| static struct PyModuleDef moduledef = { | ||
| PyModuleDef_HEAD_INIT, | ||
| "lru", /* m_name */ | ||
| lru_doc, /* m_doc */ | ||
| -1, /* m_size */ | ||
| NULL, /* m_methods */ | ||
| NULL, /* m_reload */ | ||
| NULL, /* m_traverse */ | ||
| NULL, /* m_clear */ | ||
| NULL, /* m_free */ | ||
| }; | ||
| #endif | ||
| static PyObject * | ||
| moduleinit(void) | ||
| { | ||
@@ -524,11 +543,16 @@ PyObject *m; | ||
| if (PyType_Ready(&NodeType) < 0) | ||
| return; | ||
| return NULL; | ||
| LRUType.tp_new = PyType_GenericNew; | ||
| if (PyType_Ready(&LRUType) < 0) | ||
| return; | ||
| return NULL; | ||
| m = Py_InitModule3("lru", NULL, "lru module"); | ||
| #if PY_MAJOR_VERSION >= 3 | ||
| m = PyModule_Create(&moduledef); | ||
| #else | ||
| m = Py_InitModule3("lru", NULL, lru_doc); | ||
| #endif | ||
| if (m == NULL) | ||
| return; | ||
| return NULL; | ||
@@ -538,2 +562,18 @@ Py_INCREF(&NodeType); | ||
| PyModule_AddObject(m, "LRU", (PyObject *) &LRUType); | ||
| return m; | ||
| } | ||
| #if PY_MAJOR_VERSION < 3 | ||
| PyMODINIT_FUNC | ||
| initlru(void) | ||
| { | ||
| moduleinit(); | ||
| } | ||
| #else | ||
| PyMODINIT_FUNC | ||
| PyInit_lru(void) | ||
| { | ||
| return moduleinit(); | ||
| } | ||
| #endif |
+2
-1
| Metadata-Version: 1.1 | ||
| Name: lru-dict | ||
| Version: 1.1.2 | ||
| Version: 1.1.3 | ||
| Summary: An Dict like LRU container. | ||
@@ -105,3 +105,4 @@ Home-page: https://github.com/amitdev/lru-dict | ||
| Classifier: Programming Language :: Python :: 2 | ||
| Classifier: Programming Language :: Python :: 3 | ||
| Classifier: Programming Language :: Python :: Implementation :: CPython | ||
| Classifier: Topic :: Software Development :: Libraries :: Python Modules |
+2
-1
@@ -7,3 +7,3 @@ from setuptools import setup, Extension | ||
| setup (name = 'lru-dict', | ||
| version = '1.1.2', | ||
| version = '1.1.3', | ||
| description = 'An Dict like LRU container.', | ||
@@ -24,2 +24,3 @@ long_description = open('README.rst').read(), | ||
| 'Programming Language :: Python :: 2', | ||
| 'Programming Language :: Python :: 3', | ||
| 'Programming Language :: Python :: Implementation :: CPython', | ||
@@ -26,0 +27,0 @@ 'Topic :: Software Development :: Libraries :: Python Modules', |
+28
-27
@@ -23,6 +23,7 @@ import gc | ||
| def _check_kvi(self, valid_keys, l): | ||
| valid_vals = map(str, valid_keys) | ||
| self.assertEquals(valid_keys, l.keys()) | ||
| self.assertEquals(valid_vals, l.values()) | ||
| self.assertEquals(zip(valid_keys, valid_vals), l.items()) | ||
| valid_keys = list(valid_keys) | ||
| valid_vals = list(map(str, valid_keys)) | ||
| self.assertEqual(valid_keys, l.keys()) | ||
| self.assertEqual(valid_vals, l.values()) | ||
| self.assertEqual(list(zip(valid_keys, valid_vals)), l.items()) | ||
@@ -35,4 +36,4 @@ def test_invalid_size(self): | ||
| l = LRU(1) | ||
| self.assertEquals([], l.keys()) | ||
| self.assertEquals([], l.values()) | ||
| self.assertEqual([], l.keys()) | ||
| self.assertEqual([], l.values()) | ||
@@ -42,3 +43,3 @@ def test_add_within_size(self): | ||
| l = LRU(size) | ||
| for i in xrange(size): | ||
| for i in range(size): | ||
| l[i] = str(i) | ||
@@ -50,5 +51,5 @@ self._check_kvi(range(size-1,-1,-1), l) | ||
| l = LRU(size) | ||
| for i in xrange(size): | ||
| for i in range(size): | ||
| l[i] = str(i) | ||
| for i in xrange(0,size,2): | ||
| for i in range(0,size,2): | ||
| del l[i] | ||
@@ -64,11 +65,11 @@ self._check_kvi(range(size-1,0,-2), l) | ||
| n = size*2 | ||
| for i in xrange(n): | ||
| for i in range(n): | ||
| l[i] = str(i) | ||
| for i in xrange(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 xrange(0,size): | ||
| for i in range(0,size): | ||
| with self.assertRaises(KeyError): | ||
| l[i] | ||
| for i in xrange(size,n,2): | ||
| for i in range(size,n,2): | ||
| with self.assertRaises(KeyError): | ||
@@ -80,3 +81,3 @@ l[i] | ||
| l = LRU(size) | ||
| for i in xrange(size): | ||
| for i in range(size): | ||
| l[i] = str(i) | ||
@@ -89,7 +90,7 @@ l[size] = str(size) | ||
| l = LRU(size) | ||
| for i in xrange(size): | ||
| for i in range(size): | ||
| l[i] = str(i) | ||
| for i in xrange(size): | ||
| self.assertEquals(l[i], str(i)) | ||
| self.assertEquals(l.get(i,None), str(i)) | ||
| for i in range(size): | ||
| self.assertEqual(l[i], str(i)) | ||
| self.assertEqual(l.get(i,None), str(i)) | ||
@@ -100,8 +101,8 @@ def test_access(self): | ||
| n = size * 2 | ||
| for i in xrange(n): | ||
| for i in range(n): | ||
| l[i] = str(i) | ||
| self._check_kvi(range(n-1,size-1,-1), l) | ||
| for i in xrange(size, n): | ||
| self.assertEquals(l[i], str(i)) | ||
| self.assertEquals(l.get(i,None), str(i)) | ||
| for i in range(size, n): | ||
| self.assertEqual(l[i], str(i)) | ||
| self.assertEqual(l.get(i,None), str(i)) | ||
@@ -112,3 +113,3 @@ def test_overwrite(self): | ||
| l[1] = '1' | ||
| self.assertEquals('1', l[1]) | ||
| self.assertEqual('1', l[1]) | ||
| self._check_kvi([1], l) | ||
@@ -119,8 +120,8 @@ | ||
| l = LRU(size) | ||
| for i in xrange(2*size): | ||
| for i in range(2*size): | ||
| l[i] = str(i) | ||
| self.assertTrue(l.has_key(i)) | ||
| for i in xrange(size, 2*size): | ||
| for i in range(size, 2*size): | ||
| self.assertTrue(l.has_key(i)) | ||
| for i in xrange(size): | ||
| for i in range(size): | ||
| self.assertFalse(l.has_key(i)) | ||
@@ -163,3 +164,3 @@ | ||
| l[i] = str(i) | ||
| for i in xrange(size): | ||
| for i in range(size): | ||
| _ = l[random.randint(0, size-1)] | ||
@@ -166,0 +167,0 @@ l.clear() |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
34505
2.64%222
0.91%