Miksus / rocketry

Modern scheduling library for Python
https://rocketry.readthedocs.io
MIT License
3.25k stars 105 forks source link

BUG Using CSVFileRepo raise NotImplementedError #161

Closed vba34520 closed 1 year ago

vba34520 commented 1 year ago

Install

pip install rocketry==2.4.1

Code

import datetime

from rocketry import Rocketry
from redbird.repos import CSVFileRepo

app = Rocketry(logger_repo=CSVFileRepo(filename='logs.csv'))

@app.task('secondly')
def do_things():
    print(datetime.datetime.now())

if __name__ == '__main__':
    app.run()

It raise NotImplementedError.

Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\redbird\templates.py", line 68, in last
    return self.repo.query_read_last(self.query_)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\redbird\templates.py", line 309, in query_read_last
    raise NotImplementedError("Read using first not implemented.")
NotImplementedError: Read using first not implemented.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:/mycode/Rocketry_examples/04 日志.py", line 11, in <module>
    def do_things():
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\rocketry\tasks\func.py", line 193, in __call__
    super().__init__(func=func, **self._delayed_kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\rocketry\core\task.py", line 275, in __init__
    self.set_cached()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\rocketry\core\task.py", line 825, in set_cached
    self.last_run = self._get_last_action("run", from_logs=True, logger=logger)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\rocketry\core\task.py", line 1064, in _get_last_action
    value = self._get_last_action_from_log(action, logger)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\rocketry\core\task.py", line 1074, in _get_last_action_from_log
    record = logger.get_latest(action=action)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\rocketry\core\log\adapter.py", line 91, in get_latest
    return self.filter_by(**kwargs).last()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\redbird\templates.py", line 70, in last
    return super().last()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\redbird\base.py", line 57, in last
    for item in self.query():
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\redbird\templates.py", line 23, in query
    yield from items
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\redbird\repos\csv.py", line 82, in query_items
    yield from read_items(self, self.read_file(), query)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\redbird\utils\query.py", line 39, in read_items
    for data in reader:
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\redbird\repos\csv.py", line 114, in read_file
    reader = self.get_reader(file)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\redbird\repos\csv.py", line 143, in get_reader
    return csv.DictReader(buff, fieldnames=self.get_headers(), **self.kwds_csv)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\redbird\repos\csv.py", line 105, in get_headers
    raise TypeError("Cannot determine CSV headers")
TypeError: Cannot determine CSV headers
vba34520 commented 1 year ago
import os
import datetime

from rocketry import Rocketry
from redbird.repos import CSVFileRepo
from rocketry.log import MinimalRecord, LogRecord, TaskLogRecord

filename = 'logs.csv'
if os.path.exists(filename):
    os.remove(filename)

app = Rocketry(logger_repo=CSVFileRepo(filename=filename, model=MinimalRecord))

@app.task('secondly')
def do_things():
    print(datetime.datetime.now())

if __name__ == '__main__':
    app.run()