| 123456789101112131415161718192021222324252627282930313233343536 |
- # -*- coding: utf-8 -*-
- import os
- import json
- from abc import ABCMeta, abstractmethod
- DEFAULT_METADATA_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "metadata"))
- class BaseFetcher(object):
- __metaclass__ = ABCMeta
- def __init__(self, provider_name, metadata_dir=None):
- if self.__class__ is BaseFetcher:
- raise TypeError("Cannot instantiate abstract class BaseFetcher directly")
- self.provider_name = provider_name
- self.metadata_dir = metadata_dir or DEFAULT_METADATA_DIR
- self.metadata = self._load_metadata()
- def _load_metadata(self):
- file_path = os.path.join(self.metadata_dir, "{}_meta.json".format(self.provider_name))
- if not os.path.exists(file_path):
- return {}
- try:
- with open(file_path, "r") as f:
- return json.load(f)
- except Exception:
- return {}
- def fetch_external_vac_info(self, origin, target, visa_type, vac_code=None):
- """
- Hook for retrieving VAC information online from external tools/APIs when not found in metadata.
- """
- return None
- @abstractmethod
- def fetch_free_config(self, origin, target, visa_type, vac_code=None):
- pass
|