diff --git a/utils/Sync/kazimir/CSVToken.py b/utils/Sync/kazimir/CSVToken.py new file mode 100644 index 00000000..8ffd0733 --- /dev/null +++ b/utils/Sync/kazimir/CSVToken.py @@ -0,0 +1,46 @@ +import csv +import io + +from kazimir.Token import FileToken, is_file + +extensions = ['.csv'] + + +class CSVToken(FileToken): + @staticmethod + def test(data: str): + return is_file(data, extensions) + + def __init__(self, data) -> None: + super().__init__(data=data) + self.name = 'csv' + self.joinable = False + self.build = None + + async def compile(self): + data = await self.build(self.data) + + f = io.StringIO(data) + reader = csv.reader(f, delimiter=',', quotechar='|') + + headers = next(reader, None) + + row = lambda xs: '\n'.join([ + f'{x}' for x in xs + ]) + + head = '\n'.join([ + f'{x}' for x in headers + ]) + body = '\n'.join([ + f'{row(x)}' for x in reader + ]) + + return f''' + + + {head} + + {body} +
+ '''.strip() diff --git a/utils/Sync/kazimir/Marker.py b/utils/Sync/kazimir/Marker.py index 14cc3982..c351797f 100644 --- a/utils/Sync/kazimir/Marker.py +++ b/utils/Sync/kazimir/Marker.py @@ -1,6 +1,8 @@ import asyncio import lxml.html from markdown import markdown + +from kazimir.CSVToken import CSVToken from kazimir.InstagramToken import InstagramToken from kazimir.YoutubeToken import YoutubeToken from kazimir.Token import SplitToken, ImageToken, UrlToken, FileToken, TextToken, DocumentToken, TokenFactory, \ @@ -156,6 +158,8 @@ Fye! ["Ya"](http://ya.ru) More text + +file.csv ''' @@ -172,6 +176,14 @@ More text } return document + async def read_csv(data): + return '\n'.join([ + 'N,Name', + f'0,{data}', + '1,Pop', + '2,Top', + ]) + async def run(): from kazimir.fix_links_quotes import fix_links_quotes @@ -183,6 +195,7 @@ More text m.add_token_factory(TokenFactory(UrlToken)) m.add_token_factory(TokenFactory(ImageToken)) m.add_token_factory(BuildTokenFactory(build=build_document)) + m.add_token_factory(BuildTokenFactory(CSVToken, build=read_csv)) m.add_token_factory(TokenFactory(FileToken)) m.add_token_factory(TokenFactory(TextToken)) m.add_tree_middleware(fix_links_quotes)