def write(self, line: Line): if line is not None and line.hasContent(): username = line.getUsername() if self._overrideUsername: username = self._setUsername(username) new_line: str = self.FORMAT_STRING.format( self._delimiter, int(line.getDate().timestamp()), self._channel, username, line.getContent().replace('"', '""')) self._file.write(new_line + "\n")
def test_createLineWithNoParameters(): line: Line = Line() assert line.getDate() is None assert line.getContent() is None assert line.getUsername() is None assert line.hasContent() is False
def test_close(): output_file = StringIO() fixture_value = '1555110000, "whatsapp", "@username", "content"\n' fileWriter: CSVFileWriter = CSVFileWriter(output_file) fileWriter.write(Line(datetime(2019, 4, 13), "username", "content")) output_value = output_file.getvalue() assert output_value == fixture_value fileWriter.close() with raises(ValueError): fileWriter.write(Line(datetime(2019, 4, 13), "username", "content"))
def read(self) -> Line: output_elements: Dict[str, Union[str, datetime]] = {} readNext = True while readNext: orig_line = self._file.readline() line = orig_line.decode().strip() try: dt = self._getDate(line.strip()) except ValueError: readNext = len(orig_line) > 0 if readNext and self.CONTENT in output_elements: output_elements[self.CONTENT] += "\n"+line.strip() else: if output_elements.get(self.CONTENT, None) is not None: self._file.seek(0 - len(orig_line), os.SEEK_CUR) return Line( output_elements[self.DATE], output_elements[self.USERNAME], output_elements[self.CONTENT]) # We can find a date at start of line, it's a new line line = line.strip() line = self._normaliseQuotes(line) output_elements[self.DATE] = dt output_elements[self.USERNAME] = self._getUsername(line) output_elements[self.CONTENT] = self._getContents( line, output_elements[self.USERNAME]) if bool(output_elements): new_line: Line = Line(output_elements[ self.DATE], output_elements[self.USERNAME], output_elements[self.CONTENT]) else: new_line: Line = Line() return new_line
def test_createFileWriterDefaults(): output_file = StringIO() fixture_value = '1555110000, "whatsapp", "@username", "content"\n' fileWriter: CSVFileWriter = CSVFileWriter(output_file) fileWriter.write(Line(datetime(2019, 4, 13), "username", "content")) output_value = output_file.getvalue() assert output_value == fixture_value
def test_createLine(): username: str = "username" content: str = "content" date: datetime = datetime.now() line: Line = Line(date, username, content) assert line.getDate() == date assert line.getContent() == content assert line.getUsername() == username assert line.hasContent() is True
def test_createLineWithWrongTypes(): username: int = 10 content: int = 20 date: str = "date" line: Line = Line(date, username, content) assert line.getDate() is None assert line.getContent() is None assert line.getUsername() is None assert line.hasContent() is False
def test_createNoneLine(): username: str = None content: str = None date: datetime = None line: Line = Line(date, username, content) assert line.getDate() is None assert line.getContent() is None assert line.getUsername() is None assert line.hasContent() is False
def test_createFileWriterOverrideUsername(fixture_csv_file): output_file = StringIO() fileWriter: CSVFileWriter = CSVFileWriter( output_file, delimiter="!", channel="test", overrideUsername=True) fileWriter.write(Line(datetime(2019, 4, 13), "username", "content")) hash_reader = hashlib.md5() hash_reader.update(output_file.getvalue().encode("utf-8")) output_hash = hash_reader.hexdigest() hash_reader = hashlib.md5() hash_reader.update(fixture_csv_file.read()) fixture_hash = hash_reader.hexdigest() assert output_hash == fixture_hash
def test_emptyStrings(date, username, content): line: Line = Line(date, username, content) assert line.hasContent() is False
def test_anyNoneParameterHasNoContent(date, username, content): line: Line = Line(date, username, content) assert line.hasContent() is False