Spaces:
Runtime error
Runtime error
import asyncio | |
import os | |
import streamlit as st | |
import streamlit.components.v1 as components | |
from py_code_analyzer import CodeFetcher, CodeImportsAnalyzer, ImportsGraphVisualizer | |
from utils import conditonal_decorator, time_function | |
DEV = int(os.environ.get("DEV", "1")) | |
TITLE = "Python Code Analyzer" | |
st.set_page_config(page_title=TITLE, layout="wide") | |
st.title(TITLE) | |
st.markdown( | |
"The main purpose of the app is to allow Python developers navigate Python code base much " | |
+ "easier by showing dependencies among files included in the directory with better visualization." | |
) | |
st.markdown( | |
"**Checkout the source code [here](https://github.com/cyyeh/py-code-analyzer)**" | |
) | |
owner = st.text_input("Fill in the GitHub username", value="cyyeh") | |
repo = st.text_input("Fill in the GitHib repository", value="py-code-analyzer") | |
tree_sha = st.text_input( | |
"Fill in SHA", value="2f387d0adea72a7b4c99a5e8fc3e4fd83b5469b8" | |
) | |
show_graph_visualization = st.checkbox( | |
"Show graph visualization", | |
value=True, | |
help="If the graph is large, then consider uncheck the checkbox. " | |
"For example, the result graph of fetching TensorFlow repo would be large.", | |
) | |
clicked_ok_button = st.button("OK", disabled=not owner or not repo or not tree_sha) | |
st.markdown("---") | |
def get_python_files(owner: str, repo: str, tree_sha: str): | |
return CodeFetcher().get_python_files(owner, repo, tree_sha) | |
def parse_python_files(analyzer: CodeImportsAnalyzer): | |
asyncio.run(analyzer.parse_python_files()) | |
def generate_imports_graph(analyzer: CodeImportsAnalyzer): | |
return analyzer.generate_imports_graph() | |
def generate_graph_visualization_file(imports_graph, heading: str): | |
ImportsGraphVisualizer().visualize(imports_graph, heading=heading) | |
def read_graph_visualization_file(): | |
return open("nx.html", "r", encoding="utf-8").read() | |
if clicked_ok_button and owner and repo: | |
with st.spinner("Getting python files..."): | |
python_files = get_python_files(owner, repo, tree_sha) | |
analyzer = CodeImportsAnalyzer(python_files) | |
with st.spinner("Parsing python files..."): | |
parse_python_files(analyzer) | |
with st.spinner("Generating imports graph..."): | |
imports_graph = generate_imports_graph(analyzer) | |
with st.spinner("Generating graph visualization file..."): | |
generate_graph_visualization_file(imports_graph, f"{owner}/{repo}") | |
graph_visualization_file = read_graph_visualization_file() | |
st.download_button( | |
"Download the result file", | |
graph_visualization_file, | |
file_name="result.html", | |
mime="text/html", | |
) | |
if show_graph_visualization: | |
with st.spinner("Showing the graph..."): | |
components.html(graph_visualization_file, height=600, scrolling=True) | |