nodes: 0, module; 1, function_definition; 2, function_name:file_search; 3, parameters; 4, block; 5, identifier:self; 6, identifier:query; 7, default_parameter; 8, default_parameter; 9, expression_statement; 10, expression_statement; 11, try_statement; 12, return_statement; 13, identifier:offset; 14, None; 15, identifier:timeout; 16, None; 17, comment:""" Search for samples.
  
          In addition to retrieving all information on a particular file, VirusTotal allows you to perform what we
          call "advanced reverse searches". Reverse searches take you from a file property to a list of files that
          match that property. For example, this functionality enables you to retrieve all those files marked by at
          least one antivirus vendor as Zbot, or all those files that have a size under 90KB and are detected by at
          least 10 antivirus solutions, or all those PDF files that have an invalid XREF section, etc.
  
          This API is equivalent to VirusTotal Intelligence advanced searches. A very wide variety of search modifiers
          are available, including: file size, file type, first submission date to VirusTotal, last submission date to
          VirusTotal, number of positives, dynamic behavioural properties, binary content, submission file name, and a
          very long etcetera. The full list of search modifiers allowed for file search queries is documented at:
          https://www.virustotal.com/intelligence/help/file-search/#search-modifiers
  
          NOTE:
          Daily limited! No matter what API step you have licensed, this API call is limited to 50K requests per day.
          If you need any more, chances are you are approaching your engineering problem erroneously and you can
          probably solve it using the file distribution call. Do not hesitate to contact us with your particular
          use case.
  
          EXAMPLE:
          search_options = 'type:peexe size:90kb+ positives:5+ behaviour:"taskkill"'
  
          :param query: A search modifier compliant file search query.
          :param offset: (optional) The offset value returned by a previously issued identical query, allows you to
          paginate over the results. If not specified the first 300 matching files sorted according to last submission
          date to VirusTotal in a descending fashion will be returned.
          :param timeout: The amount of time in seconds the request should wait before timing out.
  
          :return: JSON response -  By default the list returned contains at most 300 hashes, ordered according to
          last submission date to VirusTotal in a descending fashion.
          """; 18, assignment; 19, block; 20, except_clause; 21, call; 22, identifier:params; 23, call; 24, expression_statement; 25, as_pattern; 26, block; 27, identifier:_return_response_and_status_code; 28, argument_list; 29, identifier:dict; 30, argument_list; 31, assignment; 32, attribute; 33, as_pattern_target; 34, return_statement; 35, identifier:response; 36, keyword_argument; 37, keyword_argument; 38, keyword_argument; 39, identifier:response; 40, call; 41, identifier:requests; 42, identifier:RequestException; 43, identifier:e; 44, call; 45, identifier:apikey; 46, attribute; 47, identifier:query; 48, identifier:query; 49, identifier:offset; 50, identifier:offset; 51, attribute; 52, argument_list; 53, identifier:dict; 54, argument_list; 55, identifier:self; 56, identifier:api_key; 57, identifier:requests; 58, identifier:get; 59, binary_operator:self.base + 'file/search'; 60, keyword_argument; 61, keyword_argument; 62, keyword_argument; 63, keyword_argument; 64, attribute; 65, string; 66, identifier:params; 67, identifier:params; 68, identifier:proxies; 69, attribute; 70, identifier:timeout; 71, identifier:timeout; 72, identifier:error; 73, call; 74, identifier:self; 75, identifier:base; 76, string_content:file/search; 77, identifier:self; 78, identifier:proxies; 79, identifier:str; 80, argument_list; 81, identifier:e
code: def file_search(self, query, offset=None, timeout=None):
          """ Search for samples.
  
          In addition to retrieving all information on a particular file, VirusTotal allows you to perform what we
          call "advanced reverse searches". Reverse searches take you from a file property to a list of files that
          match that property. For example, this functionality enables you to retrieve all those files marked by at
          least one antivirus vendor as Zbot, or all those files that have a size under 90KB and are detected by at
          least 10 antivirus solutions, or all those PDF files that have an invalid XREF section, etc.
  
          This API is equivalent to VirusTotal Intelligence advanced searches. A very wide variety of search modifiers
          are available, including: file size, file type, first submission date to VirusTotal, last submission date to
          VirusTotal, number of positives, dynamic behavioural properties, binary content, submission file name, and a
          very long etcetera. The full list of search modifiers allowed for file search queries is documented at:
          https://www.virustotal.com/intelligence/help/file-search/#search-modifiers
  
          NOTE:
          Daily limited! No matter what API step you have licensed, this API call is limited to 50K requests per day.
          If you need any more, chances are you are approaching your engineering problem erroneously and you can
          probably solve it using the file distribution call. Do not hesitate to contact us with your particular
          use case.
  
          EXAMPLE:
          search_options = 'type:peexe size:90kb+ positives:5+ behaviour:"taskkill"'
  
          :param query: A search modifier compliant file search query.
          :param offset: (optional) The offset value returned by a previously issued identical query, allows you to
          paginate over the results. If not specified the first 300 matching files sorted according to last submission
          date to VirusTotal in a descending fashion will be returned.
          :param timeout: The amount of time in seconds the request should wait before timing out.
  
          :return: JSON response -  By default the list returned contains at most 300 hashes, ordered according to
          last submission date to VirusTotal in a descending fashion.
          """
          params = dict(apikey=self.api_key, query=query, offset=offset)
  
          try:
              response = requests.get(self.base + 'file/search', params=params, proxies=self.proxies, timeout=timeout)
          except requests.RequestException as e:
              return dict(error=str(e))
  
          return _return_response_and_status_code(response)