예제 #1
0
    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")
예제 #2
0
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
예제 #3
0
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"))
예제 #4
0
	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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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
예제 #8
0
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
예제 #9
0
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
예제 #10
0
def test_emptyStrings(date, username, content):

    line: Line = Line(date, username, content)
    assert line.hasContent() is False
예제 #11
0
def test_anyNoneParameterHasNoContent(date, username, content):

    line: Line = Line(date, username, content)
    assert line.hasContent() is False