docstr: Display a file uploader widget.
  By default, uploaded files are limited to 200MB. You can configure
  this using the `server.maxUploadSize` config option. For more info
  on how to set config options, see
  https://docs.streamlit.io/library/advanced-features/configuration#set-configuration-options
  
  Parameters
  ----------
  label : str
      A short label explaining to the user what this file uploader is for.
      The label can optionally contain Markdown and supports the following
      elements: Bold, Italics, Strikethroughs, Inline Code, Emojis, and Links.
  
      This also supports:
  
      * Emoji shortcodes, such as ``:+1:``  and ``:sunglasses:``.
        For a list of all supported codes,
        see https://share.streamlit.io/streamlit/emoji-shortcodes.
  
      * LaTeX expressions, by wrapping them in "$" or "$$" (the "$$"
        must be on their own lines). Supported LaTeX functions are listed
        at https://katex.org/docs/supported.html.
  
      * Colored text, using the syntax ``:color[text to be colored]``,
        where ``color`` needs to be replaced with any of the following
        supported colors: blue, green, orange, red, violet, gray/grey, rainbow.
  
      Unsupported elements are unwrapped so only their children (text contents) render.
      Display unsupported elements as literal characters by
      backslash-escaping them. E.g. ``1\. Not an ordered list``.
  
      For accessibility reasons, you should never set an empty label (label="")
      but hide it with label_visibility if needed. In the future, we may disallow
      empty labels by raising an exception.
  
  type : str or list of str or None
      Array of allowed extensions. ['png', 'jpg']
      The default is None, which means all extensions are allowed.
  
  accept_multiple_files : bool
      If True, allows the user to upload multiple files at the same time,
      in which case the return value will be a list of files.
      Default: False
  
  key : str or int
      An optional string or integer to use as the unique key for the widget.
      If this is omitted, a key will be generated for the widget
      based on its content. Multiple widgets of the same type may
      not share the same key.
  
  help : str
      A tooltip that gets displayed next to the file uploader.
  
  on_change : callable
      An optional callback invoked when this file_uploader's value
      changes.
  
  args : tuple
      An optional tuple of args to pass to the callback.
  
  kwargs : dict
      An optional dict of kwargs to pass to the callback.
  
  disabled : bool
      An optional boolean, which disables the file uploader if set to
      True. The default is False. This argument can only be supplied by
      keyword.
  label_visibility : "visible", "hidden", or "collapsed"
      The visibility of the label. If "hidden", the label doesn't show but there
      is still empty space for it above the widget (equivalent to label="").
      If "collapsed", both the label and the space are removed. Default is
      "visible".
  
  Returns
  -------
  None or UploadedFile or list of UploadedFile
      - If accept_multiple_files is False, returns either None or
        an UploadedFile object.
      - If accept_multiple_files is True, returns a list with the
        uploaded files as UploadedFile objects. If no files were
        uploaded, returns an empty list.
  
      The UploadedFile class is a subclass of BytesIO, and therefore
      it is "file-like". This means you can pass them anywhere where
      a file is expected.
  
  Examples
  --------
  Insert a file uploader that accepts a single file at a time:
  
  >>> import streamlit as st
  >>> import pandas as pd
  >>> from io import StringIO
  >>>
  >>> uploaded_file = st.file_uploader("Choose a file")
  >>> if uploaded_file is not None:
  ...     # To read file as bytes:
  ...     bytes_data = uploaded_file.getvalue()
  ...     st.write(bytes_data)
  >>>
  ...     # To convert to a string based IO:
  ...     stringio = StringIO(uploaded_file.getvalue().decode("utf-8"))
  ...     st.write(stringio)
  >>>
  ...     # To read file as string:
  ...     string_data = stringio.read()
  ...     st.write(string_data)
  >>>
  ...     # Can be used wherever a "file-like" object is accepted:
  ...     dataframe = pd.read_csv(uploaded_file)
  ...     st.write(dataframe)
  
  Insert a file uploader that accepts multiple files at a time:
  
  >>> import streamlit as st
  >>>
  >>> uploaded_files = st.file_uploader("Choose a CSV file", accept_multiple_files=True)
  >>> for uploaded_file in uploaded_files:
  ...     bytes_data = uploaded_file.read()
  ...     st.write("filename:", uploaded_file.name)
  ...     st.write(bytes_data)
  
  .. output::
     https://doc-file-uploader.streamlit.app/
     height: 375px
