OrderedStorage storage implementation using Cassandra as backend. Note: Since we need to (i) select and delete values by both 'key' and by 'key and value', and (ii) allow duplicate values, we store a monotonically increasing timestamp as additional value.
| 799 | |
| 800 | |
| 801 | class CassandraListStorage(OrderedStorage, CassandraStorage): |
| 802 | """ |
| 803 | OrderedStorage storage implementation using Cassandra as backend. |
| 804 | |
| 805 | Note: Since we need to (i) select and delete values by both 'key' and by 'key and value', |
| 806 | and (ii) allow duplicate values, we store a monotonically increasing timestamp as |
| 807 | additional value. |
| 808 | """ |
| 809 | |
| 810 | def keys(self): |
| 811 | """Implement interface.""" |
| 812 | return self._client.get_keys() |
| 813 | |
| 814 | def get(self, key): |
| 815 | """Implement interface.""" |
| 816 | return self._client.select([key]).get(key, []) |
| 817 | |
| 818 | def getmany(self, *keys): |
| 819 | """Implement interface.""" |
| 820 | return self._client.select(keys).values() |
| 821 | |
| 822 | def add_to_select_buffer(self, keys): |
| 823 | """Implement interface.""" |
| 824 | self._client.add_to_select_buffer(keys) |
| 825 | |
| 826 | def collect_select_buffer(self): |
| 827 | """Implement interface.""" |
| 828 | return self._client.collect_select_buffer() |
| 829 | |
| 830 | def insert(self, key, *vals, **kwargs): |
| 831 | """Implement interface.""" |
| 832 | buffer = kwargs.pop('buffer', False) |
| 833 | self._client.insert(key, vals, buffer) |
| 834 | |
| 835 | def remove(self, *keys, **kwargs): |
| 836 | """Implement interface.""" |
| 837 | buffer = kwargs.pop('buffer', False) |
| 838 | self._client.delete_keys(keys, buffer) |
| 839 | |
| 840 | def remove_val(self, key, val, **kwargs): |
| 841 | """Implement interface.""" |
| 842 | buffer = kwargs.pop('buffer', False) |
| 843 | self._client.delete(key, val, buffer) |
| 844 | |
| 845 | def size(self): |
| 846 | """Implement interface.""" |
| 847 | return len(self.keys()) |
| 848 | |
| 849 | def itemcounts(self): |
| 850 | """Implement interface.""" |
| 851 | return self._client.select_count(self.keys()) |
| 852 | |
| 853 | def has_key(self, key): |
| 854 | """Implement interface.""" |
| 855 | return self._client.one(key) is not None |
| 856 | |
| 857 | def empty_buffer(self): |
| 858 | """Implement interface.""" |