예제 #1
0
    def _get_index_position(self, index, start, length):
        data = Files.read_binary_file(
            self._input_file,
            start,
            length
        )

        data = [int(x) for x in data.split(self.FIELD_DELIMITER)]

        if index not in data:
            return None

        return data.index(index)
예제 #2
0
    def _get_index_data(self, index, start, index_position):
        length = len(str(index)) + 2 + (self.ZERO_FILL * 2)

        data = Files.read_binary_file(
            self._input_file,
            start + (index_position * length),
            length
        )

        if not data:
            return False

        data = data.split(self.FIELD_DELIMITER)

        for (key, value) in enumerate(data):
            data[key] = int(value)

        return data
예제 #3
0
    def _get_binary_header(self, index):

        data = Files.read_binary_file(
            self._input_file,
            0,
            self.NUMBER_RECORD_HEADER * self.ZERO_FILL
        )
        chunks, chunk_size = len(data), len(data) / self.NUMBER_RECORD_HEADER

        header = map(int, [data[i:i + chunk_size] for i in range(
            0, chunks, chunk_size)])

        if header[0] == 0:
            return False

        if index < header[4] or index > header[5]:
            return ""

        return header
예제 #4
0
    def read(self, index):
        """ Get the record for an key
            :param index: The index
            :return: list
        """

        header = self._get_binary_header(index)

        if not header:
            return ""

        index_length = int(header[1])
        index_start = int(header[2])

        index_position = self._get_index_position(index, index_start,
                                                  index_length)

        if index_position is None:
            return False

        index_data_start = index_length + index_start
        index_data = self._get_index_data(index, index_data_start,
                                          index_position)

        position = index_data_start + index_data[1] + header[3]

        if not index_data:
            return ""

        data = Files.read_binary_file(
            self._input_file,
            position,
            index_data[2]
        )

        return data.split(self.FIELD_DELIMITER)
예제 #5
0
 def test_read_binary(self):
     """ Test can_include_file()
     """
     Files.write_binary("test", "binary.bin", TEST_PATH)
     content = Files.read_binary_file(TEST_PATH + "binary.bin", 0, 8)
     self.assertTrue(content == "test")