Skip to content

Commit

Permalink
add adapter interface and memory adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
GreatYYX committed Mar 21, 2018
1 parent d17c36f commit 02fd47d
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 11 deletions.
2 changes: 2 additions & 0 deletions rltk/io/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from rltk.io.reader import Reader
from rltk.io.csv_reader import CSVReader
from rltk.io.jsonlines_reader import JsonLinesReader
from rltk.io.adapter import Adapter
from rltk.io.memory_adapter import MemoryAdapter
22 changes: 22 additions & 0 deletions rltk/io/adapter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from rltk.record import Record


class Adapter(object):
def __init__(self):
pass

def __del__(self):
pass

def get(self, record_id) -> Record:
raise NotImplementedError

def set(self, record_id, record: Record):
raise NotImplementedError

def __iter__(self):
return self.__next__()

def __next__(self):
"""iterator is not required in adapter"""
pass
11 changes: 0 additions & 11 deletions rltk/io/csv_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,15 @@
class CSVReader(Reader):

def __init__(self, filename, **kwargs):
self._filename = filename
self._kwargs = kwargs
self._loop_count = 0

self._file_handler = codecs.open(filename)
self._csv_reader = csv.DictReader(self._file_handler, **kwargs)

def __next__(self):
for obj in self._csv_reader:
self._loop_count += 1
yield {t[0]: t[1] for t in obj.items()}

def __del__(self):
try:
self._file_handler.close()
except:
pass

def __copy__(self):
new_reader = CSVReader(self._filename, **self._kwargs)
while new_reader._loop_count < self._loop_count:
new_reader.__next__()
return new_reader
4 changes: 4 additions & 0 deletions rltk/io/memory_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,7 @@ def get(self, record_id):

def set(self, record_id, record: Record):
self._records[record_id] = record

def __next__(self):
for r in self._records.values():
yield r

0 comments on commit 02fd47d

Please sign in to comment.