async def load(self): is_freenas = await self.middleware.call("system.is_freenas") main_sources_dir = os.path.join(get_middlewared_dir(), "alert", "source") sources_dirs = [ os.path.join(overlay_dir, "alert", "source") for overlay_dir in self.middleware.overlay_dirs ] sources_dirs.insert(0, main_sources_dir) for sources_dir in sources_dirs: for module in load_modules(sources_dir): for cls in load_classes( module, AlertSource, (FilePresenceAlertSource, ThreadedAlertSource)): source = cls(self.middleware) ALERT_SOURCES[source.name] = source main_services_dir = os.path.join( os.path.dirname(os.path.realpath(__file__)), os.path.pardir, "alert", "service") services_dirs = [ os.path.join(overlay_dir, "alert", "service") for overlay_dir in self.middleware.overlay_dirs ] services_dirs.insert(0, main_services_dir) for services_dir in services_dirs: for module in load_modules(services_dir): for cls in load_classes( module, _AlertService, (ThreadedAlertService, ProThreadedAlertService)): ALERT_SERVICES_FACTORIES[cls.name()] = cls
async def load(self): main_sources_dir = os.path.join(get_middlewared_dir(), "alert", "source") sources_dirs = [ os.path.join(overlay_dir, "alert", "source") for overlay_dir in self.middleware.overlay_dirs ] sources_dirs.insert(0, main_sources_dir) for sources_dir in sources_dirs: for module in load_modules(sources_dir): for cls in load_classes( module, AlertSource, (FilePresenceAlertSource, ThreadedAlertSource)): source = cls(self.middleware) if source.name in ALERT_SOURCES: raise RuntimeError( f"Alert source {source.name} is already registered" ) ALERT_SOURCES[source.name] = source main_services_dir = os.path.join( os.path.dirname(os.path.realpath(__file__)), os.path.pardir, "alert", "service") services_dirs = [ os.path.join(overlay_dir, "alert", "service") for overlay_dir in self.middleware.overlay_dirs ] services_dirs.insert(0, main_services_dir) for services_dir in services_dirs: for module in load_modules(services_dir): for cls in load_classes( module, _AlertService, (ThreadedAlertService, ProThreadedAlertService)): ALERT_SERVICES_FACTORIES[cls.name()] = cls
def load_migrations(middleware): main_sources_dir = os.path.join(get_middlewared_dir(), "migration") sources_dirs = [os.path.join(overlay_dir, "migration") for overlay_dir in middleware.overlay_dirs] sources_dirs.insert(0, main_sources_dir) modules = [] for sources_dir in sources_dirs: modules.extend(load_modules(sources_dir)) return sorted(modules, key=lambda module: module.__name__)
if provider.fast_list: schema.append( Bool("fast_list", default=False, title="Use --fast-list", description=textwrap.dedent("""\ Use fewer transactions in exchange for more RAM. This may also speed up or slow down your transfer. See [rclone documentation](https://rclone.org/docs/#fast-list) for more details. """).rstrip())) return schema remote_classes = [] for module in load_modules( os.path.join(get_middlewared_dir(), "rclone", "remote")): for cls in load_classes(module, BaseRcloneRemote, []): remote_classes.append(cls) for method_name in cls.extra_methods: setattr(CloudSyncService, f"{cls.name.lower()}_{method_name}", getattr(cls, method_name)) class CloudSyncFSAttachmentDelegate(LockableFSAttachmentDelegate): name = 'cloudsync' title = 'CloudSync Task' service_class = CloudSyncService resource_name = 'path' async def restart_reload_services(self, attachments): await self.middleware.call('service.restart', 'cron')
sys.path.append('/usr/local/lib') # this is the Alembic Config object, which provides # access to the values within the .ini file in use. config = context.config # Interpret the config file for Python logging. # This line sets up loggers basically. fileConfig(config.config_file_name) # add your model's MetaData object here # for 'autogenerate' support # from myapp import mymodel # target_metadata = mymodel.Base.metadata target_metadata = Model.metadata list(load_modules(os.path.join(get_middlewared_dir(), "plugins"), depth=1)) list(load_modules("/usr/local/lib/middlewared_truenas/plugins", depth=1)) # other values from the config, defined by the needs of env.py, # can be acquired: # my_important_option = config.get_main_option("my_important_option") # ... etc. DATABASE_URL = f"sqlite:///{os.environ.get('FREENAS_DATABASE', FREENAS_DATABASE)}" @Operations.register_operation("drop_references") @BatchOperations.register_operation("drop_references", "batch_drop_references") class DropReferencesOp(ops.MigrateOperation): def __init__( self, field_name,
sys.path.append('/usr/local/lib') # this is the Alembic Config object, which provides # access to the values within the .ini file in use. config = context.config # Interpret the config file for Python logging. # This line sets up loggers basically. fileConfig(config.config_file_name) # add your model's MetaData object here # for 'autogenerate' support # from myapp import mymodel # target_metadata = mymodel.Base.metadata target_metadata = Model.metadata list(load_modules(os.path.join(get_middlewared_dir(), "plugins"), depth=1)) # other values from the config, defined by the needs of env.py, # can be acquired: # my_important_option = config.get_main_option("my_important_option") # ... etc. DATABASE_URL = f"sqlite:///{os.environ.get('FREENAS_DATABASE', FREENAS_DATABASE)}" @Operations.register_operation("drop_references") @BatchOperations.register_operation("drop_references", "batch_drop_references") class DropReferencesOp(ops.MigrateOperation): def __init__( self, field_name, table_name,