ominfra 0.0.0.dev191__py3-none-any.whl → 0.0.0.dev192__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ominfra/manage/deploy/apps.py +10 -0
- ominfra/manage/deploy/conf/manager.py +8 -2
- ominfra/manage/deploy/deploy.py +12 -5
- ominfra/manage/deploy/git.py +3 -1
- ominfra/manage/deploy/specs.py +2 -0
- ominfra/manage/deploy/systemd.py +2 -1
- ominfra/scripts/manage.py +36 -9
- ominfra/scripts/supervisor.py +18 -9
- ominfra/supervisor/configs.py +6 -0
- ominfra/supervisor/http.py +1 -1
- ominfra/supervisor/inject.py +11 -8
- {ominfra-0.0.0.dev191.dist-info → ominfra-0.0.0.dev192.dist-info}/METADATA +4 -4
- {ominfra-0.0.0.dev191.dist-info → ominfra-0.0.0.dev192.dist-info}/RECORD +17 -17
- {ominfra-0.0.0.dev191.dist-info → ominfra-0.0.0.dev192.dist-info}/LICENSE +0 -0
- {ominfra-0.0.0.dev191.dist-info → ominfra-0.0.0.dev192.dist-info}/WHEEL +0 -0
- {ominfra-0.0.0.dev191.dist-info → ominfra-0.0.0.dev192.dist-info}/entry_points.txt +0 -0
- {ominfra-0.0.0.dev191.dist-info → ominfra-0.0.0.dev192.dist-info}/top_level.txt +0 -0
    
        ominfra/manage/deploy/apps.py
    CHANGED
    
    | @@ -84,6 +84,8 @@ class DeployAppManager(DeployPathOwner): | |
| 84 84 | 
             
                        spec: DeployAppSpec,
         | 
| 85 85 | 
             
                        home: DeployHome,
         | 
| 86 86 | 
             
                        tags: DeployTagMap,
         | 
| 87 | 
            +
                        *,
         | 
| 88 | 
            +
                        conf_string_ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
         | 
| 87 89 | 
             
                ) -> PreparedApp:
         | 
| 88 90 | 
             
                    spec_json = json_dumps_pretty(self._msh.marshal_obj(spec))
         | 
| 89 91 |  | 
| @@ -140,9 +142,17 @@ class DeployAppManager(DeployPathOwner): | |
| 140 142 | 
             
                    if spec.conf is not None:
         | 
| 141 143 | 
             
                        conf_dir = os.path.join(app_dir, 'conf')
         | 
| 142 144 | 
             
                        rkw.update(conf_dir=conf_dir)
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                        conf_ns: ta.Dict[str, ta.Any] = dict(
         | 
| 147 | 
            +
                            **(conf_string_ns or {}),
         | 
| 148 | 
            +
                            app=spec.app.s,
         | 
| 149 | 
            +
                            app_dir=app_dir.rstrip('/'),
         | 
| 150 | 
            +
                        )
         | 
| 151 | 
            +
             | 
| 143 152 | 
             
                        await self._conf.write_app_conf(
         | 
| 144 153 | 
             
                            spec.conf,
         | 
| 145 154 | 
             
                            conf_dir,
         | 
| 155 | 
            +
                            string_ns=conf_ns,
         | 
| 146 156 | 
             
                        )
         | 
| 147 157 |  | 
| 148 158 | 
             
                    #
         | 
| @@ -133,9 +133,15 @@ class DeployConfManager: | |
| 133 133 | 
             
                        self,
         | 
| 134 134 | 
             
                        spec: DeployAppConfSpec,
         | 
| 135 135 | 
             
                        app_conf_dir: str,
         | 
| 136 | 
            +
                        *,
         | 
| 137 | 
            +
                        string_ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
         | 
| 136 138 | 
             
                ) -> None:
         | 
| 137 | 
            -
                     | 
| 138 | 
            -
             | 
| 139 | 
            +
                    process_str: ta.Any
         | 
| 140 | 
            +
                    if string_ns is not None:
         | 
| 141 | 
            +
                        def process_str(s: str) -> str:
         | 
| 142 | 
            +
                            return s.format(**string_ns)
         | 
| 143 | 
            +
                    else:
         | 
| 144 | 
            +
                        process_str = None
         | 
| 139 145 |  | 
| 140 146 | 
             
                    for acf in spec.files or []:
         | 
