Fix deduplication and make it possible to watch fridge files

This commit is contained in:
Olivier 'reivilibre' 2020-11-16 16:40:41 +00:00
parent 9173c75a7f
commit 8b31948478
2 changed files with 23 additions and 2 deletions

View File

@ -100,7 +100,7 @@ class DependencyBook:
}
@staticmethod
def _structure(dictionary: dict) -> "DependencyBook":
def _structure(dictionary: dict, _class: Any) -> "DependencyBook":
provided = {cattr.structure(k, Resource): v for k, v in dictionary["provided"]}
watching = {cattr.structure(k, Resource): v for k, v in dictionary["watching"]}

View File

@ -17,10 +17,12 @@
import asyncio
import logging
import os
import time
from asyncio import Future, Queue
from collections import deque
from contextvars import ContextVar
from pathlib import Path
from typing import Any, Deque, Dict, Optional, Tuple, Type, TypeVar
import cattr
@ -168,7 +170,7 @@ class Kitchen:
return await self._chanproheads[hostuser]
async def cook_all(self):
# TODO fridge emitter
await self._emit_fridge_resources()
num_workers = 8
@ -393,6 +395,25 @@ class Kitchen:
context = recipe.recipe_context
return Resource(kind, id, context.sous, extra_params)
async def _emit_fridge_resources(self):
from scone.default.steps.fridge_steps import get_fridge_dirs
for fridge_dir in get_fridge_dirs(self.head):
num_prefix_parts = len(fridge_dir.parts)
for root, _dirs, files in os.walk(fridge_dir):
for file in files:
full_path = Path(root, file)
parts = full_path.parts
if parts[0:num_prefix_parts] != fridge_dir.parts:
raise RuntimeError(
f"{parts[0:num_prefix_parts]!r} != {fridge_dir.parts!r}"
)
fridge_relative_path = "/".join(parts[num_prefix_parts:])
fridge_res = Resource("fridge", fridge_relative_path, None)
stat = os.stat(full_path)
mtime = int(stat.st_mtime_ns // 1e6)
self.head.dag.resource_time[fridge_res] = mtime
#
# @attr.s(auto_attribs=True)