Button click rerun whole srcipt

I have following micro app

def main():
    st.header("Сервис распознавания документов (DEMO)")
    st.subheader("FAQ")

    with st.expander("Какие типы документов поддерживаются?"):
        st.write(
            """
            1. Согласие на обработку персональных данных и обязательства
            2. Соглашение об использовании Аналога собственноручной подписи
            3. Заявления о предоставлении потребительского займа
            4. Заявление о предоставлении транша по договору потребительского займа
            5. График платежей по договору потребительского Займа

            """
        )

    st.sidebar.header('Test')

    uploaded_zip = st.file_uploader('XML File', type="zip", key='zip')
    if uploaded_zip:
        zf = zipfile.ZipFile(uploaded_zip)
        recognize_btn = st.button("Распознать документы", key='recognize_btn')
        if recognize_btn:
            pdf_corpus: Dict[str, PyPDF2.PdfFileReader] = {
                file.filename:
                    PyPDF2.PdfFileReader(BytesIO(zf.read(file))) for file in zf.filelist if
                file.filename.endswith('.pdf')
            }

            if not pdf_corpus:
                return


            with st.spinner('Распознавание документов "Соглашения об использовании Аналога собственноручной подписи..'):
                asp_data = collect_asp_data(pdf_corpus)

                st.write(asp_data, key=asp_data)
                asp_download = convert_df(asp_data)
                st.download_button(
                    "Скачать asp.csv",
                    asp_download,
                    "asp.csv",
                    "text/csv",
                    key='download_asp_data'
                )
if __name__ == '__main__':
    main()

Everything works fine but when i click download_button the script runs again.
Befor click

and after click

I searched for session state but did not figure out how to use it in my case.
I need to everything state the same after download_button clicked

I have a similar problem while trying to upload a file. I will really appreciate if there are some examples which describe how to setup this correctly.

Cheers

@KobanBanan @Mcking You can use st.session_state as a workaround.

Example:

zf = zipfile.ZipFile(uploaded_zip)

if 'recognize_btn_state' not in st.session_state:
    st.session_state.recognize_btn_state = False

recognize_btn = st.button("Распознать документы", key='recognize_btn')

if recognize_btn:
    st.session_state.recognize_btn_state = True

if st.session_state.recognize_btn_state:
    # rest of the code here

Let me know if you face any issue