Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Component Error Minified Material-UI error #3; visit https://material-ui.com/production-error/?code=3&args[]=red for the full message. #54

Open
cho-amh-programmerExpert opened this issue Jul 6, 2024 · 0 comments

Comments

@cho-amh-programmerExpert
Copy link

cho-amh-programmerExpert commented Jul 6, 2024

Well the I get the error (not python error, an error displayed as html in the page) Component Error Minified Material-UI error #3; visit https://material-ui.com/production-error/?code=3&args[]=red for the full message. , It must be cuz of making a new st_ace object each type a widget updates.

Also here is a screenshot:
Screenshot_20240706_180743_Chrome

Here is the code I wrote:

import streamlit as st
from streamlit_ace import st_ace, KEYBINDINGS, LANGUAGES, THEMES
import sys
from io import StringIO
from CustomModules.initializer import set_page_info, initial_run

set_page_info("Code Editor", "🧑‍💻")

def app():
    st.title("🧑‍💻 Code Editor")
    banned_commands = ["open", "sys", "os"]


    if "sub" not in st.session_state:
        st.session_state.sub = False

    c1, c2 = st.columns([3, 1])
    with c1:
        with st.spinner("Updating Values..."):
            langs = [l.capitalize() for l in LANGUAGES]
            themes = [t.capitalize() for t in THEMES]
            kb = [k.capitalize() for k in KEYBINDINGS]

            lang = c2.selectbox("Language Syntax", options=langs, index=121, help="Select Language Syntax")
            theme = c2.selectbox("Theme", options=themes, index=35, help="Select Editor's Theme")
            keybinding = c2.selectbox("Keybinding mode", options=kb, index=3, help="Colored Syntax Text")
            font_size = c2.slider("Font size", 5, 24, 14, help="Font size of text")
            tab_size = c2.slider("Tab size", 1, 8, 4, help="Size of tabs")
            show_gutter = c2.checkbox("Show gutter", value=True, help="Show line indicators [1, 2, 3, etc.]")

            comment_sign = ""
            if lang.lower() == "python" or lang.lower() == "django":
                comment_sign = "#"
            elif lang.lower() == "csharp" or lang.lower() == "java" or lang.lower() == "javascript" or lang.lower() == "cpp":
                comment_sign = "//"
            else:
                comment_sign = "//"

            placeholder_txt = f"{comment_sign} Write your code here:"

            content = st_ace(
                placeholder=placeholder_txt,
                language=lang.lower(),
                theme=theme.lower(),
                keybinding=keybinding.lower(),
                font_size=font_size,
                tab_size=tab_size,
                show_gutter=show_gutter,
                key="ace_editor_1",
            )
            banned_code = False
            banned_command_used = ""
            for i in banned_commands:
                if i in content:
                    banned_code = True
                    banned_command_used = f"{banned_command_used}, {i}" if banned_command_used != "" else f"{i}"

            def sub_event_change():
                st.session_state.sub = True

            cc1, _, cc3 = st.columns(3)
            sub = cc3.button("🏗️ Execute 🏗️", help="Interpret & Parse the code and give output(s).",
                             on_click=sub_event_change)

            suffix = ""
            if lang.lower() == "python" or lang.lower() == "django":
                suffix = ".py"
            elif lang.lower() == "csharp":
                suffix = ".cs"
            elif lang.lower() == "java":
                suffix = ".java"
            elif lang.lower() == "javascript":
                suffix = ".js"
            elif lang.lower() == "c_cpp":
                suffix = ".cpp"
            elif lang.lower() == "json":
                suffix = ".json"
            elif lang.lower() == "yaml":
                suffix = ".yaml"
            elif lang.lower() == "ini":
                suffix = ".ini"
            elif lang.lower() == "toml":
                suffix = ".toml"
            else:
                suffix = f".program_{lang.lower()}"

            if "dwn_sub" not in st.session_state:
                st.session_state.dwn_sub = False

            def u_dwn_sub():
                st.session_state.dwn_sub = True

            dwn_sub = cc1.button("📩 Download 📩", help="Download your code.", on_click=u_dwn_sub)
            if st.session_state.dwn_sub:
                filename = st.text_input("Enter filename [Without extension]:", placeholder="my_code",
                                         help="Pick a name for your code / file.")
                download_code = st.download_button(
                    label="Download Code",
                    data=str(content),
                    file_name=f"{filename}{suffix}",
                    mime="text/plain",
                    help="Download your code."
                )

            if st.session_state.sub and lang == "Python" and content and not banned_code:
                # Execute the user's code and display the output
                with st.spinner('Executing code...'):
                    # Create a StringIO object to capture the output of the user's code
                    output = StringIO()
                    # Redirect stdout to the StringIO object
                    sys.stdout = output
                    with st.expander("Results", expanded=True):
                        try:
                            exec(content)
                        except Exception as e:
                            st.subheader("**:red[Error]:**")
                            st.exception(e)
                        else:
                            # Display the captured output using st.write()

                            st.subheader("**:green[Output]:**")
                            st.write(output.getvalue())
                        finally:
                            # Reset stdout to its original value
                            sys.stdout = sys.__stdout__

            elif st.session_state.sub and lang != "Python":
                st.warning(icon="⚒️", body="**Only Python Is Supported!**")

            elif st.session_state.sub and not content:
                st.info(icon="ℹ️", body="Please provide a code.")

            elif st.session_state.sub and banned_code:
                st.warning(body=f"For security reasons, a script containing **\":red[{banned_command_used}]\"** functions and attributes cannot be executed in the code editor!", icon="⛔")


initial_run(lambda: app())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant