jobs/webcompat-kb/webcompat_kb/base.py (23 lines of code) (raw):
import argparse
import re
from abc import ABC, abstractmethod
from typing import Any, MutableMapping
from .bqhelpers import BigQuery
# In the following we assume ascii-only characters for now. That's perhaps wrong,
# but it covers everything we're currently using.
# See https://cloud.google.com/resource-manager/docs/creating-managing-projects#before_you_begin
VALID_PROJECT_ID = re.compile(r"^[a-z](?:[a-z0-9\-]){4,28}[a-z0-9]$")
# See https://cloud.google.com/bigquery/docs/datasets#dataset-naming
VALID_DATASET_ID = re.compile(r"^[a-zA-Z_0-9]{1,1024}$")
# This is automatically populated when EtlJob subclasses are defined
ALL_JOBS: MutableMapping[str, type["EtlJob"]] = {}
class EtlJob(ABC):
name: str
def __init_subclass__(cls, **kwargs: Any) -> None:
# Populates ALL_JOBS when a subclass is defined.
super().__init_subclass__(**kwargs)
ALL_JOBS[cls.name] = cls
@classmethod
def add_arguments(cls, parser: argparse.ArgumentParser) -> None: ...
def set_default_args(
self, parser: argparse.ArgumentParser, args: argparse.Namespace
) -> None: ...
@abstractmethod
def default_dataset(self, args: argparse.Namespace) -> str: ...
@abstractmethod
def main(self, bq_client: BigQuery, args: argparse.Namespace) -> None:
pass