Add feed command
This commit is contained in:
parent
7ee5b8bbc9
commit
14eb677b0f
|
@ -1,4 +1,6 @@
|
||||||
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from shutil import get_terminal_size
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
@ -30,6 +32,7 @@ def cmd_edit(cmd_args):
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--source",
|
"--source",
|
||||||
|
required=True,
|
||||||
help="Source name to edit",
|
help="Source name to edit",
|
||||||
)
|
)
|
||||||
args = parser.parse_args(cmd_args)
|
args = parser.parse_args(cmd_args)
|
||||||
|
@ -71,6 +74,7 @@ def cmd_update(cmd_args):
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--source",
|
"--source",
|
||||||
|
required=True,
|
||||||
help="Source name to fetch",
|
help="Source name to fetch",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
@ -100,6 +104,71 @@ def cmd_update(cmd_args):
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_feed(cmd_args):
|
||||||
|
"""Print the current feed."""
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
prog="intake feed",
|
||||||
|
description=cmd_feed.__doc__,
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--data",
|
||||||
|
"-d",
|
||||||
|
default=intake_data_dir(),
|
||||||
|
help="Path to the intake data directory",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--sources",
|
||||||
|
nargs="+",
|
||||||
|
help="Limit feed to these sources",
|
||||||
|
)
|
||||||
|
parser.add_argument
|
||||||
|
args = parser.parse_args(cmd_args)
|
||||||
|
|
||||||
|
data = Path(args.data)
|
||||||
|
if not data.exists() and data.is_dir():
|
||||||
|
print("Not a directory:", data)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if not args.sources:
|
||||||
|
args.sources = [child.name for child in data.iterdir()]
|
||||||
|
|
||||||
|
sources = [LocalSource(data, name) for name in args.sources if (data / name / "intake.json").exists()]
|
||||||
|
items = [item for source in sources for item in source.get_all_items() ]
|
||||||
|
|
||||||
|
if not items:
|
||||||
|
print("Feed is empty")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
size = get_terminal_size((80, 20))
|
||||||
|
width = min(80, size.columns)
|
||||||
|
|
||||||
|
for item in items:
|
||||||
|
title = item["title"] if "title" in item else ""
|
||||||
|
titles = [title]
|
||||||
|
while len(titles[-1]) > width - 4:
|
||||||
|
i = titles[-1][: width - 4].rfind(" ")
|
||||||
|
titles = titles[:-1] + [titles[-1][:i].strip(), titles[-1][i:].strip()]
|
||||||
|
print("+" + (width - 2) * "-" + "+")
|
||||||
|
for title in titles:
|
||||||
|
print("| {0:<{1}} |".format(title, width - 4))
|
||||||
|
print("|{0:<{1}}|".format("", width - 2))
|
||||||
|
info1 = ""
|
||||||
|
if "author" in title and item["author"]:
|
||||||
|
info1 += item["author"] + " "
|
||||||
|
if "time" in item and item["time"]:
|
||||||
|
time_dt = datetime.fromtimestamp(item["time"])
|
||||||
|
info1 += time_dt.strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
print("| {0:<{1}} |".format(info1, width - 4))
|
||||||
|
created_dt = datetime.fromtimestamp(item["created"])
|
||||||
|
created = created_dt.strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
info2 = "{0} {1} {2}".format(
|
||||||
|
item.get("source", ""), item.get("id", ""), created
|
||||||
|
)
|
||||||
|
print("| {0:<{1}} |".format(info2, width - 4))
|
||||||
|
print("+" + (width - 2) * "-" + "+")
|
||||||
|
print()
|
||||||
|
|
||||||
|
|
||||||
def cmd_run(cmd_args):
|
def cmd_run(cmd_args):
|
||||||
"""Run the default Flask server."""
|
"""Run the default Flask server."""
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
|
|
Loading…
Reference in New Issue