diff --git a/src/auto_archiver/core/step.py b/src/auto_archiver/core/step.py index 6ac6648..973bc1c 100644 --- a/src/auto_archiver/core/step.py +++ b/src/auto_archiver/core/step.py @@ -21,7 +21,7 @@ class Step(ABC): def init(name: str, config: dict, child: Type[Step]) -> Step: """ - looks into direct subclasses of child for name and returns such ab object + looks into direct subclasses of child for name and returns such an object TODO: cannot find subclasses of child.subclasses """ for sub in child.__subclasses__(): diff --git a/src/auto_archiver/feeders/gsheet_feeder.py b/src/auto_archiver/feeders/gsheet_feeder.py index b3ca66c..5ded351 100644 --- a/src/auto_archiver/feeders/gsheet_feeder.py +++ b/src/auto_archiver/feeders/gsheet_feeder.py @@ -39,7 +39,7 @@ class GsheetsFeeder(Gsheets, Feeder): }) def __iter__(self) -> Metadata: - sh = self.gsheets_client.open(self.sheet) + sh = self.open_sheet() for ii, wks in enumerate(sh.worksheets()): if not self.should_process_sheet(wks.title): logger.debug(f"SKIPPED worksheet '{wks.title}' due to allow/block rules") diff --git a/src/auto_archiver/utils/gsheet.py b/src/auto_archiver/utils/gsheet.py index 0980d8f..edaec02 100644 --- a/src/auto_archiver/utils/gsheet.py +++ b/src/auto_archiver/utils/gsheet.py @@ -10,16 +10,17 @@ class Gsheets(Step): # without this STEP.__init__ is not called super().__init__(config) self.gsheets_client = gspread.service_account(filename=self.service_account) - #TODO: config should be responsible for conversions + # TODO: config should be responsible for conversions try: self.header = int(self.header) except: pass assert type(self.header) == int, f"header ({self.header}) value must be an integer not {type(self.header)}" - assert self.sheet is not None, "You need to define a sheet name in your orchestration file when using gsheets." + assert self.sheet is not None or self.sheet_id is not None, "You need to define either a 'sheet' name or a 'sheet_id' in your orchestration file when using gsheets." @staticmethod def configs() -> dict: return { "sheet": {"default": None, "help": "name of the sheet to archive"}, + "sheet_id": {"default": None, "help": "(alternative to sheet name) the id of the sheet to archive"}, "header": {"default": 1, "help": "index of the header row (starts at 1)"}, "service_account": {"default": "secrets/service_account.json", "help": "service account JSON file path"}, "columns": { @@ -41,4 +42,10 @@ class Gsheets(Step): "help": "names of columns in the google sheet (stringified JSON object)", "cli_set": lambda cli_val, cur_val: dict(cur_val, **json.loads(cli_val)) }, - } \ No newline at end of file + } + + def open_sheet(self): + if self.sheet: + return self.gsheets_client.open(self.sheet) + else: # self.sheet_id + return self.gsheets_client.open_by_key(self.sheet_id)