docstr_tok: ["Display","a","file","uploader","widget",".","By","default",",","uploaded","files","are","limited","to","200MB",".","You","can","configure","this","using","the","`","server.maxUploadSize","`","config","option",".","For","more","info","on","how","to","set","config","options",",","see","https",":","\/\/docs.streamlit.io\/library\/advanced-features\/configuration","#","set-configuration-options","Parameters","--","--","--","--","--","label",":","str","A","short","label","explaining","to","the","user","what","this","file","uploader","is","for",".","The","label","can","optionally","contain","Markdown","and","supports","the","following","elements",":","Bold",",","Italics",",","Strikethroughs",",","Inline","Code",",","Emojis",",","and","Links",".","This","also","supports",":","*","Emoji","shortcodes",",","such","as","``",":","+1",":","``","and","``",":","sunglasses",":","``",".","For","a","list","of","all","supported","codes",",","see","https",":","\/\/share.streamlit.io\/streamlit\/emoji-shortcodes",".","*","LaTeX","expressions",",","by","wrapping","them","in","``","$","''","or","``","$","$","''","(","the","``","$","$","''","must","be","on","their","own","lines",")",".","Supported","LaTeX","functions","are","listed","at","https",":","\/\/katex.org\/docs\/supported.html",".","*","Colored","text",",","using","the","syntax","``",":","color","[","text","to","be","colored","]","``",",","where","``","color","``","needs","to","be","replaced","with","any","of","the","following","supported","colors",":","blue",",","green",",","orange",",","red",",","violet",",","gray\/grey",",","rainbow",".","Unsupported","elements","are","unwrapped","so","only","their","children","(","text","contents",")","render",".","Display","unsupported","elements","as","literal","characters","by","backslash-escaping","them",".","E.g",".","``","1\\",".","Not","an","ordered","list","``",".","For","accessibility","reasons",",","you","should","never","set","an","empty","label","(","label=","''","''",")","but","hide","it","with","label_visibility","if","needed",".","In","the","future",",","we","may","disallow","empty","labels","by","raising","an","exception",".","type",":","str","or","list","of","str","or","None","Array","of","allowed","extensions",".","[","'png","'",",","'jpg","'","]","The","default","is","None",",","which","means","all","extensions","are","allowed",".","accept_multiple_files",":","bool","If","True",",","allows","the","user","to","upload","multiple","files","at","the","same","time",",","in","which","case","the","return","value","will","be","a","list","of","files",".","Default",":","False","key",":","str","or","int","An","optional","string","or","integer","to","use","as","the","unique","key","for","the","widget",".","If","this","is","omitted",",","a","key","will","be","generated","for","the","widget","based","on","its","content",".","Multiple","widgets","of","the","same","type","may","not","share","the","same","key",".","help",":","str","A","tooltip","that","gets","displayed","next","to","the","file","uploader",".","on_change",":","callable","An","optional","callback","invoked","when","this","file_uploader","'s","value","changes",".","args",":","tuple","An","optional","tuple","of","args","to","pass","to","the","callback",".","kwargs",":","dict","An","optional","dict","of","kwargs","to","pass","to","the","callback",".","disabled",":","bool","An","optional","boolean",",","which","disables","the","file","uploader","if","set","to","True",".","The","default","is","False",".","This","argument","can","only","be","supplied","by","keyword",".","label_visibility",":","``","visible","''",",","``","hidden","''",",","or","``","collapsed","''","The","visibility","of","the","label",".","If","``","hidden","''",",","the","label","does","n't","show","but","there","is","still","empty","space","for","it","above","the","widget","(","equivalent","to","label=","''","''",")",".","If","``","collapsed","''",",","both","the","label","and","the","space","are","removed",".","Default","is","``","visible","''",".","Returns","--","--","--","-","None","or","UploadedFile","or","list","of","UploadedFile","-","If","accept_multiple_files","is","False",",","returns","either","None","or","an","UploadedFile","object",".","-","If","accept_multiple_files","is","True",",","returns","a","list","with","the","uploaded","files","as","UploadedFile","objects",".","If","no","files","were","uploaded",",","returns","an","empty","list",".","The","UploadedFile","class","is","a","subclass","of","BytesIO",",","and","therefore","it","is","``","file-like","''",".","This","means","you","can","pass","them","anywhere","where","a","file","is","expected",".","Examples","--","--","--","--","Insert","a","file","uploader","that","accepts","a","single","file","at","a","time",":",">",">",">","import","streamlit","as","st",">",">",">","import","pandas","as","pd",">",">",">","from","io","import","StringIO",">",">",">",">",">",">","uploaded_file","=","st.file_uploader","(","``","Choose","a","file","''",")",">",">",">","if","uploaded_file","is","not","None",":","...","#","To","read","file","as","bytes",":","...","bytes_data","=","uploaded_file.getvalue","(",")","...","st.write","(","bytes_data",")",">",">",">","...","#","To","convert","to","a","string","based","IO",":","...","stringio","=","StringIO","(","uploaded_file.getvalue","(",")",".decode","(","``","utf-8","''",")",")","...","st.write","(","stringio",")",">",">",">","...","#","To","read","file","as","string",":","...","string_data","=","stringio.read","(",")","...","st.write","(","string_data",")",">",">",">","...","#","Can","be","used","wherever","a","``","file-like","''","object","is","accepted",":","...","dataframe","=","pd.read_csv","(","uploaded_file",")","...","st.write","(","dataframe",")","Insert","a","file","uploader","that","accepts","multiple","files","at","a","time",":",">",">",">","import","streamlit","as","st",">",">",">",">",">",">","uploaded_files","=","st.file_uploader","(","``","Choose","a","CSV","file","''",",","accept_multiple_files=True",")",">",">",">","for","uploaded_file","in","uploaded_files",":","...","bytes_data","=","uploaded_file.read","(",")","...","st.write","(","``","filename",":","''",",","uploaded_file.name",")","...","st.write","(","bytes_data",")","..","output",":",":","https",":","\/\/doc-file-uploader.streamlit.app\/","height",":","375px"]
code: def file_uploader(
      self,
      label: str,
      type: Union[str, Sequence[str], None] = None,
      accept_multiple_files: bool = False,
      key: Optional[Key] = None,
      help: Optional[str] = None,
      on_change: Optional[WidgetCallback] = None,
      args: Optional[WidgetArgs] = None,
      kwargs: Optional[WidgetKwargs] = None,
      *,  # keyword-only arguments:
      disabled: bool = False,
      label_visibility: LabelVisibility = "visible",
  ) -> Union[UploadedFile, List[UploadedFile], None]:
      r"""Display a file uploader widget.
      By default, uploaded files are limited to 200MB. You can configure
      this using the `server.maxUploadSize` config option. For more info
      on how to set config options, see
      https://docs.streamlit.io/library/advanced-features/configuration#set-configuration-options
  
      Parameters
      ----------
      label : str
          A short label explaining to the user what this file uploader is for.
          The label can optionally contain Markdown and supports the following
          elements: Bold, Italics, Strikethroughs, Inline Code, Emojis, and Links.
  
          This also supports:
  
          * Emoji shortcodes, such as ``:+1:``  and ``:sunglasses:``.
            For a list of all supported codes,
            see https://share.streamlit.io/streamlit/emoji-shortcodes.
  
          * LaTeX expressions, by wrapping them in "$" or "$$" (the "$$"
            must be on their own lines). Supported LaTeX functions are listed
            at https://katex.org/docs/supported.html.
  
          * Colored text, using the syntax ``:color[text to be colored]``,
            where ``color`` needs to be replaced with any of the following
            supported colors: blue, green, orange, red, violet, gray/grey, rainbow.
  
          Unsupported elements are unwrapped so only their children (text contents) render.
          Display unsupported elements as literal characters by
          backslash-escaping them. E.g. ``1\. Not an ordered list``.
  
          For accessibility reasons, you should never set an empty label (label="")
          but hide it with label_visibility if needed. In the future, we may disallow
          empty labels by raising an exception.
  
      type : str or list of str or None
          Array of allowed extensions. ['png', 'jpg']
          The default is None, which means all extensions are allowed.
  
      accept_multiple_files : bool
          If True, allows the user to upload multiple files at the same time,
          in which case the return value will be a list of files.
          Default: False
  
      key : str or int
          An optional string or integer to use as the unique key for the widget.
          If this is omitted, a key will be generated for the widget
          based on its content. Multiple widgets of the same type may
          not share the same key.
  
      help : str
          A tooltip that gets displayed next to the file uploader.
  
      on_change : callable
          An optional callback invoked when this file_uploader's value
          changes.
  
      args : tuple
          An optional tuple of args to pass to the callback.
  
      kwargs : dict
          An optional dict of kwargs to pass to the callback.
  
      disabled : bool
          An optional boolean, which disables the file uploader if set to
          True. The default is False. This argument can only be supplied by
          keyword.
      label_visibility : "visible", "hidden", or "collapsed"
          The visibility of the label. If "hidden", the label doesn't show but there
          is still empty space for it above the widget (equivalent to label="").
          If "collapsed", both the label and the space are removed. Default is
          "visible".
  
      Returns
      -------
      None or UploadedFile or list of UploadedFile
          - If accept_multiple_files is False, returns either None or
            an UploadedFile object.
          - If accept_multiple_files is True, returns a list with the
            uploaded files as UploadedFile objects. If no files were
            uploaded, returns an empty list.
  
          The UploadedFile class is a subclass of BytesIO, and therefore
          it is "file-like". This means you can pass them anywhere where
          a file is expected.
  
      Examples
      --------
      Insert a file uploader that accepts a single file at a time:
  
      >>> import streamlit as st
      >>> import pandas as pd
      >>> from io import StringIO
      >>>
      >>> uploaded_file = st.file_uploader("Choose a file")
      >>> if uploaded_file is not None:
      ...     # To read file as bytes:
      ...     bytes_data = uploaded_file.getvalue()
      ...     st.write(bytes_data)
      >>>
      ...     # To convert to a string based IO:
      ...     stringio = StringIO(uploaded_file.getvalue().decode("utf-8"))
      ...     st.write(stringio)
      >>>
      ...     # To read file as string:
      ...     string_data = stringio.read()
      ...     st.write(string_data)
      >>>
      ...     # Can be used wherever a "file-like" object is accepted:
      ...     dataframe = pd.read_csv(uploaded_file)
      ...     st.write(dataframe)
  
      Insert a file uploader that accepts multiple files at a time:
  
      >>> import streamlit as st
      >>>
      >>> uploaded_files = st.file_uploader("Choose a CSV file", accept_multiple_files=True)
      >>> for uploaded_file in uploaded_files:
      ...     bytes_data = uploaded_file.read()
      ...     st.write("filename:", uploaded_file.name)
      ...     st.write(bytes_data)
  
      .. output::
         https://doc-file-uploader.streamlit.app/
         height: 375px
  
      """
      ctx = get_script_run_ctx()
      return self._file_uploader(
          label=label,
          type=type,
          accept_multiple_files=accept_multiple_files,
          key=key,
          help=help,
          on_change=on_change,
          args=args,
          kwargs=kwargs,
          disabled=disabled,
          label_visibility=label_visibility,
          ctx=ctx,
      )
  
imports: from dataclasses import dataclass
  from textwrap import dedent
  from typing import List, Optional, Sequence, Union, cast, overload
  from typing_extensions import Literal
  import streamlit
  from streamlit import config
  from streamlit.elements.form import current_form_id
  from streamlit.elements.utils import check_callback_rules, check_session_state_rules, get_label_visibility_proto_value
  from streamlit.proto.Common_pb2 import FileUploaderState
  from streamlit.proto.Common_pb2 import UploadedFileInfo
  from streamlit.proto.FileUploader_pb2 import FileUploader
  from streamlit.runtime.metrics_util import gather_metrics
  from streamlit.runtime.scriptrunner import ScriptRunContext, get_script_run_ctx
  from streamlit.runtime.state import WidgetArgs, WidgetCallback, WidgetKwargs, register_widget
  from streamlit.runtime.state.common import compute_widget_id
  from streamlit.runtime.uploaded_file_manager import DeletedFile, UploadedFile
  from streamlit.type_util import Key, LabelVisibility, maybe_raise_label_warnings, to_key
label_desc: Use image node_id 5 for calling the FileUploaderMixin obj's underlying member method code with example usage: obj.file_uploader(label, type, accept_multiple_files, key, help, on_change, args, kwargs) and returns: self