Spaces:
Sleeping
Sleeping
import os | |
import json | |
from datetime import datetime | |
import re | |
def get_skill_files(): | |
skill_files = [] | |
skill_doc_files = [] | |
for root, dirs, files in os.walk("."): | |
if "skill.json" in files: | |
skill_files.append(os.path.join(root, "skill.json")) | |
if "skill_doc.md" in files: | |
skill_doc_files.append(os.path.join(root, "skill_doc.md")) | |
return skill_files, skill_doc_files | |
def get_skill_data(file_path): | |
with open(file_path, 'r', encoding='utf-8') as f: | |
data = json.load(f) | |
return data | |
def get_skill_doc_data(file_path): | |
if not os.path.exists(file_path): | |
return None | |
with open(file_path, 'r', encoding='utf-8') as file: | |
lines = file.readlines() | |
title = lines[0].strip().replace("# ", "") if lines else None | |
content = "".join(lines) | |
# Regular expressions to extract the desired sections | |
usage_pattern = r"# Usage:\n(.*?)\n\n" | |
parameters_pattern = r"# Parameters:\n(.*?)\n\n" | |
returns_pattern = r"# Returns:\n(.*?)(\n\n|$|#)" | |
usage = re.search(usage_pattern, content, re.DOTALL) | |
parameters = re.search(parameters_pattern, content, re.DOTALL) | |
returns_ = re.search(returns_pattern, content, re.DOTALL) | |
# Extract the matched content or set to None if not found | |
usage_content = usage.group(1).strip() if usage else None | |
parameters_content = parameters.group(1).strip() if parameters else None | |
returns_content = returns_.group(1).strip() if returns_ else None | |
return { | |
"Title": title, | |
"Usage": usage_content, | |
"Parameters": parameters_content, | |
"Returns": returns_content | |
} | |
def get_skill_datas(): | |
skill_files, skill_doc_files = get_skill_files() | |
skills_datas=[] | |
for i, file in enumerate(skill_files): | |
skill_doc_file = skill_doc_files[i] | |
skill = get_skill_data(file) | |
skill_doc = get_skill_doc_data(skill_doc_file) | |
if skill_doc: | |
skill.update(skill_doc) | |
skills_datas.append(skill) | |
return skills_datas | |
def time_ago(updated_at_str): | |
now = datetime.now() | |
updated_at = datetime.strptime(updated_at_str, '%Y-%m-%d %H:%M:%S') | |
delta = now - updated_at | |
minutes = delta.total_seconds() / 60 | |
hours = minutes / 60 | |
days = hours / 24 | |
months = days / 30.44 # An average month length | |
years = days / 365.25 # Account for leap years | |
if minutes < 60: | |
return f"{int(minutes)} minutes ago" | |
elif hours < 24: | |
return f"{int(hours)} hours ago" | |
elif days < 30.44: | |
return f"{int(days)} days ago" | |
elif months < 12: | |
return f"{int(months)} months ago" | |
else: | |
return f"{int(years)} years ago" | |