diff --git a/swh/storage/in_memory.py b/swh/storage/in_memory.py --- a/swh/storage/in_memory.py +++ b/swh/storage/in_memory.py @@ -150,6 +150,14 @@ return count + def _content_to_model(self, contents): + """Takes a list of content dicts, optionally with an extra 'origin' + key, and yields tuples (model.Content, origin).""" + for content in contents: + content = content.copy() + content.pop('origin', None) + yield Content.from_dict(content) + def content_add(self, content): """Add content blobs to the storage @@ -179,7 +187,7 @@ skipped_content:add: New skipped contents (no data) added """ - content = [Content.from_dict(c) for c in content] + content = list(self._content_to_model(content)) now = datetime.datetime.now(tz=datetime.timezone.utc) for item in content: item.ctime = now @@ -214,7 +222,7 @@ skipped_content:add: New skipped contents (no data) added """ - content = [Content.from_dict(c) for c in content] + content = list(self._content_to_model(content)) return self._content_add(content, with_data=False) def content_get(self, content): diff --git a/swh/storage/storage.py b/swh/storage/storage.py --- a/swh/storage/storage.py +++ b/swh/storage/storage.py @@ -198,6 +198,15 @@ raise if content_without_data: + content_without_data = \ + [cont.copy() for cont in content_without_data] + origins = db.origin_get_by_url( + [cont.get('origin') for cont in content_without_data], + cur=cur) + for (cont, origin) in zip(content_without_data, origins): + origin = dict(zip(db.origin_cols, origin)) + if 'origin' in cont: + cont['origin'] = origin['id'] db.mktemp('skipped_content', cur) db.copy_to(content_without_data, 'tmp_skipped_content', db.skipped_content_keys, cur) diff --git a/swh/storage/tests/test_storage.py b/swh/storage/tests/test_storage.py --- a/swh/storage/tests/test_storage.py +++ b/swh/storage/tests/test_storage.py @@ -119,6 +119,7 @@ '2c772cc193778aac9a137b8dc5834b9b'), 'reason': 'Content too long', 'status': 'absent', + 'origin': 'file:///dev/zero', } self.skipped_cont2 = {