| 141 147 | 
             
                        await self._write_app_conf_file(
         | 
    
        ominfra/manage/deploy/deploy.py
    CHANGED
    
    | @@ -30,7 +30,7 @@ from .types import DeployHome | |
| 30 30 | 
             
            ##
         | 
| 31 31 |  | 
| 32 32 |  | 
| 33 | 
            -
            DEPLOY_TAG_DATETIME_FMT = '%Y | 
| 33 | 
            +
            DEPLOY_TAG_DATETIME_FMT = '%Y-%m-%d-T-%H-%M-%S-%f-Z'
         | 
| 34 34 |  | 
| 35 35 |  | 
| 36 36 | 
             
            DeployManagerUtcClock = ta.NewType('DeployManagerUtcClock', Func0[datetime.datetime])
         | 
| @@ -183,8 +183,9 @@ class DeployDriver: | |
| 183 183 |  | 
| 184 184 | 
             
                    das: ta.Set[DeployApp] = {a.app for a in self._spec.apps}
         | 
| 185 185 | 
             
                    las: ta.Set[DeployApp] = set(self._spec.app_links.apps)
         | 
| 186 | 
            -
                     | 
| 187 | 
            -
             | 
| 186 | 
            +
                    ras: ta.Set[DeployApp] = set(self._spec.app_links.removed_apps)
         | 
| 187 | 
            +
                    check.empty(das & (las | ras))
         | 
| 188 | 
            +
                    check.empty(las & ras)
         | 
| 188 189 |  | 
| 189 190 | 
             
                    #
         | 
| 190 191 |  | 
| @@ -230,10 +231,10 @@ class DeployDriver: | |
| 230 231 | 
             
                        cad = abs_real_path(os.path.join(current_link, 'apps'))
         | 
| 231 232 | 
             
                        if os.path.exists(cad):
         | 
| 232 233 | 
             
                            for d in os.listdir(cad):
         | 
| 233 | 
            -
                                if (da := DeployApp(d)) not in das:
         | 
| 234 | 
            +
                                if (da := DeployApp(d)) not in das and da not in ras:
         | 
| 234 235 | 
             
                                    las.add(da)
         | 
| 235 236 |  | 
| 236 | 
            -
                    for la in  | 
| 237 | 
            +
                    for la in las:
         | 
| 237 238 | 
             
                        await self._drive_app_link(
         | 
| 238 239 | 
             
                            la,
         | 
| 239 240 | 
             
                            current_link,
         | 
| @@ -263,10 +264,16 @@ class DeployDriver: | |
| 263 264 | 
             
                #
         | 
| 264 265 |  | 
| 265 266 | 
             
                async def _drive_app_deploy(self, app: DeployAppSpec) -> None:
         | 
| 267 | 
            +
                    current_deploy_link = os.path.join(self._home, self._deploys.CURRENT_DEPLOY_LINK.render())
         | 
| 268 | 
            +
             | 
| 266 269 | 
             
                    pa = await self._apps.prepare_app(
         | 
| 267 270 | 
             
                        app,
         | 
| 268 271 | 
             
                        self._home,
         | 
| 269 272 | 
             
                        self.tags,
         | 
| 273 | 
            +
                        conf_string_ns=dict(
         | 
| 274 | 
            +
                            deploy_home=self._home,
         | 
| 275 | 
            +
                            current_deploy_link=current_deploy_link,
         | 
| 276 | 
            +
                        ),
         | 
| 270 277 | 
             
                    )
         | 
| 271 278 |  | 
| 272 279 | 
             
                    #
         | 
    
        ominfra/manage/deploy/git.py
    CHANGED
    
    | @@ -91,7 +91,9 @@ class DeployGitManager(SingleDirDeployPathOwner): | |
| 91 91 |  | 
| 92 92 | 
             
                    async def fetch(self, rev: DeployRev) -> None:
         | 
| 93 93 | 
             
                        await self.init()
         | 
| 94 | 
            -
             | 
| 94 | 
            +
             | 
| 95 | 
            +
                        # This fetch shouldn't be depth=1 - git doesn't reuse local data with shallow fetches.
         | 
| 96 | 
            +
                        await self._call('git', 'fetch', 'origin', rev)
         | 
| 95 97 |  | 
| 96 98 | 
             
                    #
         | 
| 97 99 |  | 
    
        ominfra/manage/deploy/specs.py
    CHANGED
    
    
    
        ominfra/manage/deploy/systemd.py
    CHANGED
    
    | @@ -8,6 +8,7 @@ TODO: | |
| 8 8 | 
             
              - ominfra.systemd / x.sd_orphans
         | 
| 9 9 | 
             
            """
         | 
| 10 10 | 
             
            import os.path
         | 
| 11 | 
            +
            import shutil
         | 
| 11 12 | 
             
            import sys
         | 
| 12 13 | 
             
            import typing as ta
         | 
| 13 14 |  | 
| @@ -101,7 +102,7 @@ class DeploySystemdManager: | |
| 101 102 |  | 
| 102 103 | 
             
                    #
         | 
| 103 104 |  | 
| 104 | 
            -
                    if sys.platform == 'linux':
         | 
| 105 | 
            +
                    if sys.platform == 'linux' and shutil.which('systemctl') is not None:
         | 
| 105 106 | 
             
                        async def reload() -> None:
         | 
| 106 107 | 
             
                            await asyncio_subprocesses.check_call('systemctl', '--user', 'daemon-reload')
         | 
| 107 108 |  | 
    
        ominfra/scripts/manage.py
    CHANGED
    
    | @@ -9353,9 +9353,15 @@ class DeployConfManager: | |
| 9353 9353 | 
             
                        self,
         | 
| 9354 9354 | 
             
                        spec: DeployAppConfSpec,
         | 
| 9355 9355 | 
             
                        app_conf_dir: str,
         | 
| 9356 | 
            +
                        *,
         | 
| 9357 | 
            +
                        string_ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
         | 
| 9356 9358 | 
             
                ) -> None:
         | 
| 9357 | 
            -
                     | 
| 9358 | 
            -
             | 
| 9359 | 
            +
                    process_str: ta.Any
         | 
| 9360 | 
            +
                    if string_ns is not None:
         | 
| 9361 | 
            +
                        def process_str(s: str) -> str:
         | 
| 9362 | 
            +
                            return s.format(**string_ns)
         | 
| 9363 | 
            +
                    else:
         | 
| 9364 | 
            +
                        process_str = None
         | 
| 9359 9365 |  | 
| 9360 9366 | 
             
                    for acf in spec.files or []:
         | 
| 9361 9367 | 
             
                        await self._write_app_conf_file(
         | 
| @@ -9608,6 +9614,8 @@ class DeployAppSpec(DeploySpecKeyed[DeployAppKey]): | |
| 9608 9614 | 
             
            class DeployAppLinksSpec:
         | 
| 9609 9615 | 
             
                apps: ta.Sequence[DeployApp] = ()
         | 
| 9610 9616 |  | 
| 9617 | 
            +
                removed_apps: ta.Sequence[DeployApp] = ()
         | 
| 9618 | 
            +
             | 
| 9611 9619 | 
             
                exclude_unspecified: bool = False
         | 
| 9612 9620 |  | 
| 9613 9621 |  | 
| @@ -10967,7 +10975,9 @@ class DeployGitManager(SingleDirDeployPathOwner): | |
| 10967 10975 |  | 
| 10968 10976 | 
             
                    async def fetch(self, rev: DeployRev) -> None:
         | 
| 10969 10977 | 
             
                        await self.init()
         | 
| 10970 | 
            -
             | 
| 10978 | 
            +
             | 
| 10979 | 
            +
                        # This fetch shouldn't be depth=1 - git doesn't reuse local data with shallow fetches.
         | 
| 10980 | 
            +
                        await self._call('git', 'fetch', 'origin', rev)
         | 
| 10971 10981 |  | 
| 10972 10982 | 
             
                    #
         | 
| 10973 10983 |  | 
| @@ -11125,7 +11135,7 @@ class DeploySystemdManager: | |
| 11125 11135 |  | 
| 11126 11136 | 
             
                    #
         | 
| 11127 11137 |  | 
| 11128 | 
            -
                    if sys.platform == 'linux':
         | 
| 11138 | 
            +
                    if sys.platform == 'linux' and shutil.which('systemctl') is not None:
         | 
| 11129 11139 | 
             
                        async def reload() -> None:
         | 
| 11130 11140 | 
             
                            await asyncio_subprocesses.check_call('systemctl', '--user', 'daemon-reload')
         | 
| 11131 11141 |  | 
| @@ -11614,6 +11624,8 @@ class DeployAppManager(DeployPathOwner): | |
| 11614 11624 | 
             
                        spec: DeployAppSpec,
         | 
| 11615 11625 | 
             
                        home: DeployHome,
         | 
| 11616 11626 | 
             
                        tags: DeployTagMap,
         | 
| 11627 | 
            +
                        *,
         | 
| 11628 | 
            +
                        conf_string_ns: ta.Optional[ta.Mapping[str, ta.Any]] = None,
         | 
| 11617 11629 | 
             
                ) -> PreparedApp:
         | 
| 11618 11630 | 
             
                    spec_json = json_dumps_pretty(self._msh.marshal_obj(spec))
         | 
| 11619 11631 |  | 
| @@ -11670,9 +11682,17 @@ class DeployAppManager(DeployPathOwner): | |
| 11670 11682 | 
             
                    if spec.conf is not None:
         | 
| 11671 11683 | 
             
                        conf_dir = os.path.join(app_dir, 'conf')
         | 
| 11672 11684 | 
             
                        rkw.update(conf_dir=conf_dir)
         | 
| 11685 | 
            +
             | 
| 11686 | 
            +
                        conf_ns: ta.Dict[str, ta.Any] = dict(
         | 
| 11687 | 
            +
                            **(conf_string_ns or {}),
         | 
| 11688 | 
            +
                            app=spec.app.s,
         | 
| 11689 | 
            +
                            app_dir=app_dir.rstrip('/'),
         | 
| 11690 | 
            +
                        )
         | 
| 11691 | 
            +
             | 
| 11673 11692 | 
             
                        await self._conf.write_app_conf(
         | 
| 11674 11693 | 
             
                            spec.conf,
         | 
| 11675 11694 | 
             
                            conf_dir,
         | 
| 11695 | 
            +
                            string_ns=conf_ns,
         | 
| 11676 11696 | 
             
                        )
         | 
| 11677 11697 |  | 
| 11678 11698 | 
             
                    #
         | 
| @@ -11735,7 +11755,7 @@ class DeployAppManager(DeployPathOwner): | |
| 11735 11755 | 
             
            ##
         | 
| 11736 11756 |  | 
| 11737 11757 |  | 
| 11738 | 
            -
            DEPLOY_TAG_DATETIME_FMT = '%Y | 
| 11758 | 
            +
            DEPLOY_TAG_DATETIME_FMT = '%Y-%m-%d-T-%H-%M-%S-%f-Z'
         | 
| 11739 11759 |  | 
| 11740 11760 |  | 
| 11741 11761 | 
             
            DeployManagerUtcClock = ta.NewType('DeployManagerUtcClock', Func0[datetime.datetime])
         | 
| @@ -11888,8 +11908,9 @@ class DeployDriver: | |
| 11888 11908 |  | 
| 11889 11909 | 
             
                    das: ta.Set[DeployApp] = {a.app for a in self._spec.apps}
         | 
| 11890 11910 | 
             
                    las: ta.Set[DeployApp] = set(self._spec.app_links.apps)
         | 
| 11891 | 
            -
                     | 
| 11892 | 
            -
             | 
| 11911 | 
            +
                    ras: ta.Set[DeployApp] = set(self._spec.app_links.removed_apps)
         | 
| 11912 | 
            +
                    check.empty(das & (las | ras))
         | 
| 11913 | 
            +
                    check.empty(las & ras)
         | 
| 11893 11914 |  | 
| 11894 11915 | 
             
                    #
         | 
| 11895 11916 |  | 
| @@ -11935,10 +11956,10 @@ class DeployDriver: | |
| 11935 11956 | 
             
                        cad = abs_real_path(os.path.join(current_link, 'apps'))
         | 
| 11936 11957 | 
             
                        if os.path.exists(cad):
         | 
| 11937 11958 | 
             
                            for d in os.listdir(cad):
         | 
| 11938 | 
            -
                                if (da := DeployApp(d)) not in das:
         | 
| 11959 | 
            +
                                if (da := DeployApp(d)) not in das and da not in ras:
         | 
| 11939 11960 | 
             
                                    las.add(da)
         | 
| 11940 11961 |  | 
| 11941 | 
            -
                    for la in  | 
| 11962 | 
            +
                    for la in las:
         | 
| 11942 11963 | 
             
                        await self._drive_app_link(
         | 
| 11943 11964 | 
             
                            la,
         | 
| 11944 11965 | 
             
                            current_link,
         | 
| @@ -11968,10 +11989,16 @@ class DeployDriver: | |
| 11968 11989 | 
             
                #
         | 
| 11969 11990 |  | 
| 11970 11991 | 
             
                async def _drive_app_deploy(self, app: DeployAppSpec) -> None:
         | 
| 11992 | 
            +
                    current_deploy_link = os.path.join(self._home, self._deploys.CURRENT_DEPLOY_LINK.render())
         | 
| 11993 | 
            +
             | 
| 11971 11994 | 
             
                    pa = await self._apps.prepare_app(
         | 
| 11972 11995 | 
             
                        app,
         | 
| 11973 11996 | 
             
                        self._home,
         | 
| 11974 11997 | 
             
                        self.tags,
         | 
| 11998 | 
            +
                        conf_string_ns=dict(
         | 
| 11999 | 
            +
                            deploy_home=self._home,
         | 
| 12000 | 
            +
                            current_deploy_link=current_deploy_link,
         | 
| 12001 | 
            +
                        ),
         | 
| 11975 12002 | 
             
                    )
         | 
| 11976 12003 |  | 
| 11977 12004 | 
             
                    #
         | 
    
        ominfra/scripts/supervisor.py
    CHANGED
    
    | @@ -6481,6 +6481,12 @@ class ServerConfig: | |
| 6481 6481 | 
             
                # TODO: implement - make sure to accept broken symlinks
         | 
| 6482 6482 | 
             
                group_config_dirs: ta.Optional[ta.Sequence[str]] = None
         | 
| 6483 6483 |  | 
| 6484 | 
            +
                #
         | 
| 6485 | 
            +
             | 
| 6486 | 
            +
                http_port: ta.Optional[int] = None
         | 
| 6487 | 
            +
             | 
| 6488 | 
            +
                #
         | 
| 6489 | 
            +
             | 
| 6484 6490 | 
             
                @classmethod
         | 
| 6485 6491 | 
             
                def new(
         | 
| 6486 6492 | 
             
                        cls,
         | 
| @@ -8354,7 +8360,7 @@ class HttpServer(HasDispatchers): | |
| 8354 8360 | 
             
                def __init__(
         | 
| 8355 8361 | 
             
                        self,
         | 
| 8356 8362 | 
             
                        handler: Handler,
         | 
| 8357 | 
            -
                        addr: Address = Address(('localhost', 8000)),
         | 
| 8363 | 
            +
                        addr: Address,  # = Address(('localhost', 8000)),
         | 
| 8358 8364 | 
             
                        *,
         | 
| 8359 8365 | 
             
                        exit_stack: contextlib.ExitStack,
         | 
| 8360 8366 | 
             
                ) -> None:
         | 
| @@ -9617,16 +9623,19 @@ def bind_server( | |
| 9617 9623 |  | 
| 9618 9624 | 
             
                #
         | 
| 9619 9625 |  | 
| 9620 | 
            -
                 | 
| 9621 | 
            -
                     | 
| 9626 | 
            +
                if config.http_port is not None:
         | 
| 9627 | 
            +
                    def _provide_http_handler(s: SupervisorHttpHandler) -> HttpServer.Handler:
         | 
| 9628 | 
            +
                        return HttpServer.Handler(s.handle)
         | 
| 9622 9629 |  | 
| 9623 | 
            -
             | 
| 9624 | 
            -
             | 
| 9625 | 
            -
             | 
| 9630 | 
            +
                    lst.extend([
         | 
| 9631 | 
            +
                        inj.bind(HttpServer, singleton=True, eager=True),
         | 
| 9632 | 
            +
                        inj.bind(HasDispatchers, array=True, to_key=HttpServer),
         | 
| 9626 9633 |  | 
| 9627 | 
            -
             | 
| 9628 | 
            -
             | 
| 9629 | 
            -
             | 
| 9634 | 
            +
                        inj.bind(HttpServer.Address(('localhost', config.http_port))),
         | 
| 9635 | 
            +
             | 
| 9636 | 
            +
                        inj.bind(SupervisorHttpHandler, singleton=True),
         | 
| 9637 | 
            +
                        inj.bind(_provide_http_handler),
         | 
| 9638 | 
            +
                    ])
         | 
| 9630 9639 |  | 
| 9631 9640 | 
             
                #
         | 
| 9632 9641 |  | 
    
        ominfra/supervisor/configs.py
    CHANGED
    
    | @@ -248,6 +248,12 @@ class ServerConfig: | |
| 248 248 | 
             
                # TODO: implement - make sure to accept broken symlinks
         | 
| 249 249 | 
             
                group_config_dirs: ta.Optional[ta.Sequence[str]] = None
         | 
| 250 250 |  | 
| 251 | 
            +
                #
         | 
| 252 | 
            +
             | 
| 253 | 
            +
                http_port: ta.Optional[int] = None
         | 
| 254 | 
            +
             | 
| 255 | 
            +
                #
         | 
| 256 | 
            +
             | 
| 251 257 | 
             
                @classmethod
         | 
| 252 258 | 
             
                def new(
         | 
| 253 259 | 
             
                        cls,
         | 
    
        ominfra/supervisor/http.py
    CHANGED
    
    
    
        ominfra/supervisor/inject.py
    CHANGED
    
    | @@ -131,16 +131,19 @@ def bind_server( | |
| 131 131 |  | 
| 132 132 | 
             
                #
         | 
| 133 133 |  | 
| 134 | 
            -
                 | 
| 135 | 
            -
                     | 
| 134 | 
            +
                if config.http_port is not None:
         | 
| 135 | 
            +
                    def _provide_http_handler(s: SupervisorHttpHandler) -> HttpServer.Handler:
         | 
| 136 | 
            +
                        return HttpServer.Handler(s.handle)
         | 
| 136 137 |  | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 138 | 
            +
                    lst.extend([
         | 
| 139 | 
            +
                        inj.bind(HttpServer, singleton=True, eager=True),
         | 
| 140 | 
            +
                        inj.bind(HasDispatchers, array=True, to_key=HttpServer),
         | 
| 140 141 |  | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 142 | 
            +
                        inj.bind(HttpServer.Address(('localhost', config.http_port))),
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                        inj.bind(SupervisorHttpHandler, singleton=True),
         | 
| 145 | 
            +
                        inj.bind(_provide_http_handler),
         | 
| 146 | 
            +
                    ])
         | 
| 144 147 |  | 
| 145 148 | 
             
                #
         | 
| 146 149 |  | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            Metadata-Version: 2.1
         | 
| 2 2 | 
             
            Name: ominfra
         | 
| 3 | 
            -
            Version: 0.0.0. | 
| 3 | 
            +
            Version: 0.0.0.dev192
         | 
| 4 4 | 
             
            Summary: ominfra
         | 
| 5 5 | 
             
            Author: wrmsr
         | 
| 6 6 | 
             
            License: BSD-3-Clause
         | 
| @@ -12,9 +12,9 @@ Classifier: Operating System :: OS Independent | |
| 12 12 | 
             
            Classifier: Operating System :: POSIX
         | 
| 13 13 | 
             
            Requires-Python: >=3.12
         | 
| 14 14 | 
             
            License-File: LICENSE
         | 
| 15 | 
            -
            Requires-Dist: omdev==0.0.0. | 
| 16 | 
            -
            Requires-Dist: omlish==0.0.0. | 
| 17 | 
            -
            Requires-Dist: omserv==0.0.0. | 
| 15 | 
            +
            Requires-Dist: omdev==0.0.0.dev192
         | 
| 16 | 
            +
            Requires-Dist: omlish==0.0.0.dev192
         | 
| 17 | 
            +
            Requires-Dist: omserv==0.0.0.dev192
         | 
| 18 18 | 
             
            Provides-Extra: all
         | 
| 19 19 | 
             
            Requires-Dist: paramiko~=3.5; extra == "all"
         | 
| 20 20 | 
             
            Requires-Dist: asyncssh~=2.18; extra == "all"
         | 
| @@ -45,24 +45,24 @@ ominfra/manage/commands/ping.py,sha256=DVZFzL1Z_f-Bq53vxMrL3xOi0iK_nMonJE4KvQf9w | |
| 45 45 | 
             
            ominfra/manage/commands/subprocess.py,sha256=yHGMbAI-xKe_9BUs5IZ3Yav8qRE-I9aGnBtTwW15Pnw,2440
         | 
| 46 46 | 
             
            ominfra/manage/commands/types.py,sha256=XFZPeqeIBAaIIQF3pdPbGxLlb-LCrz6WtlDWO2q_vz0,210
         | 
| 47 47 | 
             
            ominfra/manage/deploy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 48 | 
            -
            ominfra/manage/deploy/apps.py,sha256= | 
| 48 | 
            +
            ominfra/manage/deploy/apps.py,sha256=T0eU0Jw-h33_ZPIs0zy9DOx_fgs3YSAAGzu-H0pvt2U,4865
         | 
| 49 49 | 
             
            ominfra/manage/deploy/commands.py,sha256=OVZzSY4EP_SD7KJRkIIPeqUxcV4mcwrc_WYNvM16ahM,830
         | 
| 50 50 | 
             
            ominfra/manage/deploy/config.py,sha256=kPpl8TRisz295cM4oj-RHA6oh5jdcJ_N9pVpkl_doO8,114
         | 
| 51 | 
            -
            ominfra/manage/deploy/deploy.py,sha256= | 
| 52 | 
            -
            ominfra/manage/deploy/git.py,sha256= | 
| 51 | 
            +
            ominfra/manage/deploy/deploy.py,sha256=YRr_0OPIZJ9LnOeMaHYCSSvqh81a5_LB7OZy-bR2GeA,8966
         | 
| 52 | 
            +
            ominfra/manage/deploy/git.py,sha256=AnZCUuJt9infrWLAgxwELSEJVkDACNwQCen2Qi81-IA,4047
         | 
| 53 53 | 
             
            ominfra/manage/deploy/inject.py,sha256=lVNik0CfQMd31fiqzFlM828oQKVUTJY-zTmU1pGOopQ,3467
         | 
| 54 54 | 
             
            ominfra/manage/deploy/inject_.py,sha256=LR7gEkVx2ldUoQZsGvIcm1Y4QXCVDnLIAdc3LHhQiD4,392
         | 
| 55 55 | 
             
            ominfra/manage/deploy/interp.py,sha256=_5fuHrY5ZA0eGbnNcOqAhAMSWI1UNvbm0l29eDjE5fI,1037
         | 
| 56 56 | 
             
            ominfra/manage/deploy/nginx.py,sha256=cU9GjWMSxqeNhbuSBZYRuBXUokiRiY4OWMLAgbj_4m4,89
         | 
| 57 | 
            -
            ominfra/manage/deploy/specs.py,sha256= | 
| 58 | 
            -
            ominfra/manage/deploy/systemd.py,sha256= | 
| 57 | 
            +
            ominfra/manage/deploy/specs.py,sha256=0mZnMeMYLChcryXQhQ1V72zr8ooCWaw9AMvnPVJBZFE,2866
         | 
| 58 | 
            +
            ominfra/manage/deploy/systemd.py,sha256=5hJ6d2zT24zBMUkuJwkhsvm7r4MqNBtm4_ov0kF2Jus,3612
         | 
| 59 59 | 
             
            ominfra/manage/deploy/tags.py,sha256=h2kJEmizzeKcn7hG-oKnakCquS87xw8EPb2nkB-XkaI,5118
         | 
| 60 60 | 
             
            ominfra/manage/deploy/tmp.py,sha256=FqXoVpIpVe8-KWNu7kXt37A4jKdK_y7h_YFvtrUoOG8,729
         | 
| 61 61 | 
             
            ominfra/manage/deploy/types.py,sha256=ZcIoheZ3zW7n0IZiqTRW_Uo3JyWWeWg5nyKGryvGc2I,112
         | 
| 62 62 | 
             
            ominfra/manage/deploy/venvs.py,sha256=PlvhyhZavgiSwGt8BXrhoSwQFVKpU0zCtq2C2N1_8Ak,1696
         | 
| 63 63 | 
             
            ominfra/manage/deploy/conf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 64 64 | 
             
            ominfra/manage/deploy/conf/inject.py,sha256=xHZQr7oaJCxaKgpJ0H-hgiQNGt4QsskhT3f5v7xrFwE,451
         | 
| 65 | 
            -
            ominfra/manage/deploy/conf/manager.py,sha256= | 
| 65 | 
            +
            ominfra/manage/deploy/conf/manager.py,sha256=ZJPwLuly5Jwd6-42umv_hDNr3J86zNrZkNU-RuM0ees,8302
         | 
| 66 66 | 
             
            ominfra/manage/deploy/conf/specs.py,sha256=AWeofV1YbcNZS-7WX7EpsX8i_7stJAXndXktB6fDWw8,2187
         | 
| 67 67 | 
             
            ominfra/manage/deploy/paths/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 68 68 | 
             
            ominfra/manage/deploy/paths/inject.py,sha256=X81C-Qhef1LQ7tILWvkomBwFTvgooLVmWRnKL7TeVoI,596
         | 
| @@ -94,20 +94,20 @@ ominfra/manage/targets/inject.py,sha256=P4597xWM-V3I_gCt2O71OLhYQkkXtuJvkYRsIbhh | |
| 94 94 | 
             
            ominfra/manage/targets/targets.py,sha256=7GP6UAZyJFEhpkJN6UQdpr_WN3p7C76v-s445y-WB6U,1885
         | 
| 95 95 | 
             
            ominfra/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 96 96 | 
             
            ominfra/scripts/journald2aws.py,sha256=jxBI2ETft-GMJn0hFwV_lZgT55tj2kqKl0PszxUkOg8,158938
         | 
| 97 | 
            -
            ominfra/scripts/manage.py,sha256= | 
| 98 | 
            -
            ominfra/scripts/supervisor.py,sha256= | 
| 97 | 
            +
            ominfra/scripts/manage.py,sha256=_C2fwegFHqx7OK0dfPZ631HwZHYfCYubi24sDHwSk4U,346082
         | 
| 98 | 
            +
            ominfra/scripts/supervisor.py,sha256=5Nskq1fVdgwXvRXojDmkMO3JlcfQkxOwJ5vgexFi9EE,283429
         | 
| 99 99 | 
             
            ominfra/supervisor/LICENSE.txt,sha256=yvqaMNsDhWxziHa9ien6qCW1SkZv-DQlAg96XjfSee8,1746
         | 
| 100 100 | 
             
            ominfra/supervisor/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
         | 
| 101 101 | 
             
            ominfra/supervisor/__main__.py,sha256=I0yFw-C08OOiZ3BF6lF1Oiv789EQXu-_j6whDhQUTEA,66
         | 
| 102 | 
            -
            ominfra/supervisor/configs.py,sha256= | 
| 102 | 
            +
            ominfra/supervisor/configs.py,sha256=rA32edDnkfcUYSUPVRG4QIoGwCvnhstaNN2jTXvoqt4,13825
         | 
| 103 103 | 
             
            ominfra/supervisor/dispatchers.py,sha256=zXLwQS4Vc6dWw5o9QOL04UMDt7w6CKu9wf19CjUiS2Q,1005
         | 
| 104 104 | 
             
            ominfra/supervisor/dispatchersimpl.py,sha256=q3dEyOHWTPKm28nmAGisjgIW1BX6O3-SzbYa7nWuTEs,11349
         | 
| 105 105 | 
             
            ominfra/supervisor/events.py,sha256=XGrtzHr1xm0dwjz329fn9eR0_Ap-LQL6Sk8LJ8eVDEo,6692
         | 
| 106 106 | 
             
            ominfra/supervisor/exceptions.py,sha256=Qbu211H3CLlSmi9LsSikOwrcL5HgJP9ugvcKWlGTAoI,750
         | 
| 107 107 | 
             
            ominfra/supervisor/groups.py,sha256=MBbsbt8Zh_WEYkGOr1KXa82gnPVw9wPB2lAnqhugXSc,2457
         | 
| 108 108 | 
             
            ominfra/supervisor/groupsimpl.py,sha256=PCDyc_Wc-pnvIj56_aEyiA5exCpK6n9iErqnJzO2rZk,2281
         | 
| 109 | 
            -
            ominfra/supervisor/http.py,sha256= | 
| 110 | 
            -
            ominfra/supervisor/inject.py,sha256= | 
| 109 | 
            +
            ominfra/supervisor/http.py,sha256=Tl5eT6dyf4KuQXKbhGo1B6CFEzUDtPl_DZAuUFVD9zI,3453
         | 
| 110 | 
            +
            ominfra/supervisor/inject.py,sha256=IeR-WKvK1sGNxMe6G2OBT5kSP7EUP5ipkDgcUFmDPCA,4838
         | 
| 111 111 | 
             
            ominfra/supervisor/io.py,sha256=moaGNaPuYXEAUzLg8Qjo05DEIcOUNYUj8SSr8eT0d24,3198
         | 
| 112 112 | 
             
            ominfra/supervisor/main.py,sha256=7YrreFNntdRCp6MplCclfnRcgrRIb_UCeohJkDC9Few,4251
         | 
| 113 113 | 
             
            ominfra/supervisor/pipes.py,sha256=2ZihNTnRNjnIPOtPbm3_pyqO15f7BNs7WnNtO5V8ahM,2231
         | 
| @@ -137,9 +137,9 @@ ominfra/tailscale/api.py,sha256=C5-t_b6jZXUWcy5k8bXm7CFnk73pSdrlMOgGDeGVrpw,1370 | |
| 137 137 | 
             
            ominfra/tailscale/cli.py,sha256=3FnJbgpLw6gInTfhERd1mDy9ijjMUGxkdYVo43Tnxx4,3555
         | 
| 138 138 | 
             
            ominfra/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 139 139 | 
             
            ominfra/tools/listresources.py,sha256=4qVg5txsb10EHhvqXXeM6gJ2jx9LbroEnPydDv1uXs0,6176
         | 
| 140 | 
            -
            ominfra-0.0.0. | 
| 141 | 
            -
            ominfra-0.0.0. | 
| 142 | 
            -
            ominfra-0.0.0. | 
| 143 | 
            -
            ominfra-0.0.0. | 
| 144 | 
            -
            ominfra-0.0.0. | 
| 145 | 
            -
            ominfra-0.0.0. | 
| 140 | 
            +
            ominfra-0.0.0.dev192.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
         | 
| 141 | 
            +
            ominfra-0.0.0.dev192.dist-info/METADATA,sha256=R7AOfKOeQacurgpdYE4zsQs9JRq0tCFHDEVItCCS5Lg,767
         | 
| 142 | 
            +
            ominfra-0.0.0.dev192.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
         | 
| 143 | 
            +
            ominfra-0.0.0.dev192.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
         | 
| 144 | 
            +
            ominfra-0.0.0.dev192.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
         | 
| 145 | 
            +
            ominfra-0.0.0.dev192.dist-info/RECORD,,
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         |