
    3 d                         d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ d	 Zd
 Zd Z	 ddZddZdefdZd ZddZd Zd Zd ZdS )z<
This module contains some assorted functions used in tests
    N)import_module)Path)split)mock)SkipTest)is_botocore_availablec                  @    dt           j        vrt          d          d S )NGCS_PROJECT_IDzGCS_PROJECT_ID not found)osenvironr        1lib/python3.11/site-packages/scrapy/utils/test.pyassert_gcs_environr      s*    rz) 312223 3r   c                  @    t                      st          d          d S )Nzmissing botocore library)r   r   r   r   r   skip_if_no_botor      s)     "" 312223 3r   c                 L   ddl m} |                    t          j                            d                    }|                    |           } |                     |          }|                                }t          |j
                  }|                     |           |||fS )Nr   )storager
   )project)google.cloudr   Clientr   r   get
get_bucketget_blobdownload_as_stringlistacldelete_blob)bucketpathr   clientblobcontentr   s          r   get_gcs_content_and_deleter$      s    $$$$$$^^BJNN3C$D$D^EEFv&&F??4  D%%''G
tx..C
tCr   Fc                    ddl m}  |            }|                    ||           |                    ||           |r|                    d           g fd}|                    d|  |           t          |           \  }	}
|                    |	           |                    |
           d	                              S )Nr   )FTPFc                 2                         |            d S N)append)dataftp_datas    r   buffer_dataz/get_ftp_content_and_delete.<locals>.buffer_data3   s    r   zRETR  )
ftplibr&   connectloginset_pasv
retrbinaryr   cwddeletejoin)r    hostportusernamepassworduse_active_moder&   ftpr,   dirnamefilenamer+   s              @r   get_ftp_content_and_deleter>   '   s     
#%%CKKdIIh!!! UH     NN>4>>;///dGXGGGJJx778r   Tc                     ddl m} ddlm} i }|rd|d<   |                    |pi             ||          }|                    | p|          S )zReturn an unconfigured Crawler object. If settings_dict is given, it
    will be used to populate the crawler settings with a project level
    priority.
    r   )CrawlerRunner)Spiderz2.7$REQUEST_FINGERPRINTER_IMPLEMENTATION)scrapy.crawlerr@   scrapy.spidersrA   updatecreate_crawler)	spiderclssettings_dictprevent_warningsr@   rA   settingsrunners          r   get_crawlerrL   =   s    
 -,,,,,%%%%%% H A;@78OOM'R(((]8$$F  !4f555r   returnc                      t          d          j        d         } t          t          |           j                  t
          j        z   t
          j                            dd          z   S )zbReturn a PYTHONPATH suitable to use in processes so that they find this
    installation of Scrapyscrapyr   
PYTHONPATHr-   )	r   __path__strr   parentr   pathsepr   r   )scrapy_paths    r   get_pythonpathrV   N   sO      ))215KtK  '((2:5
|UW8X8XXXr   c                  d    t           j                                        } t                      | d<   | S )zReturn a OS environment dict suitable to fork processes that need to import
    this installation of Scrapy, instead of a system installed one.
    rP   )r   r   copyrV   )envs    r   get_testenvrZ   U   s*     *//

C&((CJr   c                 |    |                      |                                |                                |           dS )zlAsserts text1 and text2 have the same lines, ignoring differences in
    line endings between platforms
    N)assertEqual
splitlines)testcasetext1text2msgs       r   assert_samelinesrb   ^   s:     ))++U-=-=-?-?EEEEEr   c                 ~    t          j                    }|                                }|                    |            |S r(   )asyncioQueuer   
put_nowait)valueqgetters      r   get_from_asyncio_queuerj   e   s1    AUUWWFLLMr   c                      ddl m} m}m} t	          j        |          }t	          j        |          }||j        _        t	          j        |           }||j        _        |||fS )z|Creates autospec mocks for google-cloud-storage Client, Bucket and Blob
    classes and set their proper return values.
    r   )BlobBucketr   )	google.cloud.storagerl   rm   r   r   create_autospecr   return_valuer"   )rl   rm   r   client_mockbucket_mock	blob_mocks         r   mock_google_cloud_storagert   l   su     :999999999&v..K&v..K*5K'$T**I$-K!i00r   c                     ddl m} ddlm}  ||          }|                    d|                     d                    S )Nr   )reactor)Agents   GETzutf-8)twisted.internetrv   twisted.web.clientrw   requestencode)urlrv   rw   agents       r   get_web_client_agent_reqr~   }   sS    ((((((((((((E'NNE==G!4!4555r   )F)NNTr(   )__doc__rd   r   	importlibr   pathlibr   	posixpathr   unittestr   twisted.trial.unittestr   scrapy.utils.botor   r   r   r$   r>   rL   rR   rV   rZ   rb   rj   rt   r~   r   r   r   <module>r      sh     				 # # # # # #                   + + + + + + 3 3 3 3 3 33 3 3
3 3 3
	 	 	 ;@   ,6 6 6 6"Y Y Y Y Y  F F F F  1 1 1"6 6 6 6 6r   