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) | |