All classes:
- scrapy.exceptions.NotConfigured
- scrapy.exceptions._InvalidOutput
- scrapy.exceptions.IgnoreRequest
- scrapy.exceptions.DontCloseSpider
- scrapy.exceptions.CloseSpider
- scrapy.exceptions.StopDownload
- scrapy.exceptions.DropItem
- scrapy.exceptions.NotSupported
- scrapy.exceptions.UsageError
- scrapy.exceptions.ScrapyDeprecationWarning
- scrapy.exceptions.ContractFail
- scrapy.utils.datatypes.CaselessDict
- scrapy.utils.datatypes.CaseInsensitiveDict
- scrapy.utils.datatypes.LocalCache
- scrapy.utils.datatypes.LocalWeakReferencedCache
- scrapy.utils.datatypes.SequenceExclude
- scrapy.utils.python.MutableChain
- scrapy.utils.python.MutableAsyncChain
- scrapy.http.headers.Headers
- scrapy.utils.curl.DataAction
- scrapy.utils.curl.CurlParser
- scrapy.utils.trackref.object_ref
- scrapy.http.request.Request
- scrapy.link.Link
- scrapy.selector.unified.SelectorList
- scrapy.selector.unified.Selector
- scrapy.http.response.Response
- scrapy.http.response.text.TextResponse
- scrapy.http.response.text._InvalidSelector
- scrapy.http.request.form.FormRequest
- scrapy.http.request.json_request.JsonRequest
- scrapy.http.request.rpc.XmlRpcRequest
- scrapy.http.response.html.HtmlResponse
- scrapy.http.response.json.JsonResponse
- scrapy.http.response.xml.XmlResponse
- scrapy.item.Field
- scrapy.item.ItemMeta
- scrapy.item.Item
- scrapy.settings.SettingsAttribute
- scrapy.settings.BaseSettings
- scrapy.settings.Settings
- scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass
- scrapy.addons.AddonManager
- scrapy.core.downloader.handlers.DownloadHandlers
- scrapy.utils.reactor.CallLaterOnce
- scrapy.utils.defer._AsyncCooperatorAdapter
- scrapy.middleware.MiddlewareManager
- scrapy.core.downloader.middleware.DownloaderMiddlewareManager
- scrapy.resolver.CachingThreadedResolver
- scrapy.resolver.HostResolution
- scrapy.resolver._CachingResolutionReceiver
- scrapy.resolver.CachingHostnameResolver
- scrapy.utils.log.TopLevelFormatter
- scrapy.utils.log.StreamLogger
- scrapy.utils.log.LogCounterHandler
- scrapy.signalmanager.SignalManager
- scrapy.core.downloader.Slot
- scrapy.core.downloader.Downloader
- scrapy.core.spidermw.SpiderMiddlewareManager
- scrapy.utils.request.RequestFingerprinterProtocol
- scrapy.utils.request.RequestFingerprinter
- scrapy.logformatter.LogFormatter
- scrapy.pipelines.ItemPipelineManager
- scrapy.interfaces.ISpiderLoader
- scrapy.spiderloader.SpiderLoader
- scrapy.utils.spider.DefaultSpider
- scrapy.core.scraper.Slot
- scrapy.core.scraper.Scraper
- scrapy.dupefilters.BaseDupeFilter
- scrapy.dupefilters.RFPDupeFilter
- scrapy.statscollectors.StatsCollector
- scrapy.statscollectors.MemoryStatsCollector
- scrapy.statscollectors.DummyStatsCollector
- scrapy.core.scheduler.BaseSchedulerMeta
- scrapy.core.scheduler.BaseScheduler
- scrapy.core.scheduler.Scheduler
- scrapy.core.engine.Slot
- scrapy.core.engine.ExecutionEngine
- scrapy.extension.ExtensionManager
- scrapy.crawler.Crawler
- scrapy.crawler.CrawlerRunner
- scrapy.crawler.CrawlerProcess
- scrapy.spiders.Spider
- scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor
- scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor
- scrapy.spiders.crawl.Rule
- scrapy.spiders.crawl.CrawlSpider
- scrapy.utils.iterators._StreamReader
- scrapy.spiders.feed.XMLFeedSpider
- scrapy.spiders.feed.CSVFeedSpider
- scrapy.utils.sitemap.Sitemap
- scrapy.spiders.sitemap.SitemapSpider
- '...fuzz_crawl.test_spider'
- scrapy.mail.MailSender
- scrapy.responsetypes.ResponseTypes
- scrapy.commands.ScrapyCommand
- scrapy.commands.BaseRunSpiderCommand
- scrapy.commands.ScrapyHelpFormatter
- scrapy.cmdline.ScrapyArgumentParser
- scrapy.pqueues.ScrapyPriorityQueue
- scrapy.pqueues.DownloaderInterface
- scrapy.pqueues.DownloaderAwarePriorityQueue
- scrapy.squeues._with_mkdir.DirectoriesCreated
- scrapy.squeues._serializable_queue.SerializableQueue
- scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue
- scrapy.squeues._scrapy_non_serialization_queue.ScrapyRequestQueue
- scrapy.robotstxt.RobotParser
- scrapy.robotstxt.PythonRobotParser
- scrapy.robotstxt.ReppyRobotParser
- scrapy.robotstxt.RerpRobotParser
- scrapy.robotstxt.ProtegoRobotParser
- scrapy.utils.serialize.ScrapyJSONEncoder
- scrapy.utils.serialize.ScrapyJSONDecoder
- scrapy.exporters.BaseItemExporter
- scrapy.exporters.JsonLinesItemExporter
- scrapy.exporters.JsonItemExporter
- scrapy.exporters.XmlItemExporter
- scrapy.exporters.CsvItemExporter
- scrapy.exporters.PickleItemExporter
- scrapy.exporters.MarshalItemExporter
- scrapy.exporters.PprintItemExporter
- scrapy.exporters.PythonItemExporter
- scrapy.shell.Shell
- scrapy.utils.testsite.SiteTest
- scrapy.utils.testsite.NoMetaRefreshRedirect
- scrapy.utils.testproc.ProcessTest
- scrapy.utils.testproc.TestProcessProtocol
- scrapy.utils.benchserver.Root
- scrapy.utils.test.TestSpider
- scrapy.core.http2.protocol.InvalidNegotiatedProtocol
- scrapy.core.http2.protocol.RemoteTerminatedConnection
- scrapy.core.http2.protocol.MethodNotAllowed405
- scrapy.core.http2.protocol.H2ClientProtocol
- scrapy.core.http2.protocol.H2ClientFactory
- scrapy.core.http2.stream.InactiveStreamClosed
- scrapy.core.http2.stream.InvalidHostname
- scrapy.core.http2.stream.StreamCloseReason
- scrapy.core.http2.stream.Stream
- scrapy.core.downloader.tls.ScrapyClientTLSOptions
- scrapy.core.downloader.contextfactory.ScrapyClientContextFactory
- scrapy.core.downloader.contextfactory.BrowserLikeContextFactory
- scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory
- scrapy.core.http2.agent.H2ConnectionPool
- scrapy.core.http2.agent.H2Agent
- scrapy.core.http2.agent.ScrapyProxyH2Agent
- scrapy.core.downloader.webclient.ScrapyHTTPPageGetter
- scrapy.core.downloader.webclient.ScrapyHTTPClientFactory
- scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler
- scrapy.core.downloader.handlers.http11.TunnelError
- scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint
- scrapy.core.downloader.handlers.http11.TunnelingAgent
- scrapy.core.downloader.handlers.http11.ScrapyProxyAgent
- scrapy.core.downloader.handlers.http11.ScrapyAgent
- scrapy.core.downloader.handlers.http11._RequestBodyProducer
- scrapy.core.downloader.handlers.http11._ResponseReader
- scrapy.core.downloader.handlers.ftp.ReceivedDataProtocol
- scrapy.core.downloader.handlers.ftp.FTPDownloadHandler
- scrapy.core.downloader.handlers.datauri.DataURIDownloadHandler
- scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler
- scrapy.core.downloader.handlers.http2.H2DownloadHandler
- scrapy.core.downloader.handlers.http2.ScrapyH2Agent
- scrapy.core.downloader.handlers.s3.S3DownloadHandler
- scrapy.core.downloader.handlers.file.FileDownloadHandler
- scrapy.spiders.init.InitSpider
- scrapy.extensions.periodic_log.PeriodicLog
- scrapy.extensions.debug.StackTraceDump
- scrapy.extensions.debug.Debugger
- scrapy.extensions.spiderstate.SpiderState
- scrapy.extensions.postprocessing.GzipPlugin
- scrapy.extensions.postprocessing.Bz2Plugin
- scrapy.extensions.postprocessing.LZMAPlugin
- scrapy.extensions.postprocessing.PostProcessingManager
- scrapy.extensions.feedexport.ItemFilter
- scrapy.extensions.feedexport.IFeedStorage
- scrapy.extensions.feedexport.BlockingFeedStorage
- scrapy.extensions.feedexport.StdoutFeedStorage
- scrapy.extensions.feedexport.FileFeedStorage
- scrapy.extensions.feedexport.S3FeedStorage
- scrapy.extensions.feedexport.GCSFeedStorage
- scrapy.extensions.feedexport.FTPFeedStorage
- scrapy.extensions.feedexport.FeedSlot
- scrapy.extensions.feedexport.FeedExporter
- scrapy.extensions.telnet.TelnetConsole
- scrapy.extensions.telnet.TelnetConsole.protocol.Portal
- scrapy.extensions.memdebug.MemoryDebugger
- scrapy.extensions.logstats.LogStats
- scrapy.extensions.statsmailer.StatsMailer
- scrapy.extensions.throttle.AutoThrottle
- scrapy.extensions.corestats.CoreStats
- scrapy.extensions.closespider.CloseSpider
- scrapy.extensions.memusage.MemoryUsage
- scrapy.extensions.httpcache.DummyPolicy
- scrapy.extensions.httpcache.RFC2616Policy
- scrapy.extensions.httpcache.DbmCacheStorage
- scrapy.extensions.httpcache.FilesystemCacheStorage
- scrapy.spidermiddlewares.httperror.HttpError
- scrapy.spidermiddlewares.httperror.HttpErrorMiddleware
- scrapy.spidermiddlewares.depth.DepthMiddleware
- scrapy.spidermiddlewares.offsite.OffsiteMiddleware
- scrapy.spidermiddlewares.offsite.URLWarning
- scrapy.spidermiddlewares.offsite.PortWarning
- scrapy.spidermiddlewares.referer.ReferrerPolicy
- scrapy.spidermiddlewares.referer.NoReferrerPolicy
- scrapy.spidermiddlewares.referer.NoReferrerWhenDowngradePolicy
- scrapy.spidermiddlewares.referer.SameOriginPolicy
- scrapy.spidermiddlewares.referer.OriginPolicy
- scrapy.spidermiddlewares.referer.StrictOriginPolicy
- scrapy.spidermiddlewares.referer.OriginWhenCrossOriginPolicy
- scrapy.spidermiddlewares.referer.StrictOriginWhenCrossOriginPolicy
- scrapy.spidermiddlewares.referer.UnsafeUrlPolicy
- scrapy.spidermiddlewares.referer.DefaultReferrerPolicy
- scrapy.spidermiddlewares.referer.RefererMiddleware
- scrapy.spidermiddlewares.urllength.UrlLengthMiddleware
- scrapy.pipelines.media.MediaPipeline
- scrapy.pipelines.media.MediaPipeline.SpiderInfo
- scrapy.pipelines.files.FileException
- scrapy.pipelines.files.FSFilesStore
- scrapy.pipelines.files.S3FilesStore
- scrapy.pipelines.files.GCSFilesStore
- scrapy.pipelines.files.FTPFilesStore
- scrapy.pipelines.files.FilesPipeline
- scrapy.pipelines.images.NoimagesDrop
- scrapy.pipelines.images.ImageException
- scrapy.pipelines.images.ImagesPipeline
- scrapy.loader.ItemLoader
- scrapy.contracts.Contract
- scrapy.contracts.ContractsManager
- scrapy.contracts._create_testcase.ContractTestCase
- scrapy.contracts.default.UrlContract
- scrapy.contracts.default.CallbackKeywordArgumentsContract
- scrapy.contracts.default.ReturnsContract
- scrapy.contracts.default.ScrapesContract
- scrapy.commands.edit.Command
- scrapy.commands.check.TextTestResult
- scrapy.commands.check.Command
- scrapy.commands.settings.Command
- scrapy.commands.list.Command
- scrapy.commands.genspider.Command
- scrapy.commands.runspider.Command
- scrapy.commands.fetch.Command
- scrapy.commands.parse.Command
- scrapy.commands.startproject.Command
- scrapy.commands.version.Command
- scrapy.commands.crawl.Command
- scrapy.commands.shell.Command
- scrapy.commands.bench.Command
- scrapy.commands.bench._BenchServer
- scrapy.commands.bench._BenchSpider
- scrapy.commands.view.Command
- scrapy.http.cookies.CookieJar
- scrapy.http.cookies._DummyLock
- scrapy.http.cookies.WrappedRequest
- scrapy.http.cookies.WrappedResponse
- scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware
- scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware
- scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware
- scrapy.downloadermiddlewares.redirect.RedirectMiddleware
- scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware
- scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware
- scrapy.downloadermiddlewares.useragent.UserAgentMiddleware
- scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware
- scrapy.downloadermiddlewares.stats.DownloaderStats
- scrapy.downloadermiddlewares.retry.BackwardsCompatibilityMetaclass
- scrapy.downloadermiddlewares.retry.RetryMiddleware
- scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware
- scrapy.downloadermiddlewares.cookies.CookiesMiddleware
- scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware
- scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware
- scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware
All functions:
  Elements:
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: '...fuzz_crawl'
    functionSourceFile: '...fuzz_crawl'
    functionUses: 0
    functionsReached:
    - atheris.Setup
    - '...fuzz_crawl.main'
    - atheris.Fuzz
    - atheris.instrument_all
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 25
    functionName: '...fuzz_crawl.test_spider.parse'
    functionSourceFile: '...fuzz_crawl'
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - data
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 9
    functionLinenumber: 28
    functionName: '...fuzz_crawl.TestOneInput'
    functionSourceFile: '...fuzz_crawl'
    functionUses: 0
    functionsReached:
    - <builtin>.bool
    - twisted.internet.defer.Deferred.callback
    - atheris.FuzzedDataProvider
    - scrapy.core.scraper.Scraper.__init__
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.DeferredList
    - name.isupper
    - handler.setLevel
    - scrapy.crawler.CrawlerRunner._create_crawler
    - urllib.parse.urlparse.rindex
    - scrapy.crawler.CrawlerRunner.crawl
    - scrapy.core.engine.ExecutionEngine.open_spider
    - <builtin>.set
    - logger.debug
    - middlewares.append
    - scrapy.crawler.CrawlerProcess._create_crawler
    - scrapy.utils.reactor.CallLaterOnce.__init__
    - scrapy.core.engine.ExecutionEngine._get_scheduler_class
    - system_openssl_bytes.decode
    - twisted.internet.reactor.run
    - scrapy.settings.BaseSettings._assert_mutability
    - asyncio.get_event_loop
    - scrapy.utils.log.log_reactor_info
    - twisted.internet.defer.Deferred
    - twisted.python.log.PythonLoggingObserver
    - twisted.internet.defer.Deferred.addBoth
    - scrapy.crawler.CrawlerProcess.__init__
    - scrapy.crawler.CrawlerRunner.join
    - warnings.filterwarnings
    - asyncio.new_event_loop
    - asyncio.get_event_loop_policy
    - scrapy.crawler.Crawler._create_engine
    - warnings.catch_warnings
    - key.isupper
    - scrapy.settings.BaseSettings.get
    - twisted.internet.asyncioreactor.install
    - scrapy.settings.iter_default_settings
    - itemproc_cls.from_crawler
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.log.StreamLogger.__init__
    - <builtin>.int
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - scrapy.core.engine.Slot.close
    - scrapy.middleware.MiddlewareManager.from_settings
    - <builtin>.isinstance
    - objcls.from_settings
    - lf_cls.from_crawler
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.middleware.MiddlewareManager._add_middleware
    - scrapy.utils.log._get_handler
    - scrapy.settings.BaseSettings.copy
    - resolver.install_on_reactor
    - <builtin>.super
    - logging.Formatter
    - scrapy.utils.reactor.set_asyncio_event_loop
    - <builtin>.dir
    - enabled.append
    - twisted.internet.defer.maybeDeferred.addBoth
    - scrapy.core.engine.ExecutionEngine.stop
    - scrapy.middleware.MiddlewareManager.from_crawler
    - reactor_path.split
    - scrapy.core.engine.ExecutionEngine.close
    - scrapy.utils.reactor.set_asyncio_event_loop_policy
    - scrapy.signalmanager.SignalManager.__init__
    - logging.StreamHandler
    - typing.cast.getpriority
    - <builtin>.getattr
    - scrapy.core.engine.ExecutionEngine.close_spider
    - twisted.internet.reactor.getThreadPool
    - twisted.internet.reactor.addSystemEventTrigger
    - scrapy.utils.reactor.install_reactor
    - <builtin>.max
    - <builtin>.iter
    - scrapy.settings.BaseSettings.update
    - scrapy.utils.reactor._get_asyncio_event_loop_policy
    - objcls.from_crawler
    - twisted.internet.defer.DeferredList.addBoth
    - scrapy.core.engine.Slot.__init__
    - scrapy.core.engine.Slot._maybe_fire_closing
    - importlib.import_module
    - typing.cast.items
    - OpenSSL.SSL.SSLeay_version
    - <builtin>.hasattr
    - scrapy.addons.AddonManager.__init__
    - scrapy.utils.log.log_scrapy_info
    - twisted.internet.task.LoopingCall
    - fdp.ConsumeUnicodeNoSurrogates
    - logging.captureWarnings
    - logging.FileHandler
    - json.loads
    - logging.root.addHandler
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.core.scraper.Slot.__init__
    - <builtin>.callable
    - scrapy.crawler.CrawlerRunner._crawl
    - tp.adjustPoolsize
    - scrapy.settings.BaseSettings.__init__
    - platform.platform
    - urllib.parse.urlparse
    - scrapy.crawler.Crawler.__init__
    - warnings.warn
    - logger.warning
    - scrapy.core.scraper.Scraper.open_spider
    - scrapy.crawler.CrawlerProcess.start
    - scrapy.utils.reactor.verify_installed_asyncio_event_loop
    - handler.setFormatter
    - logging.root.removeHandler
    - logger.info
    - <builtin>.map
    - scrapy.settings.BaseSettings.maxpriority
    - contextlib.suppress
    - typing.cast.rindex
    - scrapy.settings.get_settings_priority
    - logging.config.dictConfig
    - asyncio.set_event_loop_policy
    - scrapy.core.engine.ExecutionEngine.__init__
    - scrapy.settings.BaseSettings.setmodule
    - scrapy.settings.Settings.__init__
    - logging.root.setLevel
    - scrapy.crawler.CrawlerRunner.create_crawler
    - twisted.version.short
    - scrapy.utils.versions.scrapy_components_versions
    - typing.cast
    - observer.start
    - scrapy.crawler.Crawler._create_spider
    - asyncio.WindowsSelectorEventLoopPolicy
    - scrapy.crawler.Crawler._update_root_log_handler
    - scrapy.crawler.Crawler._apply_settings
    - scrapy.utils.log.LogCounterHandler.__init__
    - scrapy.core.engine.ExecutionEngine.close_spider.log_failure
    - collections.defaultdict
    - collections.deque
    - scrapy.utils.misc.build_from_crawler
    - dfd.addBoth
    - twisted.internet.defer.succeed
    - scrapy.utils.log.get_scrapy_root_handler
    - twisted.internet.defer.Deferred.addErrback
    - <builtin>.issubclass
    - scrapy.settings.BaseSettings.getbool
    - scrapy.settings.BaseSettings.set
    - logging.getLogger
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.utils.ssl.get_openssl_version
    - scrapy.crawler.Crawler.crawl
    - scrapy.utils.misc.build_from_settings
    - scheduler.open
    - scrapy.settings.overridden_settings
    - crawler.settings.getint
    - <builtin>.dict
    - twisted.internet.defer.succeed.addBoth
    - twisted.internet.defer.inlineCallbacks
    - sys.version.replace
    - scrapy.utils.reactor.verify_installed_reactor
    - handler.addFilter
    - fdp.ConsumeIntInRange
    - scrapy.settings.BaseSettings.getint
    - asyncio.set_event_loop
    - <builtin>.len
    - scrapy.middleware.MiddlewareManager.__init__
    - scrapy.utils.log.configure_logging
    - scrapy.utils.misc.load_object
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: atheris.FuzzedDataProvider
    functionSourceFile: atheris
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: fdp.ConsumeIntInRange
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: fdp.ConsumeUnicodeNoSurrogates
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c0fc6a0>
    - <ast.Constant object at 0x7f9a4c0fc670>
    argNames:
    - self
    - settings
    - install_root_handler
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 380
    functionName: scrapy.crawler.CrawlerProcess.__init__
    functionSourceFile: scrapy.crawler
    functionUses: 4
    functionsReached:
    - twisted.version.short
    - <builtin>.bool
    - key.isupper
    - scrapy.utils.versions.scrapy_components_versions
    - typing.cast
    - <builtin>.max
    - observer.start
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - scrapy.utils.log.StreamLogger.__init__
    - importlib.import_module
    - handler.setLevel
    - OpenSSL.SSL.SSLeay_version
    - typing.cast.items
    - scrapy.utils.log.log_scrapy_info
    - <builtin>.int
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - logging.captureWarnings
    - logging.FileHandler
    - json.loads
    - logging.root.addHandler
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.settings.BaseSettings.getbool
    - system_openssl_bytes.decode
    - scrapy.settings.BaseSettings.set
    - logging.getLogger
    - scrapy.settings.BaseSettings.__init__
    - platform.platform
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.utils.ssl.get_openssl_version
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.utils.log._get_handler
    - twisted.python.log.PythonLoggingObserver
    - typing.cast.getpriority
    - <builtin>.super
    - logging.Formatter
    - handler.setFormatter
    - logging.root.removeHandler
    - logger.info
    - <builtin>.map
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - sys.version.replace
    - scrapy.settings.get_settings_priority
    - logging.config.dictConfig
    - handler.addFilter
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.utils.log.configure_logging
    - scrapy.settings.Settings.__init__
    - logging.StreamHandler
    - logging.root.setLevel
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - crawler_or_spidercls
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 9
    functionLinenumber: 260
    functionName: scrapy.crawler.CrawlerRunner.crawl
    functionSourceFile: scrapy.crawler
    functionUses: 1
    functionsReached:
    - twisted.internet.defer.Deferred.callback
    - <builtin>.bool
    - scrapy.core.scraper.Scraper.__init__
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - name.isupper
    - handler.setLevel
    - scrapy.crawler.CrawlerRunner._create_crawler
    - urllib.parse.urlparse.rindex
    - scrapy.core.engine.ExecutionEngine.open_spider
    - <builtin>.set
    - logger.debug
    - middlewares.append
    - scrapy.crawler.CrawlerProcess._create_crawler
    - scrapy.utils.reactor.CallLaterOnce.__init__
    - scrapy.core.engine.ExecutionEngine._get_scheduler_class
    - scrapy.settings.BaseSettings._assert_mutability
    - asyncio.get_event_loop
    - scrapy.utils.log.log_reactor_info
    - twisted.internet.defer.Deferred
    - twisted.internet.defer.Deferred.addBoth
    - warnings.filterwarnings
    - asyncio.new_event_loop
    - asyncio.get_event_loop_policy
    - scrapy.crawler.Crawler._create_engine
    - warnings.catch_warnings
    - key.isupper
    - twisted.internet.asyncioreactor.install
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.iter_default_settings
    - itemproc_cls.from_crawler
    - twisted.internet.defer.maybeDeferred
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - <builtin>.int
    - scrapy.core.engine.Slot.close
    - scrapy.middleware.MiddlewareManager.from_settings
    - <builtin>.isinstance
    - objcls.from_settings
    - lf_cls.from_crawler
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.middleware.MiddlewareManager._add_middleware
    - scrapy.utils.log._get_handler
    - scrapy.settings.BaseSettings.copy
    - <builtin>.super
    - scrapy.utils.reactor.set_asyncio_event_loop
    - logging.Formatter
    - <builtin>.dir
    - enabled.append
    - twisted.internet.defer.maybeDeferred.addBoth
    - scrapy.core.engine.ExecutionEngine.stop
    - scrapy.middleware.MiddlewareManager.from_crawler
    - reactor_path.split
    - scrapy.core.engine.ExecutionEngine.close
    - scrapy.utils.reactor.set_asyncio_event_loop_policy
    - scrapy.signalmanager.SignalManager.__init__
    - logging.StreamHandler
    - typing.cast.getpriority
    - <builtin>.getattr
    - scrapy.core.engine.ExecutionEngine.close_spider
    - scrapy.utils.reactor.install_reactor
    - <builtin>.max
    - <builtin>.iter
    - scrapy.settings.BaseSettings.update
    - scrapy.utils.reactor._get_asyncio_event_loop_policy
    - scrapy.core.engine.Slot.__init__
    - objcls.from_crawler
    - scrapy.core.engine.Slot._maybe_fire_closing
    - importlib.import_module
    - typing.cast.items
    - <builtin>.hasattr
    - scrapy.addons.AddonManager.__init__
    - twisted.internet.task.LoopingCall
    - logging.FileHandler
    - json.loads
    - logging.root.addHandler
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.core.scraper.Slot.__init__
    - <builtin>.callable
    - scrapy.crawler.CrawlerRunner._crawl
    - scrapy.settings.BaseSettings.__init__
    - scrapy.crawler.Crawler.__init__
    - warnings.warn
    - logger.warning
    - scrapy.core.scraper.Scraper.open_spider
    - scrapy.utils.reactor.verify_installed_asyncio_event_loop
    - handler.setFormatter
    - contextlib.suppress
    - logger.info
    - logging.root.removeHandler
    - scrapy.settings.BaseSettings.maxpriority
    - typing.cast.rindex
    - scrapy.settings.get_settings_priority
    - asyncio.set_event_loop_policy
    - scrapy.core.engine.ExecutionEngine.__init__
    - scrapy.settings.BaseSettings.setmodule
    - scrapy.settings.Settings.__init__
    - logging.root.setLevel
    - scrapy.crawler.CrawlerRunner.create_crawler
    - typing.cast
    - scrapy.crawler.Crawler._create_spider
    - asyncio.WindowsSelectorEventLoopPolicy
    - scrapy.crawler.Crawler._update_root_log_handler
    - scrapy.crawler.Crawler._apply_settings
    - scrapy.utils.log.LogCounterHandler.__init__
    - collections.defaultdict
    - scrapy.core.engine.ExecutionEngine.close_spider.log_failure
    - collections.deque
    - scrapy.utils.misc.build_from_crawler
    - dfd.addBoth
    - twisted.internet.defer.succeed
    - scrapy.utils.log.get_scrapy_root_handler
    - twisted.internet.defer.Deferred.addErrback
    - <builtin>.issubclass
    - scrapy.settings.BaseSettings.getbool
    - scrapy.settings.BaseSettings.set
    - scrapy.crawler.Crawler.crawl
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.utils.misc.build_from_settings
    - scheduler.open
    - scrapy.settings.overridden_settings
    - crawler.settings.getint
    - <builtin>.dict
    - twisted.internet.defer.succeed.addBoth
    - twisted.internet.defer.inlineCallbacks
    - scrapy.utils.reactor.verify_installed_reactor
    - handler.addFilter
    - asyncio.set_event_loop
    - <builtin>.len
    - scrapy.middleware.MiddlewareManager.__init__
    - urllib.parse.urlparse
    - scrapy.utils.misc.load_object
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 7
    IfCount: 3
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c100880>
    - <ast.Constant object at 0x7f9a4c100850>
    argNames:
    - self
    - stop_after_crawl
    - install_signal_handlers
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 421
    functionName: scrapy.crawler.CrawlerProcess.start
    functionSourceFile: scrapy.crawler
    functionUses: 1
    functionsReached:
    - twisted.internet.reactor.getThreadPool
    - twisted.internet.reactor.addSystemEventTrigger
    - scrapy.settings.BaseSettings.get
    - objcls.from_crawler
    - twisted.internet.defer.DeferredList.addBoth
    - twisted.internet.defer.DeferredList
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - <builtin>.int
    - scrapy.utils.misc.build_from_crawler
    - <builtin>.callable
    - twisted.internet.reactor.run
    - tp.adjustPoolsize
    - <builtin>.isinstance
    - objcls.from_settings
    - resolver.install_on_reactor
    - scrapy.crawler.CrawlerRunner.join
    - typing.cast.rindex
    - scrapy.settings.BaseSettings.getint
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 42
    functionName: '...fuzz_crawl.main'
    functionSourceFile: '...fuzz_crawl'
    functionUses: 1
    functionsReached:
    - atheris.Setup
    - atheris.Fuzz
    - atheris.instrument_all
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: atheris.instrument_all
    functionSourceFile: atheris
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: atheris.Setup
    functionSourceFile: atheris
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: atheris.Fuzz
    functionSourceFile: atheris
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.crawler
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.getLogger
    functionSourceFile: logging
    functionUses: 53
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c0e8250>
    - <ast.Constant object at 0x7f9a4c0e8220>
    argNames:
    - self
    - spidercls
    - settings
    - init_reactor
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 59
    functionName: scrapy.crawler.Crawler.__init__
    functionSourceFile: scrapy.crawler
    functionUses: 6
    functionsReached:
    - <builtin>.bool
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - scrapy.crawler.Crawler._update_root_log_handler
    - importlib.import_module
    - typing.cast.items
    - handler.setLevel
    - scrapy.addons.AddonManager.__init__
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - <builtin>.int
    - logging.FileHandler
    - json.loads
    - logging.root.addHandler
    - scrapy.utils.log.get_scrapy_root_handler
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.settings.BaseSettings.getbool
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - logging.root.setLevel
    - scrapy.utils.log._get_handler
    - scrapy.settings.BaseSettings.copy
    - <builtin>.super
    - logging.Formatter
    - handler.setFormatter
    - logging.root.removeHandler
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - handler.addFilter
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.signalmanager.SignalManager.__init__
    - scrapy.settings.Settings.__init__
    - logging.StreamHandler
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.isinstance
    functionSourceFile: <builtin>
    functionUses: 501
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b27e760>
    - <ast.Constant object at 0x7f9a4b27e730>
    argNames:
    - self
    - values
    - priority
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 540
    functionName: scrapy.settings.Settings.__init__
    functionSourceFile: scrapy.settings
    functionUses: 21
    functionsReached:
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - importlib.import_module
    - typing.cast.items
    - json.loads
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - <builtin>.super
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 442
    functionName: scrapy.settings.BaseSettings.copy
    functionSourceFile: ''
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 90
    functionName: scrapy.crawler.Crawler._update_root_log_handler
    functionSourceFile: scrapy.crawler
    functionUses: 9
    functionsReached:
    - logging.Formatter
    - handler.setFormatter
    - logging.root.removeHandler
    - <builtin>.bool
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - <builtin>.int
    - logging.FileHandler
    - handler.addFilter
    - scrapy.settings.BaseSettings.get
    - logging.root.addHandler
    - scrapy.utils.log._get_handler
    - scrapy.utils.log.get_scrapy_root_handler
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.settings.BaseSettings.getbool
    - logging.StreamHandler
    - logging.root.setLevel
    - handler.setLevel
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 18
    functionName: scrapy.addons.AddonManager.__init__
    functionSourceFile: ''
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Attribute object at 0x7f9a4ebfbb20>
    argNames:
    - self
    - sender
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 10
    functionName: scrapy.signalmanager.SignalManager.__init__
    functionSourceFile: ''
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 139
    functionName: scrapy.utils.log.get_scrapy_root_handler
    functionSourceFile: ''
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - settings
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 126
    functionName: scrapy.utils.log.install_scrapy_root_handler
    functionSourceFile: scrapy.utils.log
    functionUses: 15
    functionsReached:
    - logging.Formatter
    - handler.setFormatter
    - logging.root.removeHandler
    - <builtin>.bool
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - <builtin>.int
    - logging.FileHandler
    - handler.addFilter
    - scrapy.settings.BaseSettings.get
    - logging.root.addHandler
    - scrapy.utils.log._get_handler
    - scrapy.settings.BaseSettings.getbool
    - logging.StreamHandler
    - logging.root.setLevel
    - handler.setLevel
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 9
    IfCount: 5
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 95
    functionName: scrapy.crawler.Crawler._apply_settings
    functionSourceFile: scrapy.crawler
    functionUses: 5
    functionsReached:
    - scrapy.utils.reactor.install_reactor
    - typing.cast
    - twisted.internet.asyncioreactor.install
    - asyncio.WindowsSelectorEventLoopPolicy
    - scrapy.settings.iter_default_settings
    - scrapy.utils.reactor._get_asyncio_event_loop_policy
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - objcls.from_crawler
    - name.isupper
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - scrapy.utils.log.LogCounterHandler.__init__
    - <builtin>.hasattr
    - collections.defaultdict
    - logger.debug
    - scrapy.utils.misc.build_from_crawler
    - middlewares.append
    - logging.root.addHandler
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - <builtin>.callable
    - scrapy.middleware.MiddlewareManager.from_settings
    - <builtin>.isinstance
    - objcls.from_settings
    - lf_cls.from_crawler
    - asyncio.get_event_loop
    - scrapy.utils.log.log_reactor_info
    - scrapy.utils.reactor.set_asyncio_event_loop_policy
    - scrapy.utils.misc.build_from_settings
    - logger.warning
    - scrapy.middleware.MiddlewareManager._add_middleware
    - scrapy.settings.overridden_settings
    - scrapy.utils.reactor.verify_installed_asyncio_event_loop
    - <builtin>.super
    - scrapy.utils.reactor.set_asyncio_event_loop
    - contextlib.suppress
    - logger.info
    - <builtin>.dict
    - warnings.filterwarnings
    - <builtin>.dir
    - enabled.append
    - scrapy.utils.reactor.verify_installed_reactor
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.middleware.MiddlewareManager.from_crawler
    - asyncio.set_event_loop_policy
    - reactor_path.split
    - asyncio.set_event_loop
    - asyncio.get_event_loop_policy
    - scrapy.middleware.MiddlewareManager.__init__
    - urllib.parse.urlparse
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - path
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 52
    functionName: scrapy.utils.misc.load_object
    functionSourceFile: scrapy.utils.misc
    functionUses: 117
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - <builtin>.callable
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - ValueError
    - NameError
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast
    functionSourceFile: typing
    functionUses: 210
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse
    functionSourceFile: urllib
    functionUses: 109
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - crawler
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 217
    functionName: scrapy.utils.log.LogCounterHandler.__init__
    functionSourceFile: scrapy.utils.log
    functionUses: 6
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.root.addHandler
    functionSourceFile: logging
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.crawler.Crawler._apply_settings.<lambda1>
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - logging.root.removeHandler
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.root.removeHandler
    functionSourceFile: logging
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: lf_cls.from_crawler
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 171
    functionName: scrapy.utils.misc.build_from_crawler
    functionSourceFile: scrapy.utils.misc
    functionUses: 44
    functionsReached:
    - objcls.from_crawler
    - <builtin>.hasattr
    - objcls.from_settings
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d5c9580>
    argNames:
    - reactor_path
    - event_loop_path
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 97
    functionName: scrapy.utils.reactor.install_reactor
    functionSourceFile: scrapy.utils.reactor
    functionUses: 6
    functionsReached:
    - typing.cast
    - twisted.internet.asyncioreactor.install
    - asyncio.WindowsSelectorEventLoopPolicy
    - scrapy.utils.reactor._get_asyncio_event_loop_policy
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.callable
    - <builtin>.isinstance
    - urllib.parse.urlparse
    - asyncio.get_event_loop
    - scrapy.utils.reactor.set_asyncio_event_loop
    - contextlib.suppress
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - asyncio.set_event_loop_policy
    - reactor_path.split
    - asyncio.set_event_loop
    - asyncio.get_event_loop_policy
    - scrapy.utils.reactor.set_asyncio_event_loop_policy
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 179
    functionName: scrapy.utils.log.log_reactor_info
    functionSourceFile: scrapy.utils.log
    functionUses: 6
    functionsReached:
    - <builtin>.isinstance
    - logger.debug
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - reactor_path
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 150
    functionName: scrapy.utils.reactor.verify_installed_reactor
    functionSourceFile: scrapy.utils.reactor
    functionUses: 6
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - Exception
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 185
    functionName: scrapy.utils.reactor.is_asyncio_reactor_installed
    functionSourceFile: scrapy.utils.reactor
    functionUses: 53
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - loop_path
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 166
    functionName: scrapy.utils.reactor.verify_installed_asyncio_event_loop
    functionSourceFile: scrapy.utils.reactor
    functionUses: 6
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - Exception
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 92
    functionName: scrapy.middleware.MiddlewareManager.from_crawler
    functionSourceFile: scrapy.middleware
    functionUses: 10
    functionsReached:
    - objcls.from_crawler
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - collections.defaultdict
    - scrapy.utils.misc.build_from_crawler
    - middlewares.append
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - <builtin>.callable
    - scrapy.middleware.MiddlewareManager.from_settings
    - <builtin>.isinstance
    - objcls.from_settings
    - scrapy.utils.misc.build_from_settings
    - logger.warning
    - scrapy.middleware.MiddlewareManager._add_middleware
    - logger.info
    - enabled.append
    - typing.cast.rindex
    - scrapy.middleware.MiddlewareManager.__init__
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - settings
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 563
    functionName: scrapy.settings.overridden_settings
    functionSourceFile: scrapy.settings
    functionUses: 6
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.dir
    - scrapy.settings.iter_default_settings
    - name.isupper
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.dict
    functionSourceFile: <builtin>
    functionUses: 60
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logger.info
    functionSourceFile: <builtin>
    functionUses: 50
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.crawler.Crawler
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.inlineCallbacks
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.inlineCallbacks
    functionSourceFile: ''
    functionUses: 13
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 6
    IfCount: 3
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 141
    functionName: scrapy.crawler.Crawler.crawl
    functionSourceFile: scrapy.crawler
    functionUses: 3
    functionsReached:
    - twisted.internet.defer.Deferred.callback
    - <builtin>.bool
    - scrapy.core.scraper.Scraper.__init__
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - name.isupper
    - handler.setLevel
    - urllib.parse.urlparse.rindex
    - logger.debug
    - scrapy.core.engine.ExecutionEngine.open_spider
    - <builtin>.set
    - middlewares.append
    - scrapy.utils.reactor.CallLaterOnce.__init__
    - scrapy.core.engine.ExecutionEngine._get_scheduler_class
    - asyncio.get_event_loop
    - scrapy.utils.log.log_reactor_info
    - twisted.internet.defer.Deferred
    - twisted.internet.defer.Deferred.addBoth
    - warnings.filterwarnings
    - asyncio.new_event_loop
    - asyncio.get_event_loop_policy
    - scrapy.crawler.Crawler._create_engine
    - warnings.catch_warnings
    - scrapy.settings.BaseSettings.get
    - twisted.internet.asyncioreactor.install
    - scrapy.settings.iter_default_settings
    - itemproc_cls.from_crawler
    - twisted.internet.defer.maybeDeferred
    - logging.NullHandler
    - <builtin>.int
    - scrapy.utils.log.TopLevelFormatter.__init__
    - scrapy.core.engine.Slot.close
    - scrapy.middleware.MiddlewareManager.from_settings
    - <builtin>.isinstance
    - objcls.from_settings
    - lf_cls.from_crawler
    - scrapy.middleware.MiddlewareManager._add_middleware
    - scrapy.utils.log._get_handler
    - <builtin>.super
    - logging.Formatter
    - scrapy.utils.reactor.set_asyncio_event_loop
    - <builtin>.dir
    - enabled.append
    - scrapy.core.engine.ExecutionEngine.stop
    - scrapy.middleware.MiddlewareManager.from_crawler
    - reactor_path.split
    - scrapy.core.engine.ExecutionEngine.close
    - scrapy.utils.reactor.set_asyncio_event_loop_policy
    - logging.StreamHandler
    - <builtin>.getattr
    - scrapy.core.engine.ExecutionEngine.close_spider
    - scrapy.utils.reactor.install_reactor
    - <builtin>.iter
    - scrapy.utils.reactor._get_asyncio_event_loop_policy
    - scrapy.core.engine.Slot.__init__
    - objcls.from_crawler
    - scrapy.core.engine.Slot._maybe_fire_closing
    - importlib.import_module
    - <builtin>.hasattr
    - twisted.internet.task.LoopingCall
    - logging.FileHandler
    - logging.root.addHandler
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.core.scraper.Slot.__init__
    - <builtin>.callable
    - warnings.warn
    - logger.warning
    - scrapy.core.scraper.Scraper.open_spider
    - scrapy.utils.reactor.verify_installed_asyncio_event_loop
    - handler.setFormatter
    - logging.root.removeHandler
    - logger.info
    - contextlib.suppress
    - typing.cast.rindex
    - asyncio.set_event_loop_policy
    - scrapy.core.engine.ExecutionEngine.__init__
    - logging.root.setLevel
    - typing.cast
    - scrapy.crawler.Crawler._create_spider
    - asyncio.WindowsSelectorEventLoopPolicy
    - scrapy.crawler.Crawler._update_root_log_handler
    - scrapy.crawler.Crawler._apply_settings
    - scrapy.utils.log.LogCounterHandler.__init__
    - scrapy.core.engine.ExecutionEngine.close_spider.log_failure
    - collections.defaultdict
    - collections.deque
    - scrapy.utils.misc.build_from_crawler
    - dfd.addBoth
    - twisted.internet.defer.succeed
    - scrapy.utils.log.get_scrapy_root_handler
    - twisted.internet.defer.Deferred.addErrback
    - <builtin>.issubclass
    - scrapy.settings.BaseSettings.getbool
    - scrapy.utils.misc.build_from_settings
    - scheduler.open
    - scrapy.settings.overridden_settings
    - crawler.settings.getint
    - <builtin>.dict
    - twisted.internet.defer.inlineCallbacks
    - scrapy.utils.reactor.verify_installed_reactor
    - handler.addFilter
    - asyncio.set_event_loop
    - scrapy.middleware.MiddlewareManager.__init__
    - urllib.parse.urlparse
    - scrapy.utils.misc.load_object
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: warnings.warn
    functionSourceFile: warnings
    functionUses: 92
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 166
    functionName: scrapy.crawler.Crawler._create_spider
    functionSourceFile: ''
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 169
    functionName: scrapy.crawler.Crawler._create_engine
    functionSourceFile: scrapy.crawler
    functionUses: 4
    functionsReached:
    - scrapy.core.scraper.Scraper.__init__
    - itemproc_cls.from_crawler
    - objcls.from_crawler
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - collections.defaultdict
    - scrapy.utils.misc.build_from_crawler
    - middlewares.append
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - <builtin>.issubclass
    - <builtin>.callable
    - scrapy.core.engine.ExecutionEngine._get_scheduler_class
    - scrapy.middleware.MiddlewareManager.from_settings
    - <builtin>.isinstance
    - objcls.from_settings
    - scrapy.utils.misc.build_from_settings
    - logger.warning
    - scrapy.middleware.MiddlewareManager._add_middleware
    - crawler.settings.getint
    - logger.info
    - enabled.append
    - typing.cast.rindex
    - scrapy.middleware.MiddlewareManager.from_crawler
    - scrapy.core.engine.ExecutionEngine.__init__
    - scrapy.middleware.MiddlewareManager.__init__
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.iter
    functionSourceFile: <builtin>
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    IfCount: 2
    argCount: 4
    argDefaultValues:
    - <ast.Tuple object at 0x7f9a4c6aca90>
    - <ast.Constant object at 0x7f9a4c6aca60>
    argNames:
    - self
    - spider
    - start_requests
    - close_if_idle
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 354
    functionName: scrapy.core.engine.ExecutionEngine.open_spider
    functionSourceFile: scrapy.core.engine
    functionUses: 4
    functionsReached:
    - <builtin>.hasattr
    - objcls.from_settings
    - logger.info
    - <builtin>.set
    - scrapy.utils.misc.build_from_crawler
    - twisted.internet.task.LoopingCall
    - collections.deque
    - <builtin>.iter
    - scheduler.open
    - objcls.from_crawler
    - scrapy.core.scraper.Scraper.open_spider
    - scrapy.utils.reactor.CallLaterOnce.__init__
    - scrapy.core.scraper.Slot.__init__
    - scrapy.core.engine.Slot.__init__
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.maybeDeferred
    functionSourceFile: twisted
    functionUses: 24
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 144
    functionName: scrapy.core.engine.ExecutionEngine.close
    functionSourceFile: scrapy.core.engine
    functionUses: 4
    functionsReached:
    - scrapy.core.engine.ExecutionEngine.close_spider
    - <builtin>.hasattr
    - logger.info
    - scrapy.core.engine.ExecutionEngine.close_spider.log_failure
    - twisted.internet.defer.Deferred.callback
    - twisted.internet.defer.inlineCallbacks
    - scrapy.core.engine.Slot.close
    - dfd.addBoth
    - scrapy.core.engine.ExecutionEngine.stop
    - twisted.internet.defer.succeed
    - twisted.internet.defer.Deferred
    - twisted.internet.defer.Deferred.addErrback
    - scrapy.core.engine.Slot._maybe_fire_closing
    - twisted.internet.defer.Deferred.addBoth
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.crawler.Crawler._create_engine.<lambda1>
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - scrapy.crawler.Crawler.stop
    - twisted.internet.defer.maybeDeferred
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 173
    functionName: scrapy.crawler.Crawler.stop
    functionSourceFile: scrapy.crawler
    functionUses: 1
    functionsReached:
    - twisted.internet.defer.maybeDeferred
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - crawler
    - spider_closed_callback
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 85
    functionName: scrapy.core.engine.ExecutionEngine.__init__
    functionSourceFile: scrapy.core.engine
    functionUses: 5
    functionsReached:
    - scrapy.core.scraper.Scraper.__init__
    - itemproc_cls.from_crawler
    - objcls.from_crawler
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - collections.defaultdict
    - scrapy.utils.misc.build_from_crawler
    - middlewares.append
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - <builtin>.issubclass
    - <builtin>.callable
    - scrapy.core.engine.ExecutionEngine._get_scheduler_class
    - scrapy.middleware.MiddlewareManager.from_settings
    - <builtin>.isinstance
    - objcls.from_settings
    - scrapy.utils.misc.build_from_settings
    - logger.warning
    - scrapy.middleware.MiddlewareManager._add_middleware
    - crawler.settings.getint
    - logger.info
    - enabled.append
    - typing.cast.rindex
    - scrapy.middleware.MiddlewareManager.from_crawler
    - scrapy.middleware.MiddlewareManager.__init__
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - component_class
    - components
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 182
    functionName: scrapy.crawler.Crawler._get_component
    functionSourceFile: scrapy.crawler
    functionUses: 5
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - cls
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 188
    functionName: scrapy.crawler.Crawler.get_addon
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.crawler.Crawler._get_component
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - cls
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 191
    functionName: scrapy.crawler.Crawler.get_downloader_middleware
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.crawler.Crawler._get_component
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - cls
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 199
    functionName: scrapy.crawler.Crawler.get_extension
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.crawler.Crawler._get_component
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - cls
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 207
    functionName: scrapy.crawler.Crawler.get_item_pipeline
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.crawler.Crawler._get_component
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - cls
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 215
    functionName: scrapy.crawler.Crawler.get_spider_middleware
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.crawler.Crawler._get_component
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.crawler.CrawlerRunner.<lambda1>
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.property
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.crawler.CrawlerRunner
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - <builtin>.property
    - twisted.internet.defer.inlineCallbacks
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - settings
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 244
    functionName: scrapy.crawler.CrawlerRunner._get_spider_loader
    functionSourceFile: scrapy.crawler
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - typing.cast.from_settings
    - urllib.parse.urlparse.rindex
    - zope.interface.verify.verifyClass
    - typing.cast.rindex
    - urllib.parse.urlparse.from_settings
    - scrapy.settings.BaseSettings.frozencopy
    - scrapy.settings.BaseSettings.get
    - copy.freeze
    - scrapy.settings.BaseSettings.copy
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b284a30>
    argNames:
    - self
    - name
    - default
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 128
    functionName: scrapy.settings.BaseSettings.get
    functionSourceFile: ''
    functionUses: 33
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: zope.interface.verify.verifyClass
    functionSourceFile: zope
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 464
    functionName: scrapy.settings.BaseSettings.frozencopy
    functionSourceFile: scrapy.settings
    functionUses: 3
    functionsReached:
    - copy.freeze
    - scrapy.settings.BaseSettings.copy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.from_settings
    functionSourceFile: typing
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.from_settings
    functionSourceFile: urllib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c0f60d0>
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 251
    functionName: scrapy.crawler.CrawlerRunner.__init__
    functionSourceFile: scrapy.crawler
    functionUses: 1
    functionsReached:
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - copy.freeze
    - scrapy.settings.BaseSettings.update
    - importlib.import_module
    - typing.cast.items
    - urllib.parse.urlparse.rindex
    - zope.interface.verify.verifyClass
    - <builtin>.set
    - scrapy.settings.BaseSettings.frozencopy
    - json.loads
    - <builtin>.callable
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - typing.cast.from_settings
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - urllib.parse.urlparse.from_settings
    - scrapy.crawler.CrawlerRunner._get_spider_loader
    - scrapy.settings.BaseSettings.copy
    - <builtin>.super
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - typing.cast.rindex
    - scrapy.settings.get_settings_priority
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.settings.Settings.__init__
    - scrapy.utils.misc.load_object
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.set
    functionSourceFile: <builtin>
    functionUses: 44
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler_or_spidercls
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 308
    functionName: scrapy.crawler.CrawlerRunner.create_crawler
    functionSourceFile: scrapy.crawler
    functionUses: 3
    functionsReached:
    - <builtin>.bool
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - scrapy.crawler.Crawler._update_root_log_handler
    - importlib.import_module
    - typing.cast.items
    - scrapy.crawler.CrawlerRunner._create_crawler
    - handler.setLevel
    - scrapy.addons.AddonManager.__init__
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - <builtin>.int
    - logging.FileHandler
    - json.loads
    - scrapy.crawler.CrawlerProcess._create_crawler
    - logging.root.addHandler
    - scrapy.utils.log.get_scrapy_root_handler
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.settings.BaseSettings.getbool
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.crawler.Crawler.__init__
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.utils.log._get_handler
    - scrapy.settings.BaseSettings.copy
    - typing.cast.getpriority
    - <builtin>.super
    - logging.Formatter
    - handler.setFormatter
    - logging.root.removeHandler
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - handler.addFilter
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.signalmanager.SignalManager.__init__
    - scrapy.settings.Settings.__init__
    - logging.StreamHandler
    - logging.root.setLevel
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - crawler
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 295
    functionName: scrapy.crawler.CrawlerRunner._crawl
    functionSourceFile: scrapy.crawler
    functionUses: 2
    functionsReached:
    - twisted.internet.defer.Deferred.callback
    - <builtin>.bool
    - scrapy.core.scraper.Scraper.__init__
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - name.isupper
    - handler.setLevel
    - urllib.parse.urlparse.rindex
    - logger.debug
    - scrapy.core.engine.ExecutionEngine.open_spider
    - <builtin>.set
    - middlewares.append
    - scrapy.utils.reactor.CallLaterOnce.__init__
    - scrapy.core.engine.ExecutionEngine._get_scheduler_class
    - asyncio.get_event_loop
    - scrapy.utils.log.log_reactor_info
    - twisted.internet.defer.Deferred
    - twisted.internet.defer.Deferred.addBoth
    - warnings.filterwarnings
    - asyncio.new_event_loop
    - asyncio.get_event_loop_policy
    - scrapy.crawler.Crawler._create_engine
    - warnings.catch_warnings
    - scrapy.settings.BaseSettings.get
    - twisted.internet.asyncioreactor.install
    - scrapy.settings.iter_default_settings
    - itemproc_cls.from_crawler
    - twisted.internet.defer.maybeDeferred
    - logging.NullHandler
    - <builtin>.int
    - scrapy.utils.log.TopLevelFormatter.__init__
    - scrapy.core.engine.Slot.close
    - scrapy.middleware.MiddlewareManager.from_settings
    - <builtin>.isinstance
    - objcls.from_settings
    - lf_cls.from_crawler
    - scrapy.middleware.MiddlewareManager._add_middleware
    - scrapy.utils.log._get_handler
    - <builtin>.super
    - logging.Formatter
    - scrapy.utils.reactor.set_asyncio_event_loop
    - <builtin>.dir
    - enabled.append
    - twisted.internet.defer.maybeDeferred.addBoth
    - scrapy.core.engine.ExecutionEngine.stop
    - scrapy.middleware.MiddlewareManager.from_crawler
    - reactor_path.split
    - scrapy.core.engine.ExecutionEngine.close
    - scrapy.utils.reactor.set_asyncio_event_loop_policy
    - logging.StreamHandler
    - <builtin>.getattr
    - scrapy.core.engine.ExecutionEngine.close_spider
    - scrapy.utils.reactor.install_reactor
    - <builtin>.iter
    - scrapy.utils.reactor._get_asyncio_event_loop_policy
    - scrapy.core.engine.Slot.__init__
    - objcls.from_crawler
    - scrapy.core.engine.Slot._maybe_fire_closing
    - importlib.import_module
    - <builtin>.hasattr
    - twisted.internet.task.LoopingCall
    - logging.FileHandler
    - logging.root.addHandler
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.core.scraper.Slot.__init__
    - <builtin>.callable
    - warnings.warn
    - logger.warning
    - scrapy.core.scraper.Scraper.open_spider
    - scrapy.utils.reactor.verify_installed_asyncio_event_loop
    - handler.setFormatter
    - logging.root.removeHandler
    - logger.info
    - contextlib.suppress
    - typing.cast.rindex
    - asyncio.set_event_loop_policy
    - scrapy.core.engine.ExecutionEngine.__init__
    - logging.root.setLevel
    - typing.cast
    - scrapy.crawler.Crawler._create_spider
    - asyncio.WindowsSelectorEventLoopPolicy
    - scrapy.crawler.Crawler._update_root_log_handler
    - scrapy.crawler.Crawler._apply_settings
    - scrapy.utils.log.LogCounterHandler.__init__
    - scrapy.core.engine.ExecutionEngine.close_spider.log_failure
    - collections.defaultdict
    - collections.deque
    - scrapy.utils.misc.build_from_crawler
    - dfd.addBoth
    - twisted.internet.defer.succeed
    - scrapy.utils.log.get_scrapy_root_handler
    - twisted.internet.defer.Deferred.addErrback
    - <builtin>.issubclass
    - scrapy.settings.BaseSettings.getbool
    - scrapy.crawler.Crawler.crawl
    - scrapy.utils.misc.build_from_settings
    - scheduler.open
    - scrapy.settings.overridden_settings
    - crawler.settings.getint
    - <builtin>.dict
    - twisted.internet.defer.succeed.addBoth
    - twisted.internet.defer.inlineCallbacks
    - scrapy.utils.reactor.verify_installed_reactor
    - handler.addFilter
    - asyncio.set_event_loop
    - scrapy.middleware.MiddlewareManager.__init__
    - urllib.parse.urlparse
    - scrapy.utils.misc.load_object
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 300
    functionName: scrapy.crawler.CrawlerRunner._crawl._done
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.getattr
    functionSourceFile: <builtin>
    functionUses: 201
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.maybeDeferred.addBoth
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.succeed.addBoth
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.Deferred.addBoth
    functionSourceFile: twisted
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spidercls
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 330
    functionName: scrapy.crawler.CrawlerRunner._create_crawler
    functionSourceFile: scrapy.crawler
    functionUses: 4
    functionsReached:
    - <builtin>.bool
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - scrapy.crawler.Crawler._update_root_log_handler
    - importlib.import_module
    - typing.cast.items
    - handler.setLevel
    - scrapy.addons.AddonManager.__init__
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - <builtin>.int
    - logging.FileHandler
    - json.loads
    - logging.root.addHandler
    - scrapy.utils.log.get_scrapy_root_handler
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.settings.BaseSettings.getbool
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.crawler.Crawler.__init__
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - logging.root.setLevel
    - scrapy.utils.log._get_handler
    - scrapy.settings.BaseSettings.copy
    - <builtin>.super
    - logging.Formatter
    - handler.setFormatter
    - logging.root.removeHandler
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - handler.addFilter
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.signalmanager.SignalManager.__init__
    - scrapy.settings.Settings.__init__
    - logging.StreamHandler
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spidercls
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 411
    functionName: scrapy.crawler.CrawlerProcess._create_crawler
    functionSourceFile: scrapy.crawler
    functionUses: 4
    functionsReached:
    - <builtin>.bool
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - scrapy.crawler.Crawler._update_root_log_handler
    - importlib.import_module
    - typing.cast.items
    - handler.setLevel
    - scrapy.addons.AddonManager.__init__
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - <builtin>.int
    - logging.FileHandler
    - json.loads
    - logging.root.addHandler
    - scrapy.utils.log.get_scrapy_root_handler
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.settings.BaseSettings.getbool
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.crawler.Crawler.__init__
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - logging.root.setLevel
    - scrapy.utils.log._get_handler
    - scrapy.settings.BaseSettings.copy
    - <builtin>.super
    - logging.Formatter
    - handler.setFormatter
    - logging.root.removeHandler
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - handler.addFilter
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.signalmanager.SignalManager.__init__
    - scrapy.settings.Settings.__init__
    - logging.StreamHandler
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 336
    functionName: scrapy.crawler.CrawlerRunner.stop
    functionSourceFile: scrapy.crawler
    functionUses: 1
    functionsReached:
    - <builtin>.list
    - twisted.internet.defer.DeferredList
    - c.stop
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: c.stop
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.list
    functionSourceFile: <builtin>
    functionUses: 69
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.DeferredList
    functionSourceFile: twisted
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 345
    functionName: scrapy.crawler.CrawlerRunner.join
    functionSourceFile: scrapy.crawler
    functionUses: 2
    functionsReached:
    - twisted.internet.defer.DeferredList
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.super
    functionSourceFile: <builtin>
    functionUses: 195
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 5
    IfCount: 4
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ca89df0>
    - <ast.Constant object at 0x7f9a4ca89dc0>
    argNames:
    - settings
    - install_root_handler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 78
    functionName: scrapy.utils.log.configure_logging
    functionSourceFile: scrapy.utils.log
    functionUses: 5
    functionsReached:
    - <builtin>.bool
    - key.isupper
    - typing.cast
    - <builtin>.max
    - observer.start
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - scrapy.utils.log.StreamLogger.__init__
    - importlib.import_module
    - handler.setLevel
    - typing.cast.items
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - <builtin>.int
    - logging.captureWarnings
    - logging.FileHandler
    - json.loads
    - logging.root.addHandler
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.settings.BaseSettings.getbool
    - scrapy.settings.BaseSettings.set
    - logging.getLogger
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.utils.log._get_handler
    - twisted.python.log.PythonLoggingObserver
    - typing.cast.getpriority
    - <builtin>.super
    - logging.Formatter
    - handler.setFormatter
    - logging.root.removeHandler
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - logging.config.dictConfig
    - handler.addFilter
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.settings.Settings.__init__
    - logging.StreamHandler
    - logging.root.setLevel
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - settings
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 166
    functionName: scrapy.utils.log.log_scrapy_info
    functionSourceFile: scrapy.utils.log
    functionUses: 5
    functionsReached:
    - platform.platform
    - OpenSSL.SSL.SSLeay_version
    - twisted.version.short
    - <builtin>.map
    - logger.info
    - scrapy.utils.ssl.get_openssl_version
    - sys.version.replace
    - scrapy.utils.versions.scrapy_components_versions
    - system_openssl_bytes.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - signum
    - _
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 390
    functionName: scrapy.crawler.CrawlerProcess._signal_shutdown
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - logger.info
    - signal.getsignal
    - twisted.internet.reactor.callFromThread
    - signal.signal
    - scrapy.utils.ossignal.install_shutdown_handlers
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    IfCount: 2
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d5caa90>
    argNames:
    - function
    - override_sigint
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 18
    functionName: scrapy.utils.ossignal.install_shutdown_handlers
    functionSourceFile: scrapy.utils.ossignal
    functionUses: 2
    functionsReached:
    - <builtin>.hasattr
    - signal.signal
    - signal.getsignal
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.callFromThread
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - signum
    - _
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 401
    functionName: scrapy.crawler.CrawlerProcess._signal_kill
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - logger.info
    - signal.getsignal
    - twisted.internet.reactor.callFromThread
    - signal.signal
    - scrapy.utils.ossignal.install_shutdown_handlers
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.DeferredList.addBoth
    functionSourceFile: twisted
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: resolver.install_on_reactor
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.getThreadPool
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b287be0>
    argNames:
    - self
    - name
    - default
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 170
    functionName: scrapy.settings.BaseSettings.getint
    functionSourceFile: scrapy.settings
    functionUses: 7
    functionsReached:
    - <builtin>.int
    - scrapy.settings.BaseSettings.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: tp.adjustPoolsize
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.addSystemEventTrigger
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.run
    functionSourceFile: twisted
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 459
    functionName: scrapy.crawler.CrawlerProcess._graceful_stop_reactor
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - scrapy.crawler.CrawlerRunner.stop
    - <builtin>.list
    - c.stop
    - twisted.internet.defer.DeferredList.addBoth
    - twisted.internet.defer.DeferredList
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11f250>
    argNames:
    - self
    - _
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 464
    functionName: scrapy.crawler.CrawlerProcess._stop_reactor
    functionSourceFile: scrapy.crawler
    functionUses: 0
    functionsReached:
    - twisted.internet.reactor.stop
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.stop
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.interfaces
    functionSourceFile: scrapy.interfaces
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - settings
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 5
    functionName: scrapy.interfaces.ISpiderLoader.from_settings
    functionSourceFile: scrapy.interfaces
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - spider_name
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 8
    functionName: scrapy.interfaces.ISpiderLoader.load
    functionSourceFile: scrapy.interfaces
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 12
    functionName: scrapy.interfaces.ISpiderLoader.list
    functionSourceFile: scrapy.interfaces
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - request
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 16
    functionName: scrapy.interfaces.ISpiderLoader.find_by_request
    functionSourceFile: scrapy.interfaces
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.ossignal
    functionSourceFile: scrapy.utils.ossignal
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.dir
    - signame.startswith
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.dir
    functionSourceFile: <builtin>
    functionUses: 33
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: signame.startswith
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: signal.signal
    functionSourceFile: signal
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: signal.getsignal
    functionSourceFile: signal
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.hasattr
    functionSourceFile: <builtin>
    functionUses: 162
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extension
    functionSourceFile: scrapy.extension
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 14
    functionName: scrapy.extension.ExtensionManager._get_mwlist_from_settings
    functionSourceFile: scrapy.extension
    functionUses: 0
    functionsReached:
    - typing.cast
    - settings.getwithbase
    - path.replace
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - path.startswith
    - compdict.update
    - typing.cast.items
    - scrapy.utils.conf.build_component_list._check_components
    - json.loads
    - scrapy.utils.deprecate.update_classpath
    - scrapy.utils.conf.build_component_list._map_keys
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - warnings.warn
    - compdict.items
    - <builtin>.type
    - scrapy.utils.conf.build_component_list._validate_values
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - iterable.items
    - operator.itemgetter
    - <builtin>.len
    - compdict.getpriority
    - <builtin>.sorted
    - scrapy.utils.conf.build_component_list
    - typing.cast.getpriority
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings.getwithbase
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6e9df0>
    - <ast.Name object at 0x7f9a4c6e9dc0>
    argNames:
    - compdict
    - custom
    - convert
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 27
    functionName: scrapy.utils.conf.build_component_list
    functionSourceFile: scrapy.utils.conf
    functionUses: 6
    functionsReached:
    - typing.cast
    - path.replace
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - path.startswith
    - compdict.update
    - typing.cast.items
    - scrapy.utils.conf.build_component_list._check_components
    - json.loads
    - scrapy.utils.deprecate.update_classpath
    - scrapy.utils.conf.build_component_list._map_keys
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - warnings.warn
    - compdict.items
    - <builtin>.type
    - scrapy.utils.conf.build_component_list._validate_values
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - iterable.items
    - operator.itemgetter
    - <builtin>.len
    - compdict.getpriority
    - <builtin>.sorted
    - typing.cast.getpriority
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.conf
    functionSourceFile: scrapy.utils.conf
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - complist
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 34
    functionName: scrapy.utils.conf.build_component_list._check_components
    functionSourceFile: scrapy.utils.conf
    functionUses: 8
    functionsReached:
    - <builtin>.isinstance
    - warnings.warn
    - path.replace
    - scrapy.utils.deprecate.update_classpath
    - <builtin>.len
    - path.startswith
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - path
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 150
    functionName: scrapy.utils.deprecate.update_classpath
    functionSourceFile: scrapy.utils.deprecate
    functionUses: 9
    functionsReached:
    - <builtin>.isinstance
    - warnings.warn
    - path.startswith
    - path.replace
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.len
    functionSourceFile: <builtin>
    functionUses: 135
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - compdict
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 41
    functionName: scrapy.utils.conf.build_component_list._map_keys
    functionSourceFile: scrapy.utils.conf
    functionUses: 7
    functionsReached:
    - typing.cast
    - <builtin>.max
    - path.replace
    - scrapy.settings.BaseSettings.update
    - path.startswith
    - typing.cast.items
    - scrapy.utils.conf.build_component_list._check_components
    - json.loads
    - scrapy.utils.deprecate.update_classpath
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - warnings.warn
    - compdict.items
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - <builtin>.len
    - compdict.getpriority
    - typing.cast.getpriority
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b282c70>
    - <ast.Constant object at 0x7f9a4b282c40>
    argNames:
    - self
    - values
    - priority
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 112
    functionName: scrapy.settings.BaseSettings.__init__
    functionSourceFile: scrapy.settings
    functionUses: 32
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.settings.get_settings_priority
    - typing.cast
    - json.loads
    - <builtin>.max
    - <builtin>.len
    - scrapy.settings.BaseSettings.update
    - scrapy.settings.BaseSettings.set
    - typing.cast.getpriority
    - typing.cast.items
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: compdict.items
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: compdict.getpriority
    functionSourceFile: <builtin>
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 293
    functionName: scrapy.settings.BaseSettings.getpriority
    functionSourceFile: ''
    functionUses: 42
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b269e80>
    argNames:
    - self
    - name
    - value
    - priority
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 319
    functionName: scrapy.settings.BaseSettings.set
    functionSourceFile: scrapy.settings
    functionUses: 38
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.get_settings_priority
    - typing.cast
    - <builtin>.max
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - compdict
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 59
    functionName: scrapy.utils.conf.build_component_list._validate_values
    functionSourceFile: scrapy.utils.conf
    functionUses: 7
    functionsReached:
    - <builtin>.isinstance
    - compdict.items
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.type
    functionSourceFile: <builtin>
    functionUses: 61
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: compdict.update
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - iterable
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 297
    functionName: scrapy.utils.python.without_none_values
    functionSourceFile: scrapy.utils.python
    functionUses: 16
    functionsReached:
    - <builtin>.isinstance
    - iterable.items
    - <builtin>.type
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: operator.itemgetter
    functionSourceFile: operator
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.sorted
    functionSourceFile: <builtin>
    functionUses: 25
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - arglist
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 86
    functionName: scrapy.utils.conf.arglist_to_dict
    functionSourceFile: scrapy.utils.conf
    functionUses: 3
    functionsReached:
    - x.split
    - <builtin>.dict
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: x.split
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d5ca910>
    - <ast.Constant object at 0x7f9a4d5cacd0>
    argNames:
    - path
    - prevpath
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 93
    functionName: scrapy.utils.conf.closest_scrapy_cfg
    functionSourceFile: scrapy.utils.conf
    functionUses: 15
    functionsReached:
    - scrapy.utils.conf.closest_scrapy_cfg
    - cfgfile.exists
    - pathlib.Path.resolve
    - <builtin>.str
    - pathlib.Path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.str
    functionSourceFile: <builtin>
    functionUses: 138
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path
    functionSourceFile: pathlib
    functionUses: 82
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.resolve
    functionSourceFile: pathlib
    functionUses: 21
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cfgfile.exists
    functionSourceFile: <builtin>
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 2
    IfCount: 3
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f1e6af0>
    - <ast.Constant object at 0x7f9a4f1e6b50>
    argNames:
    - project
    - set_syspath
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 109
    functionName: scrapy.utils.conf.init_env
    functionSourceFile: scrapy.utils.conf
    functionUses: 4
    functionsReached:
    - configparser.ConfigParser
    - scrapy.utils.conf.closest_scrapy_cfg
    - sys.path.append
    - os.environ.get
    - configparser.ConfigParser.has_option
    - sources.append
    - cfgfile.exists
    - configparser.ConfigParser.get
    - pathlib.Path.resolve
    - scrapy.utils.conf.get_config
    - <builtin>.str
    - scrapy.utils.conf.get_sources
    - pathlib.Path
    - pathlib.Path.expanduser
    - configparser.ConfigParser.read
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c70bd30>
    argNames:
    - use_closest
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 124
    functionName: scrapy.utils.conf.get_config
    functionSourceFile: scrapy.utils.conf
    functionUses: 12
    functionsReached:
    - configparser.ConfigParser
    - scrapy.utils.conf.closest_scrapy_cfg
    - os.environ.get
    - sources.append
    - cfgfile.exists
    - pathlib.Path.resolve
    - <builtin>.str
    - scrapy.utils.conf.get_sources
    - pathlib.Path
    - pathlib.Path.expanduser
    - configparser.ConfigParser.read
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: configparser.ConfigParser.has_option
    functionSourceFile: configparser
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: configparser.ConfigParser.get
    functionSourceFile: configparser
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sys.path.append
    functionSourceFile: sys
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6e2d60>
    argNames:
    - use_closest
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 132
    functionName: scrapy.utils.conf.get_sources
    functionSourceFile: scrapy.utils.conf
    functionUses: 13
    functionsReached:
    - scrapy.utils.conf.closest_scrapy_cfg
    - os.environ.get
    - sources.append
    - cfgfile.exists
    - pathlib.Path.resolve
    - <builtin>.str
    - pathlib.Path
    - pathlib.Path.expanduser
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: configparser.ConfigParser
    functionSourceFile: configparser
    functionUses: 13
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: configparser.ConfigParser.read
    functionSourceFile: configparser
    functionUses: 13
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.environ.get
    functionSourceFile: os
    functionUses: 21
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.expanduser
    functionSourceFile: pathlib
    functionUses: 14
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sources.append
    functionSourceFile: <builtin>
    functionUses: 14
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 8
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - feed
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 147
    functionName: scrapy.utils.conf.feed_complete_default_values_from_settings
    functionSourceFile: scrapy.utils.conf
    functionUses: 2
    functionsReached:
    - feed.copy
    - settings.getbool
    - out.setdefault
    - settings.getint
    - settings.getdictorlist
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: feed.copy
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings.getint
    functionSourceFile: <builtin>
    functionUses: 27
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: out.setdefault
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings.getdictorlist
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings.getbool
    functionSourceFile: <builtin>
    functionUses: 31
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 11
    ICount: 6
    IfCount: 7
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6fbd30>
    - <ast.Constant object at 0x7f9a4c6fbd00>
    argNames:
    - settings
    - output
    - output_format
    - overwrite_output
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 164
    functionName: scrapy.utils.conf.feed_process_params_from_cli
    functionSourceFile: scrapy.utils.conf
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - settings.getdict
    - warnings.warn
    - iterable.items
    - settings.getwithbase
    - scrapy.utils.conf.feed_process_params_from_cli.check_valid_format
    - pathlib.Path.suffix.replace
    - element.rsplit
    - <builtin>.len
    - <builtin>.type
    - pathlib.Path
    - result.update
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - output_format
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 179
    functionName: scrapy.utils.conf.feed_process_params_from_cli.check_valid_format
    functionSourceFile: scrapy.utils.conf
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: element.rsplit
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.suffix.replace
    functionSourceFile: pathlib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings.getdict
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: result.update
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.deprecate
    functionSourceFile: scrapy.utils.deprecate
    functionUses: 0
    functionsReached:
    - typing.overload
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c01edf0>
    argNames:
    - obj
    - oldattr
    - newattr
    - version
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 10
    functionName: scrapy.utils.deprecate.attribute
    functionSourceFile: scrapy.utils.deprecate
    functionUses: 0
    functionsReached:
    - warnings.warn
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 9
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b220>
    - <ast.Name object at 0x7f9a4c11bd00>
    - <ast.Constant object at 0x7f9a4c11bcd0>
    - <ast.Constant object at 0x7f9a4c11baf0>
    - <ast.Constant object at 0x7f9a4c11b190>
    - <ast.Constant object at 0x7f9a4c11ba60>
    - <ast.Constant object at 0x7f9a4c11bc70>
    argNames:
    - name
    - new_class
    - clsdict
    - warn_category
    - warn_once
    - old_class_path
    - new_class_path
    - subclass_warn_message
    - instance_warn_message
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 20
    functionName: scrapy.utils.deprecate.create_deprecated_class
    functionSourceFile: scrapy.utils.deprecate
    functionUses: 1
    functionsReached:
    - scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__init__
    - warnings.warn
    - inspect.getmodule
    - scrapy.utils.deprecate._clspath
    - inspect.stack
    - subclass_warn_message.format
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - metacls
    - name
    - bases
    - clsdict_
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 61
    functionName: scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__new__
    functionSourceFile: scrapy.utils.deprecate
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - cls
    - name
    - bases
    - clsdict_
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 69
    functionName: scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__init__
    functionSourceFile: scrapy.utils.deprecate
    functionUses: 2
    functionsReached:
    - subclass_warn_message.format
    - warnings.warn
    - scrapy.utils.deprecate._clspath
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c001ca0>
    argNames:
    - cls
    - forced
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 131
    functionName: scrapy.utils.deprecate._clspath
    functionSourceFile: ''
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: subclass_warn_message.format
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - inst
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 87
    functionName: scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__instancecheck__
    functionSourceFile: scrapy.utils.deprecate
    functionUses: 0
    functionsReached:
    - <builtin>.any
    - <builtin>.getattr
    - <builtin>.type
    - scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__subclasscheck__
    - inspect.isclass
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - sub
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 90
    functionName: scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__subclasscheck__
    functionSourceFile: scrapy.utils.deprecate
    functionUses: 1
    functionsReached:
    - inspect.isclass
    - <builtin>.any
    - <builtin>.getattr
    - <builtin>.super
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.any
    functionSourceFile: <builtin>
    functionUses: 18
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.isclass
    functionSourceFile: inspect
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 104
    functionName: scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__call__
    functionSourceFile: scrapy.utils.deprecate
    functionUses: 0
    functionsReached:
    - warnings.warn
    - scrapy.utils.deprecate._clspath
    - instance_warn_message.format
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: instance_warn_message.format
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.stack
    functionSourceFile: inspect
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.getmodule
    functionSourceFile: inspect
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.overload
    functionSourceFile: ''
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: path.startswith
    functionSourceFile: <builtin>
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: path.replace
    functionSourceFile: <builtin>
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - subclass
    - base_class
    - method_name
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 163
    functionName: scrapy.utils.deprecate.method_is_overridden
    functionSourceFile: scrapy.utils.deprecate
    functionUses: 0
    functionsReached:
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.exceptions
    functionSourceFile: scrapy.exceptions
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b8685e0>
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 43
    functionName: scrapy.exceptions.CloseSpider.__init__
    functionSourceFile: scrapy.exceptions
    functionUses: 2
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - fail
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 55
    functionName: scrapy.exceptions.StopDownload.__init__
    functionSourceFile: scrapy.exceptions
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 81
    functionName: scrapy.exceptions.UsageError.__init__
    functionSourceFile: scrapy.exceptions
    functionUses: 0
    functionsReached:
    - kw.pop
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: kw.pop
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.utils.python
    functionSourceFile: scrapy.utils.python
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - <builtin>.range
    - <builtin>.chr
    - urllib.parse.urlparse.scheme.encode
    - typing.overload
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - x
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 34
    functionName: scrapy.utils.python.flatten
    functionSourceFile: scrapy.utils.python
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - <builtin>.list
    - scrapy.utils.python.iflatten
    - scrapy.utils.python.is_listlike
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - x
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 54
    functionName: scrapy.utils.python.iflatten
    functionSourceFile: scrapy.utils.python
    functionUses: 1
    functionsReached:
    - scrapy.utils.python.is_listlike
    - <builtin>.hasattr
    - scrapy.utils.python.iflatten
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - x
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 65
    functionName: scrapy.utils.python.is_listlike
    functionSourceFile: scrapy.utils.python
    functionUses: 9
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Lambda object at 0x7f9a4d5f12b0>
    argNames:
    - list_
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 89
    functionName: scrapy.utils.python.unique
    functionSourceFile: scrapy.utils.python
    functionUses: 8
    functionsReached:
    - seen.add
    - result.append
    - scrapy.utils.python.<lambda1>
    - <builtin>.set
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.python.<lambda1>
    functionSourceFile: ''
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: seen.add
    functionSourceFile: <builtin>
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: result.append
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d62d160>
    - <ast.Constant object at 0x7f9a4d62d130>
    argNames:
    - text
    - encoding
    - errors
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 102
    functionName: scrapy.utils.python.to_unicode
    functionSourceFile: scrapy.utils.python
    functionUses: 89
    functionsReached:
    - typing.cast.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse.decode
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.decode
    functionSourceFile: typing
    functionUses: 90
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.decode
    functionSourceFile: urllib
    functionUses: 90
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d5f6580>
    - <ast.Constant object at 0x7f9a4d5f6550>
    argNames:
    - text
    - encoding
    - errors
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 119
    functionName: scrapy.utils.python.to_bytes
    functionSourceFile: scrapy.utils.python
    functionUses: 110
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.scheme.encode
    functionSourceFile: urllib
    functionUses: 111
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ClientFactory._url.encode
    functionSourceFile: twisted
    functionUses: 111
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.netloc.encode
    functionSourceFile: urllib
    functionUses: 111
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlunparse.encode
    functionSourceFile: urllib
    functionUses: 111
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.hostname.encode
    functionSourceFile: urllib
    functionUses: 111
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11bf70>
    argNames:
    - pattern
    - text
    - chunk_size
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 135
    functionName: scrapy.utils.python.re_rsearch
    functionSourceFile: scrapy.utils.python
    functionUses: 3
    functionsReached:
    - <builtin>.isinstance
    - pattern.finditer
    - re.compile
    - scrapy.utils.python.re_rsearch._chunk_iter
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 151
    functionName: scrapy.utils.python.re_rsearch._chunk_iter
    functionSourceFile: scrapy.utils.python
    functionUses: 4
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: re.compile
    functionSourceFile: re
    functionUses: 30
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pattern.finditer
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - method
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 171
    functionName: scrapy.utils.python.memoizemethod_noargs
    functionSourceFile: scrapy.utils.python
    functionUses: 1
    functionsReached:
    - weakref.WeakKeyDictionary
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: weakref.WeakKeyDictionary
    functionSourceFile: weakref
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: functools.wraps
    functionSourceFile: functools
    functionUses: 21
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 178
    functionName: scrapy.utils.python.memoizemethod_noargs.new_method
    functionSourceFile: scrapy.utils.python
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - w3lib.encoding.http_content_type_encoding
    - w3lib.encoding.html_body_declared_encoding
    - typing.cast
    - scrapy.http.response.text.TextResponse._headers_encoding
    - scrapy.http.response.text.TextResponse._bom_encoding
    - scrapy.utils.python.to_unicode
    - w3lib.encoding.read_bom
    - typing.cast.decode
    - scrapy.http.response.text.TextResponse._body_declared_encoding
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 143
    functionName: scrapy.http.response.text.TextResponse._body_declared_encoding
    functionSourceFile: scrapy.http.response.text
    functionUses: 3
    functionsReached:
    - w3lib.encoding.html_body_declared_encoding
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 114
    functionName: scrapy.http.response.text.TextResponse._headers_encoding
    functionSourceFile: scrapy.http.response.text
    functionUses: 3
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - w3lib.encoding.http_content_type_encoding
    - typing.cast
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 147
    functionName: scrapy.http.response.text.TextResponse._bom_encoding
    functionSourceFile: scrapy.http.response.text
    functionUses: 3
    functionsReached:
    - w3lib.encoding.read_bom
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.range
    functionSourceFile: <builtin>
    functionUses: 19
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.chr
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - data
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 191
    functionName: scrapy.utils.python.binary_is_text
    functionSourceFile: scrapy.utils.python
    functionUses: 16
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.all
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.all
    functionSourceFile: <builtin>
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 3
    IfCount: 5
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e60b5b0>
    argNames:
    - func
    - stripself
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 200
    functionName: scrapy.utils.python.get_func_args
    functionSourceFile: scrapy.utils.python
    functionUses: 5
    functionsReached:
    - <builtin>.isinstance
    - sig.parameters.items
    - args.append
    - sig.parameters.keys
    - inspect.signature
    - <builtin>.callable
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.callable
    functionSourceFile: <builtin>
    functionUses: 165
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.signature
    functionSourceFile: inspect
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sig.parameters.items
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: args.append
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sig.parameters.keys
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - func
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 230
    functionName: scrapy.utils.python.get_spec
    functionSourceFile: scrapy.utils.python
    functionUses: 3
    functionsReached:
    - <builtin>.hasattr
    - <builtin>.dict
    - inspect.ismethod
    - <builtin>.zip
    - inspect.getfullargspec
    - <builtin>.len
    - inspect.isfunction
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.isfunction
    functionSourceFile: inspect
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.ismethod
    functionSourceFile: inspect
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.getfullargspec
    functionSourceFile: inspect
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.zip
    functionSourceFile: <builtin>
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - obj1
    - obj2
    - attributes
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 267
    functionName: scrapy.utils.python.equal_attributes
    functionSourceFile: scrapy.utils.python
    functionUses: 0
    functionsReached:
    - <builtin>.callable
    - <builtin>.object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.object
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: iterable.items
    functionSourceFile: <builtin>
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - obj
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 310
    functionName: scrapy.utils.python.global_object_name
    functionSourceFile: scrapy.utils.python
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 330
    functionName: scrapy.utils.python.garbage_collect
    functionSourceFile: scrapy.utils.python
    functionUses: 1
    functionsReached:
    - gc.collect
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: gc.collect
    functionSourceFile: gc
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - args
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 339
    functionName: scrapy.utils.python.MutableChain.__init__
    functionSourceFile: scrapy.utils.python
    functionUses: 8
    functionsReached:
    - itertools.chain.from_iterable
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itertools.chain.from_iterable
    functionSourceFile: itertools
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - iterables
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 342
    functionName: scrapy.utils.python.MutableChain.extend
    functionSourceFile: scrapy.utils.python
    functionUses: 8
    functionsReached:
    - itertools.chain.from_iterable
    - itertools.chain
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itertools.chain
    functionSourceFile: itertools
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 345
    functionName: scrapy.utils.python.MutableChain.__iter__
    functionSourceFile: scrapy.utils.python
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 348
    functionName: scrapy.utils.python.MutableChain.__next__
    functionSourceFile: scrapy.utils.python
    functionUses: 0
    functionsReached:
    - <builtin>.next
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.next
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - iterables
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 352
    functionName: scrapy.utils.python._async_chain
    functionSourceFile: scrapy.utils.python
    functionUses: 10
    functionsReached:
    - scrapy.utils.asyncgen.as_async_generator
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - it
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 11
    functionName: scrapy.utils.asyncgen.as_async_generator
    functionSourceFile: scrapy.utils.asyncgen
    functionUses: 11
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - args
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 363
    functionName: scrapy.utils.python.MutableAsyncChain.__init__
    functionSourceFile: scrapy.utils.python
    functionUses: 8
    functionsReached:
    - scrapy.utils.python._async_chain
    - <builtin>.isinstance
    - scrapy.utils.asyncgen.as_async_generator
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - iterables
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 366
    functionName: scrapy.utils.python.MutableAsyncChain.extend
    functionSourceFile: scrapy.utils.python
    functionUses: 8
    functionsReached:
    - scrapy.utils.python._async_chain
    - <builtin>.isinstance
    - scrapy.utils.asyncgen.as_async_generator
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 369
    functionName: scrapy.utils.python.MutableAsyncChain.__aiter__
    functionSourceFile: scrapy.utils.python
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 372
    functionName: scrapy.utils.python.MutableAsyncChain.__anext__
    functionSourceFile: scrapy.utils.python
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.asyncgen
    functionSourceFile: scrapy.utils.asyncgen
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 4
    functionName: scrapy.utils.asyncgen.collect_asyncgen
    functionSourceFile: scrapy.utils.asyncgen
    functionUses: 12
    functionsReached:
    - results.append
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: results.append
    functionSourceFile: <builtin>
    functionUses: 13
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.settings
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - priority
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 49
    functionName: scrapy.settings.get_settings_priority
    functionSourceFile: scrapy.settings
    functionUses: 42
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - value
    - priority
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 68
    functionName: scrapy.settings.SettingsAttribute.__init__
    functionSourceFile: scrapy.settings
    functionUses: 39
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.get_settings_priority
    - typing.cast
    - <builtin>.max
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 305
    functionName: scrapy.settings.BaseSettings.maxpriority
    functionSourceFile: scrapy.settings
    functionUses: 40
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.get_settings_priority
    - typing.cast
    - <builtin>.max
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.max
    functionSourceFile: <builtin>
    functionUses: 63
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - value
    - priority
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 76
    functionName: scrapy.settings.SettingsAttribute.set
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - typing.cast.items
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.settings.get_settings_priority
    - typing.cast
    - <builtin>.max
    - json.loads
    - <builtin>.len
    - scrapy.settings.BaseSettings.update
    - scrapy.settings.BaseSettings.set
    - typing.cast.getpriority
    - scrapy.settings.BaseSettings.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 84
    functionName: scrapy.settings.SettingsAttribute.__repr__
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.settings.BaseSettings
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.object
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b268d90>
    argNames:
    - self
    - values
    - priority
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 391
    functionName: scrapy.settings.BaseSettings.update
    functionSourceFile: scrapy.settings
    functionUses: 34
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.settings.get_settings_priority
    - typing.cast
    - json.loads
    - <builtin>.max
    - <builtin>.len
    - scrapy.settings.BaseSettings.set
    - typing.cast.getpriority
    - typing.cast.items
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - opt_name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 120
    functionName: scrapy.settings.BaseSettings.__getitem__
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 125
    functionName: scrapy.settings.BaseSettings.__contains__
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b2845b0>
    argNames:
    - self
    - name
    - default
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 140
    functionName: scrapy.settings.BaseSettings.getbool
    functionSourceFile: scrapy.settings
    functionUses: 19
    functionsReached:
    - <builtin>.bool
    - <builtin>.int
    - scrapy.settings.BaseSettings.get
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.int
    functionSourceFile: <builtin>
    functionUses: 77
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.bool
    functionSourceFile: <builtin>
    functionUses: 58
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11bfa0>
    argNames:
    - self
    - name
    - default
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 182
    functionName: scrapy.settings.BaseSettings.getfloat
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.float
    - scrapy.settings.BaseSettings.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.float
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b1c0>
    argNames:
    - self
    - name
    - default
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 194
    functionName: scrapy.settings.BaseSettings.getlist
    functionSourceFile: scrapy.settings
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.list
    - value.split
    - scrapy.settings.BaseSettings.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: value.split
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b850>
    argNames:
    - self
    - name
    - default
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 215
    functionName: scrapy.settings.BaseSettings.getdict
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.dict
    - json.loads
    - scrapy.settings.BaseSettings.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: json.loads
    functionSourceFile: json
    functionUses: 41
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4df83490>
    argNames:
    - self
    - name
    - default
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 238
    functionName: scrapy.settings.BaseSettings.getdictorlist
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.list
    - json.loads
    - scrapy.settings.BaseSettings.get
    - value.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 279
    functionName: scrapy.settings.BaseSettings.getwithbase
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - typing.cast.items
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.settings.get_settings_priority
    - typing.cast
    - json.loads
    - <builtin>.max
    - <builtin>.len
    - scrapy.settings.BaseSettings.update
    - scrapy.settings.BaseSettings.set
    - typing.cast.getpriority
    - scrapy.settings.BaseSettings.__init__
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - name
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 316
    functionName: scrapy.settings.BaseSettings.__setitem__
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.get_settings_priority
    - typing.cast
    - <builtin>.max
    - <builtin>.len
    - scrapy.settings.BaseSettings.set
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 438
    functionName: scrapy.settings.BaseSettings._assert_mutability
    functionSourceFile: ''
    functionUses: 42
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b2692e0>
    - <ast.Constant object at 0x7f9a4b2692b0>
    argNames:
    - self
    - name
    - default
    - priority
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 349
    functionName: scrapy.settings.BaseSettings.setdefault
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.get_settings_priority
    - typing.cast
    - <builtin>.max
    - <builtin>.len
    - scrapy.settings.BaseSettings.set
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b260be0>
    argNames:
    - self
    - values
    - priority
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 361
    functionName: scrapy.settings.BaseSettings.setdict
    functionSourceFile: scrapy.settings
    functionUses: 4
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.settings.get_settings_priority
    - typing.cast
    - json.loads
    - <builtin>.max
    - <builtin>.len
    - scrapy.settings.BaseSettings.update
    - scrapy.settings.BaseSettings.set
    - typing.cast.getpriority
    - typing.cast.items
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b260760>
    argNames:
    - self
    - module
    - priority
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 366
    functionName: scrapy.settings.BaseSettings.setmodule
    functionSourceFile: scrapy.settings
    functionUses: 22
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - <builtin>.dir
    - key.isupper
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.get_settings_priority
    - typing.cast
    - <builtin>.max
    - <builtin>.len
    - scrapy.settings.BaseSettings.set
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: importlib.import_module
    functionSourceFile: importlib
    functionUses: 160
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: key.isupper
    functionSourceFile: <builtin>
    functionUses: 23
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.items
    functionSourceFile: typing
    functionUses: 35
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.getpriority
    functionSourceFile: typing
    functionUses: 35
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b26ae50>
    argNames:
    - self
    - name
    - priority
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 424
    functionName: scrapy.settings.BaseSettings.delete
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.get_settings_priority
    - typing.cast
    linkageType: pythonLinkage
    raised:
    - KeyError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 434
    functionName: scrapy.settings.BaseSettings.__delitem__
    functionSourceFile: scrapy.settings
    functionUses: 1
    functionsReached:
    - scrapy.settings.BaseSettings._assert_mutability
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 454
    functionName: scrapy.settings.BaseSettings.freeze
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: copy.freeze
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 474
    functionName: scrapy.settings.BaseSettings.__iter__
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.iter
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 477
    functionName: scrapy.settings.BaseSettings.__len__
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 480
    functionName: scrapy.settings.BaseSettings._to_dict
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.str
    - v._to_dict
    - scrapy.settings.BaseSettings._get_key
    - <builtin>.type
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key_value
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 486
    functionName: scrapy.settings.BaseSettings._get_key
    functionSourceFile: scrapy.settings
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.type
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: v._to_dict
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 493
    functionName: scrapy.settings.BaseSettings.copy_to_dict
    functionSourceFile: scrapy.settings
    functionUses: 1
    functionsReached:
    - settings._to_dict
    - scrapy.settings.BaseSettings.copy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings._to_dict
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - p
    - cycle
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 510
    functionName: scrapy.settings.BaseSettings._repr_pretty_
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - settings._to_dict
    - p.text
    - <builtin>.repr
    - pprint.pformat
    - scrapy.settings.BaseSettings.copy
    - scrapy.settings.BaseSettings.copy_to_dict
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.repr
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: p.text
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pprint.pformat
    functionSourceFile: pprint
    functionUses: 13
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Name object at 0x7f9a4b271040>
    argNames:
    - self
    - name
    - default
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 516
    functionName: scrapy.settings.BaseSettings.pop
    functionSourceFile: scrapy.settings
    functionUses: 0
    functionsReached:
    - scrapy.settings.BaseSettings.__delitem__
    - scrapy.settings.BaseSettings._assert_mutability
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 556
    functionName: scrapy.settings.iter_default_settings
    functionSourceFile: scrapy.settings
    functionUses: 7
    functionsReached:
    - <builtin>.dir
    - name.isupper
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: name.isupper
    functionSourceFile: <builtin>
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.settings.default_settings
    functionSourceFile: scrapy.settings.default_settings
    functionUses: 0
    functionsReached:
    - pathlib.Path
    - <builtin>.str
    - importlib.import_module
    - pathlib.Path.parent.resolve
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.parent.resolve
    functionSourceFile: pathlib
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.middleware
    functionSourceFile: scrapy.middleware
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - middlewares
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 43
    functionName: scrapy.middleware.MiddlewareManager.__init__
    functionSourceFile: scrapy.middleware
    functionUses: 12
    functionsReached:
    - <builtin>.hasattr
    - collections.defaultdict
    - scrapy.middleware.MiddlewareManager._add_middleware
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: collections.defaultdict
    functionSourceFile: collections
    functionUses: 24
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - mw
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 95
    functionName: scrapy.middleware.MiddlewareManager._add_middleware
    functionSourceFile: scrapy.middleware
    functionUses: 13
    functionsReached:
    - <builtin>.hasattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 54
    functionName: scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    functionSourceFile: scrapy.middleware
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b280>
    argNames:
    - cls
    - settings
    - crawler
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 58
    functionName: scrapy.middleware.MiddlewareManager.from_settings
    functionSourceFile: scrapy.middleware
    functionUses: 11
    functionsReached:
    - objcls.from_crawler
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - collections.defaultdict
    - scrapy.utils.misc.build_from_crawler
    - middlewares.append
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - <builtin>.callable
    - <builtin>.isinstance
    - objcls.from_settings
    - scrapy.utils.misc.build_from_settings
    - logger.warning
    - scrapy.middleware.MiddlewareManager._add_middleware
    - logger.info
    - enabled.append
    - typing.cast.rindex
    - scrapy.middleware.MiddlewareManager.__init__
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 192
    functionName: scrapy.utils.misc.build_from_settings
    functionSourceFile: scrapy.utils.misc
    functionUses: 12
    functionsReached:
    - <builtin>.hasattr
    - objcls.from_settings
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: middlewares.append
    functionSourceFile: <builtin>
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: enabled.append
    functionSourceFile: <builtin>
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logger.warning
    functionSourceFile: <builtin>
    functionUses: 64
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - methodname
    - obj
    - args
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 101
    functionName: scrapy.middleware.MiddlewareManager._process_parallel
    functionSourceFile: scrapy.middleware
    functionUses: 2
    functionsReached:
    - scrapy.utils.defer.process_parallel
    - d.addCallbacks
    - typing.cast
    - twisted.internet.defer.succeed
    - twisted.internet.defer.DeferredList
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - callbacks
    - input
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 258
    functionName: scrapy.utils.defer.process_parallel
    functionSourceFile: scrapy.utils.defer
    functionUses: 3
    functionsReached:
    - twisted.internet.defer.succeed
    - d.addCallbacks
    - twisted.internet.defer.DeferredList
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - methodname
    - obj
    - args
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 105
    functionName: scrapy.middleware.MiddlewareManager._process_chain
    functionSourceFile: scrapy.middleware
    functionUses: 2
    functionsReached:
    - scrapy.utils.defer.process_chain
    - typing.cast
    - twisted.internet.defer.Deferred
    - d.callback
    - d.addCallback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - callbacks
    - input
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 222
    functionName: scrapy.utils.defer.process_chain
    functionSourceFile: scrapy.utils.defer
    functionUses: 3
    functionsReached:
    - twisted.internet.defer.Deferred
    - d.addCallback
    - d.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 109
    functionName: scrapy.middleware.MiddlewareManager.open_spider
    functionSourceFile: scrapy.middleware
    functionUses: 0
    functionsReached:
    - scrapy.utils.defer.process_parallel
    - d.addCallbacks
    - typing.cast
    - twisted.internet.defer.succeed
    - scrapy.middleware.MiddlewareManager._process_parallel
    - twisted.internet.defer.DeferredList
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 112
    functionName: scrapy.middleware.MiddlewareManager.close_spider
    functionSourceFile: scrapy.middleware
    functionUses: 0
    functionsReached:
    - scrapy.utils.defer.process_parallel
    - d.addCallbacks
    - typing.cast
    - twisted.internet.defer.succeed
    - scrapy.middleware.MiddlewareManager._process_parallel
    - twisted.internet.defer.DeferredList
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.defer
    functionSourceFile: scrapy.utils.defer
    functionUses: 0
    functionsReached:
    - typing.overload
    - typing.TypeVar
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - _failure
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 40
    functionName: scrapy.utils.defer.defer_fail
    functionSourceFile: scrapy.utils.defer
    functionUses: 19
    functionsReached:
    - twisted.internet.defer.Deferred
    - twisted.internet.reactor.callLater
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.Deferred
    functionSourceFile: twisted
    functionUses: 61
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.callLater
    functionSourceFile: twisted
    functionUses: 30
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 54
    functionName: scrapy.utils.defer.defer_succeed
    functionSourceFile: scrapy.utils.defer
    functionUses: 20
    functionsReached:
    - twisted.internet.defer.Deferred
    - twisted.internet.reactor.callLater
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 68
    functionName: scrapy.utils.defer.defer_result
    functionSourceFile: scrapy.utils.defer
    functionUses: 11
    functionsReached:
    - <builtin>.isinstance
    - twisted.internet.reactor.callLater
    - twisted.internet.defer.Deferred
    - scrapy.utils.defer.defer_fail
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - f
    - args
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 76
    functionName: scrapy.utils.defer.mustbe_deferred
    functionSourceFile: scrapy.utils.defer
    functionUses: 9
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.utils.defer.defer_result
    - hashlib.sha1
    - inspect.isawaitable
    - urllib.parse.urlunparse.encode
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - scrapy.pipelines.files.FilesPipeline.file_path
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - mimetypes.guess_type
    - scrapy.utils.python.to_bytes
    - <builtin>.getattr
    - pathlib.Path
    - <builtin>.callable
    - scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - <builtin>.isinstance
    - scrapy.pipelines.media.MediaPipeline.media_to_download
    - dfd.addCallbacks
    - asyncio.get_event_loop
    - dfd.addErrback
    - twisted.internet.defer.Deferred
    - <builtin>.type
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.hostname.encode
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - twisted.internet.reactor.callLater
    - mimetypes.guess_extension
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.pipelines.files.FilesPipeline.media_to_download
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - twisted.internet.protocol.ClientFactory._url.encode
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - scrapy.utils.defer.defer_fail
    - warnings.catch_warnings
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 192
    functionName: scrapy.pipelines.media.MediaPipeline.media_to_download
    functionSourceFile: ''
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 402
    functionName: scrapy.pipelines.files.FilesPipeline.media_to_download
    functionSourceFile: scrapy.pipelines.files
    functionUses: 10
    functionsReached:
    - dfd.addCallbacks
    - <builtin>.isinstance
    - mimetypes.guess_extension
    - twisted.internet.defer.maybeDeferred
    - urllib.parse.urlparse.scheme.encode
    - mimetypes.guess_type
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - dfd.addErrback
    - hashlib.sha1
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - pathlib.Path
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - urllib.parse.urlparse.hostname.encode
    - scrapy.pipelines.files.FilesPipeline.file_path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - request
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 39
    functionName: scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    functionSourceFile: scrapy.core.downloader.middleware
    functionUses: 10
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - <builtin>.callable
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - _InvalidOutput
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - scrape_func
    - response
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 73
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    functionSourceFile: scrapy.core.spidermw
    functionUses: 10
    functionsReached:
    - twisted.python.failure.Failure
    - <builtin>.type
    - typing.cast
    linkageType: pythonLinkage
    raised:
    - _InvalidOutput
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.python.failure.Failure
    functionSourceFile: twisted
    functionUses: 31
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - iterable
    - count
    - callable
    - args
    - named
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 93
    functionName: scrapy.utils.defer.parallel
    functionSourceFile: scrapy.utils.defer
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - twisted.internet.task.Cooperator.coiterate
    - itemadapter.is_item
    - scrapy.core.scraper.Scraper._process_spidermw_output
    - <builtin>.range
    - dfd.addBoth
    - twisted.internet.task.Cooperator
    - logger.error
    - <builtin>.type
    - twisted.internet.defer.DeferredList
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.task.Cooperator
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - output
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 290
    functionName: scrapy.core.scraper.Scraper._process_spidermw_output
    functionSourceFile: scrapy.core.scraper
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - itemadapter.is_item
    - dfd.addBoth
    - logger.error
    - <builtin>.type
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.task.Cooperator.coiterate
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - aiterable
    - callable
    - callable_args
    - callable_kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 152
    functionName: scrapy.utils.defer._AsyncCooperatorAdapter.__init__
    functionSourceFile: scrapy.utils.defer
    functionUses: 2
    functionsReached:
    - aiterable.__aiter__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: aiterable.__aiter__
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - result
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 167
    functionName: scrapy.utils.defer._AsyncCooperatorAdapter._callback
    functionSourceFile: scrapy.utils.defer
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.ensureDeferred.addCallbacks
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - importlib.import_module
    - twisted.internet.defer.ensureDeferred
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - typing.Iterator.waiting_deferreds.pop
    - scrapy.utils.defer._AsyncCooperatorAdapter._call_anext
    - <builtin>.callable
    - <builtin>.isinstance
    - typing.Iterator.callable
    - asyncio.get_event_loop
    - typing.Iterator.aiterator.__anext__
    - twisted.internet.defer.Deferred.fromFuture
    - result.chainDeferred
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - d.callback
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.Iterator.callable
    functionSourceFile: typing
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.Iterator.waiting_deferreds.pop
    functionSourceFile: typing
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: result.chainDeferred
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: d.callback
    functionSourceFile: <builtin>
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 190
    functionName: scrapy.utils.defer._AsyncCooperatorAdapter._call_anext
    functionSourceFile: scrapy.utils.defer
    functionUses: 2
    functionsReached:
    - twisted.internet.defer.ensureDeferred.addCallbacks
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - <builtin>.callable
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - typing.Iterator.aiterator.__anext__
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - failure
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 181
    functionName: scrapy.utils.defer._AsyncCooperatorAdapter._errback
    functionSourceFile: scrapy.utils.defer
    functionUses: 0
    functionsReached:
    - typing.Iterator.waiting_deferreds.callback
    - failure.trap
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: failure.trap
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.Iterator.waiting_deferreds.callback
    functionSourceFile: typing
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.Iterator.aiterator.__anext__
    functionSourceFile: typing
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - o
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 316
    functionName: scrapy.utils.defer.deferred_from_coro
    functionSourceFile: scrapy.utils.defer
    functionUses: 43
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - <builtin>.callable
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.ensureDeferred.addCallbacks
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 196
    functionName: scrapy.utils.defer._AsyncCooperatorAdapter.__next__
    functionSourceFile: scrapy.utils.defer
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.ensureDeferred.addCallbacks
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - typing.Iterator.waiting_deferreds.append
    - scrapy.utils.defer._AsyncCooperatorAdapter._call_anext
    - <builtin>.callable
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - typing.Iterator.aiterator.__anext__
    - twisted.internet.defer.Deferred
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.Iterator.waiting_deferreds.append
    functionSourceFile: typing
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - async_iterable
    - count
    - callable
    - args
    - named
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 208
    functionName: scrapy.utils.defer.parallel_async
    functionSourceFile: scrapy.utils.defer
    functionUses: 1
    functionsReached:
    - aiterable.__aiter__
    - twisted.internet.task.Cooperator.coiterate
    - <builtin>.range
    - twisted.internet.task.Cooperator
    - scrapy.utils.defer._AsyncCooperatorAdapter.__init__
    - twisted.internet.defer.DeferredList
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: d.addCallback
    functionSourceFile: <builtin>
    functionUses: 15
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 5
    argDefaultValues: []
    argNames:
    - callbacks
    - errbacks
    - input
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 233
    functionName: scrapy.utils.defer.process_chain_both
    functionSourceFile: scrapy.utils.defer
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - d.addCallbacks
    - <builtin>.zip
    - d.errback
    - twisted.internet.defer.Deferred
    - d.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: d.addCallbacks
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: d.errback
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.succeed
    functionSourceFile: twisted
    functionUses: 19
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.defer.process_parallel.<lambda1>
    functionSourceFile: scrapy.utils.defer
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.defer.process_parallel.<lambda2>
    functionSourceFile: scrapy.utils.defer
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - iterable
    - errback
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 270
    functionName: scrapy.utils.defer.iter_errback
    functionSourceFile: scrapy.utils.defer
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - scrapy.utils.log.logformatter_adapter
    - <builtin>.next
    - scrapy.core.scraper.Scraper.handle_spider_error
    - typing.cast
    - <builtin>.iter
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    - logkws.get
    - twisted.python.failure.Failure
    - logger.log
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - _failure
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 225
    functionName: scrapy.core.scraper.Scraper.handle_spider_error
    functionSourceFile: scrapy.core.scraper
    functionUses: 4
    functionsReached:
    - <builtin>.isinstance
    - scrapy.utils.log.logformatter_adapter
    - typing.cast
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    - logkws.get
    - logger.log
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - aiterable
    - errback
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 286
    functionName: scrapy.utils.defer.aiter_errback
    functionSourceFile: scrapy.utils.defer
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - aiterable.__aiter__
    - scrapy.utils.log.logformatter_adapter
    - it.__anext__
    - scrapy.commands.parse.Command.handle_exception
    - scrapy.core.scraper.Scraper.handle_spider_error
    - typing.cast
    - logger.error
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    - logkws.get
    - twisted.python.failure.Failure
    - logger.log
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: it.__anext__
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - _failure
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 117
    functionName: scrapy.commands.parse.Command.handle_exception
    functionSourceFile: scrapy.commands.parse
    functionUses: 3
    functionsReached:
    - <builtin>.isinstance
    - typing.cast
    - logger.error
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.TypeVar
    functionSourceFile: typing
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: asyncio.isfuture
    functionSourceFile: asyncio
    functionUses: 44
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.isawaitable
    functionSourceFile: inspect
    functionUses: 44
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.ensureDeferred
    functionSourceFile: twisted
    functionUses: 44
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 115
    functionName: scrapy.utils.reactor._get_asyncio_event_loop
    functionSourceFile: scrapy.utils.reactor
    functionUses: 47
    functionsReached:
    - scrapy.utils.reactor.set_asyncio_event_loop
    - <builtin>.isinstance
    - warnings.filterwarnings
    - urllib.parse.urlparse.rindex
    - asyncio.get_event_loop
    - typing.cast.rindex
    - asyncio.new_event_loop
    - asyncio.set_event_loop
    - <builtin>.getattr
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: asyncio.ensure_future
    functionSourceFile: asyncio
    functionUses: 44
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.Deferred.fromFuture
    functionSourceFile: twisted
    functionUses: 44
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - coro_f
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 331
    functionName: scrapy.utils.defer.deferred_f_from_coro_f
    functionSourceFile: scrapy.utils.defer
    functionUses: 2
    functionsReached:
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - coro_args
    - coro_kwargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 339
    functionName: scrapy.utils.defer.deferred_f_from_coro_f.f
    functionSourceFile: scrapy.utils.defer
    functionUses: 0
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - <builtin>.callable
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 3
    argDefaultValues: []
    argNames:
    - f
    - args
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 345
    functionName: scrapy.utils.defer.maybeDeferred_coro
    functionSourceFile: scrapy.utils.defer
    functionUses: 2
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - twisted.internet.defer.succeed
    - <builtin>.callable
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - twisted.internet.defer.fail
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - pydispatch.robustapply.robustApply
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pydispatch.robustapply.robustApply
    functionSourceFile: pydispatch
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.fail
    functionSourceFile: twisted
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - d
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 361
    functionName: scrapy.utils.defer.deferred_to_future
    functionSourceFile: scrapy.utils.defer
    functionUses: 4
    functionsReached:
    - typing.cast.asFuture
    - twisted.internet.defer.ensureDeferred.asFuture
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.callable
    - typing.AsyncIterable.asFuture
    - typing.Iterable.asFuture
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - scrapy.utils.reactor.set_asyncio_event_loop
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - twisted.internet.defer.DeferredList.asFuture
    - twisted.python.failure.Failure.asFuture
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.AsyncIterable.asFuture
    functionSourceFile: typing
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.Iterable.asFuture
    functionSourceFile: typing
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.asFuture
    functionSourceFile: typing
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.DeferredList.asFuture
    functionSourceFile: twisted
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.python.failure.Failure.asFuture
    functionSourceFile: twisted
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.ensureDeferred.asFuture
    functionSourceFile: twisted
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - d
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 383
    functionName: scrapy.utils.defer.maybe_deferred_to_future
    functionSourceFile: scrapy.utils.defer
    functionUses: 3
    functionsReached:
    - typing.cast.asFuture
    - twisted.internet.defer.ensureDeferred.asFuture
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.callable
    - <builtin>.isinstance
    - typing.AsyncIterable.asFuture
    - typing.Iterable.asFuture
    - asyncio.get_event_loop
    - scrapy.utils.defer.deferred_to_future
    - scrapy.utils.reactor.set_asyncio_event_loop
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - twisted.internet.defer.DeferredList.asFuture
    - twisted.python.failure.Failure.asFuture
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.reactor
    functionSourceFile: scrapy.utils.reactor
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 1
    IfCount: 5
    argCount: 3
    argDefaultValues: []
    argNames:
    - portrange
    - host
    - factory
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 15
    functionName: scrapy.utils.reactor.listen_tcp
    functionSourceFile: scrapy.utils.reactor
    functionUses: 1
    functionsReached:
    - <builtin>.range
    - <builtin>.hasattr
    - <builtin>.len
    - twisted.internet.reactor.listenTCP
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.listenTCP
    functionSourceFile: twisted
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - func
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 40
    functionName: scrapy.utils.reactor.CallLaterOnce.__init__
    functionSourceFile: scrapy.utils.reactor
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b287850>
    argNames:
    - self
    - delay
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 46
    functionName: scrapy.utils.reactor.CallLaterOnce.schedule
    functionSourceFile: scrapy.utils.reactor
    functionUses: 0
    functionsReached:
    - twisted.internet.reactor.callLater
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 52
    functionName: scrapy.utils.reactor.CallLaterOnce.cancel
    functionSourceFile: scrapy.utils.reactor
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 56
    functionName: scrapy.utils.reactor.CallLaterOnce.__call__
    functionSourceFile: scrapy.utils.reactor
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 61
    functionName: scrapy.utils.reactor.set_asyncio_event_loop_policy
    functionSourceFile: scrapy.utils.reactor
    functionUses: 7
    functionsReached:
    - <builtin>.isinstance
    - asyncio.set_event_loop_policy
    - asyncio.WindowsSelectorEventLoopPolicy
    - asyncio.get_event_loop_policy
    - scrapy.utils.reactor._get_asyncio_event_loop_policy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 85
    functionName: scrapy.utils.reactor._get_asyncio_event_loop_policy
    functionSourceFile: scrapy.utils.reactor
    functionUses: 9
    functionsReached:
    - <builtin>.isinstance
    - asyncio.WindowsSelectorEventLoopPolicy
    - asyncio.set_event_loop_policy
    - asyncio.get_event_loop_policy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 69
    functionName: scrapy.utils.reactor.get_asyncio_event_loop_policy
    functionSourceFile: scrapy.utils.reactor
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - warnings.warn
    - asyncio.set_event_loop_policy
    - asyncio.WindowsSelectorEventLoopPolicy
    - asyncio.get_event_loop_policy
    - scrapy.utils.reactor._get_asyncio_event_loop_policy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: asyncio.get_event_loop_policy
    functionSourceFile: asyncio
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: asyncio.WindowsSelectorEventLoopPolicy
    functionSourceFile: asyncio
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: asyncio.set_event_loop_policy
    functionSourceFile: asyncio
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: contextlib.suppress
    functionSourceFile: contextlib
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - event_loop_path
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 119
    functionName: scrapy.utils.reactor.set_asyncio_event_loop
    functionSourceFile: scrapy.utils.reactor
    functionUses: 56
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - warnings.filterwarnings
    - asyncio.get_event_loop
    - typing.cast.rindex
    - asyncio.new_event_loop
    - asyncio.set_event_loop
    - <builtin>.getattr
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.asyncioreactor.install
    functionSourceFile: twisted
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: reactor_path.split
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: asyncio.set_event_loop
    functionSourceFile: asyncio
    functionUses: 57
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: warnings.catch_warnings
    functionSourceFile: warnings
    functionUses: 57
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: warnings.filterwarnings
    functionSourceFile: warnings
    functionUses: 58
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: asyncio.get_event_loop
    functionSourceFile: asyncio
    functionUses: 57
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: asyncio.new_event_loop
    functionSourceFile: asyncio
    functionUses: 57
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: -1
    functionName: scrapy.utils.misc
    functionSourceFile: scrapy.utils.misc
    functionUses: 0
    functionsReached:
    - scrapy.utils.datatypes.LocalCache.__init__
    - scrapy.utils.datatypes.LocalWeakReferencedCache.__init__
    - contextlib.contextmanager
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - arg
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 39
    functionName: scrapy.utils.misc.arg_to_iter
    functionSourceFile: scrapy.utils.misc
    functionUses: 20
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - typing.cast
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.rindex
    functionSourceFile: urllib
    functionUses: 118
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.rindex
    functionSourceFile: typing
    functionUses: 118
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - path
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 85
    functionName: scrapy.utils.misc.walk_modules
    functionSourceFile: scrapy.utils.misc
    functionUses: 10
    functionsReached:
    - scrapy.utils.misc.walk_modules
    - <builtin>.hasattr
    - pkgutil.iter_modules
    - mods.append
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: mods.append
    functionSourceFile: <builtin>
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pkgutil.iter_modules
    functionSourceFile: pkgutil
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - file
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 107
    functionName: scrapy.utils.misc.md5sum
    functionSourceFile: scrapy.utils.misc
    functionUses: 5
    functionsReached:
    - io.BytesIO.read
    - m.update
    - hashlib.md5
    - m.hexdigest
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: hashlib.md5
    functionSourceFile: hashlib
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: io.BytesIO.read
    functionSourceFile: io
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: m.update
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: m.hexdigest
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - rel
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 124
    functionName: scrapy.utils.misc.rel_has_nofollow
    functionSourceFile: scrapy.utils.misc
    functionUses: 5
    functionsReached:
    - rel.replace
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: rel.replace
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 2
    IfCount: 5
    argCount: 5
    argDefaultValues: []
    argNames:
    - objcls
    - settings
    - crawler
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 129
    functionName: scrapy.utils.misc.create_instance
    functionSourceFile: scrapy.utils.misc
    functionUses: 0
    functionsReached:
    - objcls.from_crawler
    - warnings.warn
    - objcls.from_settings
    - <builtin>.hasattr
    linkageType: pythonLinkage
    raised:
    - TypeError
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: objcls.from_crawler
    functionSourceFile: <builtin>
    functionUses: 46
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: objcls.from_settings
    functionSourceFile: <builtin>
    functionUses: 47
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: contextlib.contextmanager
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - kwargs
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 211
    functionName: scrapy.utils.misc.set_environ
    functionSourceFile: scrapy.utils.misc
    functionUses: 1
    functionsReached:
    - original_env.items
    - os.environ.update
    - os.environ.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.environ.update
    functionSourceFile: os
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: original_env.items
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - node
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 228
    functionName: scrapy.utils.misc.walk_callable
    functionSourceFile: scrapy.utils.misc
    functionUses: 9
    functionsReached:
    - <builtin>.isinstance
    - collections.deque
    - ast.iter_child_nodes
    - todo.extend
    - todo.popleft
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: collections.deque
    functionSourceFile: collections
    functionUses: 27
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: todo.popleft
    functionSourceFile: <builtin>
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ast.iter_child_nodes
    functionSourceFile: ast
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: todo.extend
    functionSourceFile: <builtin>
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f2ba490>
    argNames:
    - self
    - limit
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 179
    functionName: scrapy.utils.datatypes.LocalWeakReferencedCache.__init__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 1
    functionsReached:
    - scrapy.utils.datatypes.LocalCache.__init__
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 1
    argDefaultValues: []
    argNames:
    - callable
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 247
    functionName: scrapy.utils.misc.is_generator_with_return_value
    functionSourceFile: scrapy.utils.misc
    functionUses: 8
    functionsReached:
    - <builtin>.isinstance
    - match.group
    - ast.parse
    - <builtin>.bool
    - collections.deque
    - re.compile
    - inspect.getsource
    - scrapy.utils.misc.is_generator_with_return_value.returns_none
    - ast.iter_child_nodes
    - todo.extend
    - inspect.isgeneratorfunction
    - scrapy.utils.misc.walk_callable
    - pattern.match
    - todo.popleft
    - re.sub
    - pattern.sub
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - return_node
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 255
    functionName: scrapy.utils.misc.is_generator_with_return_value.returns_none
    functionSourceFile: scrapy.utils.misc
    functionUses: 9
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.isgeneratorfunction
    functionSourceFile: inspect
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.getsource
    functionSourceFile: inspect
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pattern.sub
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pattern.match
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: match.group
    functionSourceFile: <builtin>
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: re.sub
    functionSourceFile: re
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ast.parse
    functionSourceFile: ast
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - spider
    - callable
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 284
    functionName: scrapy.utils.misc.warn_on_generator_with_return_value
    functionSourceFile: scrapy.utils.misc
    functionUses: 7
    functionsReached:
    - <builtin>.isinstance
    - match.group
    - ast.parse
    - <builtin>.bool
    - scrapy.utils.misc.is_generator_with_return_value
    - collections.deque
    - re.compile
    - warnings.warn
    - inspect.getsource
    - scrapy.utils.misc.is_generator_with_return_value.returns_none
    - ast.iter_child_nodes
    - todo.extend
    - inspect.isgeneratorfunction
    - scrapy.utils.misc.walk_callable
    - pattern.match
    - todo.popleft
    - re.sub
    - pattern.sub
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.datatypes
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - typing.TypeVar
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 41
    functionName: scrapy.utils.datatypes.CaselessDict.__new__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - <builtin>.issubclass
    - warnings.warn
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.issubclass
    functionSourceFile: <builtin>
    functionUses: 27
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f2ce490>
    argNames:
    - self
    - seq
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 53
    functionName: scrapy.utils.datatypes.CaselessDict.__init__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 1
    functionsReached:
    - scrapy.utils.datatypes.CaselessDict.update
    - <builtin>.isinstance
    - scrapy.utils.datatypes.CaselessDict.normkey
    - key.lower
    - scrapy.http.headers.Headers._tobytes
    - seq.items
    - <builtin>.hasattr
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - key.title
    - scrapy.http.headers.Headers.update
    - iseq.setdefault
    - x.encode
    - scrapy.utils.datatypes.CaselessDict.normvalue
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - seq
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 95
    functionName: scrapy.utils.datatypes.CaselessDict.update
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.utils.datatypes.CaselessDict.normkey
    - key.lower
    - scrapy.http.headers.Headers._tobytes
    - seq.items
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - key.title
    - x.encode
    - scrapy.utils.datatypes.CaselessDict.normvalue
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - seq
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 43
    functionName: scrapy.http.headers.Headers.update
    functionSourceFile: scrapy.http.headers
    functionUses: 5
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.http.headers.Headers._tobytes
    - seq.items
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - key.title
    - iseq.setdefault
    - x.encode
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 61
    functionName: scrapy.utils.datatypes.CaselessDict.__getitem__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.utils.datatypes.CaselessDict.normkey
    - scrapy.http.headers.Headers._tobytes
    - key.lower
    - scrapy.http.headers.Headers.normkey
    - dict.__getitem__
    - <builtin>.str
    - key.title
    - x.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 52
    functionName: scrapy.http.headers.Headers.normkey
    functionSourceFile: scrapy.http.headers
    functionUses: 15
    functionsReached:
    - <builtin>.isinstance
    - scrapy.http.headers.Headers._tobytes
    - <builtin>.str
    - key.title
    - x.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 80
    functionName: scrapy.utils.datatypes.CaselessDict.normkey
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 11
    functionsReached:
    - key.lower
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dict.__getitem__
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - key
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 64
    functionName: scrapy.utils.datatypes.CaselessDict.__setitem__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.utils.datatypes.CaselessDict.normkey
    - key.lower
    - scrapy.http.headers.Headers._tobytes
    - dict.__setitem__
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - key.title
    - x.encode
    - scrapy.utils.datatypes.CaselessDict.normvalue
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - value
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 84
    functionName: scrapy.utils.datatypes.CaselessDict.normvalue
    functionSourceFile: ''
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - value
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 56
    functionName: scrapy.http.headers.Headers.normvalue
    functionSourceFile: scrapy.http.headers
    functionUses: 16
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.http.headers.Headers._tobytes
    - <builtin>.str
    - x.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dict.__setitem__
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 67
    functionName: scrapy.utils.datatypes.CaselessDict.__delitem__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.utils.datatypes.CaselessDict.normkey
    - scrapy.http.headers.Headers._tobytes
    - key.lower
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - key.title
    - dict.__delitem__
    - x.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dict.__delitem__
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 70
    functionName: scrapy.utils.datatypes.CaselessDict.__contains__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.http.headers.Headers._tobytes
    - scrapy.utils.datatypes.CaselessDict.normkey
    - key.lower
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - key.title
    - dict.__contains__
    - x.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dict.__contains__
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 75
    functionName: scrapy.utils.datatypes.CaselessDict.__copy__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: key.lower
    functionSourceFile: <builtin>
    functionUses: 19
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b6d0>
    argNames:
    - self
    - key
    - def_val
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 88
    functionName: scrapy.utils.datatypes.CaselessDict.get
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.utils.datatypes.CaselessDict.normkey
    - key.lower
    - scrapy.http.headers.Headers._tobytes
    - dict.get
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - key.title
    - x.encode
    - scrapy.utils.datatypes.CaselessDict.normvalue
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dict.get
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b1f0>
    argNames:
    - self
    - key
    - def_val
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 91
    functionName: scrapy.utils.datatypes.CaselessDict.setdefault
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.utils.datatypes.CaselessDict.normkey
    - key.lower
    - scrapy.http.headers.Headers._tobytes
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - key.title
    - dict.setdefault
    - x.encode
    - scrapy.utils.datatypes.CaselessDict.normvalue
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dict.setdefault
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: seq.items
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f1e69d0>
    argNames:
    - cls
    - keys
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 101
    functionName: scrapy.utils.datatypes.CaselessDict.fromkeys
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - scrapy.utils.datatypes.CaselessDict.update
    - <builtin>.isinstance
    - scrapy.utils.datatypes.CaselessDict.normkey
    - key.lower
    - scrapy.http.headers.Headers._tobytes
    - seq.items
    - <builtin>.hasattr
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - key.title
    - scrapy.http.headers.Headers.update
    - iseq.setdefault
    - scrapy.utils.datatypes.CaselessDict.__init__
    - x.encode
    - scrapy.utils.datatypes.CaselessDict.normvalue
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - key
    - args
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 104
    functionName: scrapy.utils.datatypes.CaselessDict.pop
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - dict.pop
    - <builtin>.isinstance
    - scrapy.utils.datatypes.CaselessDict.normkey
    - scrapy.http.headers.Headers._tobytes
    - key.lower
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - key.title
    - x.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dict.pop
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 113
    functionName: scrapy.utils.datatypes.CaseInsensitiveDict.__init__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 3
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 117
    functionName: scrapy.utils.datatypes.CaseInsensitiveDict.__getitem__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - normalized_key.lower
    - scrapy.utils.datatypes.CaseInsensitiveDict._normkey
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 143
    functionName: scrapy.utils.datatypes.CaseInsensitiveDict._normkey
    functionSourceFile: ''
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: normalized_key.lower
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - key
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 121
    functionName: scrapy.utils.datatypes.CaseInsensitiveDict.__setitem__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - normalized_key.lower
    - scrapy.utils.datatypes.CaseInsensitiveDict._normkey
    - scrapy.utils.datatypes.CaseInsensitiveDict._normvalue
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - value
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 146
    functionName: scrapy.utils.datatypes.CaseInsensitiveDict._normvalue
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 131
    functionName: scrapy.utils.datatypes.CaseInsensitiveDict.__delitem__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - normalized_key.lower
    - collections.UserDict._keys.pop
    - scrapy.utils.datatypes.CaseInsensitiveDict._normkey
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: collections.UserDict._keys.pop
    functionSourceFile: collections
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 136
    functionName: scrapy.utils.datatypes.CaseInsensitiveDict.__contains__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - normalized_key.lower
    - scrapy.utils.datatypes.CaseInsensitiveDict._normkey
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 140
    functionName: scrapy.utils.datatypes.CaseInsensitiveDict.__repr__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f2bafd0>
    argNames:
    - self
    - limit
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 156
    functionName: scrapy.utils.datatypes.LocalCache.__init__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 3
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - key
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 160
    functionName: scrapy.utils.datatypes.LocalCache.__setitem__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - <builtin>.len
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - key
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 183
    functionName: scrapy.utils.datatypes.LocalWeakReferencedCache.__setitem__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 189
    functionName: scrapy.utils.datatypes.LocalWeakReferencedCache.__getitem__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - seq
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 199
    functionName: scrapy.utils.datatypes.SequenceExclude.__init__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 202
    functionName: scrapy.utils.datatypes.SequenceExclude.__contains__
    functionSourceFile: scrapy.utils.datatypes
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.http.headers
    functionSourceFile: scrapy.http.headers
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b94beb0>
    - <ast.Constant object at 0x7f9a4b94be80>
    argNames:
    - self
    - seq
    - encoding
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 35
    functionName: scrapy.http.headers.Headers.__init__
    functionSourceFile: scrapy.http.headers
    functionUses: 52
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: iseq.setdefault
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: key.title
    functionSourceFile: <builtin>
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 0
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - x
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 70
    functionName: scrapy.http.headers.Headers._tobytes
    functionSourceFile: scrapy.http.headers
    functionUses: 22
    functionsReached:
    - <builtin>.isinstance
    - x.encode
    - <builtin>.str
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: x.encode
    functionSourceFile: <builtin>
    functionUses: 23
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 79
    functionName: scrapy.http.headers.Headers.__getitem__
    functionSourceFile: scrapy.http.headers
    functionUses: 0
    functionsReached:
    - typing.cast
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b850>
    argNames:
    - self
    - key
    - def_val
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 85
    functionName: scrapy.http.headers.Headers.get
    functionSourceFile: scrapy.http.headers
    functionUses: 16
    functionsReached:
    - typing.cast
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d3d9e50>
    argNames:
    - self
    - key
    - def_val
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 91
    functionName: scrapy.http.headers.Headers.getlist
    functionSourceFile: scrapy.http.headers
    functionUses: 4
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.http.headers.Headers._tobytes
    - typing.cast
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - x.encode
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - key
    - list_
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 99
    functionName: scrapy.http.headers.Headers.setlist
    functionSourceFile: scrapy.http.headers
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Tuple object at 0x7f9a4f1e6550>
    argNames:
    - self
    - key
    - default_list
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 102
    functionName: scrapy.http.headers.Headers.setlistdefault
    functionSourceFile: scrapy.http.headers
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.utils.datatypes.CaselessDict.normkey
    - key.lower
    - scrapy.http.headers.Headers._tobytes
    - scrapy.http.headers.Headers.normkey
    - scrapy.utils.datatypes.CaselessDict.setdefault
    - <builtin>.str
    - key.title
    - scrapy.http.headers.Headers.normvalue
    - dict.setdefault
    - x.encode
    - scrapy.utils.datatypes.CaselessDict.normvalue
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - key
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 107
    functionName: scrapy.http.headers.Headers.appendlist
    functionSourceFile: scrapy.http.headers
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.http.headers.Headers._tobytes
    - typing.cast
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - scrapy.http.headers.Headers.getlist
    - typing.cast.extend
    - x.encode
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.extend
    functionSourceFile: typing
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 112
    functionName: scrapy.http.headers.Headers.items
    functionSourceFile: scrapy.http.headers
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.http.headers.Headers._tobytes
    - typing.cast
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - scrapy.http.headers.Headers.getlist
    - x.encode
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 115
    functionName: scrapy.http.headers.Headers.values
    functionSourceFile: scrapy.http.headers
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 118
    functionName: scrapy.http.headers.Headers.to_string
    functionSourceFile: scrapy.http.headers
    functionUses: 0
    functionsReached:
    - w3lib.http.headers_dict_to_raw
    - typing.cast
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.http.headers_dict_to_raw
    functionSourceFile: w3lib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 122
    functionName: scrapy.http.headers.Headers.to_unicode_dict
    functionSourceFile: scrapy.http.headers
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.http.headers.Headers._tobytes
    - scrapy.http.headers.Headers.items
    - typing.cast
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - scrapy.http.headers.Headers.getlist
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - x.encode
    - scrapy.utils.datatypes.CaseInsensitiveDict.__init__
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 134
    functionName: scrapy.http.headers.Headers.__copy__
    functionSourceFile: scrapy.http.headers
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils
    functionSourceFile: scrapy.utils
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.item
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 0
    IfCount: 3
    argCount: 4
    argDefaultValues: []
    argNames:
    - mcs
    - class_name
    - bases
    - attrs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 26
    functionName: scrapy.item.ItemMeta.__new__
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - <builtin>.super
    - <builtin>.dir
    - <builtin>.tuple
    - attrs.pop
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: attrs.pop
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.tuple
    functionSourceFile: <builtin>
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 72
    functionName: scrapy.item.Item.__init__
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached:
    - <builtin>.dict
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 78
    functionName: scrapy.item.Item.__getitem__
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - key
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 81
    functionName: scrapy.item.Item.__setitem__
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - KeyError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 87
    functionName: scrapy.item.Item.__delitem__
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 90
    functionName: scrapy.item.Item.__getattr__
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - AttributeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - name
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 95
    functionName: scrapy.item.Item.__setattr__
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached:
    - name.startswith
    - <builtin>.super
    linkageType: pythonLinkage
    raised:
    - AttributeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: name.startswith
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 100
    functionName: scrapy.item.Item.__len__
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 103
    functionName: scrapy.item.Item.__iter__
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached:
    - <builtin>.iter
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 108
    functionName: scrapy.item.Item.keys
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 111
    functionName: scrapy.item.Item.__repr__
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached:
    - <builtin>.dict
    - pprint.pformat
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 114
    functionName: scrapy.item.Item.copy
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached:
    - collections.abc.MutableMapping.__class__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: collections.abc.MutableMapping.__class__
    functionSourceFile: collections
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 117
    functionName: scrapy.item.Item.deepcopy
    functionSourceFile: scrapy.item
    functionUses: 0
    functionsReached:
    - scrapy.item.Item.deepcopy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.trackref
    functionSourceFile: scrapy.utils.trackref
    functionUses: 0
    functionsReached:
    - collections.defaultdict
    - <builtin>.type
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 32
    functionName: scrapy.utils.trackref.object_ref.__new__
    functionSourceFile: scrapy.utils.trackref
    functionUses: 0
    functionsReached:
    - time.time
    - object.__new__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: object.__new__
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: time.time
    functionSourceFile: time
    functionUses: 27
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 1
    argDefaultValues:
    - <ast.Name object at 0x7f9a4d3d8460>
    argNames:
    - ignore
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 39
    functionName: scrapy.utils.trackref.format_live_refs
    functionSourceFile: scrapy.utils.trackref
    functionUses: 2
    functionsReached:
    - time.time
    - <builtin>.int
    - <builtin>.min
    - <builtin>.len
    - wdict.values
    - <builtin>.sorted
    - <builtin>.issubclass
    - live_refs.items
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: live_refs.items
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.trackref.format_live_refs.<lambda1>
    functionSourceFile: scrapy.utils.trackref
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: wdict.values
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.min
    functionSourceFile: <builtin>
    functionUses: 22
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 53
    functionName: scrapy.utils.trackref.print_live_refs
    functionSourceFile: scrapy.utils.trackref
    functionUses: 0
    functionsReached:
    - time.time
    - <builtin>.issubclass
    - <builtin>.int
    - <builtin>.min
    - <builtin>.len
    - <builtin>.print
    - wdict.values
    - <builtin>.sorted
    - live_refs.items
    - scrapy.utils.trackref.format_live_refs
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.print
    functionSourceFile: <builtin>
    functionUses: 34
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - class_name
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 58
    functionName: scrapy.utils.trackref.get_oldest
    functionSourceFile: scrapy.utils.trackref
    functionUses: 0
    functionsReached:
    - operator.itemgetter
    - <builtin>.min
    - live_refs.items
    - wdict.items
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: wdict.items
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - class_name
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 67
    functionName: scrapy.utils.trackref.iter_all
    functionSourceFile: scrapy.utils.trackref
    functionUses: 0
    functionsReached:
    - live_refs.items
    - wdict.keys
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: wdict.keys
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 4
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy
    functionSourceFile: scrapy
    functionUses: 0
    functionsReached:
    - v.isdigit
    - sys.exit
    - warnings.filterwarnings
    - <builtin>.int
    - pkgutil.get_data
    - <builtin>.tuple
    - <builtin>.print
    - __version__.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pkgutil.get_data
    functionSourceFile: pkgutil
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: v.isdigit
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: __version__.split
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sys.exit
    functionSourceFile: sys
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.http
    functionSourceFile: scrapy.http
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.http.response
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 10
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c27af40>
    - <ast.Constant object at 0x7f9a4c27af10>
    - <ast.Constant object at 0x7f9a4c27aee0>
    - <ast.Constant object at 0x7f9a4c27aeb0>
    - <ast.Constant object at 0x7f9a4c27ae80>
    - <ast.Constant object at 0x7f9a4c27ae50>
    - <ast.Constant object at 0x7f9a4c27ae20>
    - <ast.Constant object at 0x7f9a4c27adf0>
    argNames:
    - self
    - url
    - status
    - headers
    - body
    - flags
    - request
    - certificate
    - ip_address
    - protocol
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 62
    functionName: scrapy.http.response.Response.__init__
    functionSourceFile: scrapy.http.response
    functionUses: 17
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.int
    - <builtin>.list
    - scrapy.http.headers.Headers.__init__
    - scrapy.http.response.Response._set_body
    - scrapy.http.response.Response._set_url
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - body
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 120
    functionName: scrapy.http.response.Response._set_body
    functionSourceFile: scrapy.http.response
    functionUses: 18
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 108
    functionName: scrapy.http.response.Response._set_url
    functionSourceFile: scrapy.http.response
    functionUses: 18
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 85
    functionName: scrapy.http.response.Response.cb_kwargs
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - AttributeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 95
    functionName: scrapy.http.response.Response.meta
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - AttributeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 105
    functionName: scrapy.http.response.Response.url
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 117
    functionName: scrapy.http.response.Response.body
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 132
    functionName: scrapy.http.response.Response.__repr__
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 135
    functionName: scrapy.http.response.Response.copy
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached:
    - kwargs.setdefault
    - typing.cast
    - scrapy.http.response.Response.replace
    - kwargs.pop
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 139
    functionName: scrapy.http.response.Response.replace
    functionSourceFile: scrapy.http.response
    functionUses: 1
    functionsReached:
    - kwargs.pop
    - kwargs.setdefault
    - typing.cast
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: kwargs.setdefault
    functionSourceFile: <builtin>
    functionUses: 18
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: kwargs.pop
    functionSourceFile: <builtin>
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 146
    functionName: scrapy.http.response.Response.urljoin
    functionSourceFile: scrapy.http.response
    functionUses: 2
    functionsReached:
    - scrapy.http.response.Response.urljoin
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 152
    functionName: scrapy.http.response.Response.text
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - AttributeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 158
    functionName: scrapy.http.response.Response.css
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - NotSupported
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 164
    functionName: scrapy.http.response.Response.jmespath
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - NotSupported
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 170
    functionName: scrapy.http.response.Response.xpath
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - NotSupported
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 14
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c291a30>
    - <ast.Constant object at 0x7f9a4c291a60>
    - <ast.Constant object at 0x7f9a4c291a90>
    - <ast.Constant object at 0x7f9a4c291ac0>
    - <ast.Constant object at 0x7f9a4c291af0>
    - <ast.Constant object at 0x7f9a4c291b20>
    - <ast.Constant object at 0x7f9a4c291b50>
    - <ast.Constant object at 0x7f9a4c291b80>
    - <ast.Constant object at 0x7f9a4c291bb0>
    - <ast.Constant object at 0x7f9a4c291be0>
    - <ast.Constant object at 0x7f9a4c291c10>
    - <ast.Constant object at 0x7f9a4c291c40>
    argNames:
    - self
    - url
    - callback
    - method
    - headers
    - body
    - cookies
    - meta
    - encoding
    - priority
    - dont_filter
    - errback
    - cb_kwargs
    - flags
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 176
    functionName: scrapy.http.response.Response.follow
    functionSourceFile: scrapy.http.response
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - scrapy.http.response.Response.urljoin
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 2
    IfCount: 3
    argCount: 14
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4db563d0>
    - <ast.Constant object at 0x7f9a4db563a0>
    - <ast.Constant object at 0x7f9a4db56370>
    - <ast.Constant object at 0x7f9a4db56340>
    - <ast.Constant object at 0x7f9a4db56310>
    - <ast.Constant object at 0x7f9a4ce89c40>
    - <ast.Constant object at 0x7f9a4ce89c10>
    - <ast.Constant object at 0x7f9a4ce89be0>
    - <ast.Constant object at 0x7f9a4ce89bb0>
    - <ast.Constant object at 0x7f9a4ce89b80>
    - <ast.Constant object at 0x7f9a4ce89b50>
    - <ast.Constant object at 0x7f9a4ce89b20>
    argNames:
    - self
    - url
    - callback
    - method
    - headers
    - body
    - cookies
    - meta
    - encoding
    - priority
    - dont_filter
    - errback
    - flags
    - cb_kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 89
    functionName: scrapy.http.request.Request.__init__
    functionSourceFile: scrapy.http.request
    functionUses: 26
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 14
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c2896a0>
    - <ast.Constant object at 0x7f9a4c289670>
    - <ast.Constant object at 0x7f9a4c289640>
    - <ast.Constant object at 0x7f9a4c289610>
    - <ast.Constant object at 0x7f9a4c2895e0>
    - <ast.Constant object at 0x7f9a4c2895b0>
    - <ast.Constant object at 0x7f9a4c289580>
    - <ast.Constant object at 0x7f9a4c289550>
    - <ast.Constant object at 0x7f9a4c289520>
    - <ast.Constant object at 0x7f9a4c2894f0>
    - <ast.Constant object at 0x7f9a4c2894c0>
    - <ast.Constant object at 0x7f9a4c289490>
    argNames:
    - self
    - urls
    - callback
    - method
    - headers
    - body
    - cookies
    - meta
    - encoding
    - priority
    - dont_filter
    - errback
    - cb_kwargs
    - flags
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 229
    functionName: scrapy.http.response.Response.follow_all
    functionSourceFile: scrapy.http.response
    functionUses: 0
    functionsReached:
    - scrapy.http.response.Response.follow
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.hasattr
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - scrapy.http.response.Response.urljoin
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.http.request
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached:
    - typing.TypeVar
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 37
    functionName: scrapy.http.request.NO_CALLBACK
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 148
    functionName: scrapy.http.request.Request._set_url
    functionSourceFile: scrapy.http.request
    functionUses: 29
    functionsReached:
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.utils.url.escape_ajax
    - frag.startswith
    - w3lib.url.safe_url_string.startswith
    - urllib.parse.urldefrag
    linkageType: pythonLinkage
    raised:
    - ValueError
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - body
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 166
    functionName: scrapy.http.request.Request._set_body
    functionSourceFile: scrapy.http.request
    functionUses: 29
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 133
    functionName: scrapy.http.request.Request.cb_kwargs
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 139
    functionName: scrapy.http.request.Request.meta
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 145
    functionName: scrapy.http.request.Request.url
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.safe_url_string
    functionSourceFile: w3lib
    functionUses: 37
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - url
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 57
    functionName: scrapy.utils.url.escape_ajax
    functionSourceFile: scrapy.utils.url
    functionUses: 30
    functionsReached:
    - urllib.parse.urldefrag
    - frag.startswith
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.safe_url_string.startswith
    functionSourceFile: w3lib
    functionUses: 30
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 163
    functionName: scrapy.http.request.Request.body
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 170
    functionName: scrapy.http.request.Request.encoding
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 173
    functionName: scrapy.http.request.Request.__repr__
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 176
    functionName: scrapy.http.request.Request.copy
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached:
    - kwargs.setdefault
    - typing.cast
    - scrapy.http.request.Request.replace
    - kwargs.pop
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 179
    functionName: scrapy.http.request.Request.replace
    functionSourceFile: scrapy.http.request
    functionUses: 1
    functionsReached:
    - kwargs.pop
    - kwargs.setdefault
    - typing.cast
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ce677f0>
    argNames:
    - cls
    - curl_command
    - ignore_unknown_options
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 187
    functionName: scrapy.http.request.Request.from_curl
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached:
    - name.strip
    - request_kwargs.update
    - headers.append
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - header.split
    - name.title
    - <builtin>.list
    - http.cookies.SimpleCookie
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - method.upper
    - <builtin>.callable
    - http.cookies.SimpleCookie.items
    - w3lib.http.basic_auth_header
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - warnings.warn
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - scrapy.utils.curl._parse_headers_and_cookies
    - parsed_args.auth.split
    - <builtin>.super
    - <builtin>.dict
    - scrapy.utils.curl.curl_to_request_kwargs
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - val.strip
    - argparse.ArgumentParser.parse_known_args
    - urllib.parse.urlparse
    - shlex.split
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 12
    ICount: 2
    IfCount: 8
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b868fa0>
    argNames:
    - curl_command
    - ignore_unknown_options
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 65
    functionName: scrapy.utils.curl.curl_to_request_kwargs
    functionSourceFile: scrapy.utils.curl
    functionUses: 1
    functionsReached:
    - name.strip
    - w3lib.http.basic_auth_header
    - header.split
    - headers.append
    - name.title
    - warnings.warn
    - http.cookies.SimpleCookie
    - parsed_args.auth.split
    - val.strip
    - method.upper
    - urllib.parse.urlparse
    - argparse.ArgumentParser.parse_known_args
    - http.cookies.SimpleCookie.items
    - scrapy.utils.curl._parse_headers_and_cookies
    - shlex.split
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request_kwargs.update
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 224
    functionName: scrapy.http.request.Request.to_dict
    functionSourceFile: scrapy.http.request
    functionUses: 0
    functionsReached:
    - scrapy.http.request._find_method
    - inspect.getmembers
    - <builtin>.hasattr
    - <builtin>.dict
    - d.setdefault
    - <builtin>.type
    - <builtin>.callable
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - obj
    - func
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 249
    functionName: scrapy.http.request._find_method
    functionSourceFile: scrapy.http.request
    functionUses: 1
    functionsReached:
    - <builtin>.hasattr
    - inspect.getmembers
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: d.setdefault
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.getmembers
    functionSourceFile: inspect
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 6
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.curl
    functionSourceFile: scrapy.utils.curl
    functionUses: 0
    functionsReached:
    - argparse.ArgumentParser.__init__
    - argparse.ArgumentParser.add_argument
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ea93910>
    argNames:
    - self
    - parser
    - namespace
    - values
    - option_string
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 11
    functionName: scrapy.utils.curl.DataAction.__call__
    functionSourceFile: scrapy.utils.curl
    functionUses: 0
    functionsReached:
    - <builtin>.setattr
    - value.startswith
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: value.startswith
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.setattr
    functionSourceFile: <builtin>
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - message
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 19
    functionName: scrapy.utils.curl.CurlParser.error
    functionSourceFile: scrapy.utils.curl
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: argparse.ArgumentParser.__init__
    functionSourceFile: ''
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: argparse.ArgumentParser.add_argument
    functionSourceFile: argparse
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - parsed_args
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 45
    functionName: scrapy.utils.curl._parse_headers_and_cookies
    functionSourceFile: scrapy.utils.curl
    functionUses: 2
    functionsReached:
    - name.strip
    - w3lib.http.basic_auth_header
    - header.split
    - headers.append
    - name.title
    - http.cookies.SimpleCookie
    - val.strip
    - http.cookies.SimpleCookie.items
    - parsed_args.auth.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: header.split
    functionSourceFile: <builtin>
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: name.strip
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: val.strip
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: name.title
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookies.SimpleCookie
    functionSourceFile: http
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookies.SimpleCookie.items
    functionSourceFile: http
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: headers.append
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parsed_args.auth.split
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.http.basic_auth_header
    functionSourceFile: w3lib
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: shlex.split
    functionSourceFile: shlex
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: argparse.ArgumentParser.parse_known_args
    functionSourceFile: argparse
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: method.upper
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.url
    functionSourceFile: scrapy.utils.url
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - url
    - domains
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 26
    functionName: scrapy.utils.url.url_is_from_any_domain
    functionSourceFile: scrapy.utils.url
    functionUses: 8
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse
    - <builtin>.any
    - typing.cast
    - host.endswith
    - d.lower
    - scrapy.utils.url.parse_url
    - typing.cast.netloc.lower
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.netloc.lower
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e59a580>
    argNames:
    - url
    - encoding
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 48
    functionName: scrapy.utils.url.parse_url
    functionSourceFile: scrapy.utils.url
    functionUses: 10
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - typing.cast
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.netloc.lower
    functionSourceFile: urllib
    functionUses: 25
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.netloc.lower
    functionSourceFile: typing
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: d.lower
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: host.endswith
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - url
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 35
    functionName: scrapy.utils.url.url_is_from_spider
    functionSourceFile: scrapy.utils.url
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse
    - <builtin>.list
    - <builtin>.any
    - scrapy.utils.url.url_is_from_any_domain
    - typing.cast
    - host.endswith
    - d.lower
    - scrapy.utils.url.parse_url
    - typing.cast.netloc.lower
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.netloc.lower
    - typing.cast.decode
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - url
    - extensions
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 42
    functionName: scrapy.utils.url.url_has_any_extension
    functionSourceFile: scrapy.utils.url
    functionUses: 4
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - typing.cast.path.lower
    - urllib.parse.urlparse
    - <builtin>.any
    - typing.cast
    - scrapy.utils.url.parse_url
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - lowercase_path.endswith
    - urllib.parse.urlparse.path.lower
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.path.lower
    functionSourceFile: urllib
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.path.lower
    functionSourceFile: typing
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: lowercase_path.endswith
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urldefrag
    functionSourceFile: urllib
    functionUses: 35
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: frag.startswith
    functionSourceFile: <builtin>
    functionUses: 31
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - url
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 86
    functionName: scrapy.utils.url.add_http_if_no_scheme
    functionSourceFile: scrapy.utils.url
    functionUses: 2
    functionsReached:
    - re.match
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: re.match
    functionSourceFile: re
    functionUses: 19
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - string
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 97
    functionName: scrapy.utils.url._is_posix_path
    functionSourceFile: scrapy.utils.url
    functionUses: 3
    functionsReached:
    - <builtin>.bool
    - re.match
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - string
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 119
    functionName: scrapy.utils.url._is_windows_path
    functionSourceFile: scrapy.utils.url
    functionUses: 3
    functionsReached:
    - <builtin>.bool
    - re.match
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - string
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 135
    functionName: scrapy.utils.url._is_filesystem_path
    functionSourceFile: scrapy.utils.url
    functionUses: 2
    functionsReached:
    - <builtin>.bool
    - scrapy.utils.url._is_windows_path
    - re.match
    - scrapy.utils.url._is_posix_path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - url
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 139
    functionName: scrapy.utils.url.guess_scheme
    functionSourceFile: scrapy.utils.url
    functionUses: 1
    functionsReached:
    - scrapy.utils.url.add_http_if_no_scheme
    - <builtin>.bool
    - scrapy.utils.url._is_posix_path
    - scrapy.utils.url._is_filesystem_path
    - scrapy.utils.url._is_windows_path
    - urllib.parse.urlparse
    - re.match
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b868070>
    - <ast.Constant object at 0x7f9a4b8682b0>
    - <ast.Constant object at 0x7f9a4b868d90>
    - <ast.Constant object at 0x7f9a4b868310>
    argNames:
    - url
    - strip_credentials
    - strip_default_port
    - origin_only
    - strip_fragment
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 147
    functionName: scrapy.utils.url.strip_url
    functionSourceFile: scrapy.utils.url
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.netloc.split
    - urllib.parse.urlunparse
    - urllib.parse.urlparse.netloc.replace
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.netloc.split
    functionSourceFile: urllib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.netloc.replace
    functionSourceFile: urllib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlunparse
    functionSourceFile: urllib
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.link
    functionSourceFile: scrapy.link
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e59a160>
    - <ast.Constant object at 0x7f9a4e59a880>
    - <ast.Constant object at 0x7f9a4e59a580>
    argNames:
    - self
    - url
    - text
    - fragment
    - nofollow
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 30
    functionName: scrapy.link.Link.__init__
    functionSourceFile: scrapy.link
    functionUses: 5
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - other
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 41
    functionName: scrapy.link.Link.__eq__
    functionSourceFile: scrapy.link
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 51
    functionName: scrapy.link.Link.__hash__
    functionSourceFile: scrapy.link
    functionUses: 0
    functionsReached:
    - <builtin>.hash
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.hash
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 56
    functionName: scrapy.link.Link.__repr__
    functionSourceFile: scrapy.link
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.selector
    functionSourceFile: scrapy.selector
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.selector.unified
    functionSourceFile: scrapy.selector.unified
    functionUses: 0
    functionsReached:
    - <builtin>.object
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - response
    - st
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 17
    functionName: scrapy.selector.unified._st
    functionSourceFile: scrapy.selector.unified
    functionUses: 7
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - text
    - st
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 23
    functionName: scrapy.selector.unified._response_from_text
    functionSourceFile: scrapy.selector.unified
    functionUses: 7
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 2
    IfCount: 4
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f1e69d0>
    - <ast.Constant object at 0x7f9a4f1e6af0>
    - <ast.Constant object at 0x7f9a4f1e6880>
    - <ast.Name object at 0x7f9a4f1e61c0>
    argNames:
    - self
    - response
    - text
    - type
    - root
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 69
    functionName: scrapy.selector.unified.Selector.__init__
    functionSourceFile: scrapy.selector.unified
    functionUses: 6
    functionsReached:
    - kwargs.setdefault
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - scrapy.selector.unified._st
    - urllib.parse.urlparse.hostname.encode
    - scrapy.selector.unified._response_from_text
    - <builtin>.super
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.http.request.json_request
    functionSourceFile: scrapy.http.request.json_request
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 5
    IfCount: 3
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - args
    - dumps_kwargs
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 19
    functionName: scrapy.http.request.json_request.JsonRequest.__init__
    functionSourceFile: scrapy.http.request.json_request
    functionUses: 0
    functionsReached:
    - json.dumps
    - dumps_kwargs.setdefault
    - warnings.warn
    - scrapy.http.request.json_request.JsonRequest._dumps
    - copy.deepcopy
    - kwargs.pop
    - kwargs.get
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: copy.deepcopy
    functionSourceFile: copy
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dumps_kwargs.setdefault
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: kwargs.get
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - data
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 59
    functionName: scrapy.http.request.json_request.JsonRequest._dumps
    functionSourceFile: scrapy.http.request.json_request
    functionUses: 2
    functionsReached:
    - json.dumps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 44
    functionName: scrapy.http.request.json_request.JsonRequest.dumps_kwargs
    functionSourceFile: scrapy.http.request.json_request
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 47
    functionName: scrapy.http.request.json_request.JsonRequest.replace
    functionSourceFile: scrapy.http.request.json_request
    functionUses: 0
    functionsReached:
    - json.dumps
    - warnings.warn
    - scrapy.http.request.json_request.JsonRequest._dumps
    - kwargs.pop
    - kwargs.get
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: json.dumps
    functionSourceFile: json
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.http.response.text
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - <builtin>.object
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 56
    functionName: scrapy.http.response.text.TextResponse.__init__
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - kwargs.pop
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - body
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 63
    functionName: scrapy.http.response.text.TextResponse._set_body
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - body.encode
    - <builtin>.super
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: body.encode
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 76
    functionName: scrapy.http.response.text.TextResponse.encoding
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.http.response.text.TextResponse._declared_encoding
    - w3lib.encoding.http_content_type_encoding
    - w3lib.encoding.html_body_declared_encoding
    - typing.cast
    - scrapy.http.response.text.TextResponse._headers_encoding
    - scrapy.http.response.text.TextResponse._body_inferred_encoding
    - scrapy.http.response.text.TextResponse._bom_encoding
    - scrapy.utils.python.to_unicode
    - w3lib.encoding.read_bom
    - typing.cast.decode
    - scrapy.http.response.text.TextResponse._body_declared_encoding
    - w3lib.encoding.html_to_unicode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 79
    functionName: scrapy.http.response.text.TextResponse._declared_encoding
    functionSourceFile: scrapy.http.response.text
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - w3lib.encoding.http_content_type_encoding
    - w3lib.encoding.html_body_declared_encoding
    - typing.cast
    - scrapy.http.response.text.TextResponse._headers_encoding
    - scrapy.http.response.text.TextResponse._bom_encoding
    - scrapy.utils.python.to_unicode
    - w3lib.encoding.read_bom
    - typing.cast.decode
    - scrapy.http.response.text.TextResponse._body_declared_encoding
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 118
    functionName: scrapy.http.response.text.TextResponse._body_inferred_encoding
    functionSourceFile: scrapy.http.response.text
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - typing.cast
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - w3lib.encoding.html_to_unicode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 87
    functionName: scrapy.http.response.text.TextResponse.json
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 98
    functionName: scrapy.http.response.text.TextResponse.text
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - w3lib.encoding.html_to_unicode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.encoding.html_to_unicode
    functionSourceFile: w3lib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 108
    functionName: scrapy.http.response.text.TextResponse.urljoin
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - scrapy.utils.response.get_base_url
    - scrapy.http.response.text.TextResponse.urljoin
    - w3lib.html.get_base_url
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - response
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 22
    functionName: scrapy.utils.response.get_base_url
    functionSourceFile: scrapy.utils.response
    functionUses: 6
    functionsReached:
    - w3lib.html.get_base_url
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.http.response.text.TextResponse
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - weakref.WeakKeyDictionary
    - scrapy.utils.python.memoizemethod_noargs
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.encoding.http_content_type_encoding
    functionSourceFile: w3lib
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - text
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 133
    functionName: scrapy.http.response.text.TextResponse._auto_detect_fun
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - text.decode
    - w3lib.encoding.resolve_encoding
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: text.decode
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.encoding.resolve_encoding
    functionSourceFile: w3lib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.encoding.html_body_declared_encoding
    functionSourceFile: w3lib
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.encoding.read_bom
    functionSourceFile: w3lib
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 151
    functionName: scrapy.http.response.text.TextResponse.selector
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - scrapy.selector.unified.Selector.__init__
    - <builtin>.isinstance
    - kwargs.setdefault
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - scrapy.selector.unified._st
    - urllib.parse.urlparse.hostname.encode
    - scrapy.selector.unified._response_from_text
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - query
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 158
    functionName: scrapy.http.response.text.TextResponse.jmespath
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - typing.cast
    linkageType: pythonLinkage
    raised:
    - AttributeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - query
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 168
    functionName: scrapy.http.response.text.TextResponse.xpath
    functionSourceFile: scrapy.http.response.text
    functionUses: 1
    functionsReached:
    - typing.cast
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - query
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 173
    functionName: scrapy.http.response.text.TextResponse.css
    functionSourceFile: scrapy.http.response.text
    functionUses: 1
    functionsReached:
    - typing.cast
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 14
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4edf7490>
    - <ast.Constant object at 0x7f9a4edf7460>
    - <ast.Constant object at 0x7f9a4edf7430>
    - <ast.Constant object at 0x7f9a4edf7400>
    - <ast.Constant object at 0x7f9a4edf73d0>
    - <ast.Constant object at 0x7f9a4edf73a0>
    - <ast.Constant object at 0x7f9a4edf7370>
    - <ast.Constant object at 0x7f9a4edf7340>
    - <ast.Constant object at 0x7f9a4edf7310>
    - <ast.Constant object at 0x7f9a4edf72e0>
    - <ast.Constant object at 0x7f9a4edf72b0>
    - <ast.Constant object at 0x7f9a4edf7280>
    argNames:
    - self
    - url
    - callback
    - method
    - headers
    - body
    - cookies
    - meta
    - encoding
    - priority
    - dont_filter
    - errback
    - cb_kwargs
    - flags
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 178
    functionName: scrapy.http.response.text.TextResponse.follow
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - typing.cast.root.get
    - w3lib.html.strip_html5_whitespace.root.get
    - w3lib.html.strip_html5_whitespace
    - scrapy.http.response.text._url_from_selector
    - <builtin>.super
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 0
    IfCount: 4
    argCount: 1
    argDefaultValues: []
    argNames:
    - sel
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 311
    functionName: scrapy.http.response.text._url_from_selector
    functionSourceFile: scrapy.http.response.text
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - typing.cast.root.get
    - w3lib.html.strip_html5_whitespace.root.get
    - w3lib.html.strip_html5_whitespace
    linkageType: pythonLinkage
    raised:
    - _InvalidSelector
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 2
    IfCount: 5
    argCount: 16
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ee072b0>
    - <ast.Constant object at 0x7f9a4ee07280>
    - <ast.Constant object at 0x7f9a4ee07250>
    - <ast.Constant object at 0x7f9a4ee07220>
    - <ast.Constant object at 0x7f9a4ee071f0>
    - <ast.Constant object at 0x7f9a4ee071c0>
    - <ast.Constant object at 0x7f9a4ee07190>
    - <ast.Constant object at 0x7f9a4ee07160>
    - <ast.Constant object at 0x7f9a4ee07130>
    - <ast.Constant object at 0x7f9a4ee07100>
    - <ast.Constant object at 0x7f9a4ee070d0>
    - <ast.Constant object at 0x7f9a4ee070a0>
    - <ast.Constant object at 0x7f9a4ee07070>
    - <ast.Constant object at 0x7f9a4ee07040>
    - <ast.Constant object at 0x7f9a4ee26fd0>
    argNames:
    - self
    - urls
    - callback
    - method
    - headers
    - body
    - cookies
    - meta
    - encoding
    - priority
    - dont_filter
    - errback
    - cb_kwargs
    - flags
    - css
    - xpath
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 231
    functionName: scrapy.http.response.text.TextResponse.follow_all
    functionSourceFile: scrapy.http.response.text
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - contextlib.suppress
    - typing.cast.root.get
    - scrapy.http.response.text.TextResponse.xpath
    - typing.cast
    - w3lib.html.strip_html5_whitespace.root.get
    - w3lib.html.strip_html5_whitespace
    - <builtin>.len
    - scrapy.http.response.text._url_from_selector
    - typing.cast.append
    - scrapy.http.response.text.TextResponse.css
    - <builtin>.super
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.append
    functionSourceFile: typing
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.html.strip_html5_whitespace
    functionSourceFile: w3lib
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.root.get
    functionSourceFile: typing
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.html.strip_html5_whitespace.root.get
    functionSourceFile: w3lib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.response
    functionSourceFile: scrapy.utils.response
    functionUses: 0
    functionsReached:
    - weakref.WeakKeyDictionary
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.html.get_base_url
    functionSourceFile: w3lib
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Tuple object at 0x7f9a4b287ca0>
    argNames:
    - response
    - ignore_tags
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 37
    functionName: scrapy.utils.response.get_meta_refresh
    functionSourceFile: scrapy.utils.response
    functionUses: 1
    functionsReached:
    - w3lib.html.get_meta_refresh
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.html.get_meta_refresh
    functionSourceFile: w3lib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - status
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 50
    functionName: scrapy.utils.response.response_status_message
    functionSourceFile: scrapy.utils.response
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - <builtin>.int
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - twisted.web.http.RESPONSES.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.RESPONSES.get
    functionSourceFile: twisted
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 3
    IfCount: 3
    argCount: 2
    argDefaultValues:
    - <ast.Attribute object at 0x7f9a4e59aa60>
    argNames:
    - response
    - _openfunc
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 57
    functionName: scrapy.utils.response.open_in_browser
    functionSourceFile: scrapy.utils.response
    functionUses: 1
    functionsReached:
    - tempfile.mkstemp
    - <builtin>.isinstance
    - re.sub
    - urllib.parse.urlparse.scheme.encode
    - os.write
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - os.close
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: tempfile.mkstemp
    functionSourceFile: tempfile
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.write
    functionSourceFile: os
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.close
    functionSourceFile: os
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.http.response.html
    functionSourceFile: scrapy.http.response.html
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.http.request.form
    functionSourceFile: scrapy.http.request.form
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - args
    - formdata
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 41
    functionName: scrapy.http.request.form.FormRequest.__init__
    functionSourceFile: scrapy.http.request.form
    functionUses: 1
    functionsReached:
    - urllib.parse.urlsplit
    - urllib.parse.urlparse.scheme.encode
    - urllib.parse.urlsplit._replace
    - typing.cast
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - kwargs.get
    - <builtin>.hasattr
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - urllib.parse.urlunsplit
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - scrapy.utils.python.is_listlike
    - <builtin>.super
    - scrapy.http.request.form._urlencode
    - urllib.parse.urlencode
    - twisted.internet.protocol.ClientFactory._url.encode
    - formdata.items
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: formdata.items
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - seq
    - enc
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 106
    functionName: scrapy.http.request.form._urlencode
    functionSourceFile: scrapy.http.request.form
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - urllib.parse.urlencode
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - scrapy.utils.python.is_listlike
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlsplit
    functionSourceFile: urllib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlsplit._replace
    functionSourceFile: urllib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlunsplit
    functionSourceFile: urllib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 11
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4cbc21c0>
    - <ast.Constant object at 0x7f9a4cbc2190>
    - <ast.Constant object at 0x7f9a4cbc2160>
    - <ast.Constant object at 0x7f9a4cbc2130>
    - <ast.Constant object at 0x7f9a4cbc2100>
    - <ast.Constant object at 0x7f9a4cbc20d0>
    - <ast.Constant object at 0x7f9a4cbc20a0>
    - <ast.Constant object at 0x7f9a4cbc2070>
    argNames:
    - cls
    - response
    - formname
    - formid
    - formnumber
    - formdata
    - clickdata
    - dont_click
    - formxpath
    - formcss
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 63
    functionName: scrapy.http.request.form.FormRequest.from_response
    functionSourceFile: scrapy.http.request.form
    functionUses: 0
    functionsReached:
    - urllib.parse.urlsplit
    - urllib.parse.urlparse.scheme.encode
    - urllib.parse.urlsplit._replace
    - typing.cast
    - parsel.selector.create_root_node.xpath
    - w3lib.html.strip_html5_whitespace
    - el.get
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - kwargs.get
    - clickdata.get
    - <builtin>.hasattr
    - values.extend
    - <builtin>.list
    - parsel.csstranslator.HTMLTranslator.css_to_xpath
    - frag.startswith
    - w3lib.html.get_base_url
    - typing.cast.get
    - scrapy.utils.python.to_bytes
    - urllib.parse.urlunsplit
    - method.upper
    - el.getparent
    - scrapy.http.request.form._select_value
    - scrapy.http.request.form._get_form
    - kwargs.setdefault
    - <builtin>.isinstance
    - scrapy.http.request.form.FormRequest.__init__
    - w3lib.url.safe_url_string
    - scrapy.utils.url.escape_ajax
    - clickdata.items
    - urllib.parse.urlparse.netloc.encode
    - scrapy.http.request.form._get_inputs
    - scrapy.http.request.form._get_form_url
    - parsel.csstranslator.HTMLTranslator
    - urllib.parse.urljoin
    - scrapy.utils.python.is_listlike
    - parsel.selector.create_root_node
    - values.append
    - <builtin>.super
    - scrapy.http.request.form._value
    - scrapy.http.request.form._urlencode
    - <builtin>.dict
    - urllib.parse.urlencode
    - scrapy.http.request.form._get_clickable
    - typing.cast.xpath
    - scrapy.utils.response.get_base_url
    - twisted.internet.protocol.ClientFactory._url.encode
    - <builtin>.len
    - kwargs.pop
    - formdata.items
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parsel.csstranslator.HTMLTranslator
    functionSourceFile: parsel
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parsel.csstranslator.HTMLTranslator.css_to_xpath
    functionSourceFile: parsel
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 14
    ICount: 1
    IfCount: 9
    argCount: 5
    argDefaultValues: []
    argNames:
    - response
    - formname
    - formid
    - formnumber
    - formxpath
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 115
    functionName: scrapy.http.request.form._get_form
    functionSourceFile: scrapy.http.request.form
    functionUses: 1
    functionsReached:
    - parsel.selector.create_root_node.xpath
    - typing.cast
    - w3lib.html.get_base_url
    - scrapy.utils.response.get_base_url
    - el.getparent
    - parsel.selector.create_root_node
    linkageType: pythonLinkage
    raised:
    - IndexError
    - ValueError
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 3
    IfCount: 4
    argCount: 4
    argDefaultValues: []
    argNames:
    - form
    - formdata
    - dont_click
    - clickdata
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 160
    functionName: scrapy.http.request.form._get_inputs
    functionSourceFile: scrapy.http.request.form
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - clickdata.get
    - scrapy.http.request.form._value
    - <builtin>.dict
    - scrapy.http.request.form._get_clickable
    - values.extend
    - <builtin>.list
    - typing.cast.xpath
    - typing.cast
    - clickdata.items
    - el.get
    - <builtin>.len
    - formdata.items
    - values.append
    - scrapy.http.request.form._select_value
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - form
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 96
    functionName: scrapy.http.request.form._get_form_url
    functionSourceFile: scrapy.http.request.form
    functionUses: 1
    functionsReached:
    - typing.cast.get
    - urllib.parse.urljoin
    - w3lib.html.strip_html5_whitespace
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.get
    functionSourceFile: typing
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urljoin
    functionSourceFile: urllib
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlencode
    functionSourceFile: urllib
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parsel.selector.create_root_node
    functionSourceFile: parsel
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parsel.selector.create_root_node.xpath
    functionSourceFile: parsel
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: el.getparent
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.xpath
    functionSourceFile: typing
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - ele
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 201
    functionName: scrapy.http.request.form._value
    functionSourceFile: scrapy.http.request.form
    functionUses: 2
    functionsReached:
    - typing.cast
    - scrapy.http.request.form._select_value
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 1
    IfCount: 5
    argCount: 2
    argDefaultValues: []
    argNames:
    - clickdata
    - form
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 223
    functionName: scrapy.http.request.form._get_clickable
    functionSourceFile: scrapy.http.request.form
    functionUses: 2
    functionsReached:
    - clickdata.get
    - <builtin>.list
    - typing.cast.xpath
    - clickdata.items
    - el.get
    - <builtin>.len
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: values.append
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: values.extend
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - ele
    - n
    - v
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 211
    functionName: scrapy.http.request.form._select_value
    functionSourceFile: ''
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: el.get
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: clickdata.get
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: clickdata.items
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.http.request.rpc
    functionSourceFile: scrapy.http.request.rpc
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - sig.parameters.items
    - args.append
    - sig.parameters.keys
    - scrapy.utils.python.get_func_args
    - inspect.signature
    - <builtin>.callable
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - args
    - encoding
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 17
    functionName: scrapy.http.request.rpc.XmlRpcRequest.__init__
    functionSourceFile: scrapy.http.request.rpc
    functionUses: 0
    functionsReached:
    - kwargs.setdefault
    - <builtin>.dict
    - xmlrpc.client.dumps
    - kwargs.pop
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: xmlrpc.client.dumps
    functionSourceFile: xmlrpc
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.http.response.xml
    functionSourceFile: scrapy.http.response.xml
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.http.response.json
    functionSourceFile: scrapy.http.response.json
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.spiders
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4bda1ac0>
    argNames:
    - self
    - name
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 34
    functionName: scrapy.spiders.Spider.__init__
    functionSourceFile: scrapy.spiders
    functionUses: 1
    functionsReached:
    - <builtin>.hasattr
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 44
    functionName: scrapy.spiders.Spider.logger
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached:
    - logging.getLogger
    - logging.LoggerAdapter
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.LoggerAdapter
    functionSourceFile: logging
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Attribute object at 0x7f9a4c11b3a0>
    argNames:
    - self
    - message
    - level
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 48
    functionName: scrapy.spiders.Spider.log
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 58
    functionName: scrapy.spiders.Spider.from_crawler
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached:
    - scrapy.spiders.Spider.__init__
    - <builtin>.hasattr
    - <builtin>.getattr
    - spider._set_crawler
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: spider._set_crawler
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 63
    functionName: scrapy.spiders.Spider._set_crawler
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached:
    - crawler.signals.connect
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler.signals.connect
    functionSourceFile: <builtin>
    functionUses: 22
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 68
    functionName: scrapy.spiders.Spider.start_requests
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.hasattr
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - AttributeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 78
    functionName: scrapy.spiders.Spider._parse
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached:
    - scrapy.spiders.Spider.parse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 81
    functionName: scrapy.spiders.Spider.parse
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - NotImplementedError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 87
    functionName: scrapy.spiders.Spider.update_settings
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached:
    - settings.setdict
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings.setdict
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 91
    functionName: scrapy.spiders.Spider.handles_request
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.list
    - <builtin>.any
    - scrapy.utils.url.url_is_from_any_domain
    - typing.cast
    - host.endswith
    - d.lower
    - typing.cast.netloc.lower
    - scrapy.utils.url.parse_url
    - scrapy.utils.python.to_unicode
    - scrapy.utils.url.url_is_from_spider
    - typing.cast.decode
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - spider
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 95
    functionName: scrapy.spiders.Spider.close
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached:
    - <builtin>.callable
    - typing.cast
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 101
    functionName: scrapy.spiders.Spider.__repr__
    functionSourceFile: scrapy.spiders
    functionUses: 0
    functionsReached:
    - <builtin>.id
    - <builtin>.type
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.id
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.spiders.feed
    functionSourceFile: scrapy.spiders.feed
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - results
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 28
    functionName: scrapy.spiders.feed.XMLFeedSpider.process_results
    functionSourceFile: scrapy.spiders.feed
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 38
    functionName: scrapy.spiders.feed.XMLFeedSpider.adapt_response
    functionSourceFile: scrapy.spiders.feed
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - selector
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 45
    functionName: scrapy.spiders.feed.XMLFeedSpider.parse_node
    functionSourceFile: scrapy.spiders.feed
    functionUses: 2
    functionsReached:
    - <builtin>.hasattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - nodes
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 51
    functionName: scrapy.spiders.feed.XMLFeedSpider.parse_nodes
    functionSourceFile: scrapy.spiders.feed
    functionUses: 1
    functionsReached:
    - scrapy.spiders.feed.XMLFeedSpider.process_results
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.spiders.feed.XMLFeedSpider.parse_node
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - asyncio.isfuture
    - scrapy.utils.misc.arg_to_iter
    - <builtin>.callable
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 51
    functionName: scrapy.utils.spider.iterate_spider_output
    functionSourceFile: scrapy.utils.spider
    functionUses: 13
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - asyncio.isfuture
    - scrapy.utils.misc.arg_to_iter
    - <builtin>.callable
    - inspect.isasyncgen
    - inspect.iscoroutine
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 2
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 63
    functionName: scrapy.spiders.feed.XMLFeedSpider._parse
    functionSourceFile: scrapy.spiders.feed
    functionUses: 0
    functionsReached:
    - scrapy.utils.iterators.xmliter
    - re.compile
    - scrapy.spiders.feed.XMLFeedSpider.process_results
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.utils.python.re_rsearch._chunk_iter
    - document_header_match.group
    - inspect.isawaitable
    - urllib.parse.urlunparse.encode
    - scrapy.selector.unified._st
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.spiders.feed.XMLFeedSpider.parse_node
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - match.group
    - scrapy.utils.iterators._body_or_str
    - asyncio.isfuture
    - scrapy.spiders.feed.XMLFeedSpider._iternodes
    - scrapy.utils.misc.arg_to_iter
    - obj.encode
    - scrapy.utils.python.to_bytes
    - scrapy.selector.unified._response_from_text
    - <builtin>.callable
    - obj.decode
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - scrapy.selector.unified.Selector.__init__
    - kwargs.setdefault
    - <builtin>.isinstance
    - parsel.Selector.xpath
    - asyncio.get_event_loop
    - pattern.finditer
    - re.findall
    - r.finditer
    - obj.body.decode
    - scrapy.spiders.feed.XMLFeedSpider.parse_nodes
    - scrapy.spiders.feed.XMLFeedSpider.adapt_response
    - urllib.parse.urlparse.netloc.encode
    - re.escape
    - scrapy.spiders.feed.XMLFeedSpider._register_namespaces
    - twisted.internet.defer.Deferred.fromFuture
    - tag.group
    - urllib.parse.urlparse.hostname.encode
    - <builtin>.super
    - re.search
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - scrapy.utils.reactor.set_asyncio_event_loop
    - warnings.filterwarnings
    - parsel.Selector.register_namespace
    - typing.cast.rindex
    - <builtin>.reversed
    - asyncio.new_event_loop
    - scrapy.utils.misc.load_object
    - scrapy.utils.reactor._get_asyncio_event_loop
    - scrapy.utils.python.re_rsearch
    - asyncio.set_event_loop
    - <builtin>.len
    - twisted.internet.protocol.ClientFactory._url.encode
    - namespaces.values
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - NotSupported
    - NotConfigured
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 85
    functionName: scrapy.spiders.feed.XMLFeedSpider._iternodes
    functionSourceFile: scrapy.spiders.feed
    functionUses: 1
    functionsReached:
    - scrapy.utils.iterators.xmliter
    - re.compile
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.re_rsearch._chunk_iter
    - document_header_match.group
    - urllib.parse.urlunparse.encode
    - scrapy.selector.unified._st
    - match.group
    - scrapy.utils.iterators._body_or_str
    - obj.encode
    - scrapy.utils.python.to_bytes
    - obj.decode
    - scrapy.selector.unified.Selector.__init__
    - kwargs.setdefault
    - <builtin>.isinstance
    - pattern.finditer
    - re.findall
    - r.finditer
    - obj.body.decode
    - urllib.parse.urlparse.netloc.encode
    - re.escape
    - scrapy.spiders.feed.XMLFeedSpider._register_namespaces
    - urllib.parse.urlparse.hostname.encode
    - tag.group
    - <builtin>.super
    - re.search
    - parsel.Selector.register_namespace
    - <builtin>.reversed
    - scrapy.utils.python.re_rsearch
    - <builtin>.len
    - twisted.internet.protocol.ClientFactory._url.encode
    - namespaces.values
    - scrapy.selector.unified._response_from_text
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - selector
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 90
    functionName: scrapy.spiders.feed.XMLFeedSpider._register_namespaces
    functionSourceFile: scrapy.spiders.feed
    functionUses: 2
    functionsReached:
    - parsel.Selector.register_namespace
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parsel.Selector.xpath
    functionSourceFile: parsel
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - obj
    - nodename
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 30
    functionName: scrapy.utils.iterators.xmliter
    functionSourceFile: scrapy.utils.iterators
    functionUses: 2
    functionsReached:
    - re.compile
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.re_rsearch._chunk_iter
    - document_header_match.group
    - urllib.parse.urlunparse.encode
    - scrapy.selector.unified._st
    - match.group
    - scrapy.utils.iterators._body_or_str
    - obj.encode
    - scrapy.utils.python.to_bytes
    - obj.decode
    - scrapy.selector.unified.Selector.__init__
    - kwargs.setdefault
    - <builtin>.isinstance
    - pattern.finditer
    - re.findall
    - r.finditer
    - obj.body.decode
    - urllib.parse.urlparse.netloc.encode
    - re.escape
    - urllib.parse.urlparse.hostname.encode
    - tag.group
    - <builtin>.super
    - re.search
    - <builtin>.reversed
    - scrapy.utils.python.re_rsearch
    - <builtin>.len
    - twisted.internet.protocol.ClientFactory._url.encode
    - namespaces.values
    - scrapy.selector.unified._response_from_text
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parsel.Selector.register_namespace
    functionSourceFile: parsel
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - results
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 112
    functionName: scrapy.spiders.feed.CSVFeedSpider.process_results
    functionSourceFile: scrapy.spiders.feed
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 116
    functionName: scrapy.spiders.feed.CSVFeedSpider.adapt_response
    functionSourceFile: scrapy.spiders.feed
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - row
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 120
    functionName: scrapy.spiders.feed.CSVFeedSpider.parse_row
    functionSourceFile: scrapy.spiders.feed
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 124
    functionName: scrapy.spiders.feed.CSVFeedSpider.parse_rows
    functionSourceFile: scrapy.spiders.feed
    functionUses: 1
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.utils.iterators._body_or_str
    - asyncio.isfuture
    - scrapy.utils.misc.arg_to_iter
    - scrapy.spiders.feed.CSVFeedSpider.process_results
    - obj.encode
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - <builtin>.callable
    - obj.decode
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - inspect.iscoroutine
    - <builtin>.next
    - asyncio.get_event_loop
    - scrapy.spiders.feed.CSVFeedSpider.parse_row
    - <builtin>.zip
    - obj.body.decode
    - logger.warning
    - scrapy.utils.iterators.csviter.row_to_unicode
    - csv.reader
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.iterators.csviter
    - scrapy.utils.defer.deferred_from_coro
    - <builtin>.dict
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - io.StringIO
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - <builtin>.len
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 3
    IfCount: 4
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c353eb0>
    - <ast.Constant object at 0x7f9a4c353e80>
    - <ast.Constant object at 0x7f9a4c353e50>
    - <ast.Constant object at 0x7f9a4c353e20>
    argNames:
    - obj
    - delimiter
    - headers
    - encoding
    - quotechar
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 135
    functionName: scrapy.utils.iterators.csviter
    functionSourceFile: scrapy.utils.iterators
    functionUses: 2
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - <builtin>.dict
    - scrapy.utils.iterators._body_or_str
    - <builtin>.next
    - io.StringIO
    - <builtin>.zip
    - obj.body.decode
    - obj.encode
    - logger.warning
    - <builtin>.len
    - scrapy.utils.iterators.csviter.row_to_unicode
    - scrapy.utils.python.to_unicode
    - csv.reader
    - obj.decode
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 137
    functionName: scrapy.spiders.feed.CSVFeedSpider._parse
    functionSourceFile: scrapy.spiders.feed
    functionUses: 0
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - importlib.import_module
    - twisted.internet.defer.ensureDeferred
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.utils.iterators._body_or_str
    - asyncio.isfuture
    - scrapy.utils.misc.arg_to_iter
    - scrapy.spiders.feed.CSVFeedSpider.process_results
    - obj.encode
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - <builtin>.callable
    - obj.decode
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - urllib.parse.urlparse.decode
    - <builtin>.next
    - scrapy.spiders.feed.CSVFeedSpider.adapt_response
    - asyncio.get_event_loop
    - scrapy.spiders.feed.CSVFeedSpider.parse_row
    - <builtin>.zip
    - obj.body.decode
    - logger.warning
    - scrapy.utils.iterators.csviter.row_to_unicode
    - csv.reader
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.iterators.csviter
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - <builtin>.dict
    - warnings.filterwarnings
    - typing.cast.rindex
    - io.StringIO
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.spiders.feed.CSVFeedSpider.parse_rows
    - <builtin>.len
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - NotConfigured
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.spider
    functionSourceFile: scrapy.utils.spider
    functionUses: 0
    functionsReached:
    - typing.overload
    - typing.TypeVar
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.isasyncgen
    functionSourceFile: inspect
    functionUses: 15
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.iscoroutine
    functionSourceFile: inspect
    functionUses: 23
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.ensureDeferred.addCallback
    functionSourceFile: twisted
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - module
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 61
    functionName: scrapy.utils.spider.iter_spider_classes
    functionSourceFile: scrapy.utils.spider
    functionUses: 5
    functionsReached:
    - inspect.isclass
    - <builtin>.vars
    - <builtin>.getattr
    - <builtin>.issubclass
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.vars
    functionSourceFile: <builtin>
    functionUses: 13
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 3
    IfCount: 3
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d3d36d0>
    - <ast.Constant object at 0x7f9a4d3d3b20>
    - <ast.Constant object at 0x7f9a4d3d3cd0>
    argNames:
    - spider_loader
    - request
    - default_spidercls
    - log_none
    - log_multiple
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 112
    functionName: scrapy.utils.spider.spidercls_for_request
    functionSourceFile: scrapy.utils.spider
    functionUses: 4
    functionsReached:
    - logger.error
    - <builtin>.len
    - spider_loader.load
    - spider_loader.find_by_request
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: spider_loader.find_by_request
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: spider_loader.load
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logger.error
    functionSourceFile: <builtin>
    functionUses: 50
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.spiderloader
    functionSourceFile: scrapy.spiderloader
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 29
    functionName: scrapy.spiderloader.SpiderLoader.__init__
    functionSourceFile: scrapy.spiderloader
    functionUses: 1
    functionsReached:
    - scrapy.utils.misc.walk_modules
    - <builtin>.vars
    - scrapy.utils.spider.iter_spider_classes
    - traceback.format_exc
    - importlib.import_module
    - <builtin>.hasattr
    - collections.defaultdict
    - <builtin>.issubclass
    - scrapy.spiderloader.SpiderLoader._load_spiders
    - pkgutil.iter_modules
    - settings.getbool
    - warnings.warn
    - settings.getlist
    - mods.append
    - inspect.isclass
    - dupes.extend
    - <builtin>.len
    - scrapy.spiderloader.SpiderLoader._check_name_duplicates
    - scrapy.spiderloader.SpiderLoader._load_all_spiders
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings.getlist
    functionSourceFile: <builtin>
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 60
    functionName: scrapy.spiderloader.SpiderLoader._load_all_spiders
    functionSourceFile: scrapy.spiderloader
    functionUses: 2
    functionsReached:
    - scrapy.utils.misc.walk_modules
    - <builtin>.hasattr
    - <builtin>.vars
    - pkgutil.iter_modules
    - dupes.extend
    - warnings.warn
    - scrapy.utils.spider.iter_spider_classes
    - traceback.format_exc
    - <builtin>.len
    - scrapy.spiderloader.SpiderLoader._check_name_duplicates
    - <builtin>.issubclass
    - mods.append
    - scrapy.spiderloader.SpiderLoader._load_spiders
    - inspect.isclass
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 36
    functionName: scrapy.spiderloader.SpiderLoader._check_name_duplicates
    functionSourceFile: scrapy.spiderloader
    functionUses: 3
    functionsReached:
    - dupes.extend
    - <builtin>.len
    - warnings.warn
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dupes.extend
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - module
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 55
    functionName: scrapy.spiderloader.SpiderLoader._load_spiders
    functionSourceFile: scrapy.spiderloader
    functionUses: 3
    functionsReached:
    - <builtin>.vars
    - scrapy.utils.spider.iter_spider_classes
    - <builtin>.issubclass
    - inspect.isclass
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: traceback.format_exc
    functionSourceFile: traceback
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 78
    functionName: scrapy.spiderloader.SpiderLoader.from_settings
    functionSourceFile: scrapy.spiderloader
    functionUses: 0
    functionsReached:
    - scrapy.utils.misc.walk_modules
    - <builtin>.vars
    - scrapy.utils.spider.iter_spider_classes
    - traceback.format_exc
    - importlib.import_module
    - <builtin>.hasattr
    - collections.defaultdict
    - <builtin>.issubclass
    - scrapy.spiderloader.SpiderLoader._load_spiders
    - pkgutil.iter_modules
    - settings.getbool
    - warnings.warn
    - scrapy.spiderloader.SpiderLoader.__init__
    - settings.getlist
    - mods.append
    - inspect.isclass
    - dupes.extend
    - <builtin>.len
    - scrapy.spiderloader.SpiderLoader._check_name_duplicates
    - scrapy.spiderloader.SpiderLoader._load_all_spiders
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider_name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 81
    functionName: scrapy.spiderloader.SpiderLoader.load
    functionSourceFile: scrapy.spiderloader
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - KeyError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 91
    functionName: scrapy.spiderloader.SpiderLoader.find_by_request
    functionSourceFile: scrapy.spiderloader
    functionUses: 0
    functionsReached:
    - cls.handles_request
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cls.handles_request
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 99
    functionName: scrapy.spiderloader.SpiderLoader.list
    functionSourceFile: scrapy.spiderloader
    functionUses: 0
    functionsReached:
    - scrapy.spiderloader.SpiderLoader.list
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.iterators
    functionSourceFile: scrapy.utils.iterators
    functionUses: 0
    functionsReached:
    - typing.overload
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: re.escape
    functionSourceFile: re
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 0
    IfCount: 5
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c34a6a0>
    argNames:
    - obj
    - unicode
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 209
    functionName: scrapy.utils.iterators._body_or_str
    functionSourceFile: scrapy.utils.iterators
    functionUses: 6
    functionsReached:
    - obj.body.decode
    - <builtin>.isinstance
    - obj.decode
    - obj.encode
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: re.search
    functionSourceFile: re
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: document_header_match.group
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: re.findall
    functionSourceFile: re
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.reversed
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: tag.group
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: r.finditer
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: namespaces.values
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11bfd0>
    - <ast.Constant object at 0x7f9a4d3d9190>
    argNames:
    - obj
    - nodename
    - namespace
    - prefix
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 78
    functionName: scrapy.utils.iterators.xmliter_lxml
    functionSourceFile: scrapy.utils.iterators
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - lxml.etree.iterparse
    - lxml.etree.tostring
    - urllib.parse.urlunparse.encode
    - scrapy.selector.unified._st
    - scrapy.utils.python.to_bytes
    - scrapy.selector.unified._response_from_text
    - scrapy.utils.iterators._StreamReader.__init__
    - scrapy.selector.unified.Selector.__init__
    - kwargs.setdefault
    - <builtin>.isinstance
    - node.clear
    - parsel.Selector.xpath
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.super
    - parsel.Selector.register_namespace
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - obj
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 102
    functionName: scrapy.utils.iterators._StreamReader.__init__
    functionSourceFile: scrapy.utils.iterators
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: lxml.etree.iterparse
    functionSourceFile: lxml
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: lxml.etree.tostring
    functionSourceFile: lxml
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: node.clear
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c359850>
    argNames:
    - self
    - n
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 114
    functionName: scrapy.utils.iterators._StreamReader.read
    functionSourceFile: scrapy.utils.iterators
    functionUses: 0
    functionsReached:
    - result.lstrip
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: result.lstrip
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c359070>
    argNames:
    - self
    - n
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 124
    functionName: scrapy.utils.iterators._StreamReader._read_string
    functionSourceFile: scrapy.utils.iterators
    functionUses: 0
    functionsReached:
    - typing.cast
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c356a00>
    argNames:
    - self
    - n
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 129
    functionName: scrapy.utils.iterators._StreamReader._read_unicode
    functionSourceFile: scrapy.utils.iterators
    functionUses: 0
    functionsReached:
    - typing.cast
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - row_
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 159
    functionName: scrapy.utils.iterators.csviter.row_to_unicode
    functionSourceFile: scrapy.utils.iterators
    functionUses: 3
    functionsReached:
    - typing.cast.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse.decode
    - scrapy.utils.python.to_unicode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: io.StringIO
    functionSourceFile: io
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: csv.reader
    functionSourceFile: csv
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: obj.body.decode
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: obj.encode
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: obj.decode
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: -1
    functionName: scrapy.spiders.crawl
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 0
    functionsReached:
    - functools.partial
    - <builtin>.isinstance
    - <builtin>.hasattr
    - <builtin>.map
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor.__init__
    - <builtin>.set
    - scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor.__init__
    - re.compile
    - scrapy.utils.misc.arg_to_iter
    - typing.cast
    - <builtin>.tuple
    - operator.attrgetter
    - <builtin>.callable
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - x
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 18
    functionName: scrapy.spiders.crawl._identity
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - request
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 22
    functionName: scrapy.spiders.crawl._identity_process_request
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - method
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 26
    functionName: scrapy.spiders.crawl._get_method
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 1
    functionsReached:
    - <builtin>.callable
    - <builtin>.isinstance
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 15
    argDefaultValues:
    - <ast.Tuple object at 0x7f9a4c342790>
    - <ast.Tuple object at 0x7f9a4c3427c0>
    - <ast.Tuple object at 0x7f9a4c3427f0>
    - <ast.Tuple object at 0x7f9a4c342550>
    - <ast.Tuple object at 0x7f9a4c342520>
    - <ast.Tuple object at 0x7f9a4c342850>
    - <ast.Tuple object at 0x7f9a4c3428b0>
    - <ast.Constant object at 0x7f9a4c342940>
    - <ast.Constant object at 0x7f9a4c342d60>
    - <ast.Constant object at 0x7f9a4c342970>
    - <ast.Constant object at 0x7f9a4c342ac0>
    - <ast.Tuple object at 0x7f9a4c3429d0>
    - <ast.Constant object at 0x7f9a4c342a90>
    - <ast.Constant object at 0x7f9a4c342a60>
    argNames:
    - self
    - allow
    - deny
    - allow_domains
    - deny_domains
    - restrict_xpaths
    - tags
    - attrs
    - canonicalize
    - unique
    - process_value
    - deny_extensions
    - restrict_css
    - strip
    - restrict_text
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 132
    functionName: scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor.__init__
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 2
    functionsReached:
    - functools.partial
    - <builtin>.isinstance
    - <builtin>.hasattr
    - <builtin>.map
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor.__init__
    - <builtin>.set
    - re.compile
    - scrapy.utils.misc.arg_to_iter
    - typing.cast
    - <builtin>.tuple
    - operator.attrgetter
    - <builtin>.callable
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 8
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c342670>
    - <ast.Constant object at 0x7f9a4c342640>
    - <ast.Constant object at 0x7f9a4c342610>
    - <ast.Constant object at 0x7f9a4c3425e0>
    - <ast.Constant object at 0x7f9a4c3425b0>
    - <ast.Constant object at 0x7f9a4c342580>
    - <ast.Constant object at 0x7f9a4c342550>
    argNames:
    - self
    - link_extractor
    - callback
    - cb_kwargs
    - follow
    - process_links
    - process_request
    - errback
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 37
    functionName: scrapy.spiders.crawl.Rule.__init__
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 55
    functionName: scrapy.spiders.crawl.Rule._compile
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 0
    functionsReached:
    - <builtin>.callable
    - <builtin>.isinstance
    - <builtin>.getattr
    - scrapy.spiders.crawl._get_method
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 65
    functionName: scrapy.spiders.crawl.CrawlSpider.__init__
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 0
    functionsReached:
    - <builtin>.super
    - scrapy.spiders.crawl.CrawlSpider._compile_rules
    - copy.copy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 136
    functionName: scrapy.spiders.crawl.CrawlSpider._compile_rules
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 1
    functionsReached:
    - copy.copy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 69
    functionName: scrapy.spiders.crawl.CrawlSpider._parse
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 0
    functionsReached:
    - results.append
    - scrapy.spiders.crawl.CrawlSpider._requests_to_follow
    - rule.link_extractor.extract_links
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.http.request.Request._set_url
    - w3lib.url.safe_url_string.startswith
    - urllib.parse.urldefrag
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.spiders.crawl.CrawlSpider.process_results
    - <builtin>.set
    - asyncio.isfuture
    - <builtin>.list
    - scrapy.utils.misc.arg_to_iter
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - seen.add
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.spiders.crawl.CrawlSpider._parse_response
    - asyncio.get_event_loop
    - rule.process_links
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - scrapy.spiders.crawl.CrawlSpider.parse_start_url
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.enumerate
    - twisted.internet.defer.Deferred.fromFuture
    - urllib.parse.urlparse.hostname.encode
    - scrapy.spiders.crawl.CrawlSpider._build_request
    - <builtin>.super
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - <builtin>.dict
    - typing.cast.rindex
    - asyncio.new_event_loop
    - rule.process_request
    - <builtin>.str
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.http.request.Request.__init__
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 2
    IfCount: 4
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c294c10>
    argNames:
    - self
    - response
    - callback
    - cb_kwargs
    - follow
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 116
    functionName: scrapy.spiders.crawl.CrawlSpider._parse_response
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 2
    functionsReached:
    - results.append
    - scrapy.spiders.crawl.CrawlSpider._requests_to_follow
    - rule.link_extractor.extract_links
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.http.request.Request._set_url
    - w3lib.url.safe_url_string.startswith
    - urllib.parse.urldefrag
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.spiders.crawl.CrawlSpider.process_results
    - <builtin>.set
    - asyncio.isfuture
    - <builtin>.list
    - scrapy.utils.misc.arg_to_iter
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - seen.add
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - asyncio.get_event_loop
    - rule.process_links
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - scrapy.spiders.crawl.CrawlSpider.parse_start_url
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.enumerate
    - twisted.internet.defer.Deferred.fromFuture
    - urllib.parse.urlparse.hostname.encode
    - scrapy.spiders.crawl.CrawlSpider._build_request
    - <builtin>.super
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - <builtin>.dict
    - typing.cast.rindex
    - asyncio.new_event_loop
    - rule.process_request
    - <builtin>.str
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.http.request.Request.__init__
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 77
    functionName: scrapy.spiders.crawl.CrawlSpider.parse_start_url
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - results
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 80
    functionName: scrapy.spiders.crawl.CrawlSpider.process_results
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - rule_index
    - link
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 83
    functionName: scrapy.spiders.crawl.CrawlSpider._build_request
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 4
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 91
    functionName: scrapy.spiders.crawl.CrawlSpider._requests_to_follow
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 3
    functionsReached:
    - rule.link_extractor.extract_links
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.set
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - seen.add
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - rule.process_links
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.enumerate
    - scrapy.spiders.crawl.CrawlSpider._build_request
    - <builtin>.super
    - <builtin>.dict
    - rule.process_request
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.enumerate
    functionSourceFile: <builtin>
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: rule.link_extractor.extract_links
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: rule.process_links
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: rule.process_request
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - cb_kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 106
    functionName: scrapy.spiders.crawl.CrawlSpider._callback
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 0
    functionsReached:
    - results.append
    - scrapy.spiders.crawl.CrawlSpider._requests_to_follow
    - rule.link_extractor.extract_links
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.http.request.Request._set_url
    - w3lib.url.safe_url_string.startswith
    - urllib.parse.urldefrag
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.spiders.crawl.CrawlSpider.process_results
    - <builtin>.set
    - asyncio.isfuture
    - <builtin>.list
    - scrapy.utils.misc.arg_to_iter
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - seen.add
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.spiders.crawl.CrawlSpider._parse_response
    - asyncio.get_event_loop
    - rule.process_links
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - scrapy.spiders.crawl.CrawlSpider.parse_start_url
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.enumerate
    - twisted.internet.defer.Deferred.fromFuture
    - urllib.parse.urlparse.hostname.encode
    - scrapy.spiders.crawl.CrawlSpider._build_request
    - <builtin>.super
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - <builtin>.dict
    - typing.cast.rindex
    - asyncio.new_event_loop
    - rule.process_request
    - <builtin>.str
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.http.request.Request.__init__
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - failure
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 112
    functionName: scrapy.spiders.crawl.CrawlSpider._errback
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 0
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - asyncio.isfuture
    - scrapy.utils.misc.arg_to_iter
    - <builtin>.callable
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - scrapy.spiders.crawl.CrawlSpider._handle_failure
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - failure
    - errback
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 131
    functionName: scrapy.spiders.crawl.CrawlSpider._handle_failure
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 1
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - asyncio.isfuture
    - scrapy.utils.misc.arg_to_iter
    - <builtin>.callable
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: copy.copy
    functionSourceFile: copy
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 143
    functionName: scrapy.spiders.crawl.CrawlSpider.from_crawler
    functionSourceFile: scrapy.spiders.crawl
    functionUses: 0
    functionsReached:
    - crawler.settings.getbool
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler.settings.getbool
    functionSourceFile: <builtin>
    functionUses: 21
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.linkextractors
    functionSourceFile: scrapy.linkextractors
    functionUses: 0
    functionsReached:
    - re.compile
    - <builtin>.type
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - url
    - regexs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 115
    functionName: scrapy.linkextractors._matches
    functionSourceFile: scrapy.linkextractors
    functionUses: 4
    functionsReached:
    - <builtin>.any
    - r.search
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: r.search
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - url
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 119
    functionName: scrapy.linkextractors._is_valid_url
    functionSourceFile: scrapy.linkextractors
    functionUses: 4
    functionsReached:
    - url.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: url.split
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.linkextractors.lxmlhtml
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 0
    functionsReached:
    - lxml.etree.XPath
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: lxml.etree.XPath
    functionSourceFile: lxml
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - tag
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 35
    functionName: scrapy.linkextractors.lxmlhtml._nons
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 6
    functionsReached:
    - <builtin>.isinstance
    - tag.split
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: tag.split
    functionSourceFile: <builtin>
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - x
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 42
    functionName: scrapy.linkextractors.lxmlhtml._identity
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - link
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 46
    functionName: scrapy.linkextractors.lxmlhtml._canonicalize_link_url
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 0
    functionsReached:
    - w3lib.url.canonicalize_url
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.canonicalize_url
    functionSourceFile: w3lib
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 7
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c5e4c40>
    - <ast.Constant object at 0x7f9a4c5e4c10>
    - <ast.Constant object at 0x7f9a4c5e4be0>
    - <ast.Constant object at 0x7f9a4c5e4bb0>
    - <ast.Constant object at 0x7f9a4c5e4b80>
    - <ast.Constant object at 0x7f9a4c5e4b50>
    argNames:
    - self
    - tag
    - attr
    - process
    - unique
    - strip
    - canonicalized
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 51
    functionName: scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor.__init__
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 3
    functionsReached:
    - <builtin>.callable
    - functools.partial
    - operator.attrgetter
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: functools.partial
    functionSourceFile: functools
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: operator.attrgetter
    functionSourceFile: operator
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - document
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 69
    functionName: scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._iter_links
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 5
    functionsReached:
    - <builtin>.isinstance
    - scrapy.linkextractors.lxmlhtml._nons
    - document.iter
    - <builtin>.len
    - tag.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: document.iter
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - selector
    - response_url
    - response_encoding
    - base_url
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 79
    functionName: scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._extract_links
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 4
    functionsReached:
    - result.append
    - w3lib.html.strip_html5_whitespace
    - el.get
    - document.iter
    - logger.debug
    - scrapy.linkextractors.lxmlhtml._nons
    - <builtin>.set
    - seen.add
    - scrapy.utils.misc.rel_has_nofollow
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._iter_links
    - urllib.parse.urljoin
    - tag.split
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._deduplicate_if_needed
    - scrapy.link.Link.__init__
    - scrapy.utils.python.<lambda1>
    - rel.replace
    - links.append
    - <builtin>.len
    - scrapy.utils.python.unique
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logger.debug
    functionSourceFile: <builtin>
    functionUses: 35
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: links.append
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - links
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 123
    functionName: scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._deduplicate_if_needed
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 7
    functionsReached:
    - result.append
    - <builtin>.set
    - seen.add
    - scrapy.utils.python.unique
    - scrapy.utils.python.<lambda1>
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 110
    functionName: scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor.extract_links
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 0
    functionsReached:
    - result.append
    - w3lib.html.strip_html5_whitespace
    - el.get
    - document.iter
    - logger.debug
    - scrapy.linkextractors.lxmlhtml._nons
    - <builtin>.set
    - w3lib.html.get_base_url
    - seen.add
    - scrapy.utils.misc.rel_has_nofollow
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._extract_links
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._iter_links
    - urllib.parse.urljoin
    - tag.split
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._deduplicate_if_needed
    - scrapy.link.Link.__init__
    - scrapy.utils.python.<lambda1>
    - rel.replace
    - scrapy.utils.response.get_base_url
    - links.append
    - <builtin>.len
    - scrapy.utils.python.unique
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - links
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 116
    functionName: scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._process_links
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 3
    functionsReached:
    - result.append
    - <builtin>.set
    - seen.add
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._deduplicate_if_needed
    - scrapy.utils.python.unique
    - scrapy.utils.python.<lambda1>
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 0
    functionsReached:
    - parsel.csstranslator.HTMLTranslator
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.map
    functionSourceFile: <builtin>
    functionUses: 13
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 11
    ICount: 0
    IfCount: 7
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - link
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 182
    functionName: scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._link_allowed
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 3
    functionsReached:
    - scrapy.linkextractors._is_valid_url
    - <builtin>.any
    - typing.cast
    - host.endswith
    - scrapy.utils.url.parse_url
    - scrapy.linkextractors._matches
    - d.lower
    - scrapy.utils.python.to_unicode
    - typing.cast.netloc.lower
    - typing.cast.decode
    - urllib.parse.urlparse.path.lower
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.utils.url.url_has_any_extension
    - scrapy.utils.url.url_is_from_any_domain
    - url.split
    - lowercase_path.endswith
    - typing.cast.path.lower
    - urllib.parse.urlparse.netloc.lower
    - urllib.parse.urlparse
    - r.search
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 204
    functionName: scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor.matches
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse
    - <builtin>.any
    - scrapy.utils.url.url_is_from_any_domain
    - regex.search
    - typing.cast
    - host.endswith
    - d.lower
    - scrapy.utils.url.parse_url
    - typing.cast.netloc.lower
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.netloc.lower
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: regex.search
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - links
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 218
    functionName: scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._process_links
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 2
    functionsReached:
    - scrapy.linkextractors._is_valid_url
    - result.append
    - <builtin>.any
    - typing.cast
    - host.endswith
    - r.search
    - scrapy.utils.url.parse_url
    - scrapy.linkextractors._matches
    - <builtin>.set
    - d.lower
    - scrapy.utils.python.to_unicode
    - typing.cast.netloc.lower
    - typing.cast.decode
    - seen.add
    - urllib.parse.urlparse.path.lower
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._link_allowed
    - scrapy.utils.url.url_has_any_extension
    - scrapy.utils.url.url_is_from_any_domain
    - url.split
    - w3lib.url.canonicalize_url
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._process_links
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._deduplicate_if_needed
    - lowercase_path.endswith
    - typing.cast.path.lower
    - urllib.parse.urlparse.netloc.lower
    - scrapy.utils.python.<lambda1>
    - urllib.parse.urlparse
    - scrapy.utils.python.unique
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 226
    functionName: scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._extract_links
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 2
    functionsReached:
    - result.append
    - w3lib.html.strip_html5_whitespace
    - el.get
    - document.iter
    - logger.debug
    - scrapy.linkextractors.lxmlhtml._nons
    - <builtin>.set
    - seen.add
    - scrapy.utils.misc.rel_has_nofollow
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._extract_links
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._iter_links
    - urllib.parse.urljoin
    - tag.split
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._deduplicate_if_needed
    - scrapy.link.Link.__init__
    - scrapy.utils.python.<lambda1>
    - rel.replace
    - links.append
    - <builtin>.len
    - scrapy.utils.python.unique
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 229
    functionName: scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor.extract_links
    functionSourceFile: scrapy.linkextractors.lxmlhtml
    functionUses: 1
    functionsReached:
    - scrapy.linkextractors._is_valid_url
    - result.append
    - <builtin>.any
    - typing.cast
    - host.endswith
    - w3lib.html.strip_html5_whitespace
    - el.get
    - document.iter
    - scrapy.utils.url.parse_url
    - scrapy.linkextractors._matches
    - logger.debug
    - scrapy.linkextractors.lxmlhtml._nons
    - <builtin>.set
    - scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._extract_links
    - w3lib.html.get_base_url
    - d.lower
    - scrapy.utils.python.unique
    - typing.cast.netloc.lower
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - seen.add
    - scrapy.utils.misc.rel_has_nofollow
    - urllib.parse.urlparse.path.lower
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._link_allowed
    - response.xpath
    - scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._process_links
    - w3lib.url.safe_url_string
    - scrapy.utils.url.url_has_any_extension
    - scrapy.utils.url.url_is_from_any_domain
    - all_links.extend
    - url.split
    - w3lib.url.canonicalize_url
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._process_links
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._extract_links
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._iter_links
    - urllib.parse.urljoin
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._deduplicate_if_needed
    - lowercase_path.endswith
    - typing.cast.path.lower
    - tag.split
    - scrapy.link.Link.__init__
    - urllib.parse.urlparse.netloc.lower
    - scrapy.utils.python.<lambda1>
    - rel.replace
    - scrapy.utils.response.get_base_url
    - links.append
    - <builtin>.len
    - urllib.parse.urlparse
    - r.search
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: response.xpath
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: all_links.extend
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.signals
    functionSourceFile: scrapy.signals
    functionUses: 0
    functionsReached:
    - <builtin>.object
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.spiders.sitemap
    functionSourceFile: scrapy.spiders.sitemap
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 18
    functionName: scrapy.spiders.sitemap.SitemapSpider.__init__
    functionSourceFile: scrapy.spiders.sitemap
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.super
    - re.compile
    - scrapy.spiders.sitemap.regex
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - x
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 87
    functionName: scrapy.spiders.sitemap.regex
    functionSourceFile: scrapy.spiders.sitemap
    functionUses: 1
    functionsReached:
    - re.compile
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 27
    functionName: scrapy.spiders.sitemap.SitemapSpider.start_requests
    functionSourceFile: scrapy.spiders.sitemap
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - entries
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 31
    functionName: scrapy.spiders.sitemap.SitemapSpider.sitemap_filter
    functionSourceFile: scrapy.spiders.sitemap
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 4
    IfCount: 6
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 38
    functionName: scrapy.spiders.sitemap.SitemapSpider._parse_sitemap
    functionSourceFile: scrapy.spiders.sitemap
    functionUses: 0
    functionsReached:
    - scrapy.utils.sitemap.sitemap_urls_from_robots
    - line.lstrip
    - lxml.etree.fromstring
    - scrapy.spiders.sitemap.iterloc
    - scrapy.spiders.sitemap.SitemapSpider._get_sitemap_body
    - urllib.parse.urlparse.scheme.encode
    - <builtin>.any
    - gzip.GzipFile.read1
    - robots_text.splitlines
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.list
    - frag.startswith
    - gzip.GzipFile
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - x.search
    - line.split
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - lxml.etree.XMLParser
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - logger.warning
    - scrapy.spiders.sitemap.SitemapSpider.sitemap_filter
    - urllib.parse.urlparse.netloc.encode
    - output_list.append
    - urllib.parse.urljoin
    - <builtin>.super
    - scrapy.utils.gz.gzip_magic_number
    - <builtin>.dict
    - scrapy.utils.gz.gunzip
    - <builtin>.str
    - response.url.endswith
    - scrapy.http.request.Request.__init__
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.utils.sitemap.Sitemap.__init__
    - io.BytesIO
    - r.search
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: response.url.endswith
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b287c10>
    argNames:
    - robots_text
    - base_url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 42
    functionName: scrapy.utils.sitemap.sitemap_urls_from_robots
    functionSourceFile: scrapy.utils.sitemap
    functionUses: 1
    functionsReached:
    - robots_text.splitlines
    - urllib.parse.urljoin
    - line.lstrip
    - line.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 66
    functionName: scrapy.spiders.sitemap.SitemapSpider._get_sitemap_body
    functionSourceFile: scrapy.spiders.sitemap
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - scrapy.utils.gz.gzip_magic_number
    - scrapy.utils.gz.gunzip
    - gzip.GzipFile.read1
    - gzip.GzipFile
    - response.url.endswith
    - io.BytesIO
    - output_list.append
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - xmltext
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 17
    functionName: scrapy.utils.sitemap.Sitemap.__init__
    functionSourceFile: scrapy.utils.sitemap
    functionUses: 1
    functionsReached:
    - lxml.etree.XMLParser
    - lxml.etree.fromstring
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b970>
    argNames:
    - it
    - alt
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 93
    functionName: scrapy.spiders.sitemap.iterloc
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: x.search
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - response
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 31
    functionName: scrapy.utils.gz.gzip_magic_number
    functionSourceFile: ''
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - data
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 9
    functionName: scrapy.utils.gz.gunzip
    functionSourceFile: scrapy.utils.gz
    functionUses: 4
    functionsReached:
    - io.BytesIO
    - output_list.append
    - gzip.GzipFile.read1
    - gzip.GzipFile
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.sitemap
    functionSourceFile: scrapy.utils.sitemap
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: lxml.etree.XMLParser
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: lxml.etree.fromstring
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 2
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 25
    functionName: scrapy.utils.sitemap.Sitemap.__iter__
    functionSourceFile: scrapy.utils.sitemap
    functionUses: 0
    functionsReached:
    - elem.getchildren
    - el.get
    - d.setdefault
    - el.text.strip
    - tag.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: elem.getchildren
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: el.text.strip
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: robots_text.splitlines
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: line.lstrip
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: line.split
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.gz
    functionSourceFile: scrapy.utils.gz
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: io.BytesIO
    functionSourceFile: io
    functionUses: 20
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: gzip.GzipFile
    functionSourceFile: gzip
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: gzip.GzipFile.read1
    functionSourceFile: gzip
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: output_list.append
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.statscollectors
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 20
    functionName: scrapy.statscollectors.StatsCollector.__init__
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached:
    - crawler.settings.getbool
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4dee57c0>
    - <ast.Constant object at 0x7f9a4dee5790>
    argNames:
    - self
    - key
    - default
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 24
    functionName: scrapy.statscollectors.StatsCollector.get_value
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4dee5460>
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 29
    functionName: scrapy.statscollectors.StatsCollector.get_stats
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4dee4c10>
    argNames:
    - self
    - key
    - value
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 32
    functionName: scrapy.statscollectors.StatsCollector.set_value
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4dee48e0>
    argNames:
    - self
    - stats
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 35
    functionName: scrapy.statscollectors.StatsCollector.set_stats
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4dee4520>
    - <ast.Constant object at 0x7f9a4dee44f0>
    - <ast.Constant object at 0x7f9a4dee44c0>
    argNames:
    - self
    - key
    - count
    - start
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 38
    functionName: scrapy.statscollectors.StatsCollector.inc_value
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached:
    - d.setdefault
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ba23610>
    argNames:
    - self
    - key
    - value
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 44
    functionName: scrapy.statscollectors.StatsCollector.max_value
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached:
    - <builtin>.max
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d3d9820>
    argNames:
    - self
    - key
    - value
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 47
    functionName: scrapy.statscollectors.StatsCollector.min_value
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached:
    - <builtin>.min
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b287e20>
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 50
    functionName: scrapy.statscollectors.StatsCollector.clear_stats
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 53
    functionName: scrapy.statscollectors.StatsCollector.open_spider
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - reason
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 56
    functionName: scrapy.statscollectors.StatsCollector.close_spider
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached:
    - scrapy.statscollectors.StatsCollector._persist_stats
    - logger.info
    - pprint.pformat
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - stats
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 64
    functionName: scrapy.statscollectors.StatsCollector._persist_stats
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 69
    functionName: scrapy.statscollectors.MemoryStatsCollector.__init__
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - stats
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 73
    functionName: scrapy.statscollectors.MemoryStatsCollector._persist_stats
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11bd00>
    - <ast.Constant object at 0x7f9a4c11b4f0>
    argNames:
    - self
    - key
    - default
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 78
    functionName: scrapy.statscollectors.DummyStatsCollector.get_value
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b9a0>
    argNames:
    - self
    - key
    - value
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 83
    functionName: scrapy.statscollectors.DummyStatsCollector.set_value
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b040>
    argNames:
    - self
    - stats
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 86
    functionName: scrapy.statscollectors.DummyStatsCollector.set_stats
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c3426d0>
    - <ast.Constant object at 0x7f9a4c342610>
    - <ast.Constant object at 0x7f9a4c342c40>
    argNames:
    - self
    - key
    - count
    - start
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 89
    functionName: scrapy.statscollectors.DummyStatsCollector.inc_value
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c342b80>
    argNames:
    - self
    - key
    - value
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 94
    functionName: scrapy.statscollectors.DummyStatsCollector.max_value
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c342fd0>
    argNames:
    - self
    - key
    - value
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 97
    functionName: scrapy.statscollectors.DummyStatsCollector.min_value
    functionSourceFile: scrapy.statscollectors
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.log
    functionSourceFile: scrapy.utils.log
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - failure
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 22
    functionName: scrapy.utils.log.failure_to_exc_info
    functionSourceFile: scrapy.utils.log
    functionUses: 19
    functionsReached:
    - failure.getTracebackObject
    - <builtin>.isinstance
    - typing.cast
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: failure.getTracebackObject
    functionSourceFile: <builtin>
    functionUses: 21
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ca7e070>
    argNames:
    - self
    - loggers
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 49
    functionName: scrapy.utils.log.TopLevelFormatter.__init__
    functionSourceFile: scrapy.utils.log
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - record
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 52
    functionName: scrapy.utils.log.TopLevelFormatter.filter
    functionSourceFile: scrapy.utils.log
    functionUses: 0
    functionsReached:
    - record.name.startswith
    - record.name.split
    - <builtin>.any
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: record.name.startswith
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: record.name.split
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.captureWarnings
    functionSourceFile: logging
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.python.log.PythonLoggingObserver
    functionSourceFile: twisted
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: observer.start
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.config.dictConfig
    functionSourceFile: logging
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Attribute object at 0x7f9a4ca74f70>
    argNames:
    - self
    - logger
    - log_level
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 200
    functionName: scrapy.utils.log.StreamLogger.__init__
    functionSourceFile: ''
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.root.setLevel
    functionSourceFile: logging
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - settings
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 143
    functionName: scrapy.utils.log._get_handler
    functionSourceFile: scrapy.utils.log
    functionUses: 16
    functionsReached:
    - logging.Formatter
    - handler.setFormatter
    - <builtin>.bool
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - <builtin>.int
    - logging.FileHandler
    - handler.addFilter
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.getbool
    - logging.StreamHandler
    - handler.setLevel
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.FileHandler
    functionSourceFile: logging
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.StreamHandler
    functionSourceFile: logging
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.NullHandler
    functionSourceFile: logging
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.Formatter
    functionSourceFile: logging
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: handler.setFormatter
    functionSourceFile: <builtin>
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: handler.setLevel
    functionSourceFile: <builtin>
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: handler.addFilter
    functionSourceFile: <builtin>
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 16
    functionName: scrapy.utils.versions.scrapy_components_versions
    functionSourceFile: scrapy.utils.versions
    functionUses: 7
    functionsReached:
    - platform.platform
    - OpenSSL.SSL.SSLeay_version
    - twisted.version.short
    - <builtin>.map
    - scrapy.utils.ssl.get_openssl_version
    - sys.version.replace
    - system_openssl_bytes.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - buf
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 205
    functionName: scrapy.utils.log.StreamLogger.write
    functionSourceFile: scrapy.utils.log
    functionUses: 0
    functionsReached:
    - line.rstrip
    - buf.rstrip
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: buf.rstrip
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: line.rstrip
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 209
    functionName: scrapy.utils.log.StreamLogger.flush
    functionSourceFile: scrapy.utils.log
    functionUses: 0
    functionsReached:
    - h.flush
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: h.flush
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - record
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 221
    functionName: scrapy.utils.log.LogCounterHandler.emit
    functionSourceFile: scrapy.utils.log
    functionUses: 0
    functionsReached:
    - logging.Handler.crawler.stats.inc_value
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.Handler.crawler.stats.inc_value
    functionSourceFile: logging
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - logkws
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 227
    functionName: scrapy.utils.log.logformatter_adapter
    functionSourceFile: scrapy.utils.log
    functionUses: 8
    functionsReached:
    - logkws.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logkws.get
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.versions
    functionSourceFile: scrapy.utils.versions
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.version.short
    functionSourceFile: twisted
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sys.version.replace
    functionSourceFile: sys
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 60
    functionName: scrapy.utils.ssl.get_openssl_version
    functionSourceFile: scrapy.utils.ssl
    functionUses: 8
    functionsReached:
    - OpenSSL.SSL.SSLeay_version
    - system_openssl_bytes.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: platform.platform
    functionSourceFile: platform
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.ssl
    functionSourceFile: scrapy.utils.ssl
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - buf
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 11
    functionName: scrapy.utils.ssl.ffi_buf_to_string
    functionSourceFile: scrapy.utils.ssl
    functionUses: 3
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - OpenSSL._util.ffi.string
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.ffi.string
    functionSourceFile: OpenSSL
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - x509name
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 15
    functionName: scrapy.utils.ssl.x509name_to_string
    functionSourceFile: scrapy.utils.ssl
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - OpenSSL._util.lib.X509_NAME_oneline
    - OpenSSL._util.ffi.string
    - <builtin>.len
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - OpenSSL._util.ffi.new
    - scrapy.utils.ssl.ffi_buf_to_string
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.ffi.new
    functionSourceFile: OpenSSL
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.lib.X509_NAME_oneline
    functionSourceFile: OpenSSL
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 11
    ICount: 6
    IfCount: 7
    argCount: 1
    argDefaultValues: []
    argNames:
    - ssl_object
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 25
    functionName: scrapy.utils.ssl.get_temp_key_info
    functionSourceFile: scrapy.utils.ssl
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - <builtin>.hasattr
    - OpenSSL._util.lib.EVP_PKEY_bits
    - OpenSSL._util.lib.EC_curve_nid2nist
    - OpenSSL._util.ffi.gc
    - OpenSSL._util.ffi.new
    - OpenSSL._util.lib.SSL_get_server_tmp_key
    - OpenSSL._util.lib.EC_KEY_get0_group
    - key_info.append
    - OpenSSL._util.lib.EVP_PKEY_get1_EC_KEY
    - OpenSSL._util.ffi.string
    - OpenSSL._util.lib.EVP_PKEY_id
    - OpenSSL._util.lib.EC_GROUP_get_curve_name
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - OpenSSL._util.lib.OBJ_nid2sn
    - scrapy.utils.ssl.ffi_buf_to_string
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.lib.SSL_get_server_tmp_key
    functionSourceFile: OpenSSL
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.ffi.gc
    functionSourceFile: OpenSSL
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.lib.EVP_PKEY_id
    functionSourceFile: OpenSSL
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: key_info.append
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.lib.EVP_PKEY_get1_EC_KEY
    functionSourceFile: OpenSSL
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.lib.EC_KEY_get0_group
    functionSourceFile: OpenSSL
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.lib.EC_GROUP_get_curve_name
    functionSourceFile: OpenSSL
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.lib.EC_curve_nid2nist
    functionSourceFile: OpenSSL
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.lib.OBJ_nid2sn
    functionSourceFile: OpenSSL
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL._util.lib.EVP_PKEY_bits
    functionSourceFile: OpenSSL
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: OpenSSL.SSL.SSLeay_version
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: system_openssl_bytes.decode
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core
    functionSourceFile: scrapy.core
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.signalmanager
    functionSourceFile: scrapy.signalmanager
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - receiver
    - signal
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 13
    functionName: scrapy.signalmanager.SignalManager.connect
    functionSourceFile: scrapy.signalmanager
    functionUses: 0
    functionsReached:
    - kwargs.setdefault
    - pydispatch.dispatcher.connect
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pydispatch.dispatcher.connect
    functionSourceFile: pydispatch
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - receiver
    - signal
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 30
    functionName: scrapy.signalmanager.SignalManager.disconnect
    functionSourceFile: scrapy.signalmanager
    functionUses: 0
    functionsReached:
    - kwargs.setdefault
    - pydispatch.dispatcher.disconnect
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pydispatch.dispatcher.disconnect
    functionSourceFile: pydispatch
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - signal
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 39
    functionName: scrapy.signalmanager.SignalManager.send_catch_log
    functionSourceFile: scrapy.signalmanager
    functionUses: 0
    functionsReached:
    - kwargs.setdefault
    - <builtin>.isinstance
    - pydispatch.dispatcher.liveReceivers
    - named.pop
    - responses.append
    - <builtin>.tuple
    - logger.error
    - pydispatch.dispatcher.getAllReceivers
    - pydispatch.robustapply.robustApply
    - scrapy.utils.signal.send_catch_log
    - named.get
    - twisted.python.failure.Failure
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 4
    argDefaultValues:
    - <ast.Name object at 0x7f9a4dca9be0>
    - <ast.Name object at 0x7f9a4dca9bb0>
    argNames:
    - signal
    - sender
    - arguments
    - named
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 25
    functionName: scrapy.utils.signal.send_catch_log
    functionSourceFile: scrapy.utils.signal
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - pydispatch.dispatcher.liveReceivers
    - named.pop
    - responses.append
    - <builtin>.tuple
    - logger.error
    - pydispatch.dispatcher.getAllReceivers
    - pydispatch.robustapply.robustApply
    - named.get
    - twisted.python.failure.Failure
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - signal
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 49
    functionName: scrapy.signalmanager.SignalManager.send_catch_log_deferred
    functionSourceFile: scrapy.signalmanager
    functionUses: 0
    functionsReached:
    - scrapy.utils.defer.maybeDeferred_coro
    - twisted.internet.defer.DeferredList.addErrback
    - typing.cast
    - twisted.internet.defer.ensureDeferred.addBoth
    - inspect.isawaitable
    - dfds.append
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.DeferredList.addBoth
    - twisted.internet.defer.DeferredList
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - twisted.internet.defer.DeferredList.addCallback
    - twisted.internet.defer.succeed
    - <builtin>.callable
    - kwargs.setdefault
    - <builtin>.isinstance
    - pydispatch.dispatcher.liveReceivers
    - asyncio.get_event_loop
    - named.pop
    - twisted.internet.defer.ensureDeferred.addErrback
    - pydispatch.dispatcher.getAllReceivers
    - named.get
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.signal.send_catch_log_deferred
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - twisted.internet.defer.fail
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - pydispatch.robustapply.robustApply
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 5
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Name object at 0x7f9a4c11b850>
    - <ast.Name object at 0x7f9a4c11b610>
    argNames:
    - signal
    - sender
    - arguments
    - named
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 71
    functionName: scrapy.utils.signal.send_catch_log_deferred
    functionSourceFile: scrapy.utils.signal
    functionUses: 1
    functionsReached:
    - scrapy.utils.defer.maybeDeferred_coro
    - twisted.internet.defer.DeferredList.addErrback
    - typing.cast
    - twisted.internet.defer.ensureDeferred.addBoth
    - inspect.isawaitable
    - dfds.append
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.DeferredList.addBoth
    - twisted.internet.defer.DeferredList
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - twisted.internet.defer.DeferredList.addCallback
    - twisted.internet.defer.succeed
    - <builtin>.callable
    - <builtin>.isinstance
    - pydispatch.dispatcher.liveReceivers
    - asyncio.get_event_loop
    - named.pop
    - twisted.internet.defer.ensureDeferred.addErrback
    - pydispatch.dispatcher.getAllReceivers
    - named.get
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - twisted.internet.defer.fail
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - pydispatch.robustapply.robustApply
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - signal
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 63
    functionName: scrapy.signalmanager.SignalManager.disconnect_all
    functionSourceFile: scrapy.signalmanager
    functionUses: 0
    functionsReached:
    - kwargs.setdefault
    - scrapy.utils.signal.disconnect_all
    - pydispatch.dispatcher.liveReceivers
    - pydispatch.dispatcher.getAllReceivers
    - pydispatch.dispatcher.disconnect
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Name object at 0x7f9a4c342b50>
    - <ast.Name object at 0x7f9a4c3425e0>
    argNames:
    - signal
    - sender
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 107
    functionName: scrapy.utils.signal.disconnect_all
    functionSourceFile: scrapy.utils.signal
    functionUses: 1
    functionsReached:
    - pydispatch.dispatcher.getAllReceivers
    - pydispatch.dispatcher.liveReceivers
    - pydispatch.dispatcher.disconnect
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.signal
    functionSourceFile: scrapy.utils.signal
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: named.pop
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: named.get
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pydispatch.dispatcher.getAllReceivers
    functionSourceFile: pydispatch
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pydispatch.dispatcher.liveReceivers
    functionSourceFile: pydispatch
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: responses.append
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - failure
    - recv
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 82
    functionName: scrapy.utils.signal.send_catch_log_deferred.logerror
    functionSourceFile: scrapy.utils.signal
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - typing.cast
    - logger.error
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.DeferredList.addErrback
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.ensureDeferred.addErrback
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.signal.send_catch_log_deferred.<lambda1>
    functionSourceFile: scrapy.utils.signal
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.ensureDeferred.addBoth
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dfds.append
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.signal.send_catch_log_deferred.<lambda2>
    functionSourceFile: scrapy.utils.signal
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.DeferredList.addCallback
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.request
    functionSourceFile: scrapy.utils.request
    functionUses: 0
    functionsReached:
    - weakref.WeakKeyDictionary
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - headers
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 38
    functionName: scrapy.utils.request._serialize_headers
    functionSourceFile: scrapy.utils.request
    functionUses: 0
    functionsReached:
    - request.headers.getlist
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.headers.getlist
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - request
    - include_headers
    - keep_fragments
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 51
    functionName: scrapy.utils.request.fingerprint
    functionSourceFile: scrapy.utils.request
    functionUses: 0
    functionsReached:
    - request.headers.getlist
    - urllib.parse.urlparse.scheme.encode
    - h.lower
    - hashlib.sha1
    - urllib.parse.urlunparse.encode
    - scrapy.utils.python.to_bytes
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - weakref.WeakKeyDictionary.setdefault
    - header_value.hex
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - json.dumps
    - w3lib.url.canonicalize_url
    - urllib.parse.urlparse.netloc.encode
    - header.hex
    - fingerprint_json.encode
    - <builtin>.tuple
    - twisted.internet.protocol.ClientFactory._url.encode
    - <builtin>.sorted
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: h.lower
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: weakref.WeakKeyDictionary.setdefault
    functionSourceFile: weakref
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: header.hex
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: header_value.hex
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: fingerprint_json.encode
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: hashlib.sha1
    functionSourceFile: hashlib
    functionUses: 20
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 117
    functionName: scrapy.utils.request.RequestFingerprinterProtocol.fingerprint
    functionSourceFile: scrapy.utils.request
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 135
    functionName: scrapy.utils.request.RequestFingerprinter.from_crawler
    functionSourceFile: scrapy.utils.request
    functionUses: 0
    functionsReached:
    - scrapy.utils.request.RequestFingerprinter.__init__
    - warnings.warn
    - crawler.settings.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b287f70>
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 138
    functionName: scrapy.utils.request.RequestFingerprinter.__init__
    functionSourceFile: scrapy.utils.request
    functionUses: 4
    functionsReached:
    - warnings.warn
    - crawler.settings.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler.settings.get
    functionSourceFile: <builtin>
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 154
    functionName: scrapy.utils.request.RequestFingerprinter.fingerprint
    functionSourceFile: scrapy.utils.request
    functionUses: 0
    functionsReached:
    - scrapy.utils.request.RequestFingerprinter.fingerprint
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - request
    - username
    - password
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 158
    functionName: scrapy.utils.request.request_authenticate
    functionSourceFile: scrapy.utils.request
    functionUses: 0
    functionsReached:
    - w3lib.http.basic_auth_header
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - request
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 169
    functionName: scrapy.utils.request.request_httprepr
    functionSourceFile: scrapy.utils.request
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlunparse
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.httpobj.urlparse_cached
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse
    - urllib.parse.urlparse.hostname.encode
    - request.headers.to_string
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - request_or_response
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 14
    functionName: scrapy.utils.httpobj.urlparse_cached
    functionSourceFile: scrapy.utils.httpobj
    functionUses: 31
    functionsReached:
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.headers.to_string
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - request
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 186
    functionName: scrapy.utils.request.referer_str
    functionSourceFile: scrapy.utils.request
    functionUses: 6
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.utils.python.to_unicode
    - request.headers.get
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.headers.get
    functionSourceFile: <builtin>
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - d
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 194
    functionName: scrapy.utils.request.request_from_dict
    functionSourceFile: scrapy.utils.request
    functionUses: 2
    functionsReached:
    - urllib.parse.urlparse.rindex
    - <builtin>.isinstance
    - d.items
    - typing.cast.rindex
    - scrapy.utils.request._get_method
    - <builtin>.str
    - <builtin>.getattr
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - d.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: d.items
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: d.get
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - obj
    - name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 209
    functionName: scrapy.utils.request._get_method
    functionSourceFile: scrapy.utils.request
    functionUses: 3
    functionsReached:
    - <builtin>.str
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - request
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 218
    functionName: scrapy.utils.request.request_to_curl
    functionSourceFile: scrapy.utils.request
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - request.headers.items
    - request.body.decode
    - c.values
    - <builtin>.list
    - request.cookies.items
    - c.keys
    - k.decode
    - curl_cmd.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.body.decode
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: k.decode
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.headers.items
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.cookies.items
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: c.keys
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: c.values
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: curl_cmd.split
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.httpobj
    functionSourceFile: scrapy.utils.httpobj
    functionUses: 0
    functionsReached:
    - weakref.WeakKeyDictionary
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.addons
    functionSourceFile: scrapy.addons
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 5
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 22
    functionName: scrapy.addons.AddonManager.load_settings
    functionSourceFile: scrapy.addons
    functionUses: 0
    functionsReached:
    - typing.cast
    - path.replace
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - path.startswith
    - objcls.from_crawler
    - compdict.update
    - importlib.import_module
    - typing.cast.items
    - urllib.parse.urlparse.rindex
    - scrapy.utils.conf.build_component_list._check_components
    - <builtin>.hasattr
    - scrapy.utils.misc.build_from_crawler
    - json.loads
    - scrapy.utils.deprecate.update_classpath
    - scrapy.utils.conf.build_component_list._map_keys
    - <builtin>.callable
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - objcls.from_settings
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - warnings.warn
    - compdict.items
    - logger.warning
    - <builtin>.type
    - logger.info
    - scrapy.utils.conf.build_component_list._validate_values
    - scrapy.settings.BaseSettings.maxpriority
    - typing.cast.rindex
    - addon.update_settings
    - iterable.items
    - scrapy.settings.get_settings_priority
    - operator.itemgetter
    - <builtin>.len
    - compdict.getpriority
    - <builtin>.sorted
    - scrapy.utils.conf.build_component_list
    - scrapy.utils.misc.load_object
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: addon.update_settings
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.engine
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - start_requests
    - close_if_idle
    - nextcall
    - scheduler
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 48
    functionName: scrapy.core.engine.Slot.__init__
    functionSourceFile: scrapy.core.engine
    functionUses: 5
    functionsReached:
    - <builtin>.iter
    - <builtin>.set
    - twisted.internet.task.LoopingCall
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.task.LoopingCall
    functionSourceFile: twisted
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 63
    functionName: scrapy.core.engine.Slot.add_request
    functionSourceFile: scrapy.core.engine
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 66
    functionName: scrapy.core.engine.Slot.remove_request
    functionSourceFile: scrapy.core.engine
    functionUses: 2
    functionsReached:
    - scrapy.core.engine.Slot._maybe_fire_closing
    - twisted.internet.defer.Deferred.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 3
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 75
    functionName: scrapy.core.engine.Slot._maybe_fire_closing
    functionSourceFile: scrapy.core.engine
    functionUses: 13
    functionsReached:
    - twisted.internet.defer.Deferred.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 70
    functionName: scrapy.core.engine.Slot.close
    functionSourceFile: scrapy.core.engine
    functionUses: 9
    functionsReached:
    - twisted.internet.defer.Deferred
    - scrapy.core.engine.Slot._maybe_fire_closing
    - twisted.internet.defer.Deferred.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.Deferred.callback
    functionSourceFile: twisted
    functionUses: 18
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 104
    functionName: scrapy.core.engine.ExecutionEngine._get_scheduler_class
    functionSourceFile: scrapy.core.engine
    functionUses: 6
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - <builtin>.issubclass
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 101
    functionName: scrapy.core.scraper.Scraper.__init__
    functionSourceFile: scrapy.core.scraper
    functionUses: 6
    functionsReached:
    - itemproc_cls.from_crawler
    - objcls.from_crawler
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - collections.defaultdict
    - scrapy.utils.misc.build_from_crawler
    - middlewares.append
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - <builtin>.callable
    - scrapy.middleware.MiddlewareManager.from_settings
    - <builtin>.isinstance
    - objcls.from_settings
    - scrapy.utils.misc.build_from_settings
    - logger.warning
    - scrapy.middleware.MiddlewareManager._add_middleware
    - crawler.settings.getint
    - logger.info
    - enabled.append
    - typing.cast.rindex
    - scrapy.middleware.MiddlewareManager.from_crawler
    - scrapy.middleware.MiddlewareManager.__init__
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.inlineCallbacks
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 116
    functionName: scrapy.core.engine.ExecutionEngine.start
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - time.time
    - twisted.internet.defer.Deferred
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 125
    functionName: scrapy.core.engine.ExecutionEngine.stop
    functionSourceFile: scrapy.core.engine
    functionUses: 5
    functionsReached:
    - scrapy.core.engine.ExecutionEngine.close_spider
    - <builtin>.hasattr
    - logger.info
    - scrapy.core.engine.ExecutionEngine.close_spider.log_failure
    - twisted.internet.defer.Deferred.callback
    - twisted.internet.defer.inlineCallbacks
    - scrapy.core.engine.Slot.close
    - dfd.addBoth
    - twisted.internet.defer.succeed
    - twisted.internet.defer.Deferred
    - twisted.internet.defer.Deferred.addErrback
    - scrapy.core.engine.Slot._maybe_fire_closing
    - twisted.internet.defer.Deferred.addBoth
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - _
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 129
    functionName: scrapy.core.engine.ExecutionEngine.stop._finish_stopping_engine
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 18
    IfCount: 3
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e698190>
    argNames:
    - self
    - spider
    - reason
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 401
    functionName: scrapy.core.engine.ExecutionEngine.close_spider
    functionSourceFile: scrapy.core.engine
    functionUses: 8
    functionsReached:
    - <builtin>.hasattr
    - scrapy.core.engine.ExecutionEngine.close_spider.log_failure
    - twisted.internet.defer.Deferred.callback
    - logger.info
    - scrapy.core.engine.Slot.close
    - twisted.internet.defer.Deferred
    - twisted.internet.defer.Deferred.addErrback
    - scrapy.core.engine.Slot._maybe_fire_closing
    - twisted.internet.defer.Deferred.addBoth
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dfd.addBoth
    functionSourceFile: <builtin>
    functionUses: 18
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 158
    functionName: scrapy.core.engine.ExecutionEngine.pause
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 161
    functionName: scrapy.core.engine.ExecutionEngine.unpause
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 3
    IfCount: 4
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 164
    functionName: scrapy.core.engine.ExecutionEngine._next_request
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - d.addBoth
    - scrapy.core.engine.ExecutionEngine.close_spider
    - detected_ex.get
    - scrapy.exceptions.CloseSpider.__init__
    - twisted.internet.defer.Deferred.callback
    - <builtin>.bool
    - d.addErrback
    - scrapy.core.engine.Slot._maybe_fire_closing
    - scrapy.core.engine.ExecutionEngine._next_request_from_scheduler
    - <builtin>.hasattr
    - scrapy.core.engine.ExecutionEngine.close_spider.log_failure
    - scrapy.core.engine.Slot.close
    - scrapy.core.engine.ExecutionEngine._spider_idle
    - twisted.internet.defer.Deferred.addErrback
    - scrapy.core.engine.ExecutionEngine._needs_backout
    - scrapy.core.scraper.Slot.is_idle
    - <builtin>.isinstance
    - <builtin>.next
    - dwld.addCallbacks
    - scrapy.core.scraper.Slot.needs_backout
    - twisted.internet.defer.Deferred
    - scrapy.core.engine.Slot.add_request
    - <builtin>.super
    - twisted.internet.defer.Deferred.addBoth
    - scrapy.core.engine.ExecutionEngine._schedule_request
    - logger.info
    - scrapy.core.engine.ExecutionEngine._download
    - dwld.addBoth
    - logger.error
    - scrapy.core.engine.ExecutionEngine.spider_is_idle
    - scrapy.core.engine.ExecutionEngine.crawl
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 197
    functionName: scrapy.core.engine.ExecutionEngine._needs_backout
    functionSourceFile: scrapy.core.engine
    functionUses: 1
    functionsReached:
    - <builtin>.bool
    - scrapy.core.scraper.Slot.needs_backout
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 6
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 207
    functionName: scrapy.core.engine.ExecutionEngine._next_request_from_scheduler
    functionSourceFile: scrapy.core.engine
    functionUses: 1
    functionsReached:
    - d.addBoth
    - dwld.addCallbacks
    - dwld.addBoth
    - scrapy.core.engine.ExecutionEngine._download
    - d.addErrback
    - scrapy.core.engine.Slot.add_request
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 286
    functionName: scrapy.core.engine.ExecutionEngine.crawl
    functionSourceFile: scrapy.core.engine
    functionUses: 2
    functionsReached:
    - scrapy.core.engine.ExecutionEngine._schedule_request
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 0
    IfCount: 5
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 273
    functionName: scrapy.core.engine.ExecutionEngine.spider_is_idle
    functionSourceFile: scrapy.core.engine
    functionUses: 2
    functionsReached:
    - scrapy.core.scraper.Slot.is_idle
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 376
    functionName: scrapy.core.engine.ExecutionEngine._spider_idle
    functionSourceFile: scrapy.core.engine
    functionUses: 1
    functionsReached:
    - scrapy.core.engine.ExecutionEngine.close_spider
    - <builtin>.isinstance
    - detected_ex.get
    - <builtin>.hasattr
    - scrapy.exceptions.CloseSpider.__init__
    - scrapy.core.engine.ExecutionEngine.close_spider.log_failure
    - logger.info
    - scrapy.core.scraper.Slot.is_idle
    - twisted.internet.defer.Deferred.callback
    - scrapy.core.engine.Slot.close
    - twisted.internet.defer.Deferred
    - scrapy.core.engine.ExecutionEngine.spider_is_idle
    - twisted.internet.defer.Deferred.addErrback
    - scrapy.core.engine.Slot._maybe_fire_closing
    - twisted.internet.defer.Deferred.addBoth
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 96
    functionName: scrapy.core.scraper.Slot.needs_backout
    functionSourceFile: ''
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 315
    functionName: scrapy.core.engine.ExecutionEngine._download
    functionSourceFile: scrapy.core.engine
    functionUses: 4
    functionsReached:
    - scrapy.core.engine.Slot.add_request
    - dwld.addBoth
    - dwld.addCallbacks
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: d.addBoth
    functionSourceFile: <builtin>
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine._next_request_from_scheduler.<lambda1>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - logger.info
    - typing.cast
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: d.addErrback
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - _
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 225
    functionName: scrapy.core.engine.ExecutionEngine._next_request_from_scheduler._remove_request
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - scrapy.core.engine.Slot.remove_request
    - scrapy.core.engine.Slot._maybe_fire_closing
    - twisted.internet.defer.Deferred.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine._next_request_from_scheduler.<lambda2>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - logger.info
    - typing.cast
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine._next_request_from_scheduler.<lambda3>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - slot.nextcall.schedule
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.nextcall.schedule
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine._next_request_from_scheduler.<lambda4>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - logger.info
    - typing.cast
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 9
    functionLinenumber: 248
    functionName: scrapy.core.engine.ExecutionEngine._handle_downloader_output
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - <builtin>.bool
    - re.compile
    - scrapy.core.scraper.Slot.add_response_request
    - <builtin>.max
    - ast.iter_child_nodes
    - d.addErrback
    - scrapy.utils.misc.walk_callable
    - scrapy.core.scraper.Scraper._scrape
    - scrapy.utils.defer.defer_succeed
    - scrapy.core.engine.ExecutionEngine.crawl
    - match.group
    - collections.deque
    - dfd.addBoth
    - scrapy.core.scraper.Scraper.call_spider
    - scrapy.utils.misc.is_generator_with_return_value.returns_none
    - scrapy.core.scraper.Scraper._scrape_next
    - <builtin>.isinstance
    - scrapy.utils.misc.warn_on_generator_with_return_value
    - dfd.addCallbacks
    - ast.parse
    - warnings.warn
    - todo.extend
    - dfd.addErrback
    - twisted.internet.defer.Deferred
    - todo.popleft
    - scrapy.core.scraper.Scraper._scrape2
    - re.sub
    - pattern.sub
    - scrapy.core.engine.ExecutionEngine._schedule_request
    - scrapy.core.scraper.Scraper.enqueue_scrape
    - scrapy.utils.misc.is_generator_with_return_value
    - twisted.internet.reactor.callLater
    - inspect.getsource
    - dfd.addCallback
    - scrapy.core.scraper.Slot.next_response_request_deferred
    - <builtin>.len
    - inspect.isgeneratorfunction
    - scrapy.utils.defer.defer_fail
    - pattern.match
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 140
    functionName: scrapy.core.scraper.Scraper.enqueue_scrape
    functionSourceFile: scrapy.core.scraper
    functionUses: 1
    functionsReached:
    - <builtin>.bool
    - re.compile
    - scrapy.core.scraper.Slot.add_response_request
    - <builtin>.max
    - ast.iter_child_nodes
    - scrapy.utils.misc.walk_callable
    - scrapy.core.scraper.Scraper._scrape
    - scrapy.utils.defer.defer_succeed
    - match.group
    - collections.deque
    - dfd.addBoth
    - scrapy.core.scraper.Scraper.call_spider
    - scrapy.utils.misc.is_generator_with_return_value.returns_none
    - scrapy.core.scraper.Scraper._scrape_next
    - <builtin>.isinstance
    - scrapy.utils.misc.warn_on_generator_with_return_value
    - dfd.addCallbacks
    - ast.parse
    - warnings.warn
    - todo.extend
    - dfd.addErrback
    - twisted.internet.defer.Deferred
    - todo.popleft
    - scrapy.core.scraper.Scraper._scrape2
    - re.sub
    - pattern.sub
    - scrapy.utils.misc.is_generator_with_return_value
    - twisted.internet.reactor.callLater
    - inspect.getsource
    - dfd.addCallback
    - scrapy.core.scraper.Slot.next_response_request_deferred
    - <builtin>.len
    - inspect.isgeneratorfunction
    - scrapy.utils.defer.defer_fail
    - pattern.match
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine._handle_downloader_output.<lambda1>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - typing.cast
    - logger.error
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 93
    functionName: scrapy.core.scraper.Slot.is_idle
    functionSourceFile: ''
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 293
    functionName: scrapy.core.engine.ExecutionEngine._schedule_request
    functionSourceFile: ''
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 302
    functionName: scrapy.core.engine.ExecutionEngine.download
    functionSourceFile: scrapy.core.engine
    functionUses: 1
    functionsReached:
    - scrapy.core.engine.Slot.add_request
    - scrapy.core.engine.ExecutionEngine._download
    - dwld.addBoth
    - dwld.addCallbacks
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 308
    functionName: scrapy.core.engine.ExecutionEngine._downloaded
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - twisted.internet.defer.Deferred.callback
    - scrapy.core.engine.ExecutionEngine.download
    - dwld.addCallbacks
    - scrapy.core.engine.ExecutionEngine._download
    - dwld.addBoth
    - scrapy.core.engine.Slot.remove_request
    - scrapy.core.engine.Slot._maybe_fire_closing
    - scrapy.core.engine.Slot.add_request
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 2
    IfCount: 4
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 320
    functionName: scrapy.core.engine.ExecutionEngine._download._on_success
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.utils.log.logformatter_adapter
    - logkws.get
    - logger.log
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logger.log
    functionSourceFile: <builtin>
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - _
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 342
    functionName: scrapy.core.engine.ExecutionEngine._download._on_complete
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dwld.addCallbacks
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dwld.addBoth
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scheduler.open
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 117
    functionName: scrapy.core.scraper.Scraper.open_spider
    functionSourceFile: scrapy.core.scraper
    functionUses: 5
    functionsReached:
    - collections.deque
    - <builtin>.set
    - scrapy.core.scraper.Slot.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: detected_ex.get
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - msg
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 415
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.log_failure
    functionSourceFile: scrapy.core.engine
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - failure
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 416
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.log_failure.errback
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - typing.cast
    - logger.error
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.<lambda1>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.Deferred.addErrback
    functionSourceFile: twisted
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.<lambda2>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - scrapy.core.scraper.Slot.is_idle
    - twisted.internet.defer.Deferred.callback
    - scrapy.core.scraper.Scraper._check_if_closing
    - scrapy.core.scraper.Scraper.close_spider
    - twisted.internet.defer.Deferred.addCallback
    - twisted.internet.defer.Deferred
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 122
    functionName: scrapy.core.scraper.Scraper.close_spider
    functionSourceFile: scrapy.core.scraper
    functionUses: 1
    functionsReached:
    - scrapy.core.scraper.Slot.is_idle
    - twisted.internet.defer.Deferred.callback
    - scrapy.core.scraper.Scraper._check_if_closing
    - twisted.internet.defer.Deferred.addCallback
    - twisted.internet.defer.Deferred
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.<lambda3>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - typing.cast.scheduler.close
    - typing.cast
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.scheduler.close
    functionSourceFile: typing
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.<lambda4>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - _
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 442
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.close_stats
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.<lambda5>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - logger.info
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.<lambda6>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - <builtin>.setattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.<lambda7>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached:
    - <builtin>.setattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.engine.ExecutionEngine.close_spider.<lambda8>
    functionSourceFile: scrapy.core.engine
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.scheduler
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached:
    - typing.TypeVar
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - instance
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 32
    functionName: scrapy.core.scheduler.BaseSchedulerMeta.__instancecheck__
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached:
    - <builtin>.callable
    - <builtin>.hasattr
    - <builtin>.type
    - scrapy.core.scheduler.BaseSchedulerMeta.__subclasscheck__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - subclass
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 35
    functionName: scrapy.core.scheduler.BaseSchedulerMeta.__subclasscheck__
    functionSourceFile: scrapy.core.scheduler
    functionUses: 1
    functionsReached:
    - <builtin>.callable
    - <builtin>.hasattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 64
    functionName: scrapy.core.scheduler.BaseScheduler.from_crawler
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 70
    functionName: scrapy.core.scheduler.BaseScheduler.open
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 80
    functionName: scrapy.core.scheduler.BaseScheduler.close
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.scheduler.BaseScheduler
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached:
    - abc.abstractmethod
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: abc.abstractmethod
    functionSourceFile: ''
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 91
    functionName: scrapy.core.scheduler.BaseScheduler.has_pending_requests
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - NotImplementedError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 98
    functionName: scrapy.core.scheduler.BaseScheduler.enqueue_request
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - NotImplementedError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 112
    functionName: scrapy.core.scheduler.BaseScheduler.next_request
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - NotImplementedError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 9
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b287640>
    - <ast.Constant object at 0x7f9a4b287eb0>
    - <ast.Constant object at 0x7f9a4b287190>
    - <ast.Constant object at 0x7f9a4b287520>
    - <ast.Constant object at 0x7f9a4b287820>
    - <ast.Constant object at 0x7f9a4b287f70>
    - <ast.Constant object at 0x7f9a4b2877c0>
    argNames:
    - self
    - dupefilter
    - jobdir
    - dqclass
    - mqclass
    - logunser
    - stats
    - pqclass
    - crawler
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 178
    functionName: scrapy.core.scheduler.Scheduler.__init__
    functionSourceFile: scrapy.core.scheduler
    functionUses: 1
    functionsReached:
    - scrapy.core.scheduler.Scheduler._dqdir
    - pathlib.Path.mkdir
    - <builtin>.str
    - pathlib.Path.exists
    - pathlib.Path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - jobdir
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 351
    functionName: scrapy.core.scheduler.Scheduler._dqdir
    functionSourceFile: scrapy.core.scheduler
    functionUses: 2
    functionsReached:
    - pathlib.Path.exists
    - <builtin>.str
    - pathlib.Path.mkdir
    - pathlib.Path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 199
    functionName: scrapy.core.scheduler.Scheduler.from_crawler
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached:
    - pathlib.Path.mkdir
    - objcls.from_crawler
    - scrapy.core.scheduler.Scheduler.__init__
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.utils.misc.build_from_crawler
    - scrapy.core.scheduler.Scheduler._dqdir
    - crawler.settings.getbool
    - pathlib.Path
    - <builtin>.callable
    - <builtin>.isinstance
    - objcls.from_settings
    - pathlib.Path.exists
    - scrapy.utils.job.job_dir
    - typing.cast.rindex
    - <builtin>.str
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - settings
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 7
    functionName: scrapy.utils.job.job_dir
    functionSourceFile: scrapy.utils.job
    functionUses: 4
    functionsReached:
    - pathlib.Path.exists
    - pathlib.Path.mkdir
    - pathlib.Path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 215
    functionName: scrapy.core.scheduler.Scheduler.has_pending_requests
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 218
    functionName: scrapy.core.scheduler.Scheduler.open
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached:
    - scrapy.core.scheduler.Scheduler._mq
    - <builtin>.hasattr
    - objcls.from_settings
    - logger.info
    - scrapy.utils.misc.build_from_crawler
    - scrapy.core.scheduler.Scheduler._dq
    - typing.cast
    - pathlib.Path.exists
    - json.load
    - pathlib.Path
    - objcls.from_crawler
    - scrapy.core.scheduler.Scheduler._read_dqs_state
    - pathlib.Path.open
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 323
    functionName: scrapy.core.scheduler.Scheduler._mq
    functionSourceFile: scrapy.core.scheduler
    functionUses: 1
    functionsReached:
    - objcls.from_crawler
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 332
    functionName: scrapy.core.scheduler.Scheduler._dq
    functionSourceFile: scrapy.core.scheduler
    functionUses: 1
    functionsReached:
    - <builtin>.hasattr
    - objcls.from_settings
    - logger.info
    - scrapy.utils.misc.build_from_crawler
    - typing.cast
    - pathlib.Path.exists
    - json.load
    - pathlib.Path
    - objcls.from_crawler
    - scrapy.core.scheduler.Scheduler._read_dqs_state
    - pathlib.Path.open
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 229
    functionName: scrapy.core.scheduler.Scheduler.close
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.core.scheduler.Scheduler._write_dqs_state
    - pathlib.Path
    - json.dump
    - pathlib.Path.open
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - dqdir
    - state
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 367
    functionName: scrapy.core.scheduler.Scheduler._write_dqs_state
    functionSourceFile: scrapy.core.scheduler
    functionUses: 1
    functionsReached:
    - json.dump
    - pathlib.Path.open
    - pathlib.Path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 240
    functionName: scrapy.core.scheduler.Scheduler.enqueue_request
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached:
    - logger.warning
    - scrapy.core.scheduler.Scheduler._dqpush
    - scrapy.core.scheduler.Scheduler._mqpush
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 290
    functionName: scrapy.core.scheduler.Scheduler._dqpush
    functionSourceFile: scrapy.core.scheduler
    functionUses: 1
    functionsReached:
    - logger.warning
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 315
    functionName: scrapy.core.scheduler.Scheduler._mqpush
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 263
    functionName: scrapy.core.scheduler.Scheduler.next_request
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached:
    - scrapy.core.scheduler.Scheduler._dqpop
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 318
    functionName: scrapy.core.scheduler.Scheduler._dqpop
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 284
    functionName: scrapy.core.scheduler.Scheduler.__len__
    functionSourceFile: scrapy.core.scheduler
    functionUses: 0
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - dqdir
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 360
    functionName: scrapy.core.scheduler.Scheduler._read_dqs_state
    functionSourceFile: scrapy.core.scheduler
    functionUses: 2
    functionsReached:
    - typing.cast
    - pathlib.Path.exists
    - json.load
    - pathlib.Path
    - pathlib.Path.open
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.exists
    functionSourceFile: pathlib
    functionUses: 26
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.mkdir
    functionSourceFile: pathlib
    functionUses: 15
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.open
    functionSourceFile: pathlib
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: json.load
    functionSourceFile: json
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: json.dump
    functionSourceFile: json
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.job
    functionSourceFile: scrapy.utils.job
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.dupefilters
    functionSourceFile: scrapy.dupefilters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 28
    functionName: scrapy.dupefilters.BaseDupeFilter.from_settings
    functionSourceFile: scrapy.dupefilters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 31
    functionName: scrapy.dupefilters.BaseDupeFilter.request_seen
    functionSourceFile: scrapy.dupefilters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 34
    functionName: scrapy.dupefilters.BaseDupeFilter.open
    functionSourceFile: scrapy.dupefilters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 37
    functionName: scrapy.dupefilters.BaseDupeFilter.close
    functionSourceFile: scrapy.dupefilters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 40
    functionName: scrapy.dupefilters.BaseDupeFilter.log
    functionSourceFile: scrapy.dupefilters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d5666d0>
    - <ast.Constant object at 0x7f9a4d5666a0>
    argNames:
    - self
    - path
    - debug
    - fingerprinter
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 48
    functionName: scrapy.dupefilters.RFPDupeFilter.__init__
    functionSourceFile: scrapy.dupefilters
    functionUses: 2
    functionsReached:
    - <builtin>.set
    - warnings.warn
    - crawler.settings.get
    - pathlib.Path
    - scrapy.utils.request.RequestFingerprinter.__init__
    - pathlib.Path.open
    - x.rstrip
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: x.rstrip
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - settings
    - fingerprinter
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 69
    functionName: scrapy.dupefilters.RFPDupeFilter.from_settings
    functionSourceFile: scrapy.dupefilters
    functionUses: 1
    functionsReached:
    - <builtin>.set
    - settings.getbool
    - warnings.warn
    - pathlib.Path.mkdir
    - pathlib.Path.exists
    - crawler.settings.get
    - scrapy.dupefilters.RFPDupeFilter.__init__
    - scrapy.utils.job.job_dir
    - pathlib.Path
    - scrapy.utils.request.RequestFingerprinter.__init__
    - pathlib.Path.open
    - x.rstrip
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 79
    functionName: scrapy.dupefilters.RFPDupeFilter.from_crawler
    functionSourceFile: scrapy.dupefilters
    functionUses: 0
    functionsReached:
    - scrapy.dupefilters.RFPDupeFilter.from_settings
    - <builtin>.set
    - settings.getbool
    - warnings.warn
    - pathlib.Path.mkdir
    - pathlib.Path.exists
    - crawler.settings.get
    - scrapy.dupefilters.RFPDupeFilter.__init__
    - scrapy.utils.job.job_dir
    - pathlib.Path
    - scrapy.utils.request.RequestFingerprinter.__init__
    - pathlib.Path.open
    - x.rstrip
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 86
    functionName: scrapy.dupefilters.RFPDupeFilter.request_seen
    functionSourceFile: scrapy.dupefilters
    functionUses: 0
    functionsReached:
    - scrapy.dupefilters.RFPDupeFilter.request_fingerprint
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 95
    functionName: scrapy.dupefilters.RFPDupeFilter.request_fingerprint
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 98
    functionName: scrapy.dupefilters.RFPDupeFilter.close
    functionSourceFile: scrapy.dupefilters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 102
    functionName: scrapy.dupefilters.RFPDupeFilter.log
    functionSourceFile: scrapy.dupefilters
    functionUses: 0
    functionsReached:
    - scrapy.utils.request.referer_str
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - spider.crawler.stats.inc_value
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - request.headers.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: spider.crawler.stats.inc_value
    functionSourceFile: <builtin>
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.scraper
    functionSourceFile: scrapy.core.scraper
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d408310>
    argNames:
    - self
    - max_active_size
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 60
    functionName: scrapy.core.scraper.Slot.__init__
    functionSourceFile: scrapy.core.scraper
    functionUses: 6
    functionsReached:
    - collections.deque
    - <builtin>.set
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 68
    functionName: scrapy.core.scraper.Slot.add_response_request
    functionSourceFile: scrapy.core.scraper
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - twisted.internet.defer.Deferred
    - <builtin>.max
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 79
    functionName: scrapy.core.scraper.Slot.next_response_request_deferred
    functionSourceFile: scrapy.core.scraper
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 84
    functionName: scrapy.core.scraper.Slot.finish_response
    functionSourceFile: scrapy.core.scraper
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.len
    - <builtin>.max
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itemproc_cls.from_crawler
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler.settings.getint
    functionSourceFile: <builtin>
    functionUses: 15
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.scraper.Scraper
    functionSourceFile: scrapy.core.scraper
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.inlineCallbacks
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.Deferred.addCallback
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 135
    functionName: scrapy.core.scraper.Scraper._check_if_closing
    functionSourceFile: scrapy.core.scraper
    functionUses: 3
    functionsReached:
    - scrapy.core.scraper.Slot.is_idle
    - twisted.internet.defer.Deferred.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 131
    functionName: scrapy.core.scraper.Scraper.is_idle
    functionSourceFile: scrapy.core.scraper
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - _
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 147
    functionName: scrapy.core.scraper.Scraper.enqueue_scrape.finish_scraping
    functionSourceFile: scrapy.core.scraper
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.Deferred.callback
    - <builtin>.bool
    - re.compile
    - <builtin>.max
    - ast.iter_child_nodes
    - scrapy.utils.misc.walk_callable
    - scrapy.core.scraper.Scraper._scrape
    - scrapy.utils.defer.defer_succeed
    - match.group
    - collections.deque
    - scrapy.core.scraper.Scraper.call_spider
    - scrapy.core.scraper.Scraper._check_if_closing
    - scrapy.utils.misc.is_generator_with_return_value.returns_none
    - scrapy.core.scraper.Scraper._scrape_next
    - scrapy.core.scraper.Slot.finish_response
    - scrapy.core.scraper.Slot.is_idle
    - <builtin>.isinstance
    - scrapy.utils.misc.warn_on_generator_with_return_value
    - dfd.addCallbacks
    - ast.parse
    - warnings.warn
    - todo.extend
    - dfd.addErrback
    - twisted.internet.defer.Deferred
    - todo.popleft
    - scrapy.core.scraper.Scraper._scrape2
    - re.sub
    - pattern.sub
    - scrapy.utils.misc.is_generator_with_return_value
    - twisted.internet.reactor.callLater
    - inspect.getsource
    - dfd.addCallback
    - scrapy.core.scraper.Slot.next_response_request_deferred
    - <builtin>.len
    - inspect.isgeneratorfunction
    - scrapy.utils.defer.defer_fail
    - pattern.match
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 166
    functionName: scrapy.core.scraper.Scraper._scrape_next
    functionSourceFile: scrapy.core.scraper
    functionUses: 3
    functionsReached:
    - <builtin>.bool
    - re.compile
    - ast.iter_child_nodes
    - scrapy.utils.misc.walk_callable
    - scrapy.core.scraper.Scraper._scrape
    - scrapy.utils.defer.defer_succeed
    - match.group
    - collections.deque
    - scrapy.core.scraper.Scraper.call_spider
    - scrapy.utils.misc.is_generator_with_return_value.returns_none
    - <builtin>.isinstance
    - scrapy.utils.misc.warn_on_generator_with_return_value
    - dfd.addCallbacks
    - ast.parse
    - warnings.warn
    - todo.extend
    - dfd.addErrback
    - twisted.internet.defer.Deferred
    - todo.popleft
    - scrapy.core.scraper.Scraper._scrape2
    - re.sub
    - pattern.sub
    - scrapy.utils.misc.is_generator_with_return_value
    - twisted.internet.reactor.callLater
    - inspect.getsource
    - dfd.addCallback
    - scrapy.core.scraper.Slot.next_response_request_deferred
    - inspect.isgeneratorfunction
    - scrapy.utils.defer.defer_fail
    - pattern.match
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.core.scraper.Scraper.enqueue_scrape.<lambda1>
    functionSourceFile: scrapy.core.scraper
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - typing.cast
    - logger.error
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dfd.addErrback
    functionSourceFile: <builtin>
    functionUses: 19
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 172
    functionName: scrapy.core.scraper.Scraper._scrape
    functionSourceFile: scrapy.core.scraper
    functionUses: 4
    functionsReached:
    - <builtin>.bool
    - re.compile
    - ast.iter_child_nodes
    - scrapy.utils.misc.walk_callable
    - scrapy.utils.defer.defer_succeed
    - match.group
    - collections.deque
    - scrapy.core.scraper.Scraper.call_spider
    - scrapy.utils.misc.is_generator_with_return_value.returns_none
    - <builtin>.isinstance
    - scrapy.utils.misc.warn_on_generator_with_return_value
    - dfd.addCallbacks
    - ast.parse
    - warnings.warn
    - todo.extend
    - dfd.addErrback
    - twisted.internet.defer.Deferred
    - todo.popleft
    - scrapy.core.scraper.Scraper._scrape2
    - re.sub
    - pattern.sub
    - scrapy.utils.misc.is_generator_with_return_value
    - twisted.internet.reactor.callLater
    - inspect.getsource
    - dfd.addCallback
    - inspect.isgeneratorfunction
    - scrapy.utils.defer.defer_fail
    - pattern.match
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 189
    functionName: scrapy.core.scraper.Scraper._scrape2
    functionSourceFile: scrapy.core.scraper
    functionUses: 5
    functionsReached:
    - <builtin>.bool
    - re.compile
    - ast.iter_child_nodes
    - scrapy.utils.misc.walk_callable
    - match.group
    - collections.deque
    - scrapy.core.scraper.Scraper.call_spider
    - scrapy.utils.misc.is_generator_with_return_value.returns_none
    - <builtin>.getattr
    - scrapy.utils.misc.warn_on_generator_with_return_value
    - <builtin>.isinstance
    - dfd.addCallbacks
    - ast.parse
    - warnings.warn
    - todo.extend
    - dfd.addErrback
    - twisted.internet.defer.Deferred
    - todo.popleft
    - re.sub
    - pattern.sub
    - scrapy.utils.misc.is_generator_with_return_value
    - twisted.internet.reactor.callLater
    - inspect.getsource
    - dfd.addCallback
    - inspect.isgeneratorfunction
    - scrapy.utils.defer.defer_fail
    - pattern.match
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dfd.addCallback
    functionSourceFile: <builtin>
    functionUses: 15
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 203
    functionName: scrapy.core.scraper.Scraper.call_spider
    functionSourceFile: scrapy.core.scraper
    functionUses: 6
    functionsReached:
    - <builtin>.bool
    - re.compile
    - ast.iter_child_nodes
    - scrapy.utils.misc.walk_callable
    - match.group
    - collections.deque
    - scrapy.utils.misc.is_generator_with_return_value.returns_none
    - <builtin>.getattr
    - scrapy.utils.misc.warn_on_generator_with_return_value
    - <builtin>.isinstance
    - dfd.addCallbacks
    - ast.parse
    - warnings.warn
    - todo.extend
    - dfd.addErrback
    - twisted.internet.defer.Deferred
    - todo.popleft
    - re.sub
    - pattern.sub
    - scrapy.utils.misc.is_generator_with_return_value
    - twisted.internet.reactor.callLater
    - inspect.getsource
    - dfd.addCallback
    - inspect.isgeneratorfunction
    - scrapy.utils.defer.defer_fail
    - pattern.match
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dfd.addCallbacks
    functionSourceFile: <builtin>
    functionUses: 19
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 254
    functionName: scrapy.core.scraper.Scraper.handle_spider_output
    functionSourceFile: scrapy.core.scraper
    functionUses: 0
    functionsReached:
    - twisted.internet.task.Cooperator
    - typing.cast
    - <builtin>.iter
    - twisted.internet.defer.DeferredList
    - scrapy.utils.defer.iter_errback
    - aiterable.__aiter__
    - twisted.internet.task.Cooperator.coiterate
    - scrapy.core.scraper.Scraper._process_spidermw_output
    - <builtin>.range
    - scrapy.utils.defer.aiter_errback
    - it.__anext__
    - dfd.addBoth
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    - logger.log
    - <builtin>.isinstance
    - <builtin>.next
    - twisted.internet.defer.Deferred
    - scrapy.utils.defer._AsyncCooperatorAdapter.__init__
    - <builtin>.type
    - scrapy.utils.defer.parallel
    - logkws.get
    - scrapy.utils.log.logformatter_adapter
    - itemadapter.is_item
    - twisted.internet.reactor.callLater
    - scrapy.commands.parse.Command.handle_exception
    - scrapy.core.scraper.Scraper.handle_spider_error
    - logger.error
    - twisted.python.failure.Failure
    - scrapy.utils.defer.parallel_async
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itemadapter.is_item
    functionSourceFile: itemadapter
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 3
    IfCount: 4
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - spider_failure
    - download_failure
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 316
    functionName: scrapy.core.scraper.Scraper._log_download_errors
    functionSourceFile: scrapy.core.scraper
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.utils.log.logformatter_adapter
    - typing.cast
    - download_failure.getErrorMessage
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    - logkws.get
    - download_failure.check
    - logger.log
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: download_failure.check
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: download_failure.getErrorMessage
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 4
    IfCount: 4
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - output
    - item
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 355
    functionName: scrapy.core.scraper.Scraper._itemproc_finished
    functionSourceFile: scrapy.core.scraper
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.utils.log.logformatter_adapter
    - typing.cast
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    - logkws.get
    - logger.log
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.pipelines
    functionSourceFile: scrapy.pipelines
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 20
    functionName: scrapy.pipelines.ItemPipelineManager._get_mwlist_from_settings
    functionSourceFile: scrapy.pipelines
    functionUses: 0
    functionsReached:
    - typing.cast
    - settings.getwithbase
    - path.replace
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - path.startswith
    - compdict.update
    - typing.cast.items
    - scrapy.utils.conf.build_component_list._check_components
    - json.loads
    - scrapy.utils.deprecate.update_classpath
    - scrapy.utils.conf.build_component_list._map_keys
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - warnings.warn
    - compdict.items
    - <builtin>.type
    - scrapy.utils.conf.build_component_list._validate_values
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - iterable.items
    - operator.itemgetter
    - <builtin>.len
    - compdict.getpriority
    - <builtin>.sorted
    - scrapy.utils.conf.build_component_list
    - typing.cast.getpriority
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - pipe
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 23
    functionName: scrapy.pipelines.ItemPipelineManager._add_middleware
    functionSourceFile: scrapy.pipelines
    functionUses: 0
    functionsReached:
    - scrapy.utils.defer.deferred_f_from_coro_f
    - functools.wraps
    - <builtin>.hasattr
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - item
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 30
    functionName: scrapy.pipelines.ItemPipelineManager.process_item
    functionSourceFile: scrapy.pipelines
    functionUses: 0
    functionsReached:
    - scrapy.utils.defer.process_chain
    - typing.cast
    - twisted.internet.defer.Deferred
    - d.addCallback
    - d.callback
    - scrapy.middleware.MiddlewareManager._process_chain
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.spidermw
    functionSourceFile: scrapy.core.spidermw
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - o
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 47
    functionName: scrapy.core.spidermw._isiterable
    functionSourceFile: scrapy.core.spidermw
    functionUses: 8
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - middlewares
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 54
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager.__init__
    functionSourceFile: scrapy.core.spidermw
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 59
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager._get_mwlist_from_settings
    functionSourceFile: scrapy.core.spidermw
    functionUses: 0
    functionsReached:
    - typing.cast
    - settings.getwithbase
    - path.replace
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - path.startswith
    - compdict.update
    - typing.cast.items
    - scrapy.utils.conf.build_component_list._check_components
    - json.loads
    - scrapy.utils.deprecate.update_classpath
    - scrapy.utils.conf.build_component_list._map_keys
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - warnings.warn
    - compdict.items
    - <builtin>.type
    - scrapy.utils.conf.build_component_list._validate_values
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - iterable.items
    - operator.itemgetter
    - <builtin>.len
    - compdict.getpriority
    - <builtin>.sorted
    - scrapy.utils.conf.build_component_list
    - typing.cast.getpriority
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - mw
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 62
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager._add_middleware
    functionSourceFile: scrapy.core.spidermw
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - scrapy.core.spidermw.SpiderMiddlewareManager._get_async_method_pair
    - inspect.isasyncgenfunction
    - logger.error
    - <builtin>.getattr
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 3
    IfCount: 4
    argCount: 2
    argDefaultValues: []
    argNames:
    - mw
    - methodname
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 318
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager._get_async_method_pair
    functionSourceFile: scrapy.core.spidermw
    functionUses: 1
    functionsReached:
    - logger.error
    - inspect.isasyncgenfunction
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 6
    argDefaultValues: []
    argNames:
    - self
    - response
    - spider
    - iterable
    - exception_processor_index
    - recover_to
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 96
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable
    functionSourceFile: scrapy.core.spidermw
    functionUses: 7
    functionsReached:
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_exception
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable
    - results.append
    - typing.cast
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - itertools.chain
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - scrapy.utils.python.MutableAsyncChain.__init__
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - scrapy.utils.python.MutableChain.__init__
    - <builtin>.callable
    - inspect.iscoroutine
    - <builtin>.isinstance
    - scrapy.utils.python.MutableAsyncChain.extend
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_sync
    - asyncio.get_event_loop
    - logger.warning
    - <builtin>.type
    - <builtin>.enumerate
    - scrapy.utils.asyncgen.as_async_generator
    - twisted.internet.defer.Deferred.fromFuture
    - itertools.islice
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.python.MutableChain.extend
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - inspect.isasyncgenfunction
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_async
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - scrapy.utils.python._async_chain
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_output
    - result.close
    - asyncio.set_event_loop
    - itertools.chain.from_iterable
    - scrapy.core.spidermw._isiterable
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - iterable
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 104
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_sync
    functionSourceFile: scrapy.core.spidermw
    functionUses: 7
    functionsReached:
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_exception
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable
    - results.append
    - typing.cast
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - itertools.chain
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - scrapy.utils.python.MutableAsyncChain.__init__
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - scrapy.utils.python.MutableChain.__init__
    - <builtin>.callable
    - inspect.iscoroutine
    - <builtin>.isinstance
    - scrapy.utils.python.MutableAsyncChain.extend
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_sync
    - asyncio.get_event_loop
    - logger.warning
    - <builtin>.type
    - <builtin>.enumerate
    - scrapy.utils.asyncgen.as_async_generator
    - twisted.internet.defer.Deferred.fromFuture
    - itertools.islice
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.python.MutableChain.extend
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - inspect.isasyncgenfunction
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_async
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - scrapy.utils.python._async_chain
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_output
    - result.close
    - asyncio.set_event_loop
    - itertools.chain.from_iterable
    - scrapy.core.spidermw._isiterable
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 0
    IfCount: 5
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d3d3dc0>
    argNames:
    - self
    - response
    - spider
    - _failure
    - start_index
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 131
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_exception
    functionSourceFile: scrapy.core.spidermw
    functionUses: 7
    functionsReached:
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_exception
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable
    - results.append
    - typing.cast
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - itertools.chain
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - scrapy.utils.python.MutableAsyncChain.__init__
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - scrapy.utils.python.MutableChain.__init__
    - <builtin>.callable
    - inspect.iscoroutine
    - <builtin>.isinstance
    - scrapy.utils.python.MutableAsyncChain.extend
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_sync
    - asyncio.get_event_loop
    - logger.warning
    - <builtin>.type
    - <builtin>.enumerate
    - scrapy.utils.asyncgen.as_async_generator
    - twisted.internet.defer.Deferred.fromFuture
    - itertools.islice
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - scrapy.utils.python.MutableChain.extend
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - inspect.isasyncgenfunction
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_async
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - scrapy.utils.python._async_chain
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_output
    - result.close
    - asyncio.set_event_loop
    - itertools.chain.from_iterable
    - scrapy.core.spidermw._isiterable
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - _InvalidOutput
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - iterable
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 115
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_async
    functionSourceFile: scrapy.core.spidermw
    functionUses: 7
    functionsReached:
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_exception
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable
    - results.append
    - typing.cast
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - itertools.chain
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - scrapy.utils.python.MutableAsyncChain.__init__
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - scrapy.utils.python.MutableChain.__init__
    - <builtin>.callable
    - inspect.iscoroutine
    - <builtin>.isinstance
    - scrapy.utils.python.MutableAsyncChain.extend
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_sync
    - asyncio.get_event_loop
    - logger.warning
    - <builtin>.type
    - <builtin>.enumerate
    - scrapy.utils.asyncgen.as_async_generator
    - twisted.internet.defer.Deferred.fromFuture
    - itertools.islice
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.python.MutableChain.extend
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - inspect.isasyncgenfunction
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_async
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - scrapy.utils.python._async_chain
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_output
    - result.close
    - asyncio.set_event_loop
    - itertools.chain.from_iterable
    - scrapy.core.spidermw._isiterable
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itertools.islice
    functionSourceFile: itertools
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 13
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 8
    EdgeCount: 19
    ICount: 2
    IfCount: 13
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c7f4d90>
    argNames:
    - self
    - response
    - spider
    - result
    - start_index
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 179
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_output
    functionSourceFile: scrapy.core.spidermw
    functionUses: 7
    functionsReached:
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_exception
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable
    - results.append
    - typing.cast
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - itertools.chain
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - scrapy.utils.python.MutableAsyncChain.__init__
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - scrapy.utils.python.MutableChain.__init__
    - <builtin>.callable
    - inspect.iscoroutine
    - <builtin>.isinstance
    - scrapy.utils.python.MutableAsyncChain.extend
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_sync
    - asyncio.get_event_loop
    - logger.warning
    - <builtin>.type
    - <builtin>.enumerate
    - scrapy.utils.asyncgen.as_async_generator
    - twisted.internet.defer.Deferred.fromFuture
    - itertools.islice
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - scrapy.utils.python.MutableChain.extend
    - warnings.filterwarnings
    - typing.cast.rindex
    - inspect.isasyncgenfunction
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_async
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - scrapy.utils.python._async_chain
    - result.close
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_output
    - asyncio.set_event_loop
    - itertools.chain.from_iterable
    - scrapy.core.spidermw._isiterable
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - _InvalidOutput
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager
    functionSourceFile: scrapy.core.spidermw
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.inlineCallbacks
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: inspect.isasyncgenfunction
    functionSourceFile: inspect
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: result.close
    functionSourceFile: <builtin>
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 0
    IfCount: 3
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - spider
    - result
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 9
    functionLinenumber: 268
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager._process_callback_output
    functionSourceFile: scrapy.core.spidermw
    functionUses: 1
    functionsReached:
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_exception
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable
    - results.append
    - typing.cast
    - typing.cast.asFuture
    - twisted.internet.defer.ensureDeferred.asFuture
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - itertools.chain
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - scrapy.utils.python.MutableAsyncChain.__init__
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - scrapy.utils.python.MutableChain.__init__
    - <builtin>.callable
    - inspect.iscoroutine
    - <builtin>.isinstance
    - typing.AsyncIterable.asFuture
    - typing.Iterable.asFuture
    - scrapy.utils.python.MutableAsyncChain.extend
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_sync
    - asyncio.get_event_loop
    - logger.warning
    - <builtin>.type
    - <builtin>.enumerate
    - scrapy.utils.asyncgen.as_async_generator
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.defer.deferred_to_future
    - itertools.islice
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - scrapy.utils.python.MutableChain.extend
    - asyncio.ensure_future
    - scrapy.utils.defer.maybe_deferred_to_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - inspect.isasyncgenfunction
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_async
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - scrapy.utils.python._async_chain
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_output
    - result.close
    - asyncio.set_event_loop
    - twisted.internet.defer.DeferredList.asFuture
    - twisted.python.failure.Failure.asFuture
    - itertools.chain.from_iterable
    - scrapy.core.spidermw._isiterable
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - scrape_func
    - response
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 287
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager.scrape_response
    functionSourceFile: scrapy.core.spidermw
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - functools.wraps
    - scrapy.utils.defer.defer_result
    - hashlib.sha1
    - urllib.parse.urlunparse.encode
    - inspect.isawaitable
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.utils.defer.deferred_f_from_coro_f
    - twisted.internet.defer.ensureDeferred
    - scrapy.pipelines.files.FilesPipeline.file_path
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - mimetypes.guess_type
    - scrapy.utils.defer.mustbe_deferred
    - scrapy.utils.python.to_bytes
    - <builtin>.getattr
    - pathlib.Path
    - <builtin>.callable
    - scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - dfd.addCallbacks
    - scrapy.pipelines.media.MediaPipeline.media_to_download
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - dfd.addErrback
    - twisted.internet.defer.Deferred
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.type
    - twisted.internet.defer.Deferred.fromFuture
    - urllib.parse.urlparse.hostname.encode
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - twisted.internet.reactor.callLater
    - mimetypes.guess_extension
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.pipelines.files.FilesPipeline.media_to_download
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - twisted.internet.protocol.ClientFactory._url.encode
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - scrapy.utils.defer.defer_fail
    - warnings.catch_warnings
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 10
    functionLinenumber: 294
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager.scrape_response.process_callback_output
    functionSourceFile: scrapy.core.spidermw
    functionUses: 0
    functionsReached:
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_exception
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable
    - results.append
    - typing.cast
    - typing.cast.asFuture
    - twisted.internet.defer.ensureDeferred.asFuture
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - itertools.chain
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - scrapy.utils.python.MutableAsyncChain.__init__
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - scrapy.utils.python.MutableChain.__init__
    - <builtin>.callable
    - inspect.iscoroutine
    - <builtin>.isinstance
    - typing.AsyncIterable.asFuture
    - typing.Iterable.asFuture
    - scrapy.utils.python.MutableAsyncChain.extend
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_sync
    - asyncio.get_event_loop
    - logger.warning
    - <builtin>.type
    - <builtin>.enumerate
    - scrapy.utils.asyncgen.as_async_generator
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.defer.deferred_to_future
    - itertools.islice
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - scrapy.utils.python.MutableChain.extend
    - asyncio.ensure_future
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_callback_output
    - scrapy.utils.defer.maybe_deferred_to_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - inspect.isasyncgenfunction
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_async
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - scrapy.utils.python._async_chain
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_output
    - result.close
    - asyncio.set_event_loop
    - twisted.internet.defer.DeferredList.asFuture
    - twisted.python.failure.Failure.asFuture
    - itertools.chain.from_iterable
    - scrapy.core.spidermw._isiterable
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - _failure
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 299
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager.scrape_response.process_spider_exception
    functionSourceFile: scrapy.core.spidermw
    functionUses: 0
    functionsReached:
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_exception
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable
    - results.append
    - typing.cast
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - itertools.chain
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - scrapy.utils.python.MutableAsyncChain.__init__
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - scrapy.utils.python.MutableChain.__init__
    - <builtin>.callable
    - inspect.iscoroutine
    - <builtin>.isinstance
    - scrapy.utils.python.MutableAsyncChain.extend
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_sync
    - asyncio.get_event_loop
    - logger.warning
    - <builtin>.type
    - <builtin>.enumerate
    - scrapy.utils.asyncgen.as_async_generator
    - twisted.internet.defer.Deferred.fromFuture
    - itertools.islice
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - scrapy.utils.python.MutableChain.extend
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - inspect.isasyncgenfunction
    - scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_async
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - scrapy.utils.python._async_chain
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_output
    - result.close
    - asyncio.set_event_loop
    - itertools.chain.from_iterable
    - scrapy.core.spidermw._isiterable
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - start_requests
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 311
    functionName: scrapy.core.spidermw.SpiderMiddlewareManager.process_start_requests
    functionSourceFile: scrapy.core.spidermw
    functionUses: 0
    functionsReached:
    - scrapy.utils.defer.process_chain
    - typing.cast
    - twisted.internet.defer.Deferred
    - d.addCallback
    - d.callback
    - scrapy.middleware.MiddlewareManager._process_chain
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.logformatter
    functionSourceFile: scrapy.logformatter
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 67
    functionName: scrapy.logformatter.LogFormatter.crawled
    functionSourceFile: scrapy.logformatter
    functionUses: 0
    functionsReached:
    - scrapy.utils.request.referer_str
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - <builtin>.str
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - request.headers.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - item
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 85
    functionName: scrapy.logformatter.LogFormatter.scraped
    functionSourceFile: scrapy.logformatter
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - response.getErrorMessage
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: response.getErrorMessage
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - item
    - exception
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 103
    functionName: scrapy.logformatter.LogFormatter.dropped
    functionSourceFile: scrapy.logformatter
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - item
    - exception
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 116
    functionName: scrapy.logformatter.LogFormatter.item_error
    functionSourceFile: scrapy.logformatter
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - failure
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 132
    functionName: scrapy.logformatter.LogFormatter.spider_error
    functionSourceFile: scrapy.logformatter
    functionUses: 0
    functionsReached:
    - scrapy.utils.request.referer_str
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - request.headers.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6dbdc0>
    argNames:
    - self
    - failure
    - request
    - spider
    - errmsg
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 152
    functionName: scrapy.logformatter.LogFormatter.download_error
    functionSourceFile: scrapy.logformatter
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 177
    functionName: scrapy.logformatter.LogFormatter.from_crawler
    functionSourceFile: scrapy.logformatter
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.downloader
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - concurrency
    - delay
    - randomize_delay
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 27
    functionName: scrapy.core.downloader.Slot.__init__
    functionSourceFile: scrapy.core.downloader
    functionUses: 2
    functionsReached:
    - <builtin>.set
    - collections.deque
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 38
    functionName: scrapy.core.downloader.Slot.free_transfer_slots
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 41
    functionName: scrapy.core.downloader.Slot.download_delay
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - random.uniform
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: random.uniform
    functionSourceFile: random
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 46
    functionName: scrapy.core.downloader.Slot.close
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 50
    functionName: scrapy.core.downloader.Slot.__repr__
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 58
    functionName: scrapy.core.downloader.Slot.__str__
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - <builtin>.len
    - datetime.datetime.fromtimestamp
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: datetime.datetime.fromtimestamp
    functionSourceFile: datetime
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - concurrency
    - spider
    - settings
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 68
    functionName: scrapy.core.downloader._get_concurrency_delay
    functionSourceFile: scrapy.core.downloader
    functionUses: 2
    functionsReached:
    - settings.getfloat
    - <builtin>.hasattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings.getfloat
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 84
    functionName: scrapy.core.downloader.Downloader.__init__
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - crawler.settings.getwithbase
    - objcls.from_crawler
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - collections.defaultdict
    - scrapy.core.downloader.handlers.DownloadHandlers._load_handler
    - <builtin>.set
    - twisted.internet.task.LoopingCall
    - scrapy.utils.misc.build_from_crawler
    - middlewares.append
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - <builtin>.callable
    - scrapy.middleware.MiddlewareManager.from_settings
    - scrapy.core.downloader.handlers.DownloadHandlers.__init__
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - objcls.from_settings
    - scrapy.utils.misc.build_from_settings
    - logger.warning
    - scrapy.middleware.MiddlewareManager._add_middleware
    - <builtin>.type
    - logger.info
    - enabled.append
    - typing.cast.rindex
    - crawler.signals.connect
    - iterable.items
    - scrapy.middleware.MiddlewareManager.from_crawler
    - <builtin>.str
    - scrapy.middleware.MiddlewareManager.__init__
    - logger.error
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 22
    functionName: scrapy.core.downloader.handlers.DownloadHandlers.__init__
    functionSourceFile: scrapy.core.downloader.handlers
    functionUses: 1
    functionsReached:
    - crawler.settings.getwithbase
    - objcls.from_crawler
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.core.downloader.handlers.DownloadHandlers._load_handler
    - scrapy.utils.misc.build_from_crawler
    - <builtin>.callable
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - objcls.from_settings
    - <builtin>.type
    - typing.cast.rindex
    - iterable.items
    - crawler.signals.connect
    - <builtin>.str
    - logger.error
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 105
    functionName: scrapy.core.downloader.Downloader.fetch
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - dfd.addBoth
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - response
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 106
    functionName: scrapy.core.downloader.Downloader.fetch._deactivate
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 114
    functionName: scrapy.core.downloader.Downloader.needs_backout
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 117
    functionName: scrapy.core.downloader.Downloader._get_slot
    functionSourceFile: scrapy.core.downloader
    functionUses: 1
    functionsReached:
    - <builtin>.hasattr
    - collections.deque
    - scrapy.core.downloader.Slot.__init__
    - slot_settings.get
    - settings.getfloat
    - <builtin>.set
    - dnscache.get
    - scrapy.core.downloader.Downloader._get_slot_key
    - typing.cast
    - urllib.parse.urlparse
    - scrapy.utils.httpobj.urlparse_cached
    - scrapy.core.downloader._get_concurrency_delay
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 135
    functionName: scrapy.core.downloader.Downloader._get_slot_key
    functionSourceFile: scrapy.core.downloader
    functionUses: 2
    functionsReached:
    - dnscache.get
    - typing.cast
    - scrapy.utils.httpobj.urlparse_cached
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot_settings.get
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dnscache.get
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 4
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 9
    functionLinenumber: 145
    functionName: scrapy.core.downloader.Downloader._enqueue_request
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - slot_settings.get
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - slot.queue.popleft
    - slot.transferring.add
    - scrapy.utils.defer.defer_result
    - hashlib.sha1
    - inspect.isawaitable
    - urllib.parse.urlunparse.encode
    - twisted.internet.defer.maybeDeferred
    - slot.queue.append
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - scrapy.pipelines.files.FilesPipeline.file_path
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.core.downloader.Downloader._process_queue
    - collections.deque
    - <builtin>.set
    - slot.latercall.active
    - dfd.addBoth
    - asyncio.isfuture
    - mimetypes.guess_type
    - scrapy.utils.defer.mustbe_deferred
    - scrapy.utils.python.to_bytes
    - <builtin>.getattr
    - pathlib.Path
    - <builtin>.callable
    - scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - scrapy.core.downloader._get_concurrency_delay
    - scrapy.core.downloader.Downloader._download
    - time.time
    - scrapy.pipelines.media.MediaPipeline.media_to_download
    - <builtin>.isinstance
    - dfd.addCallbacks
    - asyncio.get_event_loop
    - settings.getfloat
    - dnscache.get
    - scrapy.core.downloader.Downloader._get_slot_key
    - twisted.internet.defer.Deferred
    - dfd.addErrback
    - <builtin>.type
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.hostname.encode
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.httpobj.urlparse_cached
    - twisted.internet.defer.Deferred.addBoth
    - slot.download_delay
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - scrapy.core.downloader.Downloader._get_slot
    - scrapy.core.downloader.Slot.__init__
    - twisted.internet.reactor.callLater
    - slot.free_transfer_slots
    - typing.cast.rindex
    - mimetypes.guess_extension
    - asyncio.new_event_loop
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    - scrapy.pipelines.files.FilesPipeline.media_to_download
    - dfd.addCallback
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - twisted.internet.protocol.ClientFactory._url.encode
    - slot.active.add
    - dfd.chainDeferred
    - urllib.parse.urlparse
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - scrapy.utils.defer.defer_fail
    - warnings.catch_warnings
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - response
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 149
    functionName: scrapy.core.downloader.Downloader._enqueue_request._deactivate
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - slot.active.remove
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.active.remove
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.active.add
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.queue.append
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 2
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - slot
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 162
    functionName: scrapy.core.downloader.Downloader._process_queue
    functionSourceFile: scrapy.core.downloader
    functionUses: 2
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - slot.queue.popleft
    - slot.transferring.add
    - scrapy.utils.defer.defer_result
    - hashlib.sha1
    - urllib.parse.urlunparse.encode
    - inspect.isawaitable
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.utils.defer.defer_succeed
    - twisted.internet.defer.ensureDeferred
    - scrapy.pipelines.files.FilesPipeline.file_path
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - scrapy.core.downloader.Downloader._process_queue
    - asyncio.isfuture
    - slot.latercall.active
    - dfd.addBoth
    - mimetypes.guess_type
    - scrapy.utils.defer.mustbe_deferred
    - scrapy.utils.python.to_bytes
    - pathlib.Path
    - <builtin>.callable
    - scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - scrapy.core.downloader.Downloader._download
    - time.time
    - scrapy.pipelines.media.MediaPipeline.media_to_download
    - <builtin>.isinstance
    - dfd.addCallbacks
    - asyncio.get_event_loop
    - dfd.addErrback
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.type
    - twisted.internet.defer.Deferred
    - twisted.internet.defer.Deferred.fromFuture
    - urllib.parse.urlparse.hostname.encode
    - slot.download_delay
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - twisted.internet.reactor.callLater
    - mimetypes.guess_extension
    - slot.free_transfer_slots
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    - scrapy.pipelines.files.FilesPipeline.media_to_download
    - dfd.addCallback
    - scrapy.utils.reactor._get_asyncio_event_loop
    - twisted.internet.protocol.ClientFactory._url.encode
    - asyncio.set_event_loop
    - dfd.chainDeferred
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - scrapy.utils.defer.defer_fail
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.latercall.active
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.download_delay
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.free_transfer_slots
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.queue.popleft
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - slot
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 190
    functionName: scrapy.core.downloader.Downloader._download
    functionSourceFile: scrapy.core.downloader
    functionUses: 3
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - slot.transferring.add
    - scrapy.utils.defer.defer_result
    - hashlib.sha1
    - urllib.parse.urlunparse.encode
    - inspect.isawaitable
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.utils.defer.defer_succeed
    - twisted.internet.defer.ensureDeferred
    - scrapy.pipelines.files.FilesPipeline.file_path
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - dfd.addBoth
    - mimetypes.guess_type
    - scrapy.utils.defer.mustbe_deferred
    - scrapy.utils.python.to_bytes
    - pathlib.Path
    - <builtin>.callable
    - scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - <builtin>.isinstance
    - scrapy.pipelines.media.MediaPipeline.media_to_download
    - dfd.addCallbacks
    - asyncio.get_event_loop
    - dfd.addErrback
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.type
    - twisted.internet.defer.Deferred
    - twisted.internet.defer.Deferred.fromFuture
    - urllib.parse.urlparse.hostname.encode
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - mimetypes.guess_extension
    - twisted.internet.reactor.callLater
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    - scrapy.pipelines.files.FilesPipeline.media_to_download
    - dfd.addCallback
    - scrapy.utils.reactor._get_asyncio_event_loop
    - twisted.internet.protocol.ClientFactory._url.encode
    - asyncio.set_event_loop
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - scrapy.utils.defer.defer_fail
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dfd.chainDeferred
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - response
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 198
    functionName: scrapy.core.downloader.Downloader._download._downloaded
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.transferring.add
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - _
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 9
    functionLinenumber: 215
    functionName: scrapy.core.downloader.Downloader._download.finish_transferring
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - slot.transferring.remove
    - typing.cast
    - slot.queue.popleft
    - slot.transferring.add
    - scrapy.utils.defer.defer_result
    - hashlib.sha1
    - urllib.parse.urlunparse.encode
    - inspect.isawaitable
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.utils.defer.defer_succeed
    - twisted.internet.defer.ensureDeferred
    - scrapy.pipelines.files.FilesPipeline.file_path
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - scrapy.core.downloader.Downloader._process_queue
    - asyncio.isfuture
    - slot.latercall.active
    - dfd.addBoth
    - mimetypes.guess_type
    - scrapy.utils.defer.mustbe_deferred
    - scrapy.utils.python.to_bytes
    - pathlib.Path
    - <builtin>.callable
    - scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - scrapy.core.downloader.Downloader._download
    - time.time
    - scrapy.pipelines.media.MediaPipeline.media_to_download
    - <builtin>.isinstance
    - dfd.addCallbacks
    - asyncio.get_event_loop
    - dfd.addErrback
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.type
    - twisted.internet.defer.Deferred
    - twisted.internet.defer.Deferred.fromFuture
    - urllib.parse.urlparse.hostname.encode
    - slot.download_delay
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - twisted.internet.reactor.callLater
    - mimetypes.guess_extension
    - slot.free_transfer_slots
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    - scrapy.pipelines.files.FilesPipeline.media_to_download
    - dfd.addCallback
    - scrapy.utils.reactor._get_asyncio_event_loop
    - twisted.internet.protocol.ClientFactory._url.encode
    - asyncio.set_event_loop
    - dfd.chainDeferred
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - scrapy.utils.defer.defer_fail
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.transferring.remove
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 225
    functionName: scrapy.core.downloader.Downloader.close
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - slot.close
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.close
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4da0baf0>
    argNames:
    - self
    - age
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 230
    functionName: scrapy.core.downloader.Downloader._slot_gc
    functionSourceFile: scrapy.core.downloader
    functionUses: 0
    functionsReached:
    - time.time
    - <builtin>.list
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.resolver
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached:
    - scrapy.utils.datatypes.LocalCache.__init__
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - reactor
    - cache_size
    - timeout
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 25
    functionName: scrapy.resolver.CachingThreadedResolver.__init__
    functionSourceFile: scrapy.resolver
    functionUses: 1
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - reactor
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 31
    functionName: scrapy.resolver.CachingThreadedResolver.from_crawler
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached:
    - <builtin>.super
    - crawler.settings.getfloat
    - crawler.settings.getbool
    - scrapy.resolver.CachingThreadedResolver.__init__
    - crawler.settings.getint
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler.settings.getfloat
    functionSourceFile: <builtin>
    functionUses: 10
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 38
    functionName: scrapy.resolver.CachingThreadedResolver.install_on_reactor
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached:
    - twisted.internet.base.ThreadedResolver.reactor.installResolver
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.base.ThreadedResolver.reactor.installResolver
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4cb42790>
    argNames:
    - self
    - name
    - timeout
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 41
    functionName: scrapy.resolver.CachingThreadedResolver.getHostByName
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.succeed
    - d.addCallback
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - result
    - name
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 54
    functionName: scrapy.resolver.CachingThreadedResolver._cache_result
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 61
    functionName: scrapy.resolver.HostResolution.__init__
    functionSourceFile: scrapy.resolver
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 64
    functionName: scrapy.resolver.HostResolution.cancel
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - NotImplementedError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - resolutionReceiver
    - hostName
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 70
    functionName: scrapy.resolver._CachingResolutionReceiver.__init__
    functionSourceFile: scrapy.resolver
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - resolution
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 75
    functionName: scrapy.resolver._CachingResolutionReceiver.resolutionBegan
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - address
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 79
    functionName: scrapy.resolver._CachingResolutionReceiver.addressResolved
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 83
    functionName: scrapy.resolver._CachingResolutionReceiver.resolutionComplete
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - reactor
    - cache_size
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 96
    functionName: scrapy.resolver.CachingHostnameResolver.__init__
    functionSourceFile: scrapy.resolver
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - reactor
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 102
    functionName: scrapy.resolver.CachingHostnameResolver.from_crawler
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached:
    - scrapy.resolver.CachingHostnameResolver.__init__
    - crawler.settings.getbool
    - crawler.settings.getint
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 109
    functionName: scrapy.resolver.CachingHostnameResolver.install_on_reactor
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d3d3040>
    - <ast.Constant object at 0x7f9a4d3d36d0>
    - <ast.Constant object at 0x7f9a4d3d3cd0>
    argNames:
    - self
    - resolutionReceiver
    - hostName
    - portNumber
    - addressTypes
    - transportSemantics
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 112
    functionName: scrapy.resolver.CachingHostnameResolver.resolveHostName
    functionSourceFile: scrapy.resolver
    functionUses: 0
    functionsReached:
    - scrapy.resolver.HostResolution.__init__
    - resolutionReceiver.addressResolved
    - resolutionReceiver.resolutionComplete
    - resolutionReceiver.resolutionBegan
    - scrapy.resolver._CachingResolutionReceiver.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: resolutionReceiver.resolutionBegan
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: resolutionReceiver.addressResolved
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: resolutionReceiver.resolutionComplete
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.downloader.middleware
    functionSourceFile: scrapy.core.downloader.middleware
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 24
    functionName: scrapy.core.downloader.middleware.DownloaderMiddlewareManager._get_mwlist_from_settings
    functionSourceFile: scrapy.core.downloader.middleware
    functionUses: 0
    functionsReached:
    - typing.cast
    - settings.getwithbase
    - path.replace
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - path.startswith
    - compdict.update
    - typing.cast.items
    - scrapy.utils.conf.build_component_list._check_components
    - json.loads
    - scrapy.utils.deprecate.update_classpath
    - scrapy.utils.conf.build_component_list._map_keys
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - warnings.warn
    - compdict.items
    - <builtin>.type
    - scrapy.utils.conf.build_component_list._validate_values
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - iterable.items
    - operator.itemgetter
    - <builtin>.len
    - compdict.getpriority
    - <builtin>.sorted
    - scrapy.utils.conf.build_component_list
    - typing.cast.getpriority
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 3
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - mw
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 27
    functionName: scrapy.core.downloader.middleware.DownloaderMiddlewareManager._add_middleware
    functionSourceFile: scrapy.core.downloader.middleware
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - download_func
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 35
    functionName: scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download
    functionSourceFile: scrapy.core.downloader.middleware
    functionUses: 0
    functionsReached:
    - deferred.addErrback
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.utils.defer.defer_result
    - hashlib.sha1
    - urllib.parse.urlunparse.encode
    - inspect.isawaitable
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - scrapy.pipelines.files.FilesPipeline.file_path
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - warnings.catch_warnings
    - mimetypes.guess_type
    - scrapy.utils.defer.mustbe_deferred
    - scrapy.utils.python.to_bytes
    - <builtin>.getattr
    - pathlib.Path
    - <builtin>.callable
    - scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - <builtin>.isinstance
    - scrapy.pipelines.media.MediaPipeline.media_to_download
    - dfd.addCallbacks
    - asyncio.get_event_loop
    - dfd.addErrback
    - urllib.parse.urlparse.netloc.encode
    - twisted.internet.defer.Deferred
    - <builtin>.type
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - deferred.addCallback
    - warnings.filterwarnings
    - twisted.internet.defer.inlineCallbacks
    - mimetypes.guess_extension
    - twisted.internet.reactor.callLater
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.pipelines.files.FilesPipeline.media_to_download
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    - scrapy.utils.reactor._get_asyncio_event_loop
    - twisted.internet.protocol.ClientFactory._url.encode
    - asyncio.set_event_loop
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - scrapy.utils.defer.defer_fail
    - urllib.parse.urlparse.hostname.encode
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 0
    IfCount: 4
    argCount: 1
    argDefaultValues: []
    argNames:
    - response
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 57
    functionName: scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_response
    functionSourceFile: scrapy.core.downloader.middleware
    functionUses: 0
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - <builtin>.callable
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - _InvalidOutput
    - TypeError
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - failure
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 80
    functionName: scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_exception
    functionSourceFile: scrapy.core.downloader.middleware
    functionUses: 0
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - <builtin>.callable
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - _InvalidOutput
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: deferred.addErrback
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: deferred.addCallback
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers
    functionSourceFile: scrapy.core.downloader.handlers
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler.settings.getwithbase
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6db820>
    argNames:
    - self
    - scheme
    - skip_lazy
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 52
    functionName: scrapy.core.downloader.handlers.DownloadHandlers._load_handler
    functionSourceFile: scrapy.core.downloader.handlers
    functionUses: 4
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - objcls.from_settings
    - urllib.parse.urlparse.rindex
    - scrapy.utils.misc.build_from_crawler
    - typing.cast.rindex
    - <builtin>.str
    - logger.error
    - <builtin>.callable
    - objcls.from_crawler
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - scheme
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 38
    functionName: scrapy.core.downloader.handlers.DownloadHandlers._get_handler
    functionSourceFile: scrapy.core.downloader.handlers
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.core.downloader.handlers.DownloadHandlers._load_handler
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - typing.cast.rindex
    - <builtin>.str
    - logger.error
    - <builtin>.callable
    - objcls.from_crawler
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 78
    functionName: scrapy.core.downloader.handlers.DownloadHandlers.download_request
    functionSourceFile: scrapy.core.downloader.handlers
    functionUses: 0
    functionsReached:
    - handler.download_request
    - typing.cast
    - objcls.from_crawler
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.core.downloader.handlers.DownloadHandlers._load_handler
    - scrapy.utils.misc.build_from_crawler
    - scrapy.core.downloader.handlers.DownloadHandlers._get_handler
    - <builtin>.callable
    - <builtin>.isinstance
    - objcls.from_settings
    - scrapy.utils.httpobj.urlparse_cached
    - typing.cast.rindex
    - <builtin>.str
    - logger.error
    - urllib.parse.urlparse
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - NotSupported
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: handler.download_request
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.DownloadHandlers
    functionSourceFile: scrapy.core.downloader.handlers
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.inlineCallbacks
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - _a
    - _kw
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 88
    functionName: scrapy.core.downloader.handlers.DownloadHandlers._close
    functionSourceFile: scrapy.core.downloader.handlers
    functionUses: 0
    functionsReached:
    - dh.close
    - <builtin>.hasattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dh.close
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.mail
    functionSourceFile: scrapy.mail
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - text
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 30
    functionName: scrapy.mail._to_bytes_or_none
    functionSourceFile: scrapy.mail
    functionUses: 5
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 9
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d1649a0>
    - <ast.Constant object at 0x7f9a4d164970>
    - <ast.Constant object at 0x7f9a4d164940>
    - <ast.Constant object at 0x7f9a4d164910>
    - <ast.Constant object at 0x7f9a4d1648e0>
    - <ast.Constant object at 0x7f9a4d1648b0>
    - <ast.Constant object at 0x7f9a4d164880>
    - <ast.Constant object at 0x7f9a4d164850>
    argNames:
    - self
    - smtphost
    - mailfrom
    - smtpuser
    - smtppass
    - smtpport
    - smtptls
    - smtpssl
    - debug
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 37
    functionName: scrapy.mail.MailSender.__init__
    functionSourceFile: scrapy.mail
    functionUses: 4
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - scrapy.mail._to_bytes_or_none
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 58
    functionName: scrapy.mail.MailSender.from_settings
    functionSourceFile: scrapy.mail
    functionUses: 3
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - settings.getbool
    - scrapy.mail.MailSender.__init__
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - scrapy.mail._to_bytes_or_none
    - urllib.parse.urlunparse.encode
    - settings.getint
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 12
    IfCount: 6
    argCount: 9
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d3a83a0>
    - <ast.Tuple object at 0x7f9a4d3a8370>
    - <ast.Constant object at 0x7f9a4d3a8340>
    - <ast.Constant object at 0x7f9a4d3a8310>
    - <ast.Constant object at 0x7f9a4d3a82e0>
    argNames:
    - self
    - to
    - subject
    - body
    - cc
    - attachs
    - mimetype
    - charset
    - _callback
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 69
    functionName: scrapy.mail.MailSender.send
    functionSourceFile: scrapy.mail
    functionUses: 0
    functionsReached:
    - mimetype.split
    - twisted.internet.reactor.addSystemEventTrigger
    - typing.cast
    - email.mime.nonmultipart.MIMENonMultipart.set_charset
    - email.mime.multipart.MIMEMultipart
    - email.mime.nonmultipart.MIMENonMultipart.as_string
    - twisted.mail.smtp.ESMTPSenderFactory
    - <builtin>.hasattr
    - twisted.internet.reactor.connectSSL
    - logger.debug
    - twisted.python.versions.Version
    - <builtin>.list
    - scrapy.mail.MailSender._sendmail
    - scrapy.utils.misc.arg_to_iter
    - email.mime.multipart.MIMEMultipart.set_payload
    - email.mime.text.MIMEText
    - COMMASPACE.join
    - email.mime.nonmultipart.MIMENonMultipart
    - email.mime.base.MIMEBase.add_header
    - email.mime.multipart.MIMEMultipart.attach
    - email.mime.nonmultipart.MIMENonMultipart.set_payload
    - twisted.internet.ssl.ClientContextFactory
    - dfd.addCallbacks
    - email.mime.nonmultipart.MIMENonMultipart.attach
    - <builtin>.isinstance
    - email.encoders.encode_base64
    - twisted.internet.defer.Deferred
    - scrapy.mail.MailSender._create_sender_factory
    - rcpts.extend
    - email.mime.multipart.MIMEMultipart.as_string
    - email.mime.base.MIMEBase
    - email.utils.formatdate
    - f.read
    - email.mime.base.MIMEBase.set_payload
    - io.BytesIO
    - twisted.internet.reactor.connectTCP
    - email.mime.multipart.MIMEMultipart.set_charset
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.multipart.MIMEMultipart
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: mimetype.split
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.nonmultipart.MIMENonMultipart
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: COMMASPACE.join
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.utils.formatdate
    functionSourceFile: email
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: rcpts.extend
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.nonmultipart.MIMENonMultipart.set_charset
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.multipart.MIMEMultipart.set_charset
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.text.MIMEText
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.multipart.MIMEMultipart.attach
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.nonmultipart.MIMENonMultipart.attach
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.base.MIMEBase
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: f.read
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.base.MIMEBase.set_payload
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.encoders.encode_base64
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.base.MIMEBase.add_header
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.nonmultipart.MIMENonMultipart.set_payload
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.multipart.MIMEMultipart.set_payload
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.nonmultipart.MIMENonMultipart.as_string
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.mime.multipart.MIMEMultipart.as_string
    functionSourceFile: email
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - to_addrs
    - msg
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 168
    functionName: scrapy.mail.MailSender._sendmail
    functionSourceFile: scrapy.mail
    functionUses: 1
    functionsReached:
    - twisted.internet.reactor.connectSSL
    - twisted.python.versions.Version
    - twisted.internet.defer.Deferred
    - twisted.internet.ssl.ClientContextFactory
    - io.BytesIO
    - scrapy.mail.MailSender._create_sender_factory
    - twisted.mail.smtp.ESMTPSenderFactory
    - twisted.internet.reactor.connectTCP
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.mail.MailSender.send.<lambda1>
    functionSourceFile: scrapy.mail
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 6
    argDefaultValues: []
    argNames:
    - self
    - result
    - to
    - cc
    - subject
    - nattachs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 140
    functionName: scrapy.mail.MailSender._sent_ok
    functionSourceFile: scrapy.mail
    functionUses: 0
    functionsReached:
    - logger.info
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 6
    argDefaultValues: []
    argNames:
    - self
    - failure
    - to
    - cc
    - subject
    - nattachs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 152
    functionName: scrapy.mail.MailSender._sent_failed
    functionSourceFile: scrapy.mail
    functionUses: 0
    functionsReached:
    - logger.error
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - to_addrs
    - msg
    - d
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 185
    functionName: scrapy.mail.MailSender._create_sender_factory
    functionSourceFile: scrapy.mail
    functionUses: 2
    functionsReached:
    - twisted.python.versions.Version
    - twisted.mail.smtp.ESMTPSenderFactory
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.ssl.ClientContextFactory
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.connectSSL
    functionSourceFile: twisted
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.connectTCP
    functionSourceFile: twisted
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.python.versions.Version
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.mail.smtp.ESMTPSenderFactory
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: -1
    functionName: scrapy.responsetypes
    functionSourceFile: scrapy.responsetypes
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - mimetypes.MimeTypes
    - pkgutil.get_data
    - typing.cast.rindex
    - io.StringIO
    - pkgutil.get_data.decode
    - <builtin>.getattr
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - scrapy.responsetypes.ResponseTypes.__init__
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 33
    functionName: scrapy.responsetypes.ResponseTypes.__init__
    functionSourceFile: scrapy.responsetypes
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - mimetypes.MimeTypes
    - pkgutil.get_data
    - typing.cast.rindex
    - io.StringIO
    - pkgutil.get_data.decode
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: mimetypes.MimeTypes
    functionSourceFile: mimetypes
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pkgutil.get_data.decode
    functionSourceFile: pkgutil
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - mimetype
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 45
    functionName: scrapy.responsetypes.ResponseTypes.from_mimetype
    functionSourceFile: scrapy.responsetypes
    functionUses: 21
    functionsReached:
    - w3lib.url.parse_data_uri.media_type.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.parse_data_uri.media_type.split
    functionSourceFile: w3lib
    functionUses: 22
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e59aaf0>
    argNames:
    - self
    - content_type
    - content_encoding
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 54
    functionName: scrapy.responsetypes.ResponseTypes.from_content_type
    functionSourceFile: scrapy.responsetypes
    functionUses: 16
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - typing.cast.split
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - urllib.parse.urlparse.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.split
    functionSourceFile: urllib
    functionUses: 18
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.split
    functionSourceFile: typing
    functionUses: 18
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - content_disposition
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 66
    functionName: scrapy.responsetypes.ResponseTypes.from_content_disposition
    functionSourceFile: scrapy.responsetypes
    functionUses: 16
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - typing.cast.split
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - urllib.parse.urlparse.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - filename
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 93
    functionName: scrapy.responsetypes.ResponseTypes.from_filename
    functionSourceFile: scrapy.responsetypes
    functionUses: 17
    functionsReached:
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - w3lib.url.parse_data_uri.media_type.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - headers
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 80
    functionName: scrapy.responsetypes.ResponseTypes.from_headers
    functionSourceFile: scrapy.responsetypes
    functionUses: 15
    functionsReached:
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - typing.cast.split
    - typing.cast
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - urllib.parse.urlparse.split
    - typing.cast.decode
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - body
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 100
    functionName: scrapy.responsetypes.ResponseTypes.from_body
    functionSourceFile: scrapy.responsetypes
    functionUses: 15
    functionsReached:
    - scrapy.utils.python.binary_is_text
    - <builtin>.isinstance
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.lower
    - urllib.parse.urlencode.lower
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - w3lib.url.parse_data_uri.media_type.split
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.lower
    - <builtin>.all
    - urllib.parse.urlparse.netloc.lower
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlunparse.lower
    functionSourceFile: urllib
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.scheme.lower
    functionSourceFile: urllib
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlencode.lower
    functionSourceFile: urllib
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ClientFactory._url.lower
    functionSourceFile: twisted
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.hostname.lower
    functionSourceFile: urllib
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e0db940>
    - <ast.Constant object at 0x7f9a4e0db970>
    - <ast.Constant object at 0x7f9a4e0db9a0>
    - <ast.Constant object at 0x7f9a4e0db9d0>
    argNames:
    - self
    - headers
    - url
    - filename
    - body
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 118
    functionName: scrapy.responsetypes.ResponseTypes.from_args
    functionSourceFile: scrapy.responsetypes
    functionUses: 14
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlencode.lower
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: -1
    functionName: scrapy.__main__
    functionSourceFile: scrapy.__main__
    functionUses: 0
    functionsReached:
    - cmd.long_desc
    - argparse.ArgumentParser.__init__
    - <builtin>.bool
    - scrapy.utils.conf.get_config
    - handler.setLevel
    - system_openssl_bytes.decode
    - cmd.add_options
    - scrapy.settings.BaseSettings._assert_mutability
    - configparser.ConfigParser.get
    - twisted.python.log.PythonLoggingObserver
    - scrapy.crawler.CrawlerProcess.__init__
    - arg.startswith
    - pathlib.Path.resolve
    - scrapy.cmdline.execute
    - p.runctx
    - scrapy.utils.conf.closest_scrapy_cfg
    - <builtin>.vars
    - key.isupper
    - scrapy.settings.BaseSettings.get
    - scrapy.utils.project.inside_project
    - cmds.items
    - scrapy.cmdline._get_commands_from_module
    - scrapy.utils.log.StreamLogger.__init__
    - cmd.syntax
    - scrapy.cmdline._print_unknown_command
    - os.environ.get
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - argparse.ArgumentParser.error
    - <builtin>.int
    - cfgfile.exists
    - pathlib.Path.expanduser
    - <builtin>.isinstance
    - sys.exit
    - scrapy.cmdline._print_header
    - pkgutil.iter_modules
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.cmdline._run_command_profiled
    - os.environ.items
    - <builtin>.print
    - scrapy.utils.log._get_handler
    - inspect.isclass
    - scrapy.utils.project.get_project_settings
    - <builtin>.super
    - configparser.ConfigParser.read
    - logging.Formatter
    - <builtin>.dir
    - scrapy.cmdline._pop_command_name
    - <builtin>.str
    - scrapy.utils.conf.get_sources
    - argparse.ArgumentParser.parse_known_args
    - logging.StreamHandler
    - typing.cast.getpriority
    - <builtin>.getattr
    - scrapy.utils.misc.walk_modules
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - cmd.run
    - importlib.import_module
    - typing.cast.items
    - OpenSSL.SSL.SSLeay_version
    - scrapy.cmdline._iter_command_classes
    - <builtin>.hasattr
    - scrapy.cmdline._run_print_help
    - scrapy.utils.log.log_scrapy_info
    - logging.captureWarnings
    - argparse.ArgumentParser.print_help
    - <builtin>.locals
    - k.startswith
    - cmds.update
    - json.loads
    - scrapy.cmdline._get_commands_from_entry_points
    - logging.FileHandler
    - logging.root.addHandler
    - pathlib.Path
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.settings.BaseSettings.__init__
    - platform.platform
    - p.dump_stats
    - importlib.metadata.entry_points
    - scrapy.settings.BaseSettings.setdict
    - warnings.warn
    - mods.append
    - handler.setFormatter
    - logging.root.removeHandler
    - logger.info
    - sys.path.append
    - <builtin>.map
    - scrapy.settings.BaseSettings.maxpriority
    - configparser.ConfigParser.has_option
    - sys.stderr.write
    - sources.append
    - scrapy.settings.get_settings_priority
    - logging.config.dictConfig
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.sorted
    - scrapy.settings.Settings.__init__
    - logging.root.setLevel
    - cProfile.Profile
    - twisted.version.short
    - importlib.metadata.entry_points.load
    - <builtin>.globals
    - scrapy.utils.versions.scrapy_components_versions
    - typing.cast
    - observer.start
    - scrapy.utils.conf.init_env
    - <builtin>.issubclass
    - importlib.metadata.entry_points.get
    - scrapy.settings.BaseSettings.getbool
    - scrapy.cmdline._run_command
    - scrapy.settings.BaseSettings.set
    - logging.getLogger
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.utils.ssl.get_openssl_version
    - cmd.__module__.split
    - cmdclass.short_desc
    - configparser.ConfigParser
    - scrapy.cmdline._get_commands_dict
    - k.replace
    - sys.version.replace
    - handler.addFilter
    - <builtin>.len
    - scrapy.cmdline._print_commands
    - scrapy.utils.log.configure_logging
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 9
    IfCount: 4
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e1803d0>
    - <ast.Constant object at 0x7f9a4e180400>
    argNames:
    - argv
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 123
    functionName: scrapy.cmdline.execute
    functionSourceFile: scrapy.cmdline
    functionUses: 2
    functionsReached:
    - cmd.long_desc
    - argparse.ArgumentParser.__init__
    - <builtin>.bool
    - scrapy.utils.conf.get_config
    - handler.setLevel
    - system_openssl_bytes.decode
    - cmd.add_options
    - scrapy.settings.BaseSettings._assert_mutability
    - configparser.ConfigParser.get
    - twisted.python.log.PythonLoggingObserver
    - scrapy.crawler.CrawlerProcess.__init__
    - arg.startswith
    - pathlib.Path.resolve
    - p.runctx
    - scrapy.utils.conf.closest_scrapy_cfg
    - <builtin>.vars
    - key.isupper
    - scrapy.settings.BaseSettings.get
    - scrapy.utils.project.inside_project
    - cmds.items
    - scrapy.cmdline._get_commands_from_module
    - scrapy.utils.log.StreamLogger.__init__
    - cmd.syntax
    - scrapy.cmdline._print_unknown_command
    - os.environ.get
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - argparse.ArgumentParser.error
    - <builtin>.int
    - cfgfile.exists
    - pathlib.Path.expanduser
    - <builtin>.isinstance
    - sys.exit
    - scrapy.cmdline._print_header
    - pkgutil.iter_modules
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.cmdline._run_command_profiled
    - os.environ.items
    - <builtin>.print
    - scrapy.utils.log._get_handler
    - inspect.isclass
    - scrapy.utils.project.get_project_settings
    - <builtin>.super
    - configparser.ConfigParser.read
    - logging.Formatter
    - <builtin>.dir
    - scrapy.cmdline._pop_command_name
    - <builtin>.str
    - scrapy.utils.conf.get_sources
    - argparse.ArgumentParser.parse_known_args
    - logging.StreamHandler
    - typing.cast.getpriority
    - <builtin>.getattr
    - scrapy.utils.misc.walk_modules
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - cmd.run
    - importlib.import_module
    - typing.cast.items
    - OpenSSL.SSL.SSLeay_version
    - scrapy.cmdline._iter_command_classes
    - <builtin>.hasattr
    - scrapy.cmdline._run_print_help
    - scrapy.utils.log.log_scrapy_info
    - logging.captureWarnings
    - argparse.ArgumentParser.print_help
    - <builtin>.locals
    - k.startswith
    - cmds.update
    - json.loads
    - scrapy.cmdline._get_commands_from_entry_points
    - logging.FileHandler
    - logging.root.addHandler
    - pathlib.Path
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.settings.BaseSettings.__init__
    - platform.platform
    - p.dump_stats
    - importlib.metadata.entry_points
    - scrapy.settings.BaseSettings.setdict
    - warnings.warn
    - mods.append
    - handler.setFormatter
    - logging.root.removeHandler
    - logger.info
    - sys.path.append
    - <builtin>.map
    - scrapy.settings.BaseSettings.maxpriority
    - configparser.ConfigParser.has_option
    - sys.stderr.write
    - sources.append
    - scrapy.settings.get_settings_priority
    - logging.config.dictConfig
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.sorted
    - scrapy.settings.Settings.__init__
    - logging.root.setLevel
    - cProfile.Profile
    - twisted.version.short
    - importlib.metadata.entry_points.load
    - <builtin>.globals
    - scrapy.utils.versions.scrapy_components_versions
    - typing.cast
    - observer.start
    - scrapy.utils.conf.init_env
    - <builtin>.issubclass
    - importlib.metadata.entry_points.get
    - scrapy.settings.BaseSettings.getbool
    - scrapy.cmdline._run_command
    - scrapy.settings.BaseSettings.set
    - logging.getLogger
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.utils.ssl.get_openssl_version
    - cmd.__module__.split
    - cmdclass.short_desc
    - configparser.ConfigParser
    - scrapy.cmdline._get_commands_dict
    - k.replace
    - sys.version.replace
    - handler.addFilter
    - <builtin>.len
    - scrapy.cmdline._print_commands
    - scrapy.utils.log.configure_logging
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: -1
    functionName: scrapy.cmdline
    functionSourceFile: scrapy.cmdline
    functionUses: 0
    functionsReached:
    - cmd.long_desc
    - argparse.ArgumentParser.__init__
    - <builtin>.bool
    - scrapy.utils.conf.get_config
    - handler.setLevel
    - system_openssl_bytes.decode
    - cmd.add_options
    - scrapy.settings.BaseSettings._assert_mutability
    - configparser.ConfigParser.get
    - twisted.python.log.PythonLoggingObserver
    - scrapy.crawler.CrawlerProcess.__init__
    - arg.startswith
    - pathlib.Path.resolve
    - scrapy.cmdline.execute
    - p.runctx
    - scrapy.utils.conf.closest_scrapy_cfg
    - <builtin>.vars
    - key.isupper
    - scrapy.settings.BaseSettings.get
    - scrapy.utils.project.inside_project
    - cmds.items
    - scrapy.cmdline._get_commands_from_module
    - scrapy.utils.log.StreamLogger.__init__
    - cmd.syntax
    - scrapy.cmdline._print_unknown_command
    - os.environ.get
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - argparse.ArgumentParser.error
    - <builtin>.int
    - cfgfile.exists
    - pathlib.Path.expanduser
    - <builtin>.isinstance
    - sys.exit
    - scrapy.cmdline._print_header
    - pkgutil.iter_modules
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.cmdline._run_command_profiled
    - os.environ.items
    - <builtin>.print
    - scrapy.utils.log._get_handler
    - inspect.isclass
    - scrapy.utils.project.get_project_settings
    - <builtin>.super
    - configparser.ConfigParser.read
    - logging.Formatter
    - <builtin>.dir
    - scrapy.cmdline._pop_command_name
    - <builtin>.str
    - scrapy.utils.conf.get_sources
    - argparse.ArgumentParser.parse_known_args
    - gc.collect
    - logging.StreamHandler
    - typing.cast.getpriority
    - <builtin>.getattr
    - scrapy.utils.misc.walk_modules
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - cmd.run
    - importlib.import_module
    - typing.cast.items
    - OpenSSL.SSL.SSLeay_version
    - scrapy.cmdline._iter_command_classes
    - <builtin>.hasattr
    - scrapy.cmdline._run_print_help
    - scrapy.utils.log.log_scrapy_info
    - logging.captureWarnings
    - argparse.ArgumentParser.print_help
    - <builtin>.locals
    - k.startswith
    - cmds.update
    - json.loads
    - scrapy.cmdline._get_commands_from_entry_points
    - logging.FileHandler
    - logging.root.addHandler
    - pathlib.Path
    - scrapy.utils.log.install_scrapy_root_handler
    - scrapy.settings.BaseSettings.__init__
    - platform.platform
    - p.dump_stats
    - importlib.metadata.entry_points
    - scrapy.settings.BaseSettings.setdict
    - warnings.warn
    - mods.append
    - handler.setFormatter
    - logging.root.removeHandler
    - logger.info
    - sys.path.append
    - <builtin>.map
    - scrapy.settings.BaseSettings.maxpriority
    - configparser.ConfigParser.has_option
    - sys.stderr.write
    - sources.append
    - scrapy.settings.get_settings_priority
    - logging.config.dictConfig
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.sorted
    - scrapy.settings.Settings.__init__
    - logging.root.setLevel
    - cProfile.Profile
    - twisted.version.short
    - importlib.metadata.entry_points.load
    - <builtin>.globals
    - scrapy.utils.versions.scrapy_components_versions
    - typing.cast
    - observer.start
    - scrapy.utils.conf.init_env
    - <builtin>.issubclass
    - importlib.metadata.entry_points.get
    - scrapy.settings.BaseSettings.getbool
    - scrapy.cmdline._run_command
    - scrapy.settings.BaseSettings.set
    - logging.getLogger
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.utils.ssl.get_openssl_version
    - cmd.__module__.split
    - cmdclass.short_desc
    - scrapy.utils.python.garbage_collect
    - configparser.ConfigParser
    - scrapy.cmdline._get_commands_dict
    - k.replace
    - sys.version.replace
    - handler.addFilter
    - <builtin>.len
    - scrapy.cmdline._print_commands
    - scrapy.utils.log.configure_logging
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - arg_string
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 18
    functionName: scrapy.cmdline.ScrapyArgumentParser._parse_optional
    functionSourceFile: scrapy.cmdline
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - module_name
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 26
    functionName: scrapy.cmdline._iter_command_classes
    functionSourceFile: scrapy.cmdline
    functionUses: 6
    functionsReached:
    - scrapy.utils.misc.walk_modules
    - <builtin>.hasattr
    - <builtin>.vars
    - pkgutil.iter_modules
    - <builtin>.issubclass
    - mods.append
    - inspect.isclass
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - module
    - inproject
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 40
    functionName: scrapy.cmdline._get_commands_from_module
    functionSourceFile: scrapy.cmdline
    functionUses: 5
    functionsReached:
    - scrapy.utils.misc.walk_modules
    - <builtin>.hasattr
    - <builtin>.vars
    - pkgutil.iter_modules
    - cmd.__module__.split
    - <builtin>.issubclass
    - mods.append
    - inspect.isclass
    - scrapy.cmdline._iter_command_classes
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cmd.__module__.split
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e25f850>
    argNames:
    - inproject
    - group
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 49
    functionName: scrapy.cmdline._get_commands_from_entry_points
    functionSourceFile: scrapy.cmdline
    functionUses: 5
    functionsReached:
    - importlib.metadata.entry_points.get
    - inspect.isclass
    - importlib.metadata.entry_points
    - importlib.metadata.entry_points.load
    linkageType: pythonLinkage
    raised:
    - Exception
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: importlib.metadata.entry_points
    functionSourceFile: importlib
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: importlib.metadata.entry_points.get
    functionSourceFile: importlib
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: importlib.metadata.entry_points.load
    functionSourceFile: importlib
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - settings
    - inproject
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 64
    functionName: scrapy.cmdline._get_commands_dict
    functionSourceFile: scrapy.cmdline
    functionUses: 4
    functionsReached:
    - scrapy.utils.misc.walk_modules
    - <builtin>.hasattr
    - <builtin>.vars
    - importlib.metadata.entry_points
    - importlib.metadata.entry_points.load
    - pkgutil.iter_modules
    - cmd.__module__.split
    - cmds.update
    - scrapy.cmdline._get_commands_from_entry_points
    - mods.append
    - scrapy.cmdline._get_commands_from_module
    - <builtin>.issubclass
    - importlib.metadata.entry_points.get
    - inspect.isclass
    - scrapy.cmdline._iter_command_classes
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cmds.update
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - argv
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 73
    functionName: scrapy.cmdline._pop_command_name
    functionSourceFile: scrapy.cmdline
    functionUses: 3
    functionsReached:
    - arg.startswith
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: arg.startswith
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - settings
    - inproject
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 82
    functionName: scrapy.cmdline._print_header
    functionSourceFile: scrapy.cmdline
    functionUses: 5
    functionsReached:
    - <builtin>.print
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 9
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - settings
    - inproject
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 91
    functionName: scrapy.cmdline._print_commands
    functionSourceFile: scrapy.cmdline
    functionUses: 3
    functionsReached:
    - scrapy.utils.misc.walk_modules
    - <builtin>.vars
    - importlib.metadata.entry_points.load
    - cmds.items
    - scrapy.cmdline._get_commands_from_module
    - scrapy.cmdline._iter_command_classes
    - importlib.import_module
    - <builtin>.hasattr
    - cmds.update
    - scrapy.cmdline._get_commands_from_entry_points
    - <builtin>.issubclass
    - importlib.metadata.entry_points.get
    - scrapy.cmdline._print_header
    - importlib.metadata.entry_points
    - pkgutil.iter_modules
    - cmd.__module__.split
    - <builtin>.print
    - mods.append
    - inspect.isclass
    - cmdclass.short_desc
    - scrapy.cmdline._get_commands_dict
    - <builtin>.sorted
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cmds.items
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cmdclass.short_desc
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - settings
    - cmdname
    - inproject
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 106
    functionName: scrapy.cmdline._print_unknown_command
    functionSourceFile: scrapy.cmdline
    functionUses: 3
    functionsReached:
    - scrapy.cmdline._print_header
    - <builtin>.print
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - parser
    - func
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 112
    functionName: scrapy.cmdline._run_print_help
    functionSourceFile: scrapy.cmdline
    functionUses: 3
    functionsReached:
    - cProfile.Profile
    - p.dump_stats
    - sys.exit
    - p.runctx
    - argparse.ArgumentParser.error
    - argparse.ArgumentParser.print_help
    - scrapy.cmdline._run_command_profiled
    - sys.stderr.write
    - <builtin>.locals
    - <builtin>.globals
    - <builtin>.str
    - cmd.run
    - scrapy.cmdline._run_command
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - cmd
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 165
    functionName: scrapy.cmdline._run_command
    functionSourceFile: scrapy.cmdline
    functionUses: 4
    functionsReached:
    - cProfile.Profile
    - p.dump_stats
    - p.runctx
    - scrapy.cmdline._run_command_profiled
    - sys.stderr.write
    - <builtin>.locals
    - <builtin>.globals
    - cmd.run
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: argparse.ArgumentParser.error
    functionSourceFile: argparse
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: argparse.ArgumentParser.print_help
    functionSourceFile: argparse
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 65
    functionName: scrapy.utils.project.get_project_settings
    functionSourceFile: scrapy.utils.project
    functionUses: 3
    functionsReached:
    - scrapy.utils.conf.closest_scrapy_cfg
    - key.isupper
    - typing.cast
    - scrapy.utils.conf.get_config
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - scrapy.utils.conf.init_env
    - importlib.import_module
    - typing.cast.items
    - os.environ.get
    - k.startswith
    - cfgfile.exists
    - json.loads
    - pathlib.Path
    - pathlib.Path.expanduser
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.BaseSettings.setdict
    - scrapy.settings.SettingsAttribute.__init__
    - configparser.ConfigParser.get
    - os.environ.items
    - configparser.ConfigParser.read
    - <builtin>.super
    - configparser.ConfigParser
    - <builtin>.dir
    - sys.path.append
    - scrapy.settings.BaseSettings.maxpriority
    - k.replace
    - configparser.ConfigParser.has_option
    - sources.append
    - scrapy.settings.get_settings_priority
    - pathlib.Path.resolve
    - <builtin>.str
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.utils.conf.get_sources
    - scrapy.settings.Settings.__init__
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 16
    functionName: scrapy.utils.project.inside_project
    functionSourceFile: scrapy.utils.project
    functionUses: 7
    functionsReached:
    - scrapy.utils.conf.closest_scrapy_cfg
    - <builtin>.bool
    - os.environ.get
    - warnings.warn
    - cfgfile.exists
    - pathlib.Path.resolve
    - <builtin>.str
    - pathlib.Path
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cmd.syntax
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cmd.long_desc
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cmd.add_options
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - cmd
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 172
    functionName: scrapy.cmdline._run_command_profiled
    functionSourceFile: scrapy.cmdline
    functionUses: 5
    functionsReached:
    - cProfile.Profile
    - p.dump_stats
    - p.runctx
    - sys.stderr.write
    - <builtin>.locals
    - <builtin>.globals
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cmd.run
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sys.stderr.write
    functionSourceFile: sys
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.locals
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cProfile.Profile
    functionSourceFile: cProfile
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.globals
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: p.runctx
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: p.dump_stats
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.project
    functionSourceFile: scrapy.utils.project
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 2
    IfCount: 4
    argCount: 1
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c002160>
    argNames:
    - project
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 30
    functionName: scrapy.utils.project.project_data_dir
    functionSourceFile: scrapy.utils.project
    functionUses: 3
    functionsReached:
    - scrapy.utils.conf.closest_scrapy_cfg
    - <builtin>.bool
    - pathlib.Path.mkdir
    - scrapy.utils.conf.get_config
    - scrapy.utils.project.inside_project
    - importlib.import_module
    - os.environ.get
    - cfgfile.exists
    - pathlib.Path
    - pathlib.Path.expanduser
    - pathlib.Path.parent.resolve
    - warnings.warn
    - configparser.ConfigParser.get
    - pathlib.Path.exists
    - configparser.ConfigParser.read
    - configparser.ConfigParser
    - configparser.ConfigParser.has_option
    - sources.append
    - pathlib.Path.resolve
    - <builtin>.str
    - scrapy.utils.conf.get_sources
    linkageType: pythonLinkage
    raised:
    - NotConfigured
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 2
    IfCount: 3
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6dbaf0>
    argNames:
    - path
    - createdir
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 49
    functionName: scrapy.utils.project.data_path
    functionSourceFile: scrapy.utils.project
    functionUses: 2
    functionsReached:
    - scrapy.utils.conf.closest_scrapy_cfg
    - <builtin>.bool
    - pathlib.Path.mkdir
    - scrapy.utils.conf.get_config
    - scrapy.utils.project.inside_project
    - importlib.import_module
    - os.environ.get
    - scrapy.utils.project.project_data_dir
    - cfgfile.exists
    - pathlib.Path
    - pathlib.Path.expanduser
    - pathlib.Path.parent.resolve
    - warnings.warn
    - configparser.ConfigParser.get
    - pathlib.Path.exists
    - configparser.ConfigParser.read
    - configparser.ConfigParser
    - configparser.ConfigParser.has_option
    - sources.append
    - pathlib.Path.resolve
    - <builtin>.str
    - pathlib.Path.is_absolute
    - scrapy.utils.conf.get_sources
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.is_absolute
    functionSourceFile: pathlib
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.environ.items
    functionSourceFile: os
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: k.startswith
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: k.replace
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands
    functionSourceFile: scrapy.commands
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 25
    functionName: scrapy.commands.ScrapyCommand.__init__
    functionSourceFile: scrapy.commands
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 28
    functionName: scrapy.commands.ScrapyCommand.set_crawler
    functionSourceFile: scrapy.commands
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 33
    functionName: scrapy.commands.ScrapyCommand.syntax
    functionSourceFile: scrapy.commands
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 39
    functionName: scrapy.commands.ScrapyCommand.short_desc
    functionSourceFile: scrapy.commands
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 45
    functionName: scrapy.commands.ScrapyCommand.long_desc
    functionSourceFile: scrapy.commands
    functionUses: 1
    functionsReached:
    - scrapy.commands.ScrapyCommand.short_desc
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 52
    functionName: scrapy.commands.ScrapyCommand.help
    functionSourceFile: scrapy.commands
    functionUses: 0
    functionsReached:
    - scrapy.commands.ScrapyCommand.short_desc
    - scrapy.commands.ScrapyCommand.long_desc
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 8
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - parser
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 59
    functionName: scrapy.commands.ScrapyCommand.add_options
    functionSourceFile: scrapy.commands
    functionUses: 8
    functionsReached:
    - group.add_argument
    - parser.add_argument_group
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parser.add_argument_group
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: group.add_argument
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 8
    IfCount: 5
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 94
    functionName: scrapy.commands.ScrapyCommand.process_options
    functionSourceFile: scrapy.commands
    functionUses: 2
    functionsReached:
    - <builtin>.dict
    - os.getpid
    - twisted.python.failure.startDebugMode
    - <builtin>.str
    - scrapy.utils.conf.arglist_to_dict
    - pathlib.Path
    - x.split
    - pathlib.Path.write_text
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.getpid
    functionSourceFile: os
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.write_text
    functionSourceFile: pathlib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.python.failure.startDebugMode
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 119
    functionName: scrapy.commands.ScrapyCommand.run
    functionSourceFile: scrapy.commands
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 5
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - parser
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 131
    functionName: scrapy.commands.BaseRunSpiderCommand.add_options
    functionSourceFile: scrapy.commands
    functionUses: 1
    functionsReached:
    - scrapy.commands.ScrapyCommand.add_options
    - parser.add_argument
    - parser.add_argument_group
    - group.add_argument
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parser.add_argument
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 164
    functionName: scrapy.commands.BaseRunSpiderCommand.process_options
    functionSourceFile: scrapy.commands
    functionUses: 1
    functionsReached:
    - settings.getdict
    - settings.getwithbase
    - scrapy.utils.conf.feed_process_params_from_cli.check_valid_format
    - x.split
    - os.getpid
    - pathlib.Path
    - result.update
    - scrapy.commands.ScrapyCommand.process_options
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - pathlib.Path.write_text
    - scrapy.utils.conf.feed_process_params_from_cli
    - twisted.python.failure.startDebugMode
    - warnings.warn
    - element.rsplit
    - <builtin>.type
    - <builtin>.dict
    - iterable.items
    - <builtin>.str
    - pathlib.Path.suffix.replace
    - scrapy.utils.conf.arglist_to_dict
    - <builtin>.len
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b868370>
    - <ast.Constant object at 0x7f9a4b868eb0>
    - <ast.Constant object at 0x7f9a4e59a760>
    argNames:
    - self
    - prog
    - indent_increment
    - max_help_position
    - width
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 185
    functionName: scrapy.commands.ScrapyHelpFormatter.__init__
    functionSourceFile: scrapy.commands
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - part_strings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 193
    functionName: scrapy.commands.ScrapyHelpFormatter._join_parts
    functionSourceFile: scrapy.commands
    functionUses: 0
    functionsReached:
    - part_strings.insert
    - <builtin>.range
    - <builtin>.len
    - scrapy.commands.ScrapyHelpFormatter.format_part_strings
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - part_strings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 197
    functionName: scrapy.commands.ScrapyHelpFormatter.format_part_strings
    functionSourceFile: scrapy.commands
    functionUses: 1
    functionsReached:
    - <builtin>.range
    - part_strings.insert
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: part_strings.insert
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.pqueues
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - text
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 9
    functionName: scrapy.pqueues._path_safe
    functionSourceFile: scrapy.pqueues
    functionUses: 4
    functionsReached:
    - c.isalnum
    - text.encode
    - hashlib.md5
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: c.isalnum
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: text.encode
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Tuple object at 0x7f9a4b26ee20>
    argNames:
    - cls
    - crawler
    - downstream_queue_cls
    - key
    - startprios
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 54
    functionName: scrapy.pqueues.ScrapyPriorityQueue.from_crawler
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - <builtin>.str
    - scrapy.pqueues.ScrapyPriorityQueue.init_prios
    - <builtin>.min
    - objcls.from_crawler
    - scrapy.pqueues.ScrapyPriorityQueue.__init__
    - scrapy.pqueues.ScrapyPriorityQueue.qfactory
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Tuple object at 0x7f9a4b26eac0>
    argNames:
    - self
    - crawler
    - downstream_queue_cls
    - key
    - startprios
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 57
    functionName: scrapy.pqueues.ScrapyPriorityQueue.__init__
    functionSourceFile: scrapy.pqueues
    functionUses: 5
    functionsReached:
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - <builtin>.str
    - scrapy.pqueues.ScrapyPriorityQueue.init_prios
    - <builtin>.min
    - objcls.from_crawler
    - scrapy.pqueues.ScrapyPriorityQueue.qfactory
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - startprios
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 65
    functionName: scrapy.pqueues.ScrapyPriorityQueue.init_prios
    functionSourceFile: scrapy.pqueues
    functionUses: 6
    functionsReached:
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - <builtin>.str
    - <builtin>.min
    - objcls.from_crawler
    - scrapy.pqueues.ScrapyPriorityQueue.qfactory
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - key
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 74
    functionName: scrapy.pqueues.ScrapyPriorityQueue.qfactory
    functionSourceFile: scrapy.pqueues
    functionUses: 8
    functionsReached:
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - <builtin>.str
    - objcls.from_crawler
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 81
    functionName: scrapy.pqueues.ScrapyPriorityQueue.priority
    functionSourceFile: scrapy.pqueues
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 84
    functionName: scrapy.pqueues.ScrapyPriorityQueue.push
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - <builtin>.str
    - scrapy.pqueues.ScrapyPriorityQueue.priority
    - q.push
    - objcls.from_crawler
    - scrapy.pqueues.ScrapyPriorityQueue.qfactory
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: q.push
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 93
    functionName: scrapy.pqueues.ScrapyPriorityQueue.pop
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - <builtin>.min
    - q.close
    - q.pop
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: q.pop
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: q.close
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 105
    functionName: scrapy.pqueues.ScrapyPriorityQueue.peek
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - queue.peek
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: queue.peek
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 117
    functionName: scrapy.pqueues.ScrapyPriorityQueue.close
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - q.close
    - active.append
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: active.append
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 124
    functionName: scrapy.pqueues.ScrapyPriorityQueue.__len__
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - <builtin>.len
    - <builtin>.sum
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.sum
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 129
    functionName: scrapy.pqueues.DownloaderInterface.__init__
    functionSourceFile: scrapy.pqueues
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - possible_slots
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 132
    functionName: scrapy.pqueues.DownloaderInterface.stats
    functionSourceFile: scrapy.pqueues
    functionUses: 2
    functionsReached:
    - <builtin>.len
    - scrapy.pqueues.DownloaderInterface._active_downloads
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - slot
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 138
    functionName: scrapy.pqueues.DownloaderInterface._active_downloads
    functionSourceFile: scrapy.pqueues
    functionUses: 3
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 135
    functionName: scrapy.pqueues.DownloaderInterface.get_slot_key
    functionSourceFile: scrapy.pqueues
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Tuple object at 0x7f9a4d3d8460>
    argNames:
    - cls
    - crawler
    - downstream_queue_cls
    - key
    - startprios
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 152
    functionName: scrapy.pqueues.DownloaderAwarePriorityQueue.from_crawler
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.pqueues.DownloaderInterface.__init__
    - text.encode
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - scrapy.pqueues.ScrapyPriorityQueue.qfactory
    - scrapy.pqueues._path_safe
    - <builtin>.str
    - scrapy.pqueues.ScrapyPriorityQueue.init_prios
    - scrapy.pqueues.DownloaderAwarePriorityQueue.__init__
    - <builtin>.min
    - objcls.from_crawler
    - scrapy.pqueues.ScrapyPriorityQueue.__init__
    - c.isalnum
    - crawler.settings.getint
    - hashlib.md5
    - scrapy.pqueues.DownloaderAwarePriorityQueue.pqfactory
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 5
    argDefaultValues:
    - <ast.Tuple object at 0x7f9a4e9a5550>
    argNames:
    - self
    - crawler
    - downstream_queue_cls
    - key
    - slot_startprios
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 155
    functionName: scrapy.pqueues.DownloaderAwarePriorityQueue.__init__
    functionSourceFile: scrapy.pqueues
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.pqueues.DownloaderInterface.__init__
    - text.encode
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - scrapy.pqueues.ScrapyPriorityQueue.qfactory
    - scrapy.pqueues._path_safe
    - <builtin>.str
    - scrapy.pqueues.ScrapyPriorityQueue.init_prios
    - <builtin>.min
    - objcls.from_crawler
    - scrapy.pqueues.ScrapyPriorityQueue.__init__
    - c.isalnum
    - crawler.settings.getint
    - hashlib.md5
    - scrapy.pqueues.DownloaderAwarePriorityQueue.pqfactory
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Tuple object at 0x7f9a4b27daf0>
    argNames:
    - self
    - slot
    - startprios
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 181
    functionName: scrapy.pqueues.DownloaderAwarePriorityQueue.pqfactory
    functionSourceFile: scrapy.pqueues
    functionUses: 3
    functionsReached:
    - <builtin>.hasattr
    - text.encode
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - scrapy.pqueues._path_safe
    - <builtin>.str
    - scrapy.pqueues.ScrapyPriorityQueue.init_prios
    - <builtin>.min
    - objcls.from_crawler
    - scrapy.pqueues.ScrapyPriorityQueue.__init__
    - c.isalnum
    - hashlib.md5
    - scrapy.pqueues.ScrapyPriorityQueue.qfactory
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 189
    functionName: scrapy.pqueues.DownloaderAwarePriorityQueue.pop
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - queue.pop
    - scrapy.pqueues.DownloaderInterface._active_downloads
    - scrapy.pqueues.DownloaderInterface.stats
    - <builtin>.min
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: queue.pop
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 202
    functionName: scrapy.pqueues.DownloaderAwarePriorityQueue.push
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - text.encode
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - scrapy.pqueues._path_safe
    - queue.push
    - <builtin>.str
    - scrapy.pqueues.ScrapyPriorityQueue.init_prios
    - <builtin>.min
    - objcls.from_crawler
    - scrapy.pqueues.DownloaderInterface.get_slot_key
    - scrapy.pqueues.ScrapyPriorityQueue.__init__
    - c.isalnum
    - scrapy.pqueues.ScrapyPriorityQueue.qfactory
    - hashlib.md5
    - scrapy.pqueues.DownloaderAwarePriorityQueue.pqfactory
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: queue.push
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 209
    functionName: scrapy.pqueues.DownloaderAwarePriorityQueue.peek
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - scrapy.pqueues.DownloaderInterface._active_downloads
    - scrapy.pqueues.DownloaderInterface.stats
    - queue.peek
    - <builtin>.min
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 223
    functionName: scrapy.pqueues.DownloaderAwarePriorityQueue.close
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - queue.close
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: queue.close
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 228
    functionName: scrapy.pqueues.DownloaderAwarePriorityQueue.__len__
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached:
    - <builtin>.len
    - <builtin>.sum
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - slot
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 231
    functionName: scrapy.pqueues.DownloaderAwarePriorityQueue.__contains__
    functionSourceFile: scrapy.pqueues
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.squeues
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - scrapy.squeues._serializable_queue
    - scrapy.squeues._with_mkdir
    - scrapy.squeues._scrapy_non_serialization_queue
    - scrapy.squeues._scrapy_serialization_queue
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - queue_class
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 16
    functionName: scrapy.squeues._with_mkdir
    functionSourceFile: scrapy.squeues
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - path
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 18
    functionName: scrapy.squeues._with_mkdir.DirectoriesCreated.__init__
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - pathlib.Path.parent.mkdir
    - pathlib.Path.parent.exists
    - pathlib.Path
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.parent.exists
    functionSourceFile: pathlib
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.parent.mkdir
    functionSourceFile: pathlib
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - queue_class
    - serialize
    - deserialize
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 27
    functionName: scrapy.squeues._serializable_queue
    functionSourceFile: scrapy.squeues
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - obj
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 29
    functionName: scrapy.squeues._serializable_queue.SerializableQueue.push
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - scrapy.squeues._pickle_serialize
    - marshal.dumps
    - pickle.dumps
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: marshal.dumps
    functionSourceFile: marshal
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - obj
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 116
    functionName: scrapy.squeues._pickle_serialize
    functionSourceFile: scrapy.squeues
    functionUses: 1
    functionsReached:
    - pickle.dumps
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 33
    functionName: scrapy.squeues._serializable_queue.SerializableQueue.pop
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - marshal.loads
    - pickle.loads
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: marshal.loads
    functionSourceFile: marshal
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pickle.loads
    functionSourceFile: pickle
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 38
    functionName: scrapy.squeues._serializable_queue.SerializableQueue.peek
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - marshal.loads
    - pickle.loads
    - <builtin>.super
    linkageType: pythonLinkage
    raised:
    - NotImplementedError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - queue_class
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 57
    functionName: scrapy.squeues._scrapy_serialization_queue
    functionSourceFile: scrapy.squeues
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - crawler
    - key
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 59
    functionName: scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.__init__
    functionSourceFile: scrapy.squeues
    functionUses: 1
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - key
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 64
    functionName: scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.from_crawler
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.__init__
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 67
    functionName: scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.push
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - request.to_dict
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.to_dict
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 71
    functionName: scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.pop
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - scrapy.utils.request.request_from_dict
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - d.items
    - typing.cast.rindex
    - scrapy.utils.request._get_method
    - <builtin>.str
    - <builtin>.callable
    - <builtin>.getattr
    - d.get
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 77
    functionName: scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.peek
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - scrapy.utils.request.request_from_dict
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - d.items
    - typing.cast.rindex
    - scrapy.utils.request._get_method
    - <builtin>.str
    - <builtin>.callable
    - <builtin>.getattr
    - d.get
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - queue_class
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 92
    functionName: scrapy.squeues._scrapy_non_serialization_queue
    functionSourceFile: scrapy.squeues
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 95
    functionName: scrapy.squeues._scrapy_non_serialization_queue.ScrapyRequestQueue.from_crawler
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - queuelib.queue.LifoMemoryQueue.__init__
    - queuelib.queue.FifoMemoryQueue.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: queuelib.queue.LifoMemoryQueue.__init__
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: queuelib.queue.FifoMemoryQueue.__init__
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 98
    functionName: scrapy.squeues._scrapy_non_serialization_queue.ScrapyRequestQueue.peek
    functionSourceFile: scrapy.squeues
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised:
    - NotImplementedError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pickle.dumps
    functionSourceFile: pickle
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.robotstxt
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e299430>
    argNames:
    - robotstxt_body
    - spider
    - to_native_str_type
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 21
    functionName: scrapy.robotstxt.decode_robotstxt
    functionSourceFile: scrapy.robotstxt
    functionUses: 6
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - sys.exc_info
    - logger.warning
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sys.exc_info
    functionSourceFile: sys
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.robotstxt.RobotParser
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached:
    - abc.abstractmethod
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - robotstxt_body
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 43
    functionName: scrapy.robotstxt.RobotParser.from_crawler
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - url
    - user_agent
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 56
    functionName: scrapy.robotstxt.RobotParser.allowed
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - robotstxt_body
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 69
    functionName: scrapy.robotstxt.PythonRobotParser.__init__
    functionSourceFile: scrapy.robotstxt
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - sys.exc_info
    - robotstxt_body.splitlines
    - scrapy.robotstxt.PythonRobotParser.rp.parse
    - logger.warning
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - scrapy.robotstxt.decode_robotstxt
    - urllib.robotparser.RobotFileParser
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.robotparser.RobotFileParser
    functionSourceFile: urllib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: robotstxt_body.splitlines
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.robotstxt.PythonRobotParser.rp.parse
    functionSourceFile: scrapy
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - robotstxt_body
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 80
    functionName: scrapy.robotstxt.PythonRobotParser.from_crawler
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - sys.exc_info
    - robotstxt_body.splitlines
    - scrapy.robotstxt.PythonRobotParser.rp.parse
    - logger.warning
    - scrapy.robotstxt.PythonRobotParser.__init__
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - scrapy.robotstxt.decode_robotstxt
    - urllib.robotparser.RobotFileParser
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - url
    - user_agent
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 85
    functionName: scrapy.robotstxt.PythonRobotParser.allowed
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - urllib.robotparser.RobotFileParser.can_fetch
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.robotparser.RobotFileParser.can_fetch
    functionSourceFile: urllib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - robotstxt_body
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 92
    functionName: scrapy.robotstxt.ReppyRobotParser.__init__
    functionSourceFile: scrapy.robotstxt
    functionUses: 1
    functionsReached:
    - warnings.warn
    - reppy.robots.Robots.parse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: reppy.robots.Robots.parse
    functionSourceFile: reppy
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - robotstxt_body
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 100
    functionName: scrapy.robotstxt.ReppyRobotParser.from_crawler
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached:
    - warnings.warn
    - scrapy.robotstxt.ReppyRobotParser.__init__
    - reppy.robots.Robots.parse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - url
    - user_agent
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 105
    functionName: scrapy.robotstxt.ReppyRobotParser.allowed
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - robotstxt_body
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 110
    functionName: scrapy.robotstxt.RerpRobotParser.__init__
    functionSourceFile: scrapy.robotstxt
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.robotstxt.RerpRobotParser.rp.parse
    - robotexclusionrulesparser.RobotExclusionRulesParser
    - sys.exc_info
    - logger.warning
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - scrapy.robotstxt.decode_robotstxt
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: robotexclusionrulesparser.RobotExclusionRulesParser
    functionSourceFile: robotexclusionrulesparser
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.robotstxt.RerpRobotParser.rp.parse
    functionSourceFile: scrapy
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - robotstxt_body
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 119
    functionName: scrapy.robotstxt.RerpRobotParser.from_crawler
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.robotstxt.RerpRobotParser.rp.parse
    - robotexclusionrulesparser.RobotExclusionRulesParser
    - sys.exc_info
    - logger.warning
    - scrapy.robotstxt.RerpRobotParser.__init__
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - scrapy.robotstxt.decode_robotstxt
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - url
    - user_agent
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 124
    functionName: scrapy.robotstxt.RerpRobotParser.allowed
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - robotexclusionrulesparser.RobotExclusionRulesParser.is_allowed
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: robotexclusionrulesparser.RobotExclusionRulesParser.is_allowed
    functionSourceFile: robotexclusionrulesparser
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - robotstxt_body
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 131
    functionName: scrapy.robotstxt.ProtegoRobotParser.__init__
    functionSourceFile: scrapy.robotstxt
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - sys.exc_info
    - logger.warning
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - protego.Protego.parse
    - scrapy.robotstxt.decode_robotstxt
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: protego.Protego.parse
    functionSourceFile: protego
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - robotstxt_body
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 139
    functionName: scrapy.robotstxt.ProtegoRobotParser.from_crawler
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - sys.exc_info
    - scrapy.robotstxt.ProtegoRobotParser.__init__
    - logger.warning
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - protego.Protego.parse
    - scrapy.robotstxt.decode_robotstxt
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - url
    - user_agent
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 144
    functionName: scrapy.robotstxt.ProtegoRobotParser.allowed
    functionSourceFile: scrapy.robotstxt
    functionUses: 0
    functionsReached:
    - typing.cast.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse.decode
    - scrapy.utils.python.to_unicode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.exporters
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - dont_fail
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 32
    functionName: scrapy.exporters.BaseItemExporter.__init__
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - options.pop
    - scrapy.exporters.BaseItemExporter._configure
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e772e20>
    argNames:
    - self
    - options
    - dont_fail
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 36
    functionName: scrapy.exporters.BaseItemExporter._configure
    functionSourceFile: scrapy.exporters
    functionUses: 1
    functionsReached:
    - options.pop
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: options.pop
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 48
    functionName: scrapy.exporters.BaseItemExporter.export_item
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - field
    - name
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 51
    functionName: scrapy.exporters.BaseItemExporter.serialize_field
    functionSourceFile: scrapy.exporters
    functionUses: 11
    functionsReached:
    - field.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.exporters.BaseItemExporter.serialize_field.<lambda1>
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: field.get
    functionSourceFile: <builtin>
    functionUses: 14
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 55
    functionName: scrapy.exporters.BaseItemExporter.start_exporting
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 58
    functionName: scrapy.exporters.BaseItemExporter.finish_exporting
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 12
    ICount: 2
    IfCount: 8
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e775490>
    - <ast.Constant object at 0x7f9a4e775460>
    argNames:
    - self
    - item
    - default_value
    - include_empty
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 61
    functionName: scrapy.exporters.BaseItemExporter._get_serialized_fields
    functionSourceFile: scrapy.exporters
    functionUses: 10
    functionsReached:
    - <builtin>.isinstance
    - scrapy.exporters.BaseItemExporter.serialize_field
    - itemadapter.ItemAdapter.field_names
    - itemadapter.ItemAdapter.keys
    - itemadapter.ItemAdapter.get_field_meta
    - itemadapter.ItemAdapter
    - field.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itemadapter.ItemAdapter
    functionSourceFile: itemadapter
    functionUses: 22
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itemadapter.ItemAdapter.field_names
    functionSourceFile: itemadapter
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itemadapter.ItemAdapter.keys
    functionSourceFile: itemadapter
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itemadapter.ItemAdapter.get_field_meta
    functionSourceFile: itemadapter
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - file
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 103
    functionName: scrapy.exporters.JsonLinesItemExporter.__init__
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - json.JSONEncoder.__init__
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: json.JSONEncoder.__init__
    functionSourceFile: ''
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 109
    functionName: scrapy.exporters.JsonLinesItemExporter.export_item
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.dict
    - scrapy.exporters.BaseItemExporter.serialize_field
    - json.JSONEncoder.encode
    - scrapy.exporters.BaseItemExporter._get_serialized_fields
    - urllib.parse.urlparse.scheme.encode
    - itemadapter.ItemAdapter.field_names
    - itemadapter.ItemAdapter.keys
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - itemadapter.ItemAdapter.get_field_meta
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - itemadapter.ItemAdapter
    - field.get
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: json.JSONEncoder.encode
    functionSourceFile: json
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - file
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 116
    functionName: scrapy.exporters.JsonItemExporter.__init__
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - json.JSONEncoder.__init__
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 130
    functionName: scrapy.exporters.JsonItemExporter._beautify_newline
    functionSourceFile: scrapy.exporters
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 134
    functionName: scrapy.exporters.JsonItemExporter._add_comma_after_first
    functionSourceFile: scrapy.exporters
    functionUses: 1
    functionsReached:
    - scrapy.exporters.JsonItemExporter._beautify_newline
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 141
    functionName: scrapy.exporters.JsonItemExporter.start_exporting
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - scrapy.exporters.JsonItemExporter._beautify_newline
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 145
    functionName: scrapy.exporters.JsonItemExporter.finish_exporting
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - scrapy.exporters.JsonItemExporter._beautify_newline
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 149
    functionName: scrapy.exporters.JsonItemExporter.export_item
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.dict
    - scrapy.exporters.BaseItemExporter.serialize_field
    - json.JSONEncoder.encode
    - scrapy.exporters.BaseItemExporter._get_serialized_fields
    - urllib.parse.urlparse.scheme.encode
    - itemadapter.ItemAdapter.field_names
    - itemadapter.ItemAdapter.keys
    - scrapy.exporters.JsonItemExporter._beautify_newline
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - itemadapter.ItemAdapter.get_field_meta
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - itemadapter.ItemAdapter
    - scrapy.exporters.JsonItemExporter._add_comma_after_first
    - field.get
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - file
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 157
    functionName: scrapy.exporters.XmlItemExporter.__init__
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - kwargs.pop
    - xml.sax.saxutils.XMLGenerator
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: xml.sax.saxutils.XMLGenerator
    functionSourceFile: xml
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e7589a0>
    argNames:
    - self
    - new_item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 165
    functionName: scrapy.exporters.XmlItemExporter._beautify_newline
    functionSourceFile: scrapy.exporters
    functionUses: 3
    functionsReached:
    - xml.sax.saxutils.XMLGenerator.characters
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: xml.sax.saxutils.XMLGenerator.characters
    functionSourceFile: xml
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e758520>
    argNames:
    - self
    - depth
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 169
    functionName: scrapy.exporters.XmlItemExporter._beautify_indent
    functionSourceFile: scrapy.exporters
    functionUses: 2
    functionsReached:
    - xml.sax.saxutils.XMLGenerator.characters
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 173
    functionName: scrapy.exporters.XmlItemExporter.start_exporting
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - scrapy.exporters.XmlItemExporter._beautify_newline
    - xml.sax.saxutils.XMLGenerator.startDocument
    - xml.sax.saxutils.XMLGenerator.characters
    - xml.sax.saxutils.XMLGenerator.startElement
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: xml.sax.saxutils.XMLGenerator.startDocument
    functionSourceFile: xml
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: xml.sax.saxutils.XMLGenerator.startElement
    functionSourceFile: xml
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 7
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 178
    functionName: scrapy.exporters.XmlItemExporter.export_item
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - scrapy.exporters.XmlItemExporter._beautify_newline
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.exporters.BaseItemExporter.serialize_field
    - field.get
    - scrapy.exporters.BaseItemExporter._get_serialized_fields
    - scrapy.exporters.XmlItemExporter._export_xml_field
    - itemadapter.ItemAdapter.field_names
    - itemadapter.ItemAdapter.keys
    - <builtin>.str
    - xml.sax.saxutils.XMLGenerator.endElement
    - xml.sax.saxutils.XMLGenerator.characters
    - scrapy.exporters.XmlItemExporter._beautify_indent
    - xml.sax.saxutils.XMLGenerator.startElement
    - itemadapter.ItemAdapter.get_field_meta
    - serialized_value.items
    - itemadapter.ItemAdapter
    - scrapy.utils.python.is_listlike
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 12
    IfCount: 3
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - name
    - serialized_value
    - depth
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 192
    functionName: scrapy.exporters.XmlItemExporter._export_xml_field
    functionSourceFile: scrapy.exporters
    functionUses: 1
    functionsReached:
    - scrapy.exporters.XmlItemExporter._beautify_newline
    - <builtin>.hasattr
    - <builtin>.isinstance
    - scrapy.exporters.XmlItemExporter._export_xml_field
    - <builtin>.str
    - xml.sax.saxutils.XMLGenerator.endElement
    - xml.sax.saxutils.XMLGenerator.characters
    - scrapy.exporters.XmlItemExporter._beautify_indent
    - xml.sax.saxutils.XMLGenerator.startElement
    - serialized_value.items
    - scrapy.utils.python.is_listlike
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: xml.sax.saxutils.XMLGenerator.endElement
    functionSourceFile: xml
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 188
    functionName: scrapy.exporters.XmlItemExporter.finish_exporting
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - xml.sax.saxutils.XMLGenerator.endDocument
    - xml.sax.saxutils.XMLGenerator.endElement
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: xml.sax.saxutils.XMLGenerator.endDocument
    functionSourceFile: xml
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: serialized_value.items
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e767490>
    - <ast.Constant object at 0x7f9a4e767460>
    - <ast.Constant object at 0x7f9a4e767430>
    argNames:
    - self
    - file
    - include_headers_line
    - join_multivalued
    - errors
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 214
    functionName: scrapy.exporters.CsvItemExporter.__init__
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - csv.writer
    - io.TextIOWrapper
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: io.TextIOWrapper
    functionSourceFile: io
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: csv.writer
    functionSourceFile: csv
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - field
    - name
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 238
    functionName: scrapy.exporters.CsvItemExporter.serialize_field
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - field.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - value
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 242
    functionName: scrapy.exporters.CsvItemExporter._join_if_needed
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 250
    functionName: scrapy.exporters.CsvItemExporter.export_item
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.exporters.CsvItemExporter._write_headers_and_set_fields_to_export
    - scrapy.exporters.BaseItemExporter.serialize_field
    - scrapy.exporters.BaseItemExporter._get_serialized_fields
    - <builtin>.list
    - itemadapter.ItemAdapter.field_names
    - itemadapter.ItemAdapter.keys
    - itemadapter.ItemAdapter.get_field_meta
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - itemadapter.ItemAdapter
    - field.get
    - scrapy.exporters.CsvItemExporter._build_row
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 269
    functionName: scrapy.exporters.CsvItemExporter._write_headers_and_set_fields_to_export
    functionSourceFile: scrapy.exporters
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - itemadapter.ItemAdapter.field_names
    - <builtin>.list
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - itemadapter.ItemAdapter
    - scrapy.exporters.CsvItemExporter._build_row
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - values
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 262
    functionName: scrapy.exporters.CsvItemExporter._build_row
    functionSourceFile: scrapy.exporters
    functionUses: 2
    functionsReached:
    - typing.cast.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse.decode
    - scrapy.utils.python.to_unicode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 259
    functionName: scrapy.exporters.CsvItemExporter.finish_exporting
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e67b550>
    argNames:
    - self
    - file
    - protocol
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 283
    functionName: scrapy.exporters.PickleItemExporter.__init__
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 288
    functionName: scrapy.exporters.PickleItemExporter.export_item
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.dict
    - scrapy.exporters.BaseItemExporter.serialize_field
    - scrapy.exporters.BaseItemExporter._get_serialized_fields
    - itemadapter.ItemAdapter.field_names
    - pickle.dump
    - itemadapter.ItemAdapter.keys
    - itemadapter.ItemAdapter.get_field_meta
    - itemadapter.ItemAdapter
    - field.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pickle.dump
    functionSourceFile: pickle
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - file
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 302
    functionName: scrapy.exporters.MarshalItemExporter.__init__
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 306
    functionName: scrapy.exporters.MarshalItemExporter.export_item
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.dict
    - scrapy.exporters.BaseItemExporter.serialize_field
    - scrapy.exporters.BaseItemExporter._get_serialized_fields
    - itemadapter.ItemAdapter.field_names
    - itemadapter.ItemAdapter.keys
    - marshal.dump
    - itemadapter.ItemAdapter.get_field_meta
    - itemadapter.ItemAdapter
    - field.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: marshal.dump
    functionSourceFile: marshal
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - file
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 311
    functionName: scrapy.exporters.PprintItemExporter.__init__
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 315
    functionName: scrapy.exporters.PprintItemExporter.export_item
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.dict
    - scrapy.exporters.BaseItemExporter.serialize_field
    - scrapy.exporters.BaseItemExporter._get_serialized_fields
    - urllib.parse.urlparse.scheme.encode
    - itemadapter.ItemAdapter.field_names
    - itemadapter.ItemAdapter.keys
    - pprint.pformat
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - itemadapter.ItemAdapter.get_field_meta
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - itemadapter.ItemAdapter
    - field.get
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e669bb0>
    argNames:
    - self
    - options
    - dont_fail
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 330
    functionName: scrapy.exporters.PythonItemExporter._configure
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - field
    - name
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 335
    functionName: scrapy.exporters.PythonItemExporter.serialize_field
    functionSourceFile: scrapy.exporters
    functionUses: 0
    functionsReached:
    - field.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 0
    IfCount: 4
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - value
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 339
    functionName: scrapy.exporters.PythonItemExporter._serialize_value
    functionSourceFile: scrapy.exporters
    functionUses: 1
    functionsReached:
    - scrapy.exporters.BaseItemExporter.serialize_field
    - scrapy.exporters.PythonItemExporter.export_item
    - itemadapter.ItemAdapter.field_names
    - <builtin>.hasattr
    - itemadapter.ItemAdapter.get_field_meta
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.exporters.BaseItemExporter._get_serialized_fields
    - itemadapter.ItemAdapter
    - scrapy.utils.python.is_listlike
    - scrapy.exporters.PythonItemExporter._serialize_value
    - <builtin>.dict
    - itemadapter.is_item
    - itemadapter.ItemAdapter.keys
    - itemadapter.ItemAdapter.items
    - scrapy.exporters.PythonItemExporter._serialize_item
    - field.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 354
    functionName: scrapy.exporters.PythonItemExporter.export_item
    functionSourceFile: scrapy.exporters
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.dict
    - scrapy.exporters.BaseItemExporter.serialize_field
    - scrapy.exporters.BaseItemExporter._get_serialized_fields
    - itemadapter.ItemAdapter.field_names
    - itemadapter.ItemAdapter.keys
    - itemadapter.ItemAdapter.get_field_meta
    - itemadapter.ItemAdapter
    - field.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 350
    functionName: scrapy.exporters.PythonItemExporter._serialize_item
    functionSourceFile: scrapy.exporters
    functionUses: 1
    functionsReached:
    - scrapy.exporters.BaseItemExporter.serialize_field
    - scrapy.exporters.PythonItemExporter.export_item
    - itemadapter.ItemAdapter.field_names
    - <builtin>.hasattr
    - itemadapter.ItemAdapter.get_field_meta
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.exporters.BaseItemExporter._get_serialized_fields
    - itemadapter.ItemAdapter
    - scrapy.utils.python.is_listlike
    - scrapy.exporters.PythonItemExporter._serialize_value
    - itemadapter.is_item
    - <builtin>.dict
    - itemadapter.ItemAdapter.keys
    - itemadapter.ItemAdapter.items
    - scrapy.exporters.PythonItemExporter._serialize_item
    - field.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itemadapter.ItemAdapter.items
    functionSourceFile: itemadapter
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.serialize
    functionSourceFile: scrapy.utils.serialize
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 14
    ICount: 0
    IfCount: 9
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - o
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 16
    functionName: scrapy.utils.serialize.ScrapyJSONEncoder.default
    functionSourceFile: scrapy.utils.serialize
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - itemadapter.is_item
    - <builtin>.list
    - <builtin>.str
    - <builtin>.type
    - itemadapter.ItemAdapter
    - o.strftime
    - itemadapter.ItemAdapter.asdict
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: o.strftime
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itemadapter.ItemAdapter.asdict
    functionSourceFile: itemadapter
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.shell
    functionSourceFile: scrapy.shell
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d2c8400>
    - <ast.Constant object at 0x7f9a4d2c83d0>
    argNames:
    - self
    - crawler
    - update_vars
    - code
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 30
    functionName: scrapy.shell.Shell.__init__
    functionSourceFile: scrapy.shell
    functionUses: 2
    functionsReached:
    - twisted.python.threadable.isInIOThread
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.shell.Shell.__init__.<lambda1>
    functionSourceFile: scrapy.shell
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.python.threadable.isInIOThread
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 8
    IfCount: 6
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d2af2b0>
    - <ast.Constant object at 0x7f9a4d2af280>
    - <ast.Constant object at 0x7f9a4d2af250>
    - <ast.Constant object at 0x7f9a4d2af220>
    - <ast.Constant object at 0x7f9a4d2af1f0>
    argNames:
    - self
    - url
    - request
    - response
    - spider
    - redirect
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 39
    functionName: scrapy.shell.Shell.start
    functionSourceFile: scrapy.shell
    functionUses: 2
    functionsReached:
    - scrapy.utils.conf.closest_scrapy_cfg
    - urllib.parse.urlparse.scheme.encode
    - <builtin>.globals
    - scrapy.utils.conf.get_config
    - typing.cast
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - scrapy.shell.Shell.fetch
    - os.environ.get
    - <builtin>.range
    - scrapy.utils.datatypes.SequenceExclude.__init__
    - <builtin>.list
    - cfgfile.exists
    - scrapy.utils.console.get_shell_embed_func
    - frag.startswith
    - twisted.internet.threads.blockingCallFromThread
    - scrapy.utils.python.to_bytes
    - pathlib.Path
    - pathlib.Path.expanduser
    - <builtin>.callable
    - <builtin>.eval
    - <builtin>.isinstance
    - b.append
    - w3lib.url.safe_url_string
    - scrapy.shell.Shell.populate_vars
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - configparser.ConfigParser.get
    - scrapy.shell.Shell._is_relevant
    - urllib.parse.urlparse.netloc.encode
    - scrapy.utils.console.start_python_console
    - <builtin>.print
    - DEFAULT_PYTHON_SHELLS.keys
    - <builtin>.super
    - configparser.ConfigParser.read
    - configparser.ConfigParser
    - itemadapter.is_item
    - <builtin>.dict
    - scrapy.shell.Shell.get_help
    - configparser.ConfigParser.has_option
    - sources.append
    - pathlib.Path.resolve
    - <builtin>.str
    - env.strip
    - signal.signal
    - DEFAULT_PYTHON_SHELLS.copy
    - scrapy.utils.conf.get_sources
    - <builtin>.sorted
    - urllib.parse.urlparse
    - scrapy.http.request.Request.__init__
    - w3lib.url.any_to_uri
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c11b670>
    - <ast.Constant object at 0x7f9a4c11bcd0>
    argNames:
    - self
    - request_or_url
    - spider
    - redirect
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 102
    functionName: scrapy.shell.Shell.fetch
    functionSourceFile: scrapy.shell
    functionUses: 3
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.range
    - scrapy.utils.datatypes.SequenceExclude.__init__
    - <builtin>.list
    - frag.startswith
    - twisted.internet.threads.blockingCallFromThread
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - b.append
    - w3lib.url.safe_url_string
    - scrapy.shell.Shell.populate_vars
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - scrapy.shell.Shell._is_relevant
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.super
    - <builtin>.dict
    - itemadapter.is_item
    - scrapy.shell.Shell.get_help
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - <builtin>.sorted
    - urllib.parse.urlparse
    - w3lib.url.any_to_uri
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c3420a0>
    - <ast.Constant object at 0x7f9a4c342760>
    - <ast.Constant object at 0x7f9a4c342910>
    argNames:
    - self
    - response
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 125
    functionName: scrapy.shell.Shell.populate_vars
    functionSourceFile: scrapy.shell
    functionUses: 4
    functionsReached:
    - <builtin>.isinstance
    - b.append
    - itemadapter.is_item
    - scrapy.shell.Shell.get_help
    - typing.cast
    - scrapy.shell.Shell._is_relevant
    - <builtin>.sorted
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.eval
    functionSourceFile: <builtin>
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: env.strip
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: DEFAULT_PYTHON_SHELLS.keys
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6dbd30>
    - <ast.Constant object at 0x7f9a4c6db1f0>
    - <ast.Constant object at 0x7f9a4c6db400>
    argNames:
    - namespace
    - banner
    - shells
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 98
    functionName: scrapy.utils.console.start_python_console
    functionSourceFile: scrapy.utils.console
    functionUses: 3
    functionsReached:
    - DEFAULT_PYTHON_SHELLS.keys
    - DEFAULT_PYTHON_SHELLS.copy
    - scrapy.utils.console.get_shell_embed_func
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 79
    functionName: scrapy.shell.Shell._schedule
    functionSourceFile: scrapy.shell
    functionUses: 0
    functionsReached:
    - d.addBoth
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - d.addCallback
    - importlib.import_module
    - scrapy.shell.Shell._open_spider
    - urllib.parse.urlparse.rindex
    - d.addCallbacks
    - <builtin>.callable
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred
    - scrapy.utils.reactor.set_asyncio_event_loop
    - warnings.filterwarnings
    - scrapy.shell._request_deferred
    - typing.cast.rindex
    - asyncio.new_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 90
    functionName: scrapy.shell.Shell._open_spider
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - request
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 183
    functionName: scrapy.shell._request_deferred
    functionSourceFile: scrapy.shell
    functionUses: 1
    functionsReached:
    - d.addBoth
    - d.addCallbacks
    - twisted.internet.defer.Deferred
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.shell.Shell._schedule.<lambda1>
    functionSourceFile: scrapy.shell
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.any_to_uri
    functionSourceFile: w3lib
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.threads.blockingCallFromThread
    functionSourceFile: twisted
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 146
    functionName: scrapy.shell.Shell.get_help
    functionSourceFile: scrapy.shell
    functionUses: 6
    functionsReached:
    - <builtin>.isinstance
    - b.append
    - itemadapter.is_item
    - scrapy.shell.Shell._is_relevant
    - <builtin>.sorted
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 143
    functionName: scrapy.shell.Shell.print_help
    functionSourceFile: scrapy.shell
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - b.append
    - itemadapter.is_item
    - scrapy.shell.Shell.get_help
    - scrapy.shell.Shell._is_relevant
    - <builtin>.print
    - <builtin>.sorted
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: b.append
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - value
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 170
    functionName: scrapy.shell.Shell._is_relevant
    functionSourceFile: scrapy.shell
    functionUses: 7
    functionsReached:
    - <builtin>.isinstance
    - itemadapter.is_item
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 174
    functionName: scrapy.shell.inspect_response
    functionSourceFile: scrapy.shell
    functionUses: 0
    functionsReached:
    - scrapy.utils.conf.closest_scrapy_cfg
    - urllib.parse.urlparse.scheme.encode
    - <builtin>.globals
    - scrapy.utils.conf.get_config
    - typing.cast
    - scrapy.shell.Shell.__init__
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - scrapy.shell.Shell.start
    - scrapy.shell.Shell.fetch
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - os.environ.get
    - <builtin>.range
    - scrapy.utils.datatypes.SequenceExclude.__init__
    - <builtin>.list
    - cfgfile.exists
    - scrapy.utils.console.get_shell_embed_func
    - frag.startswith
    - twisted.internet.threads.blockingCallFromThread
    - scrapy.utils.python.to_bytes
    - pathlib.Path
    - pathlib.Path.expanduser
    - <builtin>.callable
    - <builtin>.eval
    - <builtin>.isinstance
    - b.append
    - twisted.python.threadable.isInIOThread
    - w3lib.url.safe_url_string
    - scrapy.shell.Shell.populate_vars
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - configparser.ConfigParser.get
    - scrapy.shell.Shell._is_relevant
    - urllib.parse.urlparse.netloc.encode
    - scrapy.utils.console.start_python_console
    - <builtin>.print
    - DEFAULT_PYTHON_SHELLS.keys
    - <builtin>.super
    - configparser.ConfigParser.read
    - configparser.ConfigParser
    - itemadapter.is_item
    - <builtin>.dict
    - signal.getsignal
    - configparser.ConfigParser.has_option
    - scrapy.shell.Shell.get_help
    - sources.append
    - typing.cast.rindex
    - pathlib.Path.resolve
    - <builtin>.str
    - env.strip
    - signal.signal
    - DEFAULT_PYTHON_SHELLS.copy
    - scrapy.utils.conf.get_sources
    - <builtin>.sorted
    - urllib.parse.urlparse
    - scrapy.http.request.Request.__init__
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.utils.misc.load_object
    - w3lib.url.any_to_uri
    - urllib.parse.urlparse.hostname.encode
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 197
    functionName: scrapy.shell._request_deferred._restore_callbacks
    functionSourceFile: scrapy.shell
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.console
    functionSourceFile: scrapy.utils.console
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Dict object at 0x7f9a4e57de50>
    - <ast.Constant object at 0x7f9a4e57de20>
    argNames:
    - namespace
    - banner
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 4
    functionName: scrapy.utils.console._embed_ipython_shell
    functionSourceFile: scrapy.utils.console
    functionUses: 0
    functionsReached:
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Name object at 0x7f9a4e57d9d0>
    - <ast.Constant object at 0x7f9a4e57d9a0>
    argNames:
    - namespace
    - banner
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 14
    functionName: scrapy.utils.console._embed_ipython_shell.wrapper
    functionSourceFile: scrapy.utils.console
    functionUses: 0
    functionsReached:
    - IPython.terminal.embed.InteractiveShellEmbed.instance
    - IPython.terminal.embed.InteractiveShellEmbed.clear_instance
    - IPython.frontend.terminal.ipapp.load_default_config
    - IPython.frontend.terminal.embed.InteractiveShellEmbed.instance
    - IPython.terminal.ipapp.load_default_config
    - IPython.frontend.terminal.embed.InteractiveShellEmbed.clear_instance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: IPython.frontend.terminal.ipapp.load_default_config
    functionSourceFile: IPython
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: IPython.terminal.ipapp.load_default_config
    functionSourceFile: IPython
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: IPython.terminal.embed.InteractiveShellEmbed.clear_instance
    functionSourceFile: IPython
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: IPython.frontend.terminal.embed.InteractiveShellEmbed.clear_instance
    functionSourceFile: IPython
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: IPython.frontend.terminal.embed.InteractiveShellEmbed.instance
    functionSourceFile: IPython
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: IPython.terminal.embed.InteractiveShellEmbed.instance
    functionSourceFile: IPython
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Dict object at 0x7f9a4e57d310>
    - <ast.Constant object at 0x7f9a4e57d2e0>
    argNames:
    - namespace
    - banner
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 29
    functionName: scrapy.utils.console._embed_bpython_shell
    functionSourceFile: scrapy.utils.console
    functionUses: 0
    functionsReached:
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Name object at 0x7f9a4e580e80>
    - <ast.Constant object at 0x7f9a4e580e50>
    argNames:
    - namespace
    - banner
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 34
    functionName: scrapy.utils.console._embed_bpython_shell.wrapper
    functionSourceFile: scrapy.utils.console
    functionUses: 0
    functionsReached:
    - bpython.embed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: bpython.embed
    functionSourceFile: bpython
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Dict object at 0x7f9a4e580a90>
    - <ast.Constant object at 0x7f9a4e580a60>
    argNames:
    - namespace
    - banner
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 40
    functionName: scrapy.utils.console._embed_ptpython_shell
    functionSourceFile: scrapy.utils.console
    functionUses: 0
    functionsReached:
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Name object at 0x7f9a4e580820>
    - <ast.Constant object at 0x7f9a4e5807f0>
    argNames:
    - namespace
    - banner
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 45
    functionName: scrapy.utils.console._embed_ptpython_shell.wrapper
    functionSourceFile: scrapy.utils.console
    functionUses: 0
    functionsReached:
    - ptpython.repl.embed
    - <builtin>.print
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ptpython.repl.embed
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Dict object at 0x7f9a4e580370>
    - <ast.Constant object at 0x7f9a4e580340>
    argNames:
    - namespace
    - banner
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 52
    functionName: scrapy.utils.console._embed_standard_shell
    functionSourceFile: scrapy.utils.console
    functionUses: 0
    functionsReached:
    - readline.parse_and_bind
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: readline.parse_and_bind
    functionSourceFile: readline
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Name object at 0x7f9a4e778190>
    - <ast.Constant object at 0x7f9a4e778040>
    argNames:
    - namespace
    - banner
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 66
    functionName: scrapy.utils.console._embed_standard_shell.wrapper
    functionSourceFile: scrapy.utils.console
    functionUses: 0
    functionsReached:
    - code.interact
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: code.interact
    functionSourceFile: code
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e7786a0>
    - <ast.Constant object at 0x7f9a4e7786d0>
    argNames:
    - shells
    - known_shells
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 80
    functionName: scrapy.utils.console.get_shell_embed_func
    functionSourceFile: scrapy.utils.console
    functionUses: 4
    functionsReached:
    - DEFAULT_PYTHON_SHELLS.keys
    - DEFAULT_PYTHON_SHELLS.copy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: DEFAULT_PYTHON_SHELLS.copy
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.utils.testsite
    functionSourceFile: scrapy.utils.testsite
    functionUses: 0
    functionsReached:
    - port.getHost
    - twisted.web.server.Site
    - scrapy.utils.testsite.test_site
    - twisted.web.static.Data
    - twisted.web.util.Redirect
    - r.putChild
    - <builtin>.print
    - twisted.web.resource.Resource
    - twisted.internet.reactor.run
    - twisted.web.util.Redirect.__init__
    - twisted.internet.reactor.listenTCP
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 7
    functionName: scrapy.utils.testsite.SiteTest.setUp
    functionSourceFile: scrapy.utils.testsite
    functionUses: 0
    functionsReached:
    - <builtin>.super
    - twisted.web.server.Site
    - scrapy.utils.testsite.test_site
    - twisted.web.static.Data
    - twisted.web.util.Redirect
    - r.putChild
    - twisted.web.resource.Resource
    - twisted.web.util.Redirect.__init__
    - twisted.internet.reactor.listenTCP
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 6
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 30
    functionName: scrapy.utils.testsite.test_site
    functionSourceFile: scrapy.utils.testsite
    functionUses: 2
    functionsReached:
    - twisted.web.server.Site
    - twisted.web.util.Redirect
    - twisted.web.static.Data
    - r.putChild
    - twisted.web.resource.Resource
    - twisted.web.util.Redirect.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 14
    functionName: scrapy.utils.testsite.SiteTest.tearDown
    functionSourceFile: scrapy.utils.testsite
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - path
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 18
    functionName: scrapy.utils.testsite.SiteTest.url
    functionSourceFile: scrapy.utils.testsite
    functionUses: 0
    functionsReached:
    - urllib.parse.urljoin
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 23
    functionName: scrapy.utils.testsite.NoMetaRefreshRedirect.render
    functionSourceFile: scrapy.utils.testsite
    functionUses: 0
    functionsReached:
    - content.replace
    - twisted.web.util.Redirect.render
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.util.Redirect.render
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: content.replace
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.resource.Resource
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.static.Data
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: r.putChild
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.util.Redirect
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.util.Redirect.__init__
    functionSourceFile: ''
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.server.Site
    functionSourceFile: twisted
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: port.getHost
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.testproc
    functionSourceFile: scrapy.utils.testproc
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.getcwd
    functionSourceFile: os
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.testproc.ProcessTest
    functionSourceFile: scrapy.utils.testproc
    functionUses: 0
    functionsReached:
    - os.getcwd
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e7783a0>
    - <ast.Constant object at 0x7f9a4e778dc0>
    argNames:
    - self
    - args
    - check_code
    - settings
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 18
    functionName: scrapy.utils.testproc.ProcessTest.execute
    functionSourceFile: scrapy.utils.testproc
    functionUses: 0
    functionsReached:
    - scrapy.utils.testproc.TestProcessProtocol.__init__
    - <builtin>.list
    - twisted.internet.defer.Deferred
    - twisted.internet.protocol.ProcessProtocol.deferred.addCallback
    - os.environ.copy
    - twisted.internet.reactor.spawnProcess
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.environ.copy
    functionSourceFile: os
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 49
    functionName: scrapy.utils.testproc.TestProcessProtocol.__init__
    functionSourceFile: scrapy.utils.testproc
    functionUses: 1
    functionsReached:
    - twisted.internet.defer.Deferred
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ProcessProtocol.deferred.addCallback
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.spawnProcess
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - pp
    - cmd
    - check_code
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 36
    functionName: scrapy.utils.testproc.ProcessTest._process_finished
    functionSourceFile: scrapy.utils.testproc
    functionUses: 0
    functionsReached:
    - typing.cast
    - pp.err.decode
    - pp.out.decode
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pp.out.decode
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pp.err.decode
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - data
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 55
    functionName: scrapy.utils.testproc.TestProcessProtocol.outReceived
    functionSourceFile: scrapy.utils.testproc
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - data
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 58
    functionName: scrapy.utils.testproc.TestProcessProtocol.errReceived
    functionSourceFile: scrapy.utils.testproc
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - status
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 61
    functionName: scrapy.utils.testproc.TestProcessProtocol.processEnded
    functionSourceFile: scrapy.utils.testproc
    functionUses: 0
    functionsReached:
    - twisted.internet.protocol.ProcessProtocol.deferred.callback
    - typing.cast
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ProcessProtocol.deferred.callback
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.ftp
    functionSourceFile: scrapy.utils.ftp
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 5
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d17c220>
    argNames:
    - ftp
    - path
    - first_call
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 7
    functionName: scrapy.utils.ftp.ftp_makedirs_cwd
    functionSourceFile: scrapy.utils.ftp
    functionUses: 2
    functionsReached:
    - posixpath.dirname
    - scrapy.utils.ftp.ftp_makedirs_cwd
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: posixpath.dirname
    functionSourceFile: posixpath
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 8
    IfCount: 1
    argCount: 8
    argDefaultValues: []
    argNames:
    - path
    - file
    - host
    - port
    - username
    - password
    - use_active_mode
    - overwrite
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 21
    functionName: scrapy.utils.ftp.ftp_store_file
    functionSourceFile: scrapy.utils.ftp
    functionUses: 1
    functionsReached:
    - file.close
    - ftplib.FTP
    - posixpath.dirname
    - scrapy.utils.ftp.ftp_makedirs_cwd
    - posixpath.split
    - file.seek
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ftplib.FTP
    functionSourceFile: ftplib
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: file.seek
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: posixpath.split
    functionSourceFile: posixpath
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: file.close
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.display
    functionSourceFile: scrapy.utils.display
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 14
    functionName: scrapy.utils.display._enable_windows_terminal_processing
    functionSourceFile: scrapy.utils.display
    functionUses: 8
    functionsReached:
    - ctypes.windll.kernel32.SetConsoleMode
    - <builtin>.bool
    - ctypes.windll.kernel32.GetStdHandle
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ctypes.windll.kernel32.GetStdHandle
    functionSourceFile: ctypes
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ctypes.windll.kernel32.SetConsoleMode
    functionSourceFile: ctypes
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 20
    functionName: scrapy.utils.display._tty_supports_color
    functionSourceFile: scrapy.utils.display
    functionUses: 7
    functionsReached:
    - scrapy.utils.display._enable_windows_terminal_processing
    - <builtin>.bool
    - ctypes.windll.kernel32.GetStdHandle
    - packaging.version.Version
    - platform.version
    - ctypes.windll.kernel32.SetConsoleMode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: platform.version
    functionSourceFile: platform
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: packaging.version.Version
    functionSourceFile: packaging
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6dbfa0>
    argNames:
    - text
    - colorize
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 32
    functionName: scrapy.utils.display._colorize
    functionSourceFile: scrapy.utils.display
    functionUses: 6
    functionsReached:
    - scrapy.utils.display._enable_windows_terminal_processing
    - pygments.highlight
    - <builtin>.bool
    - ctypes.windll.kernel32.GetStdHandle
    - scrapy.utils.display._tty_supports_color
    - packaging.version.Version
    - pygments.formatters.TerminalFormatter
    - sys.stdout.isatty
    - platform.version
    - pygments.lexers.PythonLexer
    - ctypes.windll.kernel32.SetConsoleMode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sys.stdout.isatty
    functionSourceFile: sys
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pygments.lexers.PythonLexer
    functionSourceFile: pygments
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pygments.formatters.TerminalFormatter
    functionSourceFile: pygments
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pygments.highlight
    functionSourceFile: pygments
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - obj
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 46
    functionName: scrapy.utils.display.pformat
    functionSourceFile: scrapy.utils.display
    functionUses: 5
    functionsReached:
    - scrapy.utils.display._enable_windows_terminal_processing
    - pygments.highlight
    - <builtin>.bool
    - ctypes.windll.kernel32.GetStdHandle
    - scrapy.utils.display._tty_supports_color
    - scrapy.utils.display._colorize
    - packaging.version.Version
    - pygments.formatters.TerminalFormatter
    - pprint.pformat
    - sys.stdout.isatty
    - platform.version
    - pygments.lexers.PythonLexer
    - kwargs.pop
    - ctypes.windll.kernel32.SetConsoleMode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - obj
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 50
    functionName: scrapy.utils.display.pprint
    functionSourceFile: scrapy.utils.display
    functionUses: 4
    functionsReached:
    - scrapy.utils.display._enable_windows_terminal_processing
    - pygments.highlight
    - <builtin>.bool
    - ctypes.windll.kernel32.GetStdHandle
    - scrapy.utils.display._tty_supports_color
    - scrapy.utils.display._colorize
    - packaging.version.Version
    - pygments.formatters.TerminalFormatter
    - scrapy.utils.display.pformat
    - pprint.pformat
    - sys.stdout.isatty
    - platform.version
    - <builtin>.print
    - pygments.lexers.PythonLexer
    - kwargs.pop
    - ctypes.windll.kernel32.SetConsoleMode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.engine
    functionSourceFile: scrapy.utils.engine
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - engine
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 11
    functionName: scrapy.utils.engine.get_engine_status
    functionSourceFile: scrapy.utils.engine
    functionUses: 7
    functionsReached:
    - <builtin>.eval
    - <builtin>.type
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - engine
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 40
    functionName: scrapy.utils.engine.format_engine_status
    functionSourceFile: scrapy.utils.engine
    functionUses: 3
    functionsReached:
    - <builtin>.eval
    - scrapy.utils.engine.get_engine_status
    - <builtin>.type
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - engine
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 50
    functionName: scrapy.utils.engine.print_engine_status
    functionSourceFile: scrapy.utils.engine
    functionUses: 1
    functionsReached:
    - <builtin>.eval
    - scrapy.utils.engine.get_engine_status
    - <builtin>.type
    - <builtin>.print
    - scrapy.utils.engine.format_engine_status
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.boto
    functionSourceFile: scrapy.utils.boto
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 4
    functionName: scrapy.utils.boto.is_botocore_available
    functionSourceFile: scrapy.utils.boto
    functionUses: 16
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.benchserver
    functionSourceFile: scrapy.utils.benchserver
    functionUses: 0
    functionsReached:
    - twisted.web.server.Site
    - twisted.web.resource.Resource.__init__
    - twisted.internet.reactor.callWhenRunning
    - twisted.internet.reactor.run
    - twisted.internet.reactor.listenTCP
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - name
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 11
    functionName: scrapy.utils.benchserver.Root.getChild
    functionSourceFile: scrapy.utils.benchserver
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 14
    functionName: scrapy.utils.benchserver.Root.render
    functionSourceFile: scrapy.utils.benchserver
    functionUses: 0
    functionsReached:
    - random.randint
    - scrapy.utils.benchserver._getarg
    - urllib.parse.urlencode
    - request.write
    - <builtin>.range
    - request.args.copy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d3d9970>
    - <ast.Name object at 0x7f9a4d3d9250>
    argNames:
    - request
    - name
    - default
    - type
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 30
    functionName: scrapy.utils.benchserver._getarg
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: random.randint
    functionSourceFile: random
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.write
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.args.copy
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.resource.Resource.__init__
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 41
    functionName: scrapy.utils.benchserver._print_listening
    functionSourceFile: scrapy.utils.benchserver
    functionUses: 0
    functionsReached:
    - httpPort.getHost
    - <builtin>.print
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: httpPort.getHost
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.reactor.callWhenRunning
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.test
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 21
    functionName: scrapy.utils.test.assert_gcs_environ
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - SkipTest
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 26
    functionName: scrapy.utils.test.skip_if_no_boto
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached:
    - scrapy.utils.boto.is_botocore_available
    linkageType: pythonLinkage
    raised:
    - SkipTest
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - bucket
    - path
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 31
    functionName: scrapy.utils.test.get_gcs_content_and_delete
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached:
    - os.environ.get
    - google.cloud.storage.Client
    - client.get_bucket
    - <builtin>.list
    - bucket.get_blob
    - bucket.delete_blob
    - blob.download_as_string
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: google.cloud.storage.Client
    functionSourceFile: google
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: client.get_bucket
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: bucket.get_blob
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: blob.download_as_string
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: bucket.delete_blob
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 6
    IfCount: 1
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e2e5400>
    argNames:
    - path
    - host
    - port
    - username
    - password
    - use_active_mode
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 45
    functionName: scrapy.utils.test.get_ftp_content_and_delete
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached:
    - ftplib.FTP.delete
    - ftplib.FTP
    - ftplib.FTP.retrbinary
    - ftplib.FTP.login
    - ftplib.FTP.cwd
    - ftplib.FTP.set_pasv
    - ftplib.FTP.connect
    - posixpath.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ftplib.FTP.connect
    functionSourceFile: ftplib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ftplib.FTP.login
    functionSourceFile: ftplib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ftplib.FTP.set_pasv
    functionSourceFile: ftplib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - data
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 62
    functionName: scrapy.utils.test.get_ftp_content_and_delete.buffer_data
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached:
    - ftp_data.append
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ftp_data.append
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ftplib.FTP.retrbinary
    functionSourceFile: ftplib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ftplib.FTP.cwd
    functionSourceFile: ftplib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ftplib.FTP.delete
    functionSourceFile: ftplib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c342ac0>
    - <ast.Constant object at 0x7f9a4c342970>
    - <ast.Constant object at 0x7f9a4c342cd0>
    argNames:
    - spidercls
    - settings_dict
    - prevent_warnings
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 76
    functionName: scrapy.utils.test.get_crawler
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached:
    - <builtin>.bool
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - name.isupper
    - handler.setLevel
    - scrapy.crawler.CrawlerRunner._create_crawler
    - urllib.parse.urlparse.rindex
    - logger.debug
    - <builtin>.set
    - middlewares.append
    - scrapy.crawler.CrawlerProcess._create_crawler
    - scrapy.settings.BaseSettings._assert_mutability
    - asyncio.get_event_loop
    - scrapy.utils.log.log_reactor_info
    - scrapy.crawler.CrawlerRunner._get_spider_loader
    - warnings.filterwarnings
    - asyncio.new_event_loop
    - asyncio.get_event_loop_policy
    - warnings.catch_warnings
    - key.isupper
    - twisted.internet.asyncioreactor.install
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.iter_default_settings
    - zope.interface.verify.verifyClass
    - logging.NullHandler
    - scrapy.utils.log.TopLevelFormatter.__init__
    - <builtin>.int
    - scrapy.middleware.MiddlewareManager.from_settings
    - <builtin>.isinstance
    - objcls.from_settings
    - lf_cls.from_crawler
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.middleware.MiddlewareManager._add_middleware
    - scrapy.utils.log._get_handler
    - scrapy.settings.BaseSettings.copy
    - <builtin>.super
    - scrapy.utils.reactor.set_asyncio_event_loop
    - logging.Formatter
    - <builtin>.dir
    - enabled.append
    - scrapy.middleware.MiddlewareManager.from_crawler
    - reactor_path.split
    - scrapy.utils.reactor.set_asyncio_event_loop_policy
    - scrapy.signalmanager.SignalManager.__init__
    - logging.StreamHandler
    - typing.cast.getpriority
    - <builtin>.getattr
    - scrapy.utils.reactor.install_reactor
    - <builtin>.max
    - copy.freeze
    - scrapy.settings.BaseSettings.update
    - scrapy.utils.reactor._get_asyncio_event_loop_policy
    - objcls.from_crawler
    - importlib.import_module
    - typing.cast.items
    - <builtin>.hasattr
    - scrapy.addons.AddonManager.__init__
    - logging.FileHandler
    - json.loads
    - logging.root.addHandler
    - scrapy.middleware.MiddlewareManager._get_mwlist_from_settings
    - scrapy.utils.log.install_scrapy_root_handler
    - <builtin>.callable
    - scrapy.settings.BaseSettings.__init__
    - typing.cast.from_settings
    - scrapy.crawler.Crawler.__init__
    - logger.warning
    - scrapy.utils.reactor.verify_installed_asyncio_event_loop
    - handler.setFormatter
    - contextlib.suppress
    - logger.info
    - logging.root.removeHandler
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - typing.cast.rindex
    - asyncio.set_event_loop_policy
    - scrapy.settings.BaseSettings.setmodule
    - scrapy.settings.Settings.__init__
    - logging.root.setLevel
    - scrapy.crawler.CrawlerRunner.create_crawler
    - typing.cast
    - asyncio.WindowsSelectorEventLoopPolicy
    - scrapy.crawler.Crawler._update_root_log_handler
    - scrapy.crawler.Crawler._apply_settings
    - scrapy.crawler.CrawlerRunner.__init__
    - scrapy.utils.log.LogCounterHandler.__init__
    - collections.defaultdict
    - scrapy.utils.misc.build_from_crawler
    - scrapy.settings.BaseSettings.frozencopy
    - scrapy.utils.log.get_scrapy_root_handler
    - scrapy.settings.BaseSettings.getbool
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.getpriority
    - urllib.parse.urlparse.from_settings
    - scrapy.utils.misc.build_from_settings
    - scrapy.settings.overridden_settings
    - settings.update
    - <builtin>.dict
    - scrapy.utils.reactor.verify_installed_reactor
    - handler.addFilter
    - asyncio.set_event_loop
    - <builtin>.len
    - scrapy.middleware.MiddlewareManager.__init__
    - urllib.parse.urlparse
    - scrapy.utils.misc.load_object
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings.update
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 96
    functionName: scrapy.utils.test.get_pythonpath
    functionSourceFile: scrapy.utils.test
    functionUses: 2
    functionsReached:
    - <builtin>.str
    - os.environ.get
    - pathlib.Path
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 103
    functionName: scrapy.utils.test.get_testenv
    functionSourceFile: scrapy.utils.test
    functionUses: 1
    functionsReached:
    - scrapy.utils.test.get_pythonpath
    - os.environ.get
    - <builtin>.str
    - os.environ.copy
    - pathlib.Path
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6dbf70>
    argNames:
    - testcase
    - text1
    - text2
    - msg
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 112
    functionName: scrapy.utils.test.assert_samelines
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached:
    - text2.splitlines
    - text1.splitlines
    - testcase.assertEqual
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: text1.splitlines
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: text2.splitlines
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: testcase.assertEqual
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - value
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 121
    functionName: scrapy.utils.test.get_from_asyncio_queue
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached:
    - q.put_nowait
    - asyncio.Queue
    - q.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: asyncio.Queue
    functionSourceFile: asyncio
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: q.get
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: q.put_nowait
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 128
    functionName: scrapy.utils.test.mock_google_cloud_storage
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached:
    - unittest.mock.create_autospec
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: unittest.mock.create_autospec
    functionSourceFile: unittest
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - url
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 145
    functionName: scrapy.utils.test.get_web_client_agent_req
    functionSourceFile: scrapy.utils.test
    functionUses: 0
    functionsReached:
    - twisted.web.client.Agent.request
    - twisted.web.client.Agent
    - url.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.client.Agent
    functionSourceFile: twisted
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: url.encode
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.client.Agent.request
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.utils.template
    functionSourceFile: scrapy.utils.template
    functionUses: 0
    functionsReached:
    - re.compile
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - path
    - kwargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 10
    functionName: scrapy.utils.template.render_templatefile
    functionSourceFile: scrapy.utils.template
    functionUses: 3
    functionsReached:
    - pathlib.Path.with_suffix
    - pathlib.Path.rename
    - render_path.write_text
    - pathlib.Path
    - string.Template
    - pathlib.Path.read_text
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.read_text
    functionSourceFile: pathlib
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: string.Template
    functionSourceFile: string
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.with_suffix
    functionSourceFile: pathlib
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.rename
    functionSourceFile: pathlib
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: render_path.write_text
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - string
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 27
    functionName: scrapy.utils.template.string_camelcase
    functionSourceFile: scrapy.utils.template
    functionUses: 3
    functionsReached:
    - CAMELCASE_INVALID_CHARS.sub
    - string.title
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: string.title
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: CAMELCASE_INVALID_CHARS.sub
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.utils.decorators
    functionSourceFile: scrapy.utils.decorators
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d422a90>
    argNames:
    - use_instead
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 11
    functionName: scrapy.utils.decorators.deprecated
    functionSourceFile: scrapy.utils.decorators
    functionUses: 0
    functionsReached:
    - <builtin>.callable
    - warnings.warn
    - scrapy.utils.decorators.deprecated.deco.wrapped
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - func
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 16
    functionName: scrapy.utils.decorators.deprecated.deco
    functionSourceFile: scrapy.utils.decorators
    functionUses: 0
    functionsReached:
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 18
    functionName: scrapy.utils.decorators.deprecated.deco.wrapped
    functionSourceFile: scrapy.utils.decorators
    functionUses: 1
    functionsReached:
    - warnings.warn
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - func
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 33
    functionName: scrapy.utils.decorators.defers
    functionSourceFile: scrapy.utils.decorators
    functionUses: 3
    functionsReached:
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 37
    functionName: scrapy.utils.decorators.defers.wrapped
    functionSourceFile: scrapy.utils.decorators
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.maybeDeferred
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - func
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 43
    functionName: scrapy.utils.decorators.inthread
    functionSourceFile: scrapy.utils.decorators
    functionUses: 0
    functionsReached:
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - a
    - kw
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 49
    functionName: scrapy.utils.decorators.inthread.wrapped
    functionSourceFile: scrapy.utils.decorators
    functionUses: 0
    functionsReached:
    - twisted.internet.threads.deferToThread
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.threads.deferToThread
    functionSourceFile: twisted
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.http2.stream
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 31
    functionName: scrapy.core.http2.stream.InactiveStreamClosed.__init__
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 34
    functionName: scrapy.core.http2.stream.InactiveStreamClosed.__str__
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - expected_hostname
    - expected_netloc
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 39
    functionName: scrapy.core.http2.stream.InvalidHostname.__init__
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 46
    functionName: scrapy.core.http2.stream.InvalidHostname.__str__
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ce11730>
    - <ast.Constant object at 0x7f9a4ce11700>
    argNames:
    - self
    - stream_id
    - request
    - protocol
    - download_maxsize
    - download_warnsize
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 86
    functionName: scrapy.core.http2.stream.Stream.__init__
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 2
    functionsReached:
    - scrapy.http.headers.Headers.__init__
    - twisted.internet.defer.Deferred
    - <builtin>.len
    - io.BytesIO
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - _
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 145
    functionName: scrapy.core.http2.stream.Stream.__init__._cancel
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.core.http2.stream.Stream.close
    - errors.insert
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - twisted.web.client.ResponseFailed
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - twisted.internet.defer.CancelledError
    - scrapy.core.http2.stream.Stream.reset_stream
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.http.response.Response._set_url
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.core.http2.stream.Stream._fire_response_deferred
    - urllib.parse.urlencode.lower
    - scrapy.core.http2.stream.InvalidHostname.__init__
    - scrapy.http.headers.Headers.__init__
    - scrapy.core.http2.stream.InactiveStreamClosed.__init__
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - <builtin>.str
    - scrapy.http.response.Response._set_body
    - logger.error
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Attribute object at 0x7f9a4e5629d0>
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 367
    functionName: scrapy.core.http2.stream.Stream.reset_stream
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 3
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.core.http2.stream.Stream.close
    - errors.insert
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - twisted.web.client.ResponseFailed
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - twisted.internet.defer.CancelledError
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.core.http2.stream.Stream._fire_response_deferred
    - urllib.parse.urlencode.lower
    - scrapy.core.http2.stream.InvalidHostname.__init__
    - scrapy.http.headers.Headers.__init__
    - scrapy.core.http2.stream.InactiveStreamClosed.__init__
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - <builtin>.str
    - scrapy.http.response.Response._set_body
    - logger.error
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised:
    - StreamClosedError
    returnType: N/A
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 14
    ICount: 11
    IfCount: 9
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e548df0>
    - <ast.Constant object at 0x7f9a4e548dc0>
    argNames:
    - self
    - reason
    - errors
    - from_protocol
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 379
    functionName: scrapy.core.http2.stream.Stream.close
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 5
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - errors.insert
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - twisted.web.client.ResponseFailed
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - twisted.internet.defer.CancelledError
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.core.http2.stream.Stream._fire_response_deferred
    - urllib.parse.urlencode.lower
    - scrapy.core.http2.stream.InvalidHostname.__init__
    - scrapy.http.headers.Headers.__init__
    - scrapy.core.http2.stream.InactiveStreamClosed.__init__
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - <builtin>.str
    - scrapy.http.response.Response._set_body
    - logger.error
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised:
    - TypeError
    - StreamClosedError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 156
    functionName: scrapy.core.http2.stream.Stream.__repr__
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 160
    functionName: scrapy.core.http2.stream.Stream._log_warnsize
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 0
    functionsReached:
    - <builtin>.int
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 180
    functionName: scrapy.core.http2.stream.Stream.get_response
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 186
    functionName: scrapy.core.http2.stream.Stream.check_request_url
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 1
    functionsReached:
    - <builtin>.str
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 3
    IfCount: 5
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 196
    functionName: scrapy.core.http2.stream.Stream._get_request_headers
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 1
    functionsReached:
    - headers.append
    - <builtin>.str
    - logger.warning
    - <builtin>.len
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 247
    functionName: scrapy.core.http2.stream.Stream.initiate_request
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - headers.append
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - <builtin>.max
    - <builtin>.min
    - urllib.parse.urlunparse.encode
    - scrapy.core.http2.stream.Stream.close
    - errors.insert
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - twisted.web.client.ResponseFailed
    - scrapy.core.http2.stream.Stream._get_request_headers
    - scrapy.core.http2.stream.Stream.check_request_url
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - twisted.internet.defer.CancelledError
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.core.http2.stream.Stream._fire_response_deferred
    - urllib.parse.urlencode.lower
    - scrapy.core.http2.stream.InvalidHostname.__init__
    - scrapy.http.headers.Headers.__init__
    - scrapy.core.http2.stream.InactiveStreamClosed.__init__
    - logger.warning
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - scrapy.core.http2.stream.Stream.send_data
    - typing.cast.split
    - <builtin>.str
    - scrapy.http.response.Response._set_body
    - logger.error
    - <builtin>.len
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 258
    functionName: scrapy.core.http2.stream.Stream.send_data
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 2
    functionsReached:
    - <builtin>.min
    - <builtin>.max
    linkageType: pythonLinkage
    raised:
    - StreamClosedError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 312
    functionName: scrapy.core.http2.stream.Stream.receive_window_update
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 0
    functionsReached:
    - <builtin>.min
    - scrapy.core.http2.stream.Stream.send_data
    - <builtin>.max
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - data
    - flow_controlled_length
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 324
    functionName: scrapy.core.http2.stream.Stream.receive_data
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.core.http2.stream.Stream.close
    - errors.insert
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - twisted.web.client.ResponseFailed
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - twisted.internet.defer.CancelledError
    - scrapy.core.http2.stream.Stream.reset_stream
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.core.http2.stream.Stream._fire_response_deferred
    - urllib.parse.urlencode.lower
    - scrapy.core.http2.stream.InvalidHostname.__init__
    - scrapy.http.headers.Headers.__init__
    - scrapy.core.http2.stream.InactiveStreamClosed.__init__
    - logger.warning
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - <builtin>.str
    - scrapy.http.response.Response._set_body
    - logger.error
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - headers
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 349
    functionName: scrapy.core.http2.stream.Stream.receive_headers
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.core.http2.stream.Stream.close
    - errors.insert
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - twisted.web.client.ResponseFailed
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - twisted.internet.defer.CancelledError
    - scrapy.core.http2.stream.Stream.reset_stream
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.core.http2.stream.Stream._fire_response_deferred
    - urllib.parse.urlencode.lower
    - scrapy.core.http2.stream.InvalidHostname.__init__
    - scrapy.http.headers.Headers.__init__
    - scrapy.core.http2.stream.InactiveStreamClosed.__init__
    - logger.warning
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - <builtin>.str
    - scrapy.http.response.Response._set_body
    - logger.error
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.CancelledError
    functionSourceFile: twisted
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 469
    functionName: scrapy.core.http2.stream.Stream._fire_response_deferred
    functionSourceFile: scrapy.core.http2.stream
    functionUses: 6
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlencode.lower
    - scrapy.http.headers.Headers.__init__
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - scrapy.http.response.Response._set_body
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.client.ResponseFailed
    functionSourceFile: twisted
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: errors.insert
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.http2
    functionSourceFile: scrapy.core.http2
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.http2.protocol
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - negotiated_protocol
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 45
    functionName: scrapy.core.http2.protocol.InvalidNegotiatedProtocol.__init__
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 48
    functionName: scrapy.core.http2.protocol.InvalidNegotiatedProtocol.__str__
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - remote_ip_address
    - event
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 53
    functionName: scrapy.core.http2.protocol.RemoteTerminatedConnection.__init__
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 61
    functionName: scrapy.core.http2.protocol.RemoteTerminatedConnection.__str__
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - remote_ip_address
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 66
    functionName: scrapy.core.http2.protocol.MethodNotAllowed405.__init__
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 71
    functionName: scrapy.core.http2.protocol.MethodNotAllowed405.__str__
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - uri
    - settings
    - conn_lost_deferred
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 79
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.__init__
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 1
    functionsReached:
    - collections.deque
    - h2.config.H2Configuration
    - h2.connection.H2Connection
    - itertools.count
    - settings.getint
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: h2.config.H2Configuration
    functionSourceFile: h2
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: h2.connection.H2Connection
    functionSourceFile: h2
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itertools.count
    functionSourceFile: itertools
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 138
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.h2_connected
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached:
    - <builtin>.bool
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 147
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.allowed_max_concurrent_streams
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached:
    - <builtin>.min
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 158
    functionName: scrapy.core.http2.protocol.H2ClientProtocol._send_pending_requests
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 7
    functionsReached:
    - twisted.internet.protocol.Protocol.transport.write
    - h2.connection.H2Connection.data_to_send
    - scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    - twisted.internet.protocol.Protocol.resetTimeout
    - stream.initiate_request
    - twisted.internet.protocol.Protocol._pending_request_stream_pool.popleft
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol._pending_request_stream_pool.popleft
    functionSourceFile: twisted
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: stream.initiate_request
    functionSourceFile: <builtin>
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 196
    functionName: scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 10
    functionsReached:
    - twisted.internet.protocol.Protocol.resetTimeout
    - h2.connection.H2Connection.data_to_send
    - twisted.internet.protocol.Protocol.transport.write
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - stream_id
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 173
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.pop_stream
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 4
    functionsReached:
    - twisted.internet.protocol.Protocol.transport.write
    - twisted.internet.protocol.Protocol.streams.pop
    - h2.connection.H2Connection.data_to_send
    - scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    - twisted.internet.protocol.Protocol.resetTimeout
    - scrapy.core.http2.protocol.H2ClientProtocol._send_pending_requests
    - stream.initiate_request
    - twisted.internet.protocol.Protocol._pending_request_stream_pool.popleft
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.streams.pop
    functionSourceFile: twisted
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 180
    functionName: scrapy.core.http2.protocol.H2ClientProtocol._new_stream
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 1
    functionsReached:
    - <builtin>.next
    - scrapy.http.headers.Headers.__init__
    - scrapy.core.http2.stream.Stream.__init__
    - twisted.internet.defer.Deferred
    - <builtin>.len
    - <builtin>.getattr
    - io.BytesIO
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.resetTimeout
    functionSourceFile: twisted
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: h2.connection.H2Connection.data_to_send
    functionSourceFile: h2
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.transport.write
    functionSourceFile: twisted
    functionUses: 11
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 207
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.request
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached:
    - twisted.internet.protocol.Protocol.resetTimeout
    - stream.initiate_request
    - twisted.internet.protocol.Protocol.transport.write
    - scrapy.core.http2.protocol.H2ClientProtocol._new_stream
    - scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    - twisted.internet.protocol.Protocol._pending_request_stream_pool.append
    - <builtin>.isinstance
    - <builtin>.next
    - scrapy.http.headers.Headers.__init__
    - twisted.internet.defer.Deferred
    - scrapy.core.http2.stream.Stream.get_response
    - twisted.internet.protocol.Protocol._pending_request_stream_pool.popleft
    - <builtin>.super
    - h2.connection.H2Connection.data_to_send
    - scrapy.core.http2.stream.Stream.__init__
    - <builtin>.len
    - scrapy.core.http2.protocol.H2ClientProtocol._send_pending_requests
    - io.BytesIO
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol._pending_request_stream_pool.append
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 4
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 224
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.connectionMade
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached:
    - twisted.internet.protocol.Protocol.transport.write
    - h2.connection.H2Connection.data_to_send
    - twisted.internet.protocol.Protocol.setTimeout
    - scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    - twisted.internet.protocol.Protocol.resetTimeout
    - twisted.internet.protocol.Protocol.transport.getPeer
    - h2.connection.H2Connection.initiate_connection
    - ipaddress.ip_address
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.setTimeout
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.transport.getPeer
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ipaddress.ip_address
    functionSourceFile: ipaddress
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: h2.connection.H2Connection.initiate_connection
    functionSourceFile: h2
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - errors
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 239
    functionName: scrapy.core.http2.protocol.H2ClientProtocol._lose_connection_with_error
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 5
    functionsReached:
    - twisted.internet.protocol.Protocol.transport.loseConnection
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.transport.loseConnection
    functionSourceFile: twisted
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 246
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.handshakeCompleted
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached:
    - scrapy.core.http2.protocol.H2ClientProtocol._lose_connection_with_error
    - scrapy.core.http2.protocol.InvalidNegotiatedProtocol.__init__
    - twisted.internet.protocol.Protocol.transport.loseConnection
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - data
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 260
    functionName: scrapy.core.http2.protocol.H2ClientProtocol._check_received_data
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 1
    functionsReached:
    - data.startswith
    linkageType: pythonLinkage
    raised:
    - MethodNotAllowed405
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: data.startswith
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 6
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - data
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 270
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.dataReceived
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached:
    - twisted.internet.protocol.Protocol.streams.pop
    - scrapy.core.http2.protocol.H2ClientProtocol.settings_acknowledged
    - data.startswith
    - twisted.internet.protocol.Protocol.resetTimeout
    - scrapy.core.http2.protocol.H2ClientProtocol.stream_reset
    - stream.initiate_request
    - twisted.internet.protocol.Protocol.transport.loseConnection
    - scrapy.core.http2.protocol.H2ClientProtocol.connection_terminated
    - stream.receive_data
    - h2.connection.H2Connection.receive_data
    - twisted.internet.protocol.Protocol.transport.write
    - scrapy.core.http2.protocol.H2ClientProtocol.data_received
    - stream.close
    - scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    - stream.receive_window_update
    - twisted.internet.protocol.Protocol.transport.abortConnection
    - scrapy.core.http2.protocol.H2ClientProtocol.window_updated
    - scrapy.core.http2.protocol.H2ClientProtocol.stream_ended
    - <builtin>.isinstance
    - scrapy.core.http2.protocol.H2ClientProtocol._lose_connection_with_error
    - scrapy.core.http2.protocol.RemoteTerminatedConnection.__init__
    - scrapy.core.http2.protocol.H2ClientProtocol.response_received
    - twisted.internet.protocol.Protocol.streams.values
    - logger.warning
    - stream.receive_headers
    - scrapy.core.http2.protocol.H2ClientProtocol.pop_stream
    - scrapy.core.http2.protocol.H2ClientProtocol._handle_events
    - twisted.internet.protocol.Protocol._pending_request_stream_pool.popleft
    - twisted.internet.protocol.Protocol.transport.getPeerCertificate
    - h2.connection.H2Connection.data_to_send
    - scrapy.core.http2.protocol.H2ClientProtocol._check_received_data
    - scrapy.core.http2.protocol.H2ClientProtocol._send_pending_requests
    - twisted.internet.ssl.Certificate
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: h2.connection.H2Connection.receive_data
    functionSourceFile: h2
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 12
    ICount: 9
    IfCount: 8
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - events
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 342
    functionName: scrapy.core.http2.protocol.H2ClientProtocol._handle_events
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 1
    functionsReached:
    - twisted.internet.protocol.Protocol.streams.pop
    - scrapy.core.http2.protocol.H2ClientProtocol.settings_acknowledged
    - twisted.internet.protocol.Protocol.resetTimeout
    - scrapy.core.http2.protocol.H2ClientProtocol.stream_reset
    - stream.initiate_request
    - twisted.internet.protocol.Protocol.transport.loseConnection
    - scrapy.core.http2.protocol.H2ClientProtocol.connection_terminated
    - stream.receive_data
    - scrapy.core.http2.protocol.H2ClientProtocol.data_received
    - twisted.internet.protocol.Protocol.transport.write
    - stream.close
    - scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    - stream.receive_window_update
    - scrapy.core.http2.protocol.H2ClientProtocol.window_updated
    - scrapy.core.http2.protocol.H2ClientProtocol.stream_ended
    - <builtin>.isinstance
    - scrapy.core.http2.protocol.H2ClientProtocol._lose_connection_with_error
    - scrapy.core.http2.protocol.RemoteTerminatedConnection.__init__
    - scrapy.core.http2.protocol.H2ClientProtocol.response_received
    - logger.warning
    - stream.receive_headers
    - scrapy.core.http2.protocol.H2ClientProtocol.pop_stream
    - twisted.internet.protocol.Protocol._pending_request_stream_pool.popleft
    - twisted.internet.ssl.Certificate
    - twisted.internet.protocol.Protocol.transport.getPeerCertificate
    - h2.connection.H2Connection.data_to_send
    - scrapy.core.http2.protocol.H2ClientProtocol._send_pending_requests
    - twisted.internet.protocol.Protocol.streams.values
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.transport.abortConnection
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 294
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.timeoutConnection
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached:
    - scrapy.core.http2.protocol.H2ClientProtocol._lose_connection_with_error
    - twisted.internet.protocol.Protocol.transport.write
    - h2.connection.H2Connection.data_to_send
    - twisted.internet.error.TimeoutError
    - h2.connection.H2Connection.close_connection
    - scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    - twisted.internet.protocol.Protocol.resetTimeout
    - twisted.internet.protocol.Protocol.transport.loseConnection
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: h2.connection.H2Connection.close_connection
    functionSourceFile: h2
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.error.TimeoutError
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    IfCount: 2
    argCount: 2
    argDefaultValues:
    - <ast.Name object at 0x7f9a4b93a370>
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 316
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.connectionLost
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached:
    - twisted.internet.protocol.Protocol._pending_request_stream_pool.clear
    - twisted.internet.protocol.connectionDone.check
    - twisted.internet.protocol.Protocol.setTimeout
    - stream.close
    - h2.connection.H2Connection.close_connection
    - <builtin>.len
    - twisted.internet.protocol.Protocol._conn_lost_errors.append
    - twisted.internet.protocol.Protocol.streams.values
    - twisted.internet.protocol.Protocol.streams.clear
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.connectionDone.check
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol._conn_lost_errors.append
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.streams.values
    functionSourceFile: twisted
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: stream.close
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.streams.clear
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol._pending_request_stream_pool.clear
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - event
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 368
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.connection_terminated
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 2
    functionsReached:
    - scrapy.core.http2.protocol.H2ClientProtocol._lose_connection_with_error
    - scrapy.core.http2.protocol.RemoteTerminatedConnection.__init__
    - twisted.internet.protocol.Protocol.transport.loseConnection
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - event
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 373
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.data_received
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 2
    functionsReached:
    - stream.receive_data
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - event
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 381
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.response_received
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 2
    functionsReached:
    - stream.receive_headers
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - event
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 400
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.stream_ended
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 2
    functionsReached:
    - twisted.internet.protocol.Protocol.transport.write
    - twisted.internet.protocol.Protocol.streams.pop
    - h2.connection.H2Connection.data_to_send
    - stream.close
    - scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    - twisted.internet.protocol.Protocol.resetTimeout
    - scrapy.core.http2.protocol.H2ClientProtocol._send_pending_requests
    - stream.initiate_request
    - scrapy.core.http2.protocol.H2ClientProtocol.pop_stream
    - twisted.internet.protocol.Protocol._pending_request_stream_pool.popleft
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - event
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 408
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.stream_reset
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 2
    functionsReached:
    - twisted.internet.protocol.Protocol.transport.write
    - twisted.internet.protocol.Protocol.streams.pop
    - h2.connection.H2Connection.data_to_send
    - stream.close
    - scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    - twisted.internet.protocol.Protocol.resetTimeout
    - scrapy.core.http2.protocol.H2ClientProtocol._send_pending_requests
    - stream.initiate_request
    - scrapy.core.http2.protocol.H2ClientProtocol.pop_stream
    - twisted.internet.protocol.Protocol._pending_request_stream_pool.popleft
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - event
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 416
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.window_updated
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 2
    functionsReached:
    - twisted.internet.protocol.Protocol.streams.values
    - stream.receive_window_update
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - event
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 389
    functionName: scrapy.core.http2.protocol.H2ClientProtocol.settings_acknowledged
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 2
    functionsReached:
    - twisted.internet.protocol.Protocol.transport.write
    - twisted.internet.protocol.Protocol.transport.getPeerCertificate
    - h2.connection.H2Connection.data_to_send
    - scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport
    - twisted.internet.protocol.Protocol.resetTimeout
    - scrapy.core.http2.protocol.H2ClientProtocol._send_pending_requests
    - twisted.internet.ssl.Certificate
    - stream.initiate_request
    - twisted.internet.protocol.Protocol._pending_request_stream_pool.popleft
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: stream.receive_data
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: stream.receive_headers
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.transport.getPeerCertificate
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.ssl.Certificate
    functionSourceFile: twisted
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: stream.receive_window_update
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - uri
    - settings
    - conn_lost_deferred
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 427
    functionName: scrapy.core.http2.protocol.H2ClientFactory.__init__
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - addr
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 434
    functionName: scrapy.core.http2.protocol.H2ClientFactory.buildProtocol
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached:
    - collections.deque
    - h2.config.H2Configuration
    - h2.connection.H2Connection
    - itertools.count
    - scrapy.core.http2.protocol.H2ClientProtocol.__init__
    - settings.getint
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 437
    functionName: scrapy.core.http2.protocol.H2ClientFactory.acceptableProtocols
    functionSourceFile: scrapy.core.http2.protocol
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.http2.agent
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - reactor
    - settings
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 25
    functionName: scrapy.core.http2.agent.H2ConnectionPool.__init__
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - key
    - uri
    - endpoint
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 36
    functionName: scrapy.core.http2.agent.H2ConnectionPool.get_connection
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 3
    functionsReached:
    - conn_d.addCallback
    - endpoint.connect
    - collections.deque
    - twisted.internet.defer.succeed
    - twisted.internet.defer.Deferred
    - conn_lost_deferred.addCallback
    - scrapy.core.http2.agent.H2ConnectionPool._new_connection
    - scrapy.core.http2.protocol.H2ClientFactory.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - key
    - uri
    - endpoint
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 56
    functionName: scrapy.core.http2.agent.H2ConnectionPool._new_connection
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 4
    functionsReached:
    - conn_d.addCallback
    - endpoint.connect
    - collections.deque
    - twisted.internet.defer.Deferred
    - conn_lost_deferred.addCallback
    - scrapy.core.http2.protocol.H2ClientFactory.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: conn_lost_deferred.addCallback
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: endpoint.connect
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: conn_d.addCallback
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - conn
    - key
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 72
    functionName: scrapy.core.http2.agent.H2ConnectionPool.put_connection
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 0
    functionsReached:
    - pending_requests.popleft
    - d.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pending_requests.popleft
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - errors
    - key
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 84
    functionName: scrapy.core.http2.agent.H2ConnectionPool._remove_connection
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 0
    functionsReached:
    - d.errback
    - twisted.web.client.ResponseFailed
    - pending_requests.popleft
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 93
    functionName: scrapy.core.http2.agent.H2ConnectionPool.close_connections
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 1
    functionsReached:
    - conn.transport.abortConnection
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: conn.transport.abortConnection
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 6
    argDefaultValues:
    - <ast.Call object at 0x7f9a4d3d96d0>
    - <ast.Constant object at 0x7f9a4d3d99d0>
    - <ast.Constant object at 0x7f9a4d3d91c0>
    argNames:
    - self
    - reactor
    - pool
    - context_factory
    - connect_timeout
    - bind_address
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 105
    functionName: scrapy.core.http2.agent.H2Agent.__init__
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 3
    functionsReached:
    - zope.interface.verify.verifyObject
    - scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory.__init__
    - twisted.web.client._StandardEndpointFactory
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - context_factory
    - acceptable_protocols
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 150
    functionName: scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory.__init__
    functionSourceFile: scrapy.core.downloader.contextfactory
    functionUses: 4
    functionsReached:
    - zope.interface.verify.verifyObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.client._StandardEndpointFactory
    functionSourceFile: twisted
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - uri
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 122
    functionName: scrapy.core.http2.agent.H2Agent.get_endpoint
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 3
    functionsReached:
    - twisted.web.client._StandardEndpointFactory.endpointForURI
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.client._StandardEndpointFactory.endpointForURI
    functionSourceFile: twisted
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - uri
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 125
    functionName: scrapy.core.http2.agent.H2Agent.get_key
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 132
    functionName: scrapy.core.http2.agent.H2Agent.request
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 2
    functionsReached:
    - twisted.web.client.URI.fromBytes
    - conn_d.addCallback
    - scrapy.core.http2.agent.H2Agent.get_key
    - scrapy.core.http2.agent.ScrapyProxyH2Agent.get_key
    - d.addCallback
    - scrapy.core.http2.protocol.H2ClientFactory.__init__
    - scrapy.core.http2.agent.ScrapyProxyH2Agent.get_endpoint
    - collections.deque
    - twisted.internet.defer.succeed
    - conn_lost_deferred.addCallback
    - scrapy.core.http2.agent.H2Agent.get_endpoint
    - twisted.web.client._StandardEndpointFactory.endpointForURI
    - twisted.internet.defer.Deferred
    - scrapy.core.http2.agent.H2ConnectionPool._new_connection
    - endpoint.connect
    - <builtin>.bytes
    - twisted.internet.defer.fail
    - scrapy.core.http2.agent.H2ConnectionPool.get_connection
    - twisted.python.failure.Failure
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.bytes
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.client.URI.fromBytes
    functionSourceFile: twisted
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - uri
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 164
    functionName: scrapy.core.http2.agent.ScrapyProxyH2Agent.get_endpoint
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 3
    functionsReached:
    - twisted.web.client._StandardEndpointFactory.endpointForURI
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - uri
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 167
    functionName: scrapy.core.http2.agent.ScrapyProxyH2Agent.get_key
    functionSourceFile: ''
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.http2.agent.H2Agent.request.<lambda1>
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 0
    functionsReached:
    - conn.request
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: conn.request
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 7
    argDefaultValues:
    - <ast.Call object at 0x7f9a4efbf6d0>
    - <ast.Constant object at 0x7f9a4efbf670>
    - <ast.Constant object at 0x7f9a4efbf640>
    argNames:
    - self
    - reactor
    - proxy_uri
    - pool
    - context_factory
    - connect_timeout
    - bind_address
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 146
    functionName: scrapy.core.http2.agent.ScrapyProxyH2Agent.__init__
    functionSourceFile: scrapy.core.http2.agent
    functionUses: 3
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.downloader.contextfactory
    functionSourceFile: scrapy.core.downloader.contextfactory
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 6
    argDefaultValues:
    - <ast.Attribute object at 0x7f9a4d052730>
    - <ast.Constant object at 0x7f9a4d0526d0>
    - <ast.Constant object at 0x7f9a4d0526a0>
    argNames:
    - self
    - method
    - tls_verbose_logging
    - tls_ciphers
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 41
    functionName: scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.__init__
    functionSourceFile: scrapy.core.downloader.contextfactory
    functionUses: 1
    functionsReached:
    - twisted.internet.ssl.AcceptableCiphers.fromOpenSSLCipherString
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.ssl.AcceptableCiphers.fromOpenSSLCipherString
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Attribute object at 0x7f9a4ce0b610>
    argNames:
    - cls
    - settings
    - method
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 59
    functionName: scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.from_settings
    functionSourceFile: scrapy.core.downloader.contextfactory
    functionUses: 0
    functionsReached:
    - <builtin>.super
    - twisted.internet.ssl.AcceptableCiphers.fromOpenSSLCipherString
    - settings.getbool
    - scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 78
    functionName: scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.getCertificateOptions
    functionSourceFile: scrapy.core.downloader.contextfactory
    functionUses: 2
    functionsReached:
    - <builtin>.getattr
    - twisted.internet.ssl.CertificateOptions
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.ssl.CertificateOptions
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e7786a0>
    - <ast.Constant object at 0x7f9a4e778e50>
    argNames:
    - self
    - hostname
    - port
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 99
    functionName: scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.getContext
    functionSourceFile: scrapy.core.downloader.contextfactory
    functionUses: 1
    functionsReached:
    - twisted.internet.ssl.CertificateOptions
    - scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.getCertificateOptions
    - twisted.internet.ssl.CertificateOptions.getContext
    - ctx.set_options
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.ssl.CertificateOptions.getContext
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ctx.set_options
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - hostname
    - port
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 104
    functionName: scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.creatorForNetloc
    functionSourceFile: scrapy.core.downloader.contextfactory
    functionUses: 0
    functionsReached:
    - scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.getContext
    - <builtin>.super
    - scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.getCertificateOptions
    - scrapy.core.downloader.tls.ScrapyClientTLSOptions.__init__
    - ctx.set_options
    - twisted.internet.ssl.CertificateOptions
    - hostname.decode
    - twisted.internet.ssl.CertificateOptions.getContext
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: hostname.decode
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ce0b370>
    argNames:
    - self
    - hostname
    - ctx
    - verbose_logging
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 43
    functionName: scrapy.core.downloader.tls.ScrapyClientTLSOptions.__init__
    functionSourceFile: scrapy.core.downloader.tls
    functionUses: 1
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - hostname
    - port
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 131
    functionName: scrapy.core.downloader.contextfactory.BrowserLikeContextFactory.creatorForNetloc
    functionSourceFile: scrapy.core.downloader.contextfactory
    functionUses: 0
    functionsReached:
    - twisted.internet.ssl.platformTrust
    - hostname.decode
    - twisted.internet.ssl.optionsForClientTLS
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.ssl.platformTrust
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.ssl.optionsForClientTLS
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: zope.interface.verify.verifyObject
    functionSourceFile: zope
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - hostname
    - port
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 155
    functionName: scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory.creatorForNetloc
    functionSourceFile: scrapy.core.downloader.contextfactory
    functionUses: 0
    functionsReached:
    - twisted.internet._sslverify._setAcceptableProtocols
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet._sslverify._setAcceptableProtocols
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - settings
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 163
    functionName: scrapy.core.downloader.contextfactory.load_context_factory_from_settings
    functionSourceFile: scrapy.core.downloader.contextfactory
    functionUses: 4
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - warnings.warn
    - typing.cast.rindex
    - settings.get
    - <builtin>.callable
    - objcls.from_crawler
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: settings.get
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.downloader.tls
    functionSourceFile: scrapy.core.downloader.tls
    functionUses: 0
    functionsReached:
    - twisted.internet.ssl.AcceptableCiphers.fromOpenSSLCipherString
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 7
    IfCount: 5
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - connection
    - where
    - ret
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 47
    functionName: scrapy.core.downloader.tls.ScrapyClientTLSOptions._identityVerifyingInfoCallback
    functionSourceFile: scrapy.core.downloader.tls
    functionUses: 0
    functionsReached:
    - OpenSSL._util.lib.EVP_PKEY_bits
    - OpenSSL._util.lib.EC_GROUP_get_curve_name
    - OpenSSL._util.lib.OBJ_nid2sn
    - OpenSSL._util.lib.SSL_get_server_tmp_key
    - server_cert.get_issuer
    - scrapy.utils.ssl.x509name_to_string
    - <builtin>.hasattr
    - OpenSSL._util.lib.EC_curve_nid2nist
    - logger.debug
    - OpenSSL._util.ffi.gc
    - twisted.internet._sslverify.verifyHostname
    - OpenSSL._util.lib.EC_KEY_get0_group
    - OpenSSL._util.lib.EVP_PKEY_get1_EC_KEY
    - key_info.append
    - OpenSSL._util.lib.EVP_PKEY_id
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - OpenSSL._util.ffi.new
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.utils.ssl.get_temp_key_info
    - OpenSSL._util.ffi.string
    - logger.warning
    - server_cert.get_subject
    - connection.get_cipher_name
    - connection.get_protocol_version_name
    - OpenSSL._util.lib.X509_NAME_oneline
    - connection.set_tlsext_host_name
    - <builtin>.len
    - connection.get_peer_certificate
    - scrapy.utils.ssl.ffi_buf_to_string
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: connection.set_tlsext_host_name
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: connection.get_protocol_version_name
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: connection.get_cipher_name
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: connection.get_peer_certificate
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: server_cert.get_issuer
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: server_cert.get_subject
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet._sslverify.verifyHostname
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.downloader.webclient
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - parsed
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 17
    functionName: scrapy.core.downloader.webclient._parsed_url_args
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 9
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlunparse
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - url
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 32
    functionName: scrapy.core.downloader.webclient._parse
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 8
    functionsReached:
    - <builtin>.isinstance
    - scrapy.core.downloader.webclient._parsed_url_args
    - urllib.parse.urlunparse
    - re.match
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse
    - url.strip
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: url.strip
    functionSourceFile: <builtin>
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 48
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.connectionMade
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.__init__
    - twisted.web.http.HTTPClient.endHeaders
    - twisted.web.http.HTTPClient.sendHeader
    - twisted.web.http.HTTPClient.sendCommand
    - scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.factory.headers.items
    - twisted.web.http.HTTPClient.transport.write
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.sendCommand
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.factory.headers.items
    functionSourceFile: scrapy
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.sendHeader
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.endHeaders
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.transport.write
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - line
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 62
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.lineReceived
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - line.rstrip
    - twisted.web.http.HTTPClient.lineReceived
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.lineReceived
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - key
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 65
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.handleHeader
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.http.headers.Headers._tobytes
    - scrapy.http.headers.Headers.appendlist
    - typing.cast
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - scrapy.http.headers.Headers.getlist
    - typing.cast.extend
    - x.encode
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - version
    - status
    - message
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 68
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.handleStatus
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - twisted.web.http.HTTPClient.factory.gotStatus
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.factory.gotStatus
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 71
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.handleEndHeaders
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - twisted.web.http.HTTPClient.factory.gotHeaders
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.factory.gotHeaders
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 74
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.connectionLost
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - twisted.web.http.HTTPClient.connectionLost
    - twisted.web.http.HTTPClient.factory.noPage
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.connectionLost
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.factory.noPage
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 79
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.handleResponse
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - twisted.web.http.HTTPClient.transport.loseConnection
    - twisted.web.http.HTTPClient.factory.noPage
    - twisted.web.http.HTTPClient.factory.method.upper
    - twisted.web.http.HTTPClient.factory.page
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.factory.method.upper
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.factory.page
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.transport.loseConnection
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 88
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.timeout
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.TimeoutError
    - twisted.web.http.HTTPClient.factory.noPage
    - twisted.web.http.HTTPClient.transport.loseConnection
    - twisted.web.http.HTTPClient.factory.url.startswith
    - twisted.web.http.HTTPClient.transport.stopProducing
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.factory.url.startswith
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http.HTTPClient.transport.stopProducing
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.TimeoutError
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - body
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 115
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory._build_response
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlencode.lower
    - scrapy.http.headers.Headers.__init__
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - scrapy.http.response.Response._set_body
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 128
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory._set_connection_attributes
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - scrapy.core.downloader.webclient._parsed_url_args
    - urllib.parse.urlunparse
    - re.match
    - request.meta.get
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.core.downloader.webclient._parse
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse
    - urllib.parse.urlparse.hostname.encode
    - url.strip
    - scrapy.utils.httpobj.urlparse_cached
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.meta.get
    functionSourceFile: <builtin>
    functionUses: 33
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e6413d0>
    argNames:
    - self
    - request
    - timeout
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 138
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.__init__
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - scrapy.core.downloader.webclient._parsed_url_args
    - request.meta.get
    - urllib.parse.urlparse.scheme.encode
    - scrapy.core.downloader.webclient.ScrapyHTTPClientFactory._set_connection_attributes
    - urllib.parse.urlunparse.encode
    - urllib.parse.urldefrag
    - re.match
    - scrapy.utils.python.to_bytes
    - url.strip
    - twisted.internet.protocol.ClientFactory.headers.setdefault
    - time.time
    - <builtin>.isinstance
    - scrapy.http.headers.Headers.__init__
    - twisted.internet.defer.Deferred
    - urllib.parse.urlparse.netloc.encode
    - scrapy.utils.httpobj.urlparse_cached
    - <builtin>.super
    - urllib.parse.urlunparse
    - twisted.internet.protocol.ClientFactory._url.encode
    - <builtin>.len
    - scrapy.core.downloader.webclient._parse
    - urllib.parse.urlparse
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ClientFactory.headers.setdefault
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 174
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.__repr__
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - result
    - timeoutCall
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 177
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory._cancelTimeout
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - timeoutCall.active
    - timeoutCall.cancel
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: timeoutCall.active
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: timeoutCall.cancel
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - addr
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 182
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.buildProtocol
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - twisted.internet.protocol.ClientFactory.buildProtocol
    - twisted.internet.protocol.ClientFactory.deferred.addBoth
    - twisted.internet.reactor.callLater
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ClientFactory.buildProtocol
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ClientFactory.deferred.addBoth
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - headers
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 193
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.gotHeaders
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - time.time
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - version
    - status
    - message
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 197
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.gotStatus
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - page
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 210
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.page
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - twisted.internet.protocol.ClientFactory.deferred.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ClientFactory.deferred.callback
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 215
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.noPage
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - twisted.internet.protocol.ClientFactory.deferred.errback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ClientFactory.deferred.errback
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - _
    - reason
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 220
    functionName: scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.clientConnectionFailed
    functionSourceFile: scrapy.core.downloader.webclient
    functionUses: 0
    functionsReached:
    - twisted.internet.protocol.ClientFactory.deferred.errback
    - twisted.internet.protocol.ClientFactory._disconnectedDeferred.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ClientFactory._disconnectedDeferred.callback
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.http11
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b6969d0>
    argNames:
    - self
    - settings
    - crawler
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 41
    functionName: scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.__init__
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - objcls.from_settings
    - urllib.parse.urlparse.rindex
    - scrapy.utils.misc.build_from_crawler
    - scrapy.core.downloader.contextfactory.load_context_factory_from_settings
    - settings.getbool
    - warnings.warn
    - scrapy.utils.misc.load_object
    - typing.cast.rindex
    - <builtin>.callable
    - <builtin>.getattr
    - objcls.from_crawler
    - settings.getint
    - settings.get
    - twisted.web.client.HTTPConnectionPool
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.client.HTTPConnectionPool
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 59
    functionName: scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.from_crawler
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - objcls.from_settings
    - urllib.parse.urlparse.rindex
    - scrapy.utils.misc.build_from_crawler
    - scrapy.core.downloader.contextfactory.load_context_factory_from_settings
    - settings.getbool
    - warnings.warn
    - scrapy.utils.misc.load_object
    - typing.cast.rindex
    - twisted.web.client.HTTPConnectionPool
    - <builtin>.callable
    - <builtin>.getattr
    - objcls.from_crawler
    - settings.getint
    - settings.get
    - scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.__init__
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 62
    functionName: scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.download_request
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - scrapy.core.downloader.handlers.http11.ScrapyAgent.download_request
    - d.addBoth
    - twisted.web.client.URI.fromBytes
    - scrapy.core.downloader.handlers.http11.TunnelingAgent.__init__
    - scrapy.core.downloader.webclient._parsed_url_args
    - request.meta.get
    - urllib.parse.urlparse.scheme.encode
    - twisted.web.client.Agent
    - urllib.parse.urlunparse.encode
    - twisted.web.client.Agent._requestWithEndpoint
    - urllib.parse.urldefrag
    - d.addCallback
    - re.match
    - twisted.web.client.Agent._getEndpoint
    - scrapy.utils.python.to_bytes
    - scrapy.utils.python.to_unicode
    - request.headers.get
    - typing.cast.decode
    - url.strip
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - time.time
    - scrapy.core.downloader.handlers.http11._RequestBodyProducer.__init__
    - twisted.web.http_headers.Headers.removeHeader
    - scrapy.core.downloader.handlers.http11.ScrapyAgent._get_agent
    - urllib.parse.urlparse.netloc.encode
    - scrapy.core.downloader.handlers.http11.ScrapyProxyAgent.request
    - <builtin>.super
    - twisted.internet.reactor.callLater
    - urllib.parse.urlunparse
    - scrapy.core.downloader.handlers.http11.ScrapyAgent.__init__
    - twisted.web.client.Agent.request
    - twisted.internet.protocol.ClientFactory._url.encode
    - <builtin>.len
    - scrapy.core.downloader.webclient._parse
    - urllib.parse.urlparse
    - scrapy.core.downloader.handlers.http11.ScrapyProxyAgent.__init__
    - twisted.web.http_headers.Headers
    - urllib.parse.urlparse.hostname.encode
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 9
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b692910>
    - <ast.Constant object at 0x7f9a4b6928e0>
    - <ast.Constant object at 0x7f9a4b6928b0>
    - <ast.Constant object at 0x7f9a4b692880>
    - <ast.Constant object at 0x7f9a4b692850>
    - <ast.Constant object at 0x7f9a4b692820>
    - <ast.Constant object at 0x7f9a4b6927f0>
    - <ast.Constant object at 0x7f9a4b6927c0>
    argNames:
    - self
    - contextFactory
    - connectTimeout
    - bindAddress
    - pool
    - maxsize
    - warnsize
    - fail_on_dataloss
    - crawler
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 299
    functionName: scrapy.core.downloader.handlers.http11.ScrapyAgent.__init__
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 358
    functionName: scrapy.core.downloader.handlers.http11.ScrapyAgent.download_request
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 1
    functionsReached:
    - d.addBoth
    - twisted.web.client.URI.fromBytes
    - scrapy.core.downloader.handlers.http11.TunnelingAgent.__init__
    - scrapy.core.downloader.webclient._parsed_url_args
    - request.meta.get
    - urllib.parse.urlparse.scheme.encode
    - twisted.web.client.Agent
    - urllib.parse.urlunparse.encode
    - twisted.web.client.Agent._requestWithEndpoint
    - urllib.parse.urldefrag
    - d.addCallback
    - re.match
    - twisted.web.client.Agent._getEndpoint
    - scrapy.utils.python.to_bytes
    - scrapy.utils.python.to_unicode
    - request.headers.get
    - typing.cast.decode
    - url.strip
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - time.time
    - scrapy.core.downloader.handlers.http11._RequestBodyProducer.__init__
    - twisted.web.http_headers.Headers.removeHeader
    - scrapy.core.downloader.handlers.http11.ScrapyAgent._get_agent
    - urllib.parse.urlparse.netloc.encode
    - scrapy.core.downloader.handlers.http11.ScrapyProxyAgent.request
    - <builtin>.super
    - twisted.internet.reactor.callLater
    - urllib.parse.urlunparse
    - twisted.web.client.Agent.request
    - twisted.internet.protocol.ClientFactory._url.encode
    - <builtin>.len
    - scrapy.core.downloader.webclient._parse
    - urllib.parse.urlparse
    - scrapy.core.downloader.handlers.http11.ScrapyProxyAgent.__init__
    - twisted.web.http_headers.Headers
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 74
    functionName: scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.close
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - d.addBoth
    - twisted.internet.reactor.callLater
    - twisted.web.client.HTTPConnectionPool.closeCachedConnections
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.client.HTTPConnectionPool.closeCachedConnections
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 88
    functionName: scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.close.cancel_delayed_call
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - delayed_call.active
    - delayed_call.cancel
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: delayed_call.active
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: delayed_call.cancel
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - re.compile
    - _responseAnswer.encode
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: _responseAnswer.encode
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 8
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ce0b2b0>
    - <ast.Constant object at 0x7f9a4ce0b1f0>
    argNames:
    - self
    - reactor
    - host
    - port
    - proxyConf
    - contextFactory
    - timeout
    - bindAddress
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 116
    functionName: scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.__init__
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 1
    functionsReached:
    - twisted.internet.defer.Deferred
    - <builtin>.bytearray
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.bytearray
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - protocol
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 134
    functionName: scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.requestTunnel
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - protocol.transport.write
    - urllib.parse.urlparse.scheme.encode
    - scrapy.core.downloader.handlers.http11.tunnel_request_data
    - <builtin>.str
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b679940>
    argNames:
    - host
    - port
    - proxy_auth_header
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 194
    functionName: scrapy.core.downloader.handlers.http11.tunnel_request_data
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - <builtin>.str
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: protocol.transport.write
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - rcvd_bytes
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 145
    functionName: scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.processProxyResponse
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - TunnelingTCP4ClientEndpoint._responseMatcher.match
    - respm.group
    - <builtin>.int
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: TunnelingTCP4ClientEndpoint._responseMatcher.match
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: respm.group
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 182
    functionName: scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.connectFailed
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - protocolFactory
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 186
    functionName: scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.connect
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - connectDeferred.addCallback
    - connectDeferred.addErrback
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: connectDeferred.addCallback
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: connectDeferred.addErrback
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 7
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b68dd60>
    - <ast.Constant object at 0x7f9a4b68dd30>
    - <ast.Constant object at 0x7f9a4b68dd00>
    - <ast.Constant object at 0x7f9a4b68dcd0>
    argNames:
    - self
    - reactor
    - proxyConf
    - contextFactory
    - connectTimeout
    - bindAddress
    - pool
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 223
    functionName: scrapy.core.downloader.handlers.http11.TunnelingAgent.__init__
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 3
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - uri
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 236
    functionName: scrapy.core.downloader.handlers.http11.TunnelingAgent._getEndpoint
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.__init__
    - twisted.internet.defer.Deferred
    - <builtin>.bytearray
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 8
    argDefaultValues: []
    argNames:
    - self
    - key
    - endpoint
    - method
    - parsedURI
    - headers
    - bodyProducer
    - requestPath
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 247
    functionName: scrapy.core.downloader.handlers.http11.TunnelingAgent._requestWithEndpoint
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b67ba60>
    - <ast.Constant object at 0x7f9a4b67ba30>
    - <ast.Constant object at 0x7f9a4b67ba00>
    argNames:
    - self
    - reactor
    - proxyURI
    - connectTimeout
    - bindAddress
    - pool
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 266
    functionName: scrapy.core.downloader.handlers.http11.ScrapyProxyAgent.__init__
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 3
    functionsReached:
    - twisted.web.client.URI.fromBytes
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b67b460>
    - <ast.Constant object at 0x7f9a4b67b430>
    argNames:
    - self
    - method
    - uri
    - headers
    - bodyProducer
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 277
    functionName: scrapy.core.downloader.handlers.http11.ScrapyProxyAgent.request
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 2
    functionsReached:
    - twisted.web.client.URI.fromBytes
    - twisted.web.client.Agent._requestWithEndpoint
    - twisted.web.client.Agent._getEndpoint
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.client.Agent._getEndpoint
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.client.Agent._requestWithEndpoint
    functionSourceFile: twisted
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - timeout
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 320
    functionName: scrapy.core.downloader.handlers.http11.ScrapyAgent._get_agent
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 2
    functionsReached:
    - twisted.web.client.URI.fromBytes
    - scrapy.core.downloader.handlers.http11.TunnelingAgent.__init__
    - scrapy.core.downloader.webclient._parsed_url_args
    - request.meta.get
    - urllib.parse.urlparse.scheme.encode
    - twisted.web.client.Agent
    - urllib.parse.urlunparse.encode
    - re.match
    - scrapy.utils.python.to_bytes
    - scrapy.utils.python.to_unicode
    - request.headers.get
    - typing.cast.decode
    - url.strip
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.super
    - urllib.parse.urlunparse
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.core.downloader.webclient._parse
    - urllib.parse.urlparse
    - scrapy.core.downloader.handlers.http11.ScrapyProxyAgent.__init__
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http_headers.Headers
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.web.http_headers.Headers.removeHeader
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - body
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 524
    functionName: scrapy.core.downloader.handlers.http11._RequestBodyProducer.__init__
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 2
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    - url
    - timeout
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 388
    functionName: scrapy.core.downloader.handlers.http11.ScrapyAgent._cb_timeout
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - TimeoutError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    - start_time
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 399
    functionName: scrapy.core.downloader.handlers.http11.ScrapyAgent._cb_latency
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - time.time
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - response
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 404
    functionName: scrapy.core.downloader.handlers.http11.ScrapyAgent._headers_from_twisted_response
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.hasattr
    - scrapy.http.headers.Headers._tobytes
    - seq.items
    - scrapy.http.headers.Headers.normkey
    - scrapy.http.headers.Headers.__init__
    - <builtin>.str
    - scrapy.http.headers.Headers.normvalue
    - key.title
    - scrapy.http.headers.Headers.update
    - iseq.setdefault
    - x.encode
    - response.headers.getAllRawHeaders
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: response.headers.getAllRawHeaders
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 7
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - txresponse
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 411
    functionName: scrapy.core.downloader.handlers.http11.ScrapyAgent._cb_bodyready
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - request.meta.get
    - x.encode
    - txresponse.deliverBody
    - <builtin>.hasattr
    - scrapy.http.headers.Headers._tobytes
    - logger.debug
    - seq.items
    - txresponse._transport.stopProducing
    - <builtin>.isinstance
    - scrapy.http.headers.Headers.__init__
    - scrapy.core.downloader.handlers.http11.ScrapyAgent._headers_from_twisted_response
    - scrapy.http.headers.Headers.normvalue
    - key.title
    - logger.warning
    - twisted.internet.defer.Deferred
    - scrapy.http.headers.Headers.update
    - iseq.setdefault
    - <builtin>.super
    - txresponse._transport.loseConnection
    - scrapy.core.downloader.handlers.http11._ResponseReader.__init__
    - scrapy.http.headers.Headers.normkey
    - <builtin>.str
    - io.BytesIO
    - response.headers.getAllRawHeaders
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: txresponse._transport.stopProducing
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: txresponse._transport.loseConnection
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - _
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 476
    functionName: scrapy.core.downloader.handlers.http11.ScrapyAgent._cb_bodyready._cancel
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - txresponse._transport._producer.abortConnection
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: txresponse._transport._producer.abortConnection
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 8
    argDefaultValues: []
    argNames:
    - self
    - finished
    - txresponse
    - request
    - maxsize
    - warnsize
    - fail_on_dataloss
    - crawler
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 540
    functionName: scrapy.core.downloader.handlers.http11._ResponseReader.__init__
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 1
    functionsReached:
    - io.BytesIO
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: txresponse.deliverBody
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    - url
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 498
    functionName: scrapy.core.downloader.handlers.http11.ScrapyAgent._cb_bodydone
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - x.encode
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - <builtin>.hasattr
    - scrapy.http.headers.Headers._tobytes
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - seq.items
    - <builtin>.list
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlencode.lower
    - scrapy.http.headers.Headers.__init__
    - scrapy.core.downloader.handlers.http11.ScrapyAgent._headers_from_twisted_response
    - scrapy.http.headers.Headers.normvalue
    - key.title
    - urllib.parse.urlparse.netloc.encode
    - scrapy.http.headers.Headers.update
    - iseq.setdefault
    - result.get
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - scrapy.http.headers.Headers.normkey
    - typing.cast.split
    - scrapy.http.response.Response._set_body
    - <builtin>.str
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - response.headers.getAllRawHeaders
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: result.get
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - consumer
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 528
    functionName: scrapy.core.downloader.handlers.http11._RequestBodyProducer.startProducing
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - twisted.internet.defer.succeed
    - consumer.write
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: consumer.write
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 532
    functionName: scrapy.core.downloader.handlers.http11._RequestBodyProducer.pauseProducing
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 535
    functionName: scrapy.core.downloader.handlers.http11._RequestBodyProducer.stopProducing
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b7e1460>
    - <ast.Constant object at 0x7f9a4b7e1490>
    argNames:
    - self
    - flags
    - failure
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 564
    functionName: scrapy.core.downloader.handlers.http11._ResponseReader._finish_response
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 576
    functionName: scrapy.core.downloader.handlers.http11._ResponseReader.connectionMade
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - contextlib.suppress
    - twisted.internet.protocol.Protocol.transport._producer.getPeerCertificate
    - twisted.internet.protocol.Protocol.transport._producer.getPeer
    - twisted.internet.ssl.Certificate
    - ipaddress.ip_address
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.transport._producer.getPeerCertificate
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.transport._producer.getPeer
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 9
    IfCount: 4
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - bodyBytes
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 588
    functionName: scrapy.core.downloader.handlers.http11._ResponseReader.dataReceived
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - scrapy.core.downloader.handlers.http11._ResponseReader._finish_response
    - <builtin>.isinstance
    - io.BytesIO.truncate
    - logger.debug
    - io.BytesIO.write
    - logger.warning
    - <builtin>.len
    - twisted.internet.protocol.Protocol.transport.stopProducing
    - twisted.internet.protocol.Protocol.transport.loseConnection
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: io.BytesIO.write
    functionSourceFile: io
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.Protocol.transport.stopProducing
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: io.BytesIO.truncate
    functionSourceFile: io
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 5
    IfCount: 6
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - reason
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 639
    functionName: scrapy.core.downloader.handlers.http11._ResponseReader.connectionLost
    functionSourceFile: scrapy.core.downloader.handlers.http11
    functionUses: 0
    functionsReached:
    - scrapy.core.downloader.handlers.http11._ResponseReader._finish_response
    - <builtin>.any
    - logger.warning
    - reason.check
    - r.check
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: reason.check
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: r.check
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.ftp
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 0
    functionsReached:
    - re.compile
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c1f6c40>
    argNames:
    - self
    - filename
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 45
    functionName: scrapy.core.downloader.handlers.ftp.ReceivedDataProtocol.__init__
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 1
    functionsReached:
    - io.BytesIO
    - <builtin>.open
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.open
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - data
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 50
    functionName: scrapy.core.downloader.handlers.ftp.ReceivedDataProtocol.dataReceived
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 0
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 55
    functionName: scrapy.core.downloader.handlers.ftp.ReceivedDataProtocol.filename
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 58
    functionName: scrapy.core.downloader.handlers.ftp.ReceivedDataProtocol.close
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 73
    functionName: scrapy.core.downloader.handlers.ftp.FTPDownloadHandler.__init__
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 79
    functionName: scrapy.core.downloader.handlers.ftp.FTPDownloadHandler.from_crawler
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 0
    functionsReached:
    - scrapy.core.downloader.handlers.ftp.FTPDownloadHandler.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 82
    functionName: scrapy.core.downloader.handlers.ftp.FTPDownloadHandler.download_request
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 0
    functionsReached:
    - urllib.parse.unquote
    - <builtin>.bool
    - request.meta.get
    - twisted.internet.protocol.ClientCreator.connectTCP
    - dfd.addCallback
    - twisted.internet.protocol.ClientCreator
    - urllib.parse.urlparse
    - scrapy.utils.httpobj.urlparse_cached
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ClientCreator
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.protocol.ClientCreator.connectTCP
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.unquote
    functionSourceFile: urllib
    functionUses: 18
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - client
    - request
    - filepath
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 97
    functionName: scrapy.core.downloader.handlers.ftp.FTPDownloadHandler.gotClient
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 0
    functionsReached:
    - client.retrieveFile
    - request.meta.get
    - <builtin>.open
    - scrapy.core.downloader.handlers.ftp.ReceivedDataProtocol.__init__
    - io.BytesIO
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: client.retrieveFile
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    - protocol
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 107
    functionName: scrapy.core.downloader.handlers.ftp.FTPDownloadHandler._build_response
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlencode.lower
    - scrapy.http.headers.Headers.__init__
    - urllib.parse.urlparse.netloc.encode
    - protocol.close
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - protocol.body.read
    - typing.cast.split
    - scrapy.http.response.Response._set_body
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: protocol.close
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: protocol.body.read
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 115
    functionName: scrapy.core.downloader.handlers.ftp.FTPDownloadHandler._failed
    functionSourceFile: scrapy.core.downloader.handlers.ftp
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.int
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.headers.Headers.__init__
    - <builtin>.list
    - scrapy.http.response.Response._set_body
    - m.group
    - scrapy.http.response.Response._set_url
    - _CODE_RE.search
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.utils.python.to_bytes
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - scrapy.http.response.Response.__init__
    - result.getErrorMessage
    - urllib.parse.urlparse.hostname.encode
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: result.getErrorMessage
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: _CODE_RE.search
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: m.group
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.datauri
    functionSourceFile: scrapy.core.downloader.handlers.datauri
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.datauri.DataURIDownloadHandler
    functionSourceFile: scrapy.core.downloader.handlers.datauri
    functionUses: 0
    functionsReached:
    - scrapy.utils.decorators.defers
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 15
    functionName: scrapy.core.downloader.handlers.datauri.DataURIDownloadHandler.download_request
    functionSourceFile: scrapy.core.downloader.handlers.datauri
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.super
    - <builtin>.int
    - w3lib.url.parse_data_uri.media_type_parameters.get
    - scrapy.http.headers.Headers.__init__
    - <builtin>.list
    - scrapy.http.response.Response._set_body
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.http.response.Response.__init__
    - <builtin>.issubclass
    - w3lib.url.parse_data_uri
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.parse_data_uri
    functionSourceFile: w3lib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.parse_data_uri.media_type_parameters.get
    functionSourceFile: w3lib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.http10
    functionSourceFile: scrapy.core.downloader.handlers.http10
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b675700>
    argNames:
    - self
    - settings
    - crawler
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 10
    functionName: scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler.__init__
    functionSourceFile: scrapy.core.downloader.handlers.http10
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 19
    functionName: scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler.from_crawler
    functionSourceFile: scrapy.core.downloader.handlers.http10
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler.__init__
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 22
    functionName: scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler.download_request
    functionSourceFile: scrapy.core.downloader.handlers.http10
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - <builtin>.hasattr
    - objcls.from_settings
    - twisted.internet.reactor.connectSSL
    - scrapy.utils.misc.build_from_crawler
    - scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler._connect
    - typing.cast
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse
    - objcls.from_crawler
    - twisted.internet.reactor.connectTCP
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - factory
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 28
    functionName: scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler._connect
    functionSourceFile: scrapy.core.downloader.handlers.http10
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - <builtin>.hasattr
    - objcls.from_settings
    - twisted.internet.reactor.connectSSL
    - scrapy.utils.misc.build_from_crawler
    - objcls.from_crawler
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - twisted.internet.reactor.connectTCP
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.http2
    functionSourceFile: scrapy.core.downloader.handlers.http2
    functionUses: 0
    functionsReached:
    - typing.TypeVar
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e831670>
    argNames:
    - self
    - settings
    - crawler
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 25
    functionName: scrapy.core.downloader.handlers.http2.H2DownloadHandler.__init__
    functionSourceFile: scrapy.core.downloader.handlers.http2
    functionUses: 1
    functionsReached:
    - scrapy.core.http2.agent.H2ConnectionPool.__init__
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - scrapy.core.downloader.contextfactory.load_context_factory_from_settings
    - warnings.warn
    - typing.cast.rindex
    - settings.get
    - <builtin>.callable
    - objcls.from_crawler
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 34
    functionName: scrapy.core.downloader.handlers.http2.H2DownloadHandler.from_crawler
    functionSourceFile: scrapy.core.downloader.handlers.http2
    functionUses: 0
    functionsReached:
    - scrapy.core.http2.agent.H2ConnectionPool.__init__
    - <builtin>.isinstance
    - scrapy.core.downloader.handlers.http2.H2DownloadHandler.__init__
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    - scrapy.core.downloader.contextfactory.load_context_factory_from_settings
    - warnings.warn
    - typing.cast.rindex
    - settings.get
    - <builtin>.callable
    - objcls.from_crawler
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 39
    functionName: scrapy.core.downloader.handlers.http2.H2DownloadHandler.download_request
    functionSourceFile: scrapy.core.downloader.handlers.http2
    functionUses: 0
    functionsReached:
    - d.addBoth
    - twisted.web.client.URI.fromBytes
    - conn_d.addCallback
    - scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory.__init__
    - scrapy.core.downloader.webclient._parsed_url_args
    - request.meta.get
    - scrapy.core.http2.agent.H2Agent.get_key
    - urllib.parse.urlparse.scheme.encode
    - scrapy.core.http2.agent.H2Agent.__init__
    - urllib.parse.urlunparse.encode
    - scrapy.core.http2.agent.ScrapyProxyH2Agent.get_key
    - d.addCallback
    - re.match
    - scrapy.core.http2.protocol.H2ClientFactory.__init__
    - scrapy.core.http2.agent.ScrapyProxyH2Agent.get_endpoint
    - collections.deque
    - scrapy.utils.python.to_bytes
    - twisted.internet.defer.succeed
    - conn_lost_deferred.addCallback
    - scrapy.core.downloader.handlers.http2.ScrapyH2Agent.download_request
    - scrapy.core.downloader.handlers.http2.ScrapyH2Agent._get_agent
    - url.strip
    - scrapy.core.http2.agent.H2Agent.get_endpoint
    - time.time
    - <builtin>.isinstance
    - scrapy.core.downloader.handlers.http2.ScrapyH2Agent.__init__
    - twisted.web.client._StandardEndpointFactory
    - twisted.web.client._StandardEndpointFactory.endpointForURI
    - urllib.parse.urlparse.netloc.encode
    - twisted.internet.defer.Deferred
    - scrapy.core.http2.agent.ScrapyProxyH2Agent.__init__
    - scrapy.core.http2.agent.H2ConnectionPool._new_connection
    - <builtin>.super
    - scrapy.core.http2.agent.H2Agent.request
    - endpoint.connect
    - <builtin>.bytes
    - twisted.internet.reactor.callLater
    - urllib.parse.urlunparse
    - twisted.internet.defer.fail
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.core.downloader.webclient._parse
    - urllib.parse.urlparse
    - scrapy.core.http2.agent.H2ConnectionPool.get_connection
    - twisted.python.failure.Failure
    - zope.interface.verify.verifyObject
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b287490>
    - <ast.Constant object at 0x7f9a4b287fa0>
    - <ast.Constant object at 0x7f9a4b287820>
    argNames:
    - self
    - context_factory
    - pool
    - connect_timeout
    - bind_address
    - crawler
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 55
    functionName: scrapy.core.downloader.handlers.http2.ScrapyH2Agent.__init__
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 100
    functionName: scrapy.core.downloader.handlers.http2.ScrapyH2Agent.download_request
    functionSourceFile: scrapy.core.downloader.handlers.http2
    functionUses: 1
    functionsReached:
    - d.addBoth
    - twisted.web.client.URI.fromBytes
    - conn_d.addCallback
    - scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory.__init__
    - scrapy.core.downloader.webclient._parsed_url_args
    - request.meta.get
    - scrapy.core.http2.agent.H2Agent.get_key
    - urllib.parse.urlparse.scheme.encode
    - scrapy.core.http2.agent.H2Agent.__init__
    - urllib.parse.urlunparse.encode
    - scrapy.core.http2.agent.ScrapyProxyH2Agent.get_key
    - d.addCallback
    - re.match
    - scrapy.core.http2.protocol.H2ClientFactory.__init__
    - scrapy.core.http2.agent.ScrapyProxyH2Agent.get_endpoint
    - collections.deque
    - scrapy.utils.python.to_bytes
    - twisted.internet.defer.succeed
    - conn_lost_deferred.addCallback
    - scrapy.core.downloader.handlers.http2.ScrapyH2Agent._get_agent
    - url.strip
    - scrapy.core.http2.agent.H2Agent.get_endpoint
    - time.time
    - <builtin>.isinstance
    - twisted.web.client._StandardEndpointFactory
    - twisted.web.client._StandardEndpointFactory.endpointForURI
    - urllib.parse.urlparse.netloc.encode
    - twisted.internet.defer.Deferred
    - scrapy.core.http2.agent.ScrapyProxyH2Agent.__init__
    - scrapy.core.http2.agent.H2ConnectionPool._new_connection
    - <builtin>.super
    - scrapy.core.http2.agent.H2Agent.request
    - endpoint.connect
    - <builtin>.bytes
    - twisted.internet.reactor.callLater
    - urllib.parse.urlunparse
    - twisted.internet.defer.fail
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.core.downloader.webclient._parse
    - urllib.parse.urlparse
    - scrapy.core.http2.agent.H2ConnectionPool.get_connection
    - twisted.python.failure.Failure
    - zope.interface.verify.verifyObject
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 47
    functionName: scrapy.core.downloader.handlers.http2.H2DownloadHandler.close
    functionSourceFile: scrapy.core.downloader.handlers.http2
    functionUses: 0
    functionsReached:
    - conn.transport.abortConnection
    - scrapy.core.http2.agent.H2ConnectionPool.close_connections
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - timeout
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 69
    functionName: scrapy.core.downloader.handlers.http2.ScrapyH2Agent._get_agent
    functionSourceFile: scrapy.core.downloader.handlers.http2
    functionUses: 2
    functionsReached:
    - twisted.web.client.URI.fromBytes
    - scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory.__init__
    - scrapy.core.downloader.webclient._parsed_url_args
    - urllib.parse.urlparse.scheme.encode
    - request.meta.get
    - scrapy.core.http2.agent.H2Agent.__init__
    - urllib.parse.urlunparse.encode
    - re.match
    - scrapy.utils.python.to_bytes
    - url.strip
    - <builtin>.isinstance
    - twisted.web.client._StandardEndpointFactory
    - urllib.parse.urlparse.netloc.encode
    - scrapy.core.http2.agent.ScrapyProxyH2Agent.__init__
    - <builtin>.super
    - urllib.parse.urlunparse
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.core.downloader.webclient._parse
    - urllib.parse.urlparse
    - zope.interface.verify.verifyObject
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - NotImplementedError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - response
    - request
    - start_time
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 115
    functionName: scrapy.core.downloader.handlers.http2.ScrapyH2Agent._cb_latency
    functionSourceFile: scrapy.core.downloader.handlers.http2
    functionUses: 0
    functionsReached:
    - time.time
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - response
    - request
    - timeout
    - timeout_cl
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 122
    functionName: scrapy.core.downloader.handlers.http2.ScrapyH2Agent._cb_timeout
    functionSourceFile: scrapy.core.downloader.handlers.http2
    functionUses: 0
    functionsReached:
    - urllib.parse.urldefrag
    - timeout_cl.active
    - timeout_cl.cancel
    linkageType: pythonLinkage
    raised:
    - TimeoutError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: timeout_cl.active
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: timeout_cl.cancel
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.http
    functionSourceFile: scrapy.core.downloader.handlers.http
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.s3
    functionSourceFile: scrapy.core.downloader.handlers.s3
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 11
    ICount: 1
    IfCount: 7
    argCount: 8
    argDefaultValues: []
    argNames:
    - self
    - settings
    - crawler
    - aws_access_key_id
    - aws_secret_access_key
    - aws_session_token
    - httpdownloadhandler
    - kw
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 9
    functionName: scrapy.core.downloader.handlers.s3.S3DownloadHandler.__init__
    functionSourceFile: scrapy.core.downloader.handlers.s3
    functionUses: 1
    functionsReached:
    - <builtin>.hasattr
    - scrapy.utils.boto.is_botocore_available
    - objcls.from_settings
    - botocore.credentials.Credentials
    - scrapy.utils.misc.build_from_crawler
    - kw.pop
    - kw.get
    - objcls.from_crawler
    linkageType: pythonLinkage
    raised:
    - NotConfigured
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: kw.get
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: botocore.credentials.Credentials
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 60
    functionName: scrapy.core.downloader.handlers.s3.S3DownloadHandler.from_crawler
    functionSourceFile: scrapy.core.downloader.handlers.s3
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - scrapy.utils.boto.is_botocore_available
    - objcls.from_settings
    - botocore.credentials.Credentials
    - kw.pop
    - scrapy.utils.misc.build_from_crawler
    - scrapy.core.downloader.handlers.s3.S3DownloadHandler.__init__
    - kw.get
    - objcls.from_crawler
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 63
    functionName: scrapy.core.downloader.handlers.s3.S3DownloadHandler.download_request
    functionSourceFile: scrapy.core.downloader.handlers.s3
    functionUses: 0
    functionsReached:
    - request.meta.get
    - urllib.parse.urlparse
    - request.headers.to_unicode_dict
    - botocore.awsrequest.AWSRequest
    - request.replace
    - scrapy.utils.httpobj.urlparse_cached
    - awsrequest.headers.items
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.replace
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.headers.to_unicode_dict
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: botocore.awsrequest.AWSRequest
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: awsrequest.headers.items
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.file
    functionSourceFile: scrapy.core.downloader.handlers.file
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.core.downloader.handlers.file.FileDownloadHandler
    functionSourceFile: scrapy.core.downloader.handlers.file
    functionUses: 0
    functionsReached:
    - scrapy.utils.decorators.defers
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 13
    functionName: scrapy.core.downloader.handlers.file.FileDownloadHandler.download_request
    functionSourceFile: scrapy.core.downloader.handlers.file
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - w3lib.url.file_uri_to_path
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - pathlib.Path
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlencode.lower
    - pathlib.Path.read_bytes
    - scrapy.http.headers.Headers.__init__
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - scrapy.http.response.Response._set_body
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.file_uri_to_path
    functionSourceFile: w3lib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.read_bytes
    functionSourceFile: pathlib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.spiders.init
    functionSourceFile: scrapy.spiders.init
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 8
    functionName: scrapy.spiders.init.InitSpider.start_requests
    functionSourceFile: scrapy.spiders.init
    functionUses: 0
    functionsReached:
    - typing.cast
    - inspect.isawaitable
    - scrapy.spiders.init.InitSpider.init_request
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - asyncio.isfuture
    - scrapy.spiders.init.InitSpider.initialized
    - scrapy.utils.misc.arg_to_iter
    - <builtin>.callable
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.fromFuture
    - <builtin>.super
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 18
    functionName: scrapy.spiders.init.InitSpider.init_request
    functionSourceFile: scrapy.spiders.init
    functionUses: 1
    functionsReached:
    - scrapy.spiders.init.InitSpider.initialized
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d17c8b0>
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 12
    functionName: scrapy.spiders.init.InitSpider.initialized
    functionSourceFile: scrapy.spiders.init
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.extensions.periodic_log
    functionSourceFile: scrapy.extensions.periodic_log
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f07b640>
    - <ast.Dict object at 0x7f9a4f07b610>
    - <ast.Dict object at 0x7f9a4f07b5e0>
    - <ast.Constant object at 0x7f9a4f07b5b0>
    argNames:
    - self
    - stats
    - interval
    - ext_stats
    - ext_delta
    - ext_timing_enabled
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 16
    functionName: scrapy.extensions.periodic_log.PeriodicLog.__init__
    functionSourceFile: scrapy.extensions.periodic_log
    functionUses: 1
    functionsReached:
    - json.JSONEncoder.__init__
    - ext_delta.get
    - <builtin>.bool
    - ext_stats.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ext_stats.get
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ext_delta.get
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 38
    functionName: scrapy.extensions.periodic_log.PeriodicLog.from_crawler
    functionSourceFile: scrapy.extensions.periodic_log
    functionUses: 0
    functionsReached:
    - <builtin>.bool
    - crawler.settings.getfloat
    - crawler.signals.connect
    - crawler.settings.getdict
    - json.JSONEncoder.__init__
    - scrapy.extensions.periodic_log.PeriodicLog.__init__
    - crawler.settings.getbool
    - ext_delta.get
    - ext_stats.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler.settings.getdict
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 75
    functionName: scrapy.extensions.periodic_log.PeriodicLog.spider_opened
    functionSourceFile: scrapy.extensions.periodic_log
    functionUses: 0
    functionsReached:
    - task.LoopingCall
    - datetime.datetime.now
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: datetime.datetime.now
    functionSourceFile: datetime
    functionUses: 9
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: task.LoopingCall
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 83
    functionName: scrapy.extensions.periodic_log.PeriodicLog.log
    functionSourceFile: scrapy.extensions.periodic_log
    functionUses: 1
    functionsReached:
    - scrapy.extensions.periodic_log.PeriodicLog.log_delta
    - scrapy.extensions.periodic_log.PeriodicLog.log_crawler_stats
    - <builtin>.isinstance
    - logger.info
    - json.JSONEncoder.encode
    - datetime.datetime.now
    - scrapy.extensions.periodic_log.PeriodicLog.log_timing
    - scrapy.extensions.periodic_log.PeriodicLog.param_allowed
    - num_stats.items
    - data.update
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 104
    functionName: scrapy.extensions.periodic_log.PeriodicLog.log_timing
    functionSourceFile: scrapy.extensions.periodic_log
    functionUses: 2
    functionsReached:
    - datetime.datetime.now
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: data.update
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 93
    functionName: scrapy.extensions.periodic_log.PeriodicLog.log_delta
    functionSourceFile: scrapy.extensions.periodic_log
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - num_stats.items
    - scrapy.extensions.periodic_log.PeriodicLog.param_allowed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 116
    functionName: scrapy.extensions.periodic_log.PeriodicLog.log_crawler_stats
    functionSourceFile: scrapy.extensions.periodic_log
    functionUses: 2
    functionsReached:
    - scrapy.extensions.periodic_log.PeriodicLog.param_allowed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 0
    IfCount: 4
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - stat_name
    - include
    - exclude
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 124
    functionName: scrapy.extensions.periodic_log.PeriodicLog.param_allowed
    functionSourceFile: ''
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: num_stats.items
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - reason
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 137
    functionName: scrapy.extensions.periodic_log.PeriodicLog.spider_closed
    functionSourceFile: scrapy.extensions.periodic_log
    functionUses: 0
    functionsReached:
    - scrapy.extensions.periodic_log.PeriodicLog.log_delta
    - scrapy.extensions.periodic_log.PeriodicLog.log_crawler_stats
    - <builtin>.isinstance
    - logger.info
    - json.JSONEncoder.encode
    - datetime.datetime.now
    - scrapy.extensions.periodic_log.PeriodicLog.log
    - scrapy.extensions.periodic_log.PeriodicLog.log_timing
    - scrapy.extensions.periodic_log.PeriodicLog.param_allowed
    - num_stats.items
    - data.update
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.extensions.debug
    functionSourceFile: scrapy.extensions.debug
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e26a3d0>
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 21
    functionName: scrapy.extensions.debug.StackTraceDump.__init__
    functionSourceFile: scrapy.extensions.debug
    functionUses: 1
    functionsReached:
    - signal.signal
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 31
    functionName: scrapy.extensions.debug.StackTraceDump.from_crawler
    functionSourceFile: scrapy.extensions.debug
    functionUses: 0
    functionsReached:
    - scrapy.extensions.debug.StackTraceDump.__init__
    - signal.signal
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - signum
    - frame
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 34
    functionName: scrapy.extensions.debug.StackTraceDump.dump_stacktrace
    functionSourceFile: scrapy.extensions.debug
    functionUses: 0
    functionsReached:
    - scrapy.extensions.debug.StackTraceDump._thread_stacks
    - <builtin>.min
    - scrapy.utils.trackref.format_live_refs
    - <builtin>.int
    - sys._current_frames
    - <builtin>.issubclass
    - <builtin>.eval
    - time.time
    - scrapy.utils.engine.get_engine_status
    - id2name.get
    - <builtin>.type
    - live_refs.items
    - scrapy.utils.engine.format_engine_status
    - <builtin>.dict
    - logger.info
    - threading.enumerate
    - traceback.format_stack
    - <builtin>.len
    - wdict.values
    - <builtin>.sorted
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 47
    functionName: scrapy.extensions.debug.StackTraceDump._thread_stacks
    functionSourceFile: scrapy.extensions.debug
    functionUses: 1
    functionsReached:
    - <builtin>.dict
    - traceback.format_stack
    - threading.enumerate
    - id2name.get
    - sys._current_frames
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: threading.enumerate
    functionSourceFile: threading
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sys._current_frames
    functionSourceFile: sys
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: id2name.get
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: traceback.format_stack
    functionSourceFile: traceback
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 58
    functionName: scrapy.extensions.debug.Debugger.__init__
    functionSourceFile: scrapy.extensions.debug
    functionUses: 0
    functionsReached:
    - signal.signal
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - signum
    - frame
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 65
    functionName: scrapy.extensions.debug.Debugger._enter_debugger
    functionSourceFile: scrapy.extensions.debug
    functionUses: 0
    functionsReached:
    - pdb.Pdb.set_trace
    - pdb.Pdb
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pdb.Pdb
    functionSourceFile: pdb
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pdb.Pdb.set_trace
    functionSourceFile: pdb
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions.spiderstate
    functionSourceFile: scrapy.extensions.spiderstate
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f07bf70>
    argNames:
    - self
    - jobdir
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 12
    functionName: scrapy.extensions.spiderstate.SpiderState.__init__
    functionSourceFile: scrapy.extensions.spiderstate
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 16
    functionName: scrapy.extensions.spiderstate.SpiderState.from_crawler
    functionSourceFile: scrapy.extensions.spiderstate
    functionUses: 0
    functionsReached:
    - crawler.signals.connect
    - pathlib.Path.mkdir
    - pathlib.Path.exists
    - scrapy.utils.job.job_dir
    - pathlib.Path
    - scrapy.extensions.spiderstate.SpiderState.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 26
    functionName: scrapy.extensions.spiderstate.SpiderState.spider_closed
    functionSourceFile: scrapy.extensions.spiderstate
    functionUses: 0
    functionsReached:
    - pickle.dump
    - pathlib.Path.open
    - pathlib.Path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 31
    functionName: scrapy.extensions.spiderstate.SpiderState.spider_opened
    functionSourceFile: scrapy.extensions.spiderstate
    functionUses: 0
    functionsReached:
    - pathlib.Path.open
    - pathlib.Path.exists
    - pickle.load
    - pathlib.Path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pickle.load
    functionSourceFile: pickle
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 39
    functionName: scrapy.extensions.spiderstate.SpiderState.statefn
    functionSourceFile: scrapy.extensions.spiderstate
    functionUses: 0
    functionsReached:
    - pathlib.Path
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: -1
    functionName: scrapy.extensions.feedexport
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__init__
    - warnings.warn
    - inspect.getmodule
    - scrapy.utils.deprecate._clspath
    - inspect.stack
    - subclass_warn_message.format
    - logging.getLogger
    - scrapy.utils.deprecate.create_deprecated_class
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 6
    argDefaultValues: []
    argNames:
    - builder
    - uri
    - args
    - feed_options
    - preargs
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 44
    functionName: scrapy.extensions.feedexport.build_storage
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 10
    functionsReached:
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - session.client
    - urllib.parse.unquote
    - scrapy.utils.boto.is_botocore_available
    - <builtin>.int
    - feed_options.get
    - session.create_client
    - warnings.warn
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - logger.warning
    - boto3.session.Session
    - urllib.parse.urlparse
    - botocore.session.get_session
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 2
    IfCount: 3
    argCount: 9
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d3d9610>
    - <ast.Constant object at 0x7f9a4d3d99d0>
    - <ast.Constant object at 0x7f9a4d3d9e80>
    - <ast.Constant object at 0x7f9a4d3d91c0>
    argNames:
    - self
    - uri
    - access_key
    - secret_key
    - acl
    - endpoint_url
    - feed_options
    - session_token
    - region_name
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 155
    functionName: scrapy.extensions.feedexport.S3FeedStorage.__init__
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 11
    functionsReached:
    - session.client
    - scrapy.utils.boto.is_botocore_available
    - session.create_client
    - feed_options.get
    - warnings.warn
    - logger.warning
    - boto3.session.Session
    - urllib.parse.urlparse
    - botocore.session.get_session
    linkageType: pythonLinkage
    raised:
    - NotConfigured
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c961bb0>
    argNames:
    - self
    - uri
    - use_active_mode
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 275
    functionName: scrapy.extensions.feedexport.FTPFeedStorage.__init__
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 11
    functionsReached:
    - feed_options.get
    - urllib.parse.unquote
    - <builtin>.int
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - feed_options
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 61
    functionName: scrapy.extensions.feedexport.ItemFilter.__init__
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - feed_options.get
    - typing.cast.rindex
    - <builtin>.tuple
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: feed_options.get
    functionSourceFile: <builtin>
    functionUses: 17
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - item
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 71
    functionName: scrapy.extensions.feedexport.ItemFilter.accepts
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - uri
    - feed_options
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 88
    functionName: scrapy.extensions.feedexport.IFeedStorage.__init__
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - spider
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 92
    functionName: scrapy.extensions.feedexport.IFeedStorage.open
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - file
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 96
    functionName: scrapy.extensions.feedexport.IFeedStorage.store
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 102
    functionName: scrapy.extensions.feedexport.BlockingFeedStorage.open
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - tempfile.NamedTemporaryFile
    - pathlib.Path
    - pathlib.Path.is_dir
    linkageType: pythonLinkage
    raised:
    - OSError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.is_dir
    functionSourceFile: pathlib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: tempfile.NamedTemporaryFile
    functionSourceFile: tempfile
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - file
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 109
    functionName: scrapy.extensions.feedexport.BlockingFeedStorage.store
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - twisted.internet.threads.deferToThread
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - file
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 112
    functionName: scrapy.extensions.feedexport.BlockingFeedStorage._store_in_thread
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d2055b0>
    argNames:
    - self
    - uri
    - _stdout
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 118
    functionName: scrapy.extensions.feedexport.StdoutFeedStorage.__init__
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - logger.warning
    - feed_options.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 130
    functionName: scrapy.extensions.feedexport.StdoutFeedStorage.open
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - file
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 133
    functionName: scrapy.extensions.feedexport.StdoutFeedStorage.store
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - uri
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 139
    functionName: scrapy.extensions.feedexport.FileFeedStorage.__init__
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - w3lib.url.file_uri_to_path
    - feed_options.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 144
    functionName: scrapy.extensions.feedexport.FileFeedStorage.open
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - pathlib.Path.parent.mkdir
    - pathlib.Path.open
    - pathlib.Path
    - pathlib.Path.parent.exists
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - file
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 150
    functionName: scrapy.extensions.feedexport.FileFeedStorage.store
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - file.close
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: boto3.session.Session
    functionSourceFile: boto3
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: session.client
    functionSourceFile: <builtin>
    functionUses: 12
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: botocore.session.get_session
    functionSourceFile: <builtin>
    functionUses: 13
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: session.create_client
    functionSourceFile: <builtin>
    functionUses: 13
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - uri
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 220
    functionName: scrapy.extensions.feedexport.S3FeedStorage.from_crawler
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - session.client
    - urllib.parse.unquote
    - scrapy.utils.boto.is_botocore_available
    - <builtin>.int
    - scrapy.extensions.feedexport.build_storage
    - feed_options.get
    - session.create_client
    - warnings.warn
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - logger.warning
    - boto3.session.Session
    - urllib.parse.urlparse
    - botocore.session.get_session
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - file
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 233
    functionName: scrapy.extensions.feedexport.S3FeedStorage._store_in_thread
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - file.close
    - file.seek
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - uri
    - project_id
    - acl
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 249
    functionName: scrapy.extensions.feedexport.GCSFeedStorage.__init__
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - uri
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 257
    functionName: scrapy.extensions.feedexport.GCSFeedStorage.from_crawler
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - scrapy.extensions.feedexport.GCSFeedStorage.__init__
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - file
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 264
    functionName: scrapy.extensions.feedexport.GCSFeedStorage._store_in_thread
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - bucket.blob
    - google.cloud.storage.Client
    - google.cloud.storage.Client.get_bucket
    - blob.upload_from_file
    - file.seek
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: google.cloud.storage.Client.get_bucket
    functionSourceFile: google
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: bucket.blob
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: blob.upload_from_file
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    - uri
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 294
    functionName: scrapy.extensions.feedexport.FTPFeedStorage.from_crawler
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - session.client
    - urllib.parse.unquote
    - scrapy.utils.boto.is_botocore_available
    - <builtin>.int
    - scrapy.extensions.feedexport.build_storage
    - feed_options.get
    - session.create_client
    - warnings.warn
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - logger.warning
    - crawler.settings.getbool
    - boto3.session.Session
    - urllib.parse.urlparse
    - botocore.session.get_session
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - file
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 302
    functionName: scrapy.extensions.feedexport.FTPFeedStorage._store_in_thread
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - file.close
    - ftplib.FTP
    - scrapy.utils.ftp.ftp_store_file
    - posixpath.dirname
    - scrapy.utils.ftp.ftp_makedirs_cwd
    - posixpath.split
    - file.seek
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 13
    argDefaultValues: []
    argNames:
    - self
    - storage
    - uri
    - format
    - store_empty
    - batch_id
    - uri_template
    - filter
    - feed_options
    - spider
    - exporters
    - settings
    - crawler
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 316
    functionName: scrapy.extensions.feedexport.FeedSlot.__init__
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 352
    functionName: scrapy.extensions.feedexport.FeedSlot.start_exporting
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - scrapy.extensions.feedexport.FeedSlot._get_exporter
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - scrapy.extensions.feedexport.FeedSlot._get_instance
    - scrapy.extensions.postprocessing.PostProcessingManager._load_plugins
    - <builtin>.hasattr
    - scrapy.utils.misc.build_from_crawler
    - objcls.from_settings
    - typing.cast.rindex
    - scrapy.extensions.postprocessing.PostProcessingManager._get_head_plugin
    - objcls.from_crawler
    - <builtin>.callable
    - scrapy.extensions.postprocessing.PostProcessingManager.__init__
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - plugins
    - file
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 130
    functionName: scrapy.extensions.postprocessing.PostProcessingManager.__init__
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - scrapy.extensions.postprocessing.PostProcessingManager._load_plugins
    - typing.cast.rindex
    - scrapy.extensions.postprocessing.PostProcessingManager._get_head_plugin
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - file
    - format
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 376
    functionName: scrapy.extensions.feedexport.FeedSlot._get_exporter
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 1
    functionsReached:
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.extensions.feedexport.FeedSlot._get_instance
    - scrapy.utils.misc.build_from_crawler
    - objcls.from_crawler
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - objcls
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 373
    functionName: scrapy.extensions.feedexport.FeedSlot._get_instance
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 2
    functionsReached:
    - objcls.from_crawler
    - <builtin>.hasattr
    - objcls.from_settings
    - scrapy.utils.misc.build_from_crawler
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 379
    functionName: scrapy.extensions.feedexport.FeedSlot.finish_exporting
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 395
    functionName: scrapy.extensions.feedexport.FeedExporter.from_crawler
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - session.client
    - urllib.parse.unquote
    - typing.cast
    - scrapy.extensions.feedexport.FeedExporter._storage_supported
    - uri.absolute
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.extensions.feedexport.FeedExporter._get_storage.build_instance
    - pathlib.PureWindowsPath
    - <builtin>.int
    - scrapy.extensions.feedexport.FeedExporter._settings_are_valid
    - scrapy.extensions.feedexport.FeedExporter.__init__
    - scrapy.extensions.feedexport.FeedExporter._load_components
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - scrapy.utils.conf.feed_complete_default_values_from_settings
    - <builtin>.callable
    - settings.getint
    - conf.items
    - settings.getdictorlist
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - scrapy.extensions.feedexport.FeedExporter._get_storage
    - scrapy.extensions.feedexport.FeedExporter._exporter_supported
    - scrapy.extensions.feedexport.FeedExporter._load_filter
    - warnings.warn
    - settings.getbool
    - out.setdefault
    - logger.warning
    - <builtin>.type
    - boto3.session.Session
    - botocore.session.get_session
    - re.search
    - scrapy.utils.boto.is_botocore_available
    - scrapy.extensions.feedexport.build_storage
    - feed.copy
    - feed_options.get
    - session.create_client
    - crawler.signals.connect
    - iterable.items
    - typing.cast.rindex
    - <builtin>.str
    - logger.error
    - urllib.parse.urlparse
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 1
    IfCount: 5
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 402
    functionName: scrapy.extensions.feedexport.FeedExporter.__init__
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 1
    functionsReached:
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - session.client
    - urllib.parse.unquote
    - typing.cast
    - scrapy.extensions.feedexport.FeedExporter._storage_supported
    - uri.absolute
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.extensions.feedexport.FeedExporter._get_storage.build_instance
    - pathlib.PureWindowsPath
    - <builtin>.int
    - scrapy.extensions.feedexport.FeedExporter._settings_are_valid
    - scrapy.extensions.feedexport.FeedExporter._load_components
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - scrapy.utils.conf.feed_complete_default_values_from_settings
    - <builtin>.callable
    - settings.getint
    - conf.items
    - settings.getdictorlist
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - scrapy.extensions.feedexport.FeedExporter._get_storage
    - scrapy.extensions.feedexport.FeedExporter._exporter_supported
    - scrapy.extensions.feedexport.FeedExporter._load_filter
    - warnings.warn
    - settings.getbool
    - out.setdefault
    - logger.warning
    - <builtin>.type
    - boto3.session.Session
    - botocore.session.get_session
    - re.search
    - scrapy.utils.boto.is_botocore_available
    - scrapy.extensions.feedexport.build_storage
    - feed.copy
    - feed_options.get
    - session.create_client
    - iterable.items
    - typing.cast.rindex
    - <builtin>.str
    - logger.error
    - urllib.parse.urlparse
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: uri.absolute
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - feed_options
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 681
    functionName: scrapy.extensions.feedexport.FeedExporter._load_filter
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - feed_options.get
    - typing.cast.rindex
    - typing.cast
    - urllib.parse.urlparse
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - setting_prefix
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 586
    functionName: scrapy.extensions.feedexport.FeedExporter._load_components
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - iterable.items
    - <builtin>.type
    - <builtin>.callable
    - conf.items
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - uri
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 619
    functionName: scrapy.extensions.feedexport.FeedExporter._storage_supported
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 2
    functionsReached:
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - session.client
    - urllib.parse.unquote
    - <builtin>.hasattr
    - scrapy.extensions.feedexport.FeedExporter._get_storage.build_instance
    - pathlib.PureWindowsPath
    - <builtin>.int
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - scrapy.extensions.feedexport.FeedExporter._get_storage
    - warnings.warn
    - logger.warning
    - boto3.session.Session
    - botocore.session.get_session
    - scrapy.utils.boto.is_botocore_available
    - scrapy.extensions.feedexport.build_storage
    - feed_options.get
    - session.create_client
    - logger.error
    - urllib.parse.urlparse
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 601
    functionName: scrapy.extensions.feedexport.FeedExporter._settings_are_valid
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 2
    functionsReached:
    - re.search
    - logger.error
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - format
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 596
    functionName: scrapy.extensions.feedexport.FeedExporter._exporter_supported
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 2
    functionsReached:
    - logger.error
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 449
    functionName: scrapy.extensions.feedexport.FeedExporter.open_spider
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - session.client
    - urllib.parse.unquote
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.extensions.feedexport.FeedExporter._get_storage.build_instance
    - <builtin>.int
    - datetime.datetime.now
    - scrapy.extensions.feedexport.FeedExporter._get_uri_params
    - utc_now.replace
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - <builtin>.callable
    - <builtin>.isinstance
    - scrapy.extensions.feedexport.FeedExporter._get_storage
    - warnings.warn
    - logger.warning
    - scrapy.extensions.feedexport.FeedExporter._start_new_batch
    - boto3.session.Session
    - botocore.session.get_session
    - scrapy.utils.boto.is_botocore_available
    - <builtin>.dir
    - scrapy.extensions.feedexport.build_storage
    - feed_options.get
    - session.create_client
    - typing.cast.rindex
    - scrapy.extensions.feedexport.FeedSlot.__init__
    - utc_now.isoformat
    - urllib.parse.urlparse
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ca37310>
    argNames:
    - self
    - spider
    - uri_params_function
    - slot
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 660
    functionName: scrapy.extensions.feedexport.FeedExporter._get_uri_params
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - <builtin>.dir
    - datetime.datetime.now
    - typing.cast.rindex
    - utc_now.isoformat
    - utc_now.replace
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 6
    argDefaultValues: []
    argNames:
    - self
    - batch_id
    - uri
    - feed_options
    - spider
    - uri_template
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 525
    functionName: scrapy.extensions.feedexport.FeedExporter._start_new_batch
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 2
    functionsReached:
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - session.client
    - urllib.parse.unquote
    - <builtin>.hasattr
    - scrapy.extensions.feedexport.FeedExporter._get_storage.build_instance
    - <builtin>.int
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - scrapy.extensions.feedexport.FeedExporter._get_storage
    - warnings.warn
    - logger.warning
    - boto3.session.Session
    - botocore.session.get_session
    - scrapy.utils.boto.is_botocore_available
    - scrapy.extensions.feedexport.build_storage
    - feed_options.get
    - session.create_client
    - scrapy.extensions.feedexport.FeedSlot.__init__
    - urllib.parse.urlparse
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 462
    functionName: scrapy.extensions.feedexport.FeedExporter.close_spider
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - d.addBoth
    - slot_.file.close
    - typing.cast.asFuture
    - twisted.internet.defer.ensureDeferred.asFuture
    - slot.finish_exporting
    - d.addErrback
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.DeferredList
    - d.addCallback
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - scrapy.extensions.feedexport.FeedExporter._close_slot
    - <builtin>.callable
    - <builtin>.isinstance
    - typing.AsyncIterable.asFuture
    - typing.Iterable.asFuture
    - asyncio.get_event_loop
    - scrapy.extensions.feedexport.FeedExporter._close_slot.get_file
    - <builtin>.type
    - scrapy.utils.defer.deferred_to_future
    - scrapy.utils.reactor.set_asyncio_event_loop
    - warnings.filterwarnings
    - scrapy.utils.defer.maybe_deferred_to_future
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - slot.start_exporting
    - twisted.internet.defer.DeferredList.asFuture
    - twisted.python.failure.Failure.asFuture
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - slot
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 475
    functionName: scrapy.extensions.feedexport.FeedExporter._close_slot
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 2
    functionsReached:
    - d.addBoth
    - slot_.file.close
    - <builtin>.isinstance
    - slot.start_exporting
    - scrapy.extensions.feedexport.FeedExporter._close_slot.get_file
    - slot.finish_exporting
    - d.addErrback
    - <builtin>.type
    - twisted.internet.defer.maybeDeferred
    - d.addCallback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - slot_
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 476
    functionName: scrapy.extensions.feedexport.FeedExporter._close_slot.get_file
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 3
    functionsReached:
    - slot_.file.close
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot_.file.close
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.finish_exporting
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.start_exporting
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions.feedexport.FeedExporter._close_slot.<lambda1>
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions.feedexport.FeedExporter._close_slot.<lambda2>
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - f
    - logmsg
    - spider
    - slot_type
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 512
    functionName: scrapy.extensions.feedexport.FeedExporter._handle_store_error
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - typing.cast
    - logger.error
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - f
    - logmsg
    - spider
    - slot_type
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 521
    functionName: scrapy.extensions.feedexport.FeedExporter._handle_store_success
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - logger.info
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - uri
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 633
    functionName: scrapy.extensions.feedexport.FeedExporter._get_storage
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 6
    functionsReached:
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - session.client
    - <builtin>.hasattr
    - scrapy.extensions.feedexport.FeedExporter._get_storage.build_instance
    - urllib.parse.unquote
    - scrapy.utils.boto.is_botocore_available
    - <builtin>.int
    - scrapy.extensions.feedexport.build_storage
    - feed_options.get
    - session.create_client
    - warnings.warn
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - logger.warning
    - boto3.session.Session
    - urllib.parse.urlparse
    - botocore.session.get_session
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - item
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 552
    functionName: scrapy.extensions.feedexport.FeedExporter.item_scraped
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached:
    - d.addBoth
    - slot_.file.close
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - urllib.parse.unquote
    - session.client
    - slot.finish_exporting
    - d.addErrback
    - slots.append
    - twisted.internet.defer.maybeDeferred
    - slot.exporter.export_item
    - d.addCallback
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - scrapy.extensions.feedexport.FeedExporter._get_storage.build_instance
    - datetime.datetime.now
    - scrapy.extensions.feedexport.FeedExporter._close_slot
    - <builtin>.int
    - scrapy.extensions.feedexport.FeedExporter._get_uri_params
    - slot.filter.accepts
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - <builtin>.callable
    - utc_now.replace
    - <builtin>.isinstance
    - scrapy.extensions.feedexport.FeedExporter._get_storage
    - warnings.warn
    - scrapy.extensions.feedexport.FeedExporter._close_slot.get_file
    - logger.warning
    - scrapy.extensions.feedexport.FeedExporter._start_new_batch
    - <builtin>.type
    - boto3.session.Session
    - botocore.session.get_session
    - scrapy.utils.boto.is_botocore_available
    - <builtin>.dir
    - scrapy.extensions.feedexport.build_storage
    - feed_options.get
    - typing.cast.rindex
    - session.create_client
    - slot.start_exporting
    - scrapy.extensions.feedexport.FeedSlot.__init__
    - utc_now.isoformat
    - urllib.parse.urlparse
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.filter.accepts
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slots.append
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: slot.exporter.export_item
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: conf.items
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.PureWindowsPath
    functionSourceFile: pathlib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - builder
    - preargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 642
    functionName: scrapy.extensions.feedexport.FeedExporter._get_storage.build_instance
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 7
    functionsReached:
    - scrapy.extensions.feedexport.FTPFeedStorage.__init__
    - session.client
    - urllib.parse.unquote
    - scrapy.utils.boto.is_botocore_available
    - <builtin>.int
    - scrapy.extensions.feedexport.build_storage
    - feed_options.get
    - session.create_client
    - warnings.warn
    - scrapy.extensions.feedexport.S3FeedStorage.__init__
    - logger.warning
    - boto3.session.Session
    - urllib.parse.urlparse
    - botocore.session.get_session
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: utc_now.replace
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: utc_now.isoformat
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions.feedexport.FeedExporter._get_uri_params.<lambda1>
    functionSourceFile: scrapy.extensions.feedexport
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions.postprocessing
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - file
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 26
    functionName: scrapy.extensions.postprocessing.GzipPlugin.__init__
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - gzip.GzipFile
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - data
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 40
    functionName: scrapy.extensions.postprocessing.GzipPlugin.write
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - gzip.GzipFile.write
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: gzip.GzipFile.write
    functionSourceFile: gzip
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 43
    functionName: scrapy.extensions.postprocessing.GzipPlugin.close
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - gzip.GzipFile.close
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: gzip.GzipFile.close
    functionSourceFile: gzip
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - file
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 59
    functionName: scrapy.extensions.postprocessing.Bz2Plugin.__init__
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - bz2.BZ2File
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: bz2.BZ2File
    functionSourceFile: bz2
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - data
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 67
    functionName: scrapy.extensions.postprocessing.Bz2Plugin.write
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - bz2.BZ2File.write
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: bz2.BZ2File.write
    functionSourceFile: bz2
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 70
    functionName: scrapy.extensions.postprocessing.Bz2Plugin.close
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - bz2.BZ2File.close
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: bz2.BZ2File.close
    functionSourceFile: bz2
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - file
    - feed_options
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 92
    functionName: scrapy.extensions.postprocessing.LZMAPlugin.__init__
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - lzma.LZMAFile
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: lzma.LZMAFile
    functionSourceFile: lzma
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - data
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 109
    functionName: scrapy.extensions.postprocessing.LZMAPlugin.write
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - lzma.LZMAFile.write
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: lzma.LZMAFile.write
    functionSourceFile: lzma
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 112
    functionName: scrapy.extensions.postprocessing.LZMAPlugin.close
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - lzma.LZMAFile.close
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: lzma.LZMAFile.close
    functionSourceFile: lzma
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - plugins
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 161
    functionName: scrapy.extensions.postprocessing.PostProcessingManager._load_plugins
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 165
    functionName: scrapy.extensions.postprocessing.PostProcessingManager._get_head_plugin
    functionSourceFile: ''
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - data
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 138
    functionName: scrapy.extensions.postprocessing.PostProcessingManager.write
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - scrapy.extensions.postprocessing.PostProcessingManager.write
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 149
    functionName: scrapy.extensions.postprocessing.PostProcessingManager.tell
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - scrapy.extensions.postprocessing.PostProcessingManager.tell
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 152
    functionName: scrapy.extensions.postprocessing.PostProcessingManager.close
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached:
    - scrapy.extensions.postprocessing.PostProcessingManager.close
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 158
    functionName: scrapy.extensions.postprocessing.PostProcessingManager.writable
    functionSourceFile: scrapy.extensions.postprocessing
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions
    functionSourceFile: scrapy.extensions
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.extensions.telnet
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 0
    functionsReached:
    - <builtin>.object
    - traceback.format_exc
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 3
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 39
    functionName: scrapy.extensions.telnet.TelnetConsole.__init__
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 1
    functionsReached:
    - logger.info
    - binascii.hexlify
    - <builtin>.int
    - crawler.settings.getbool
    - os.urandom
    - crawler.settings.getlist
    linkageType: pythonLinkage
    raised:
    - NotConfigured
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler.settings.getlist
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.urandom
    functionSourceFile: os
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: binascii.hexlify
    functionSourceFile: binascii
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 64
    functionName: scrapy.extensions.telnet.TelnetConsole.from_crawler
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 0
    functionsReached:
    - logger.info
    - scrapy.extensions.telnet.TelnetConsole.__init__
    - binascii.hexlify
    - <builtin>.int
    - crawler.settings.getbool
    - os.urandom
    - crawler.settings.getlist
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 67
    functionName: scrapy.extensions.telnet.TelnetConsole.start_listening
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - logger.info
    - <builtin>.range
    - <builtin>.len
    - scrapy.utils.reactor.listen_tcp
    - twisted.internet.reactor.listenTCP
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 76
    functionName: scrapy.extensions.telnet.TelnetConsole.stop_listening
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 79
    functionName: scrapy.extensions.telnet.TelnetConsole.protocol
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 0
    functionsReached:
    - twisted.conch.telnet.TelnetTransport
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.extensions.telnet.TelnetConsole.protocol.Portal
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 0
    functionsReached:
    - scrapy.utils.decorators.defers
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self_
    - credentials
    - mind
    - interfaces
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 84
    functionName: scrapy.extensions.telnet.TelnetConsole.protocol.Portal.login
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 0
    functionsReached:
    - credentials.checkPassword
    - twisted.conch.telnet.TelnetBootstrapProtocol
    - scrapy.extensions.telnet.TelnetConsole._get_telnet_vars
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: credentials.checkPassword
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 98
    functionName: scrapy.extensions.telnet.TelnetConsole._get_telnet_vars
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.conch.telnet.TelnetBootstrapProtocol
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions.telnet.TelnetConsole.protocol.Portal.login.<lambda1>
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.conch.telnet.TelnetTransport
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions.telnet.TelnetConsole._get_telnet_vars.<dict1>.<lambda1>
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: -1
    functionName: scrapy.extensions.telnet.TelnetConsole._get_telnet_vars.<lambda1>
    functionSourceFile: scrapy.extensions.telnet
    functionUses: 0
    functionsReached:
    - <builtin>.eval
    - scrapy.utils.engine.print_engine_status
    - scrapy.utils.engine.get_engine_status
    - <builtin>.print
    - <builtin>.type
    - scrapy.utils.engine.format_engine_status
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions.memdebug
    functionSourceFile: scrapy.extensions.memdebug
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - stats
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 15
    functionName: scrapy.extensions.memdebug.MemoryDebugger.__init__
    functionSourceFile: scrapy.extensions.memdebug
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 19
    functionName: scrapy.extensions.memdebug.MemoryDebugger.from_crawler
    functionSourceFile: scrapy.extensions.memdebug
    functionUses: 0
    functionsReached:
    - scrapy.extensions.memdebug.MemoryDebugger.__init__
    - crawler.signals.connect
    - crawler.settings.getbool
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - reason
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 26
    functionName: scrapy.extensions.memdebug.MemoryDebugger.spider_closed
    functionSourceFile: scrapy.extensions.memdebug
    functionUses: 0
    functionsReached:
    - live_refs.items
    - <builtin>.len
    - gc.collect
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.extensions.logstats
    functionSourceFile: scrapy.extensions.logstats
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f07b370>
    argNames:
    - self
    - stats
    - interval
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 14
    functionName: scrapy.extensions.logstats.LogStats.__init__
    functionSourceFile: scrapy.extensions.logstats
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 21
    functionName: scrapy.extensions.logstats.LogStats.from_crawler
    functionSourceFile: scrapy.extensions.logstats
    functionUses: 0
    functionsReached:
    - scrapy.extensions.logstats.LogStats.__init__
    - crawler.signals.connect
    - crawler.settings.getfloat
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 30
    functionName: scrapy.extensions.logstats.LogStats.spider_opened
    functionSourceFile: scrapy.extensions.logstats
    functionUses: 0
    functionsReached:
    - task.LoopingCall
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 37
    functionName: scrapy.extensions.logstats.LogStats.log
    functionSourceFile: scrapy.extensions.logstats
    functionUses: 0
    functionsReached:
    - logger.info
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - reason
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 56
    functionName: scrapy.extensions.logstats.LogStats.spider_closed
    functionSourceFile: scrapy.extensions.logstats
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions.statsmailer
    functionSourceFile: scrapy.extensions.statsmailer
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - stats
    - recipients
    - mail
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 13
    functionName: scrapy.extensions.statsmailer.StatsMailer.__init__
    functionSourceFile: scrapy.extensions.statsmailer
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 19
    functionName: scrapy.extensions.statsmailer.StatsMailer.from_crawler
    functionSourceFile: scrapy.extensions.statsmailer
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.extensions.statsmailer.StatsMailer.__init__
    - urllib.parse.urlparse.scheme.encode
    - settings.getbool
    - crawler.signals.connect
    - scrapy.mail.MailSender.from_settings
    - scrapy.mail.MailSender.__init__
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - scrapy.mail._to_bytes_or_none
    - urllib.parse.urlunparse.encode
    - settings.getint
    - urllib.parse.urlparse.hostname.encode
    - crawler.settings.getlist
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 28
    functionName: scrapy.extensions.statsmailer.StatsMailer.spider_closed
    functionSourceFile: scrapy.extensions.statsmailer
    functionUses: 0
    functionsReached:
    - spider_stats.items
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: spider_stats.items
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.extensions.throttle
    functionSourceFile: scrapy.extensions.throttle
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 10
    functionName: scrapy.extensions.throttle.AutoThrottle.__init__
    functionSourceFile: scrapy.extensions.throttle
    functionUses: 1
    functionsReached:
    - crawler.signals.connect
    - crawler.settings.getbool
    - crawler.settings.getfloat
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 25
    functionName: scrapy.extensions.throttle.AutoThrottle.from_crawler
    functionSourceFile: scrapy.extensions.throttle
    functionUses: 0
    functionsReached:
    - crawler.signals.connect
    - crawler.settings.getbool
    - crawler.settings.getfloat
    - scrapy.extensions.throttle.AutoThrottle.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 28
    functionName: scrapy.extensions.throttle.AutoThrottle._spider_opened
    functionSourceFile: scrapy.extensions.throttle
    functionUses: 0
    functionsReached:
    - scrapy.extensions.throttle.AutoThrottle._max_delay
    - <builtin>.max
    - scrapy.extensions.throttle.AutoThrottle._min_delay
    - s.getfloat
    - scrapy.extensions.throttle.AutoThrottle._start_delay
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 33
    functionName: scrapy.extensions.throttle.AutoThrottle._min_delay
    functionSourceFile: scrapy.extensions.throttle
    functionUses: 1
    functionsReached:
    - s.getfloat
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 37
    functionName: scrapy.extensions.throttle.AutoThrottle._max_delay
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 40
    functionName: scrapy.extensions.throttle.AutoThrottle._start_delay
    functionSourceFile: scrapy.extensions.throttle
    functionUses: 1
    functionsReached:
    - <builtin>.max
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: s.getfloat
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 45
    functionName: scrapy.extensions.throttle.AutoThrottle._response_downloaded
    functionSourceFile: scrapy.extensions.throttle
    functionUses: 0
    functionsReached:
    - logger.info
    - scrapy.extensions.throttle.AutoThrottle._get_slot
    - request.meta.get
    - <builtin>.max
    - <builtin>.min
    - <builtin>.len
    - scrapy.extensions.throttle.AutoThrottle._adjust_delay
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 72
    functionName: scrapy.extensions.throttle.AutoThrottle._get_slot
    functionSourceFile: scrapy.extensions.throttle
    functionUses: 1
    functionsReached:
    - request.meta.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - slot
    - latency
    - response
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 76
    functionName: scrapy.extensions.throttle.AutoThrottle._adjust_delay
    functionSourceFile: scrapy.extensions.throttle
    functionUses: 1
    functionsReached:
    - <builtin>.min
    - <builtin>.max
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.extensions.corestats
    functionSourceFile: scrapy.extensions.corestats
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - stats
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 10
    functionName: scrapy.extensions.corestats.CoreStats.__init__
    functionSourceFile: scrapy.extensions.corestats
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 5
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 15
    functionName: scrapy.extensions.corestats.CoreStats.from_crawler
    functionSourceFile: scrapy.extensions.corestats
    functionUses: 0
    functionsReached:
    - crawler.signals.connect
    - scrapy.extensions.corestats.CoreStats.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 24
    functionName: scrapy.extensions.corestats.CoreStats.spider_opened
    functionSourceFile: scrapy.extensions.corestats
    functionUses: 0
    functionsReached:
    - datetime.datetime.now
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - reason
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 28
    functionName: scrapy.extensions.corestats.CoreStats.spider_closed
    functionSourceFile: scrapy.extensions.corestats
    functionUses: 0
    functionsReached:
    - elapsed_time.total_seconds
    - datetime.datetime.now
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: elapsed_time.total_seconds
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - item
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 38
    functionName: scrapy.extensions.corestats.CoreStats.item_scraped
    functionSourceFile: scrapy.extensions.corestats
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 41
    functionName: scrapy.extensions.corestats.CoreStats.response_received
    functionSourceFile: scrapy.extensions.corestats
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - item
    - spider
    - exception
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 44
    functionName: scrapy.extensions.corestats.CoreStats.item_dropped
    functionSourceFile: scrapy.extensions.corestats
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.extensions.closespider
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 7
    IfCount: 6
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 17
    functionName: scrapy.extensions.closespider.CloseSpider.__init__
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 1
    functionsReached:
    - collections.defaultdict
    - crawler.settings.getfloat
    - <builtin>.any
    - crawler.signals.connect
    - crawler.settings.getint
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 53
    functionName: scrapy.extensions.closespider.CloseSpider.from_crawler
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 0
    functionsReached:
    - collections.defaultdict
    - crawler.settings.getfloat
    - <builtin>.any
    - crawler.signals.connect
    - scrapy.extensions.closespider.CloseSpider.__init__
    - crawler.settings.getint
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - failure
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 56
    functionName: scrapy.extensions.closespider.CloseSpider.error_count
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 61
    functionName: scrapy.extensions.closespider.CloseSpider.page_count
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 66
    functionName: scrapy.extensions.closespider.CloseSpider.spider_opened
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 0
    functionsReached:
    - twisted.internet.reactor.callLater
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - item
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 76
    functionName: scrapy.extensions.closespider.CloseSpider.item_scraped
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 81
    functionName: scrapy.extensions.closespider.CloseSpider.spider_closed
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 0
    functionsReached:
    - task_no_item.stop
    - task.active
    - task.cancel
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: task.active
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: task.cancel
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: task_no_item.stop
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 90
    functionName: scrapy.extensions.closespider.CloseSpider.spider_opened_no_item
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 0
    functionsReached:
    - logger.info
    - twisted.internet.task.LoopingCall
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - item
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 101
    functionName: scrapy.extensions.closespider.CloseSpider.item_scraped_no_item
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 104
    functionName: scrapy.extensions.closespider.CloseSpider._count_items_produced
    functionSourceFile: scrapy.extensions.closespider
    functionUses: 0
    functionsReached:
    - logger.info
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.extensions.memusage
    functionSourceFile: scrapy.extensions.memusage
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 23
    functionName: scrapy.extensions.memusage.MemoryUsage.__init__
    functionSourceFile: scrapy.extensions.memusage
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - crawler.settings.getfloat
    - urllib.parse.urlparse.scheme.encode
    - settings.getbool
    - crawler.signals.connect
    - scrapy.mail.MailSender.from_settings
    - scrapy.mail.MailSender.__init__
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - scrapy.mail._to_bytes_or_none
    - crawler.settings.getbool
    - urllib.parse.urlunparse.encode
    - crawler.settings.getlist
    - importlib.import_module
    - settings.getint
    - urllib.parse.urlparse.hostname.encode
    - crawler.settings.getint
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 45
    functionName: scrapy.extensions.memusage.MemoryUsage.from_crawler
    functionSourceFile: scrapy.extensions.memusage
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - urllib.parse.urlunparse.encode
    - importlib.import_module
    - scrapy.extensions.memusage.MemoryUsage.__init__
    - scrapy.utils.python.to_bytes
    - crawler.settings.getbool
    - scrapy.mail._to_bytes_or_none
    - settings.getint
    - crawler.settings.getlist
    - <builtin>.isinstance
    - settings.getbool
    - scrapy.mail.MailSender.from_settings
    - scrapy.mail.MailSender.__init__
    - urllib.parse.urlparse.netloc.encode
    - crawler.settings.getint
    - crawler.settings.getfloat
    - crawler.signals.connect
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 48
    functionName: scrapy.extensions.memusage.MemoryUsage.get_virtual_size
    functionSourceFile: scrapy.extensions.memusage
    functionUses: 5
    functionsReached:
    - importlib.import_module.getrusage
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: importlib.import_module.getrusage
    functionSourceFile: importlib
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 7
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 55
    functionName: scrapy.extensions.memusage.MemoryUsage.engine_started
    functionSourceFile: scrapy.extensions.memusage
    functionUses: 0
    functionsReached:
    - tsk.start
    - importlib.import_module.getrusage
    - scrapy.extensions.memusage.MemoryUsage.get_virtual_size
    - twisted.internet.task.LoopingCall
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: tsk.start
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 70
    functionName: scrapy.extensions.memusage.MemoryUsage.engine_stopped
    functionSourceFile: scrapy.extensions.memusage
    functionUses: 0
    functionsReached:
    - tsk.stop
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: tsk.stop
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 75
    functionName: scrapy.extensions.memusage.MemoryUsage.update
    functionSourceFile: scrapy.extensions.memusage
    functionUses: 0
    functionsReached:
    - importlib.import_module.getrusage
    - scrapy.extensions.memusage.MemoryUsage.get_virtual_size
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 7
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 78
    functionName: scrapy.extensions.memusage.MemoryUsage._check_limit
    functionSourceFile: scrapy.extensions.memusage
    functionUses: 0
    functionsReached:
    - <builtin>.eval
    - logger.info
    - scrapy.utils.engine.get_engine_status
    - stats.get_value
    - pprint.pformat
    - logger.error
    - importlib.import_module.getrusage
    - scrapy.extensions.memusage.MemoryUsage.get_virtual_size
    - <builtin>.type
    - socket.gethostname
    - scrapy.extensions.memusage.MemoryUsage._send_report
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: socket.gethostname
    functionSourceFile: socket
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - rcpts
    - subject
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 128
    functionName: scrapy.extensions.memusage.MemoryUsage._send_report
    functionSourceFile: scrapy.extensions.memusage
    functionUses: 2
    functionsReached:
    - <builtin>.eval
    - scrapy.utils.engine.get_engine_status
    - stats.get_value
    - pprint.pformat
    - importlib.import_module.getrusage
    - <builtin>.type
    - scrapy.extensions.memusage.MemoryUsage.get_virtual_size
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 108
    functionName: scrapy.extensions.memusage.MemoryUsage._check_warning
    functionSourceFile: scrapy.extensions.memusage
    functionUses: 0
    functionsReached:
    - <builtin>.eval
    - scrapy.utils.engine.get_engine_status
    - stats.get_value
    - pprint.pformat
    - logger.warning
    - importlib.import_module.getrusage
    - scrapy.extensions.memusage.MemoryUsage.get_virtual_size
    - <builtin>.type
    - socket.gethostname
    - scrapy.extensions.memusage.MemoryUsage._send_report
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: stats.get_value
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.extensions.httpcache
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 24
    functionName: scrapy.extensions.httpcache.DummyPolicy.__init__
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - settings.getlist
    - <builtin>.int
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 30
    functionName: scrapy.extensions.httpcache.DummyPolicy.should_cache_request
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - scrapy.utils.httpobj.urlparse_cached
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 33
    functionName: scrapy.extensions.httpcache.DummyPolicy.should_cache_response
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - cachedresponse
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 36
    functionName: scrapy.extensions.httpcache.DummyPolicy.is_cached_response_fresh
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - cachedresponse
    - response
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 39
    functionName: scrapy.extensions.httpcache.DummyPolicy.is_cached_response_valid
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 46
    functionName: scrapy.extensions.httpcache.RFC2616Policy.__init__
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - settings.getbool
    - settings.getlist
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - scrapy.utils.python.to_bytes
    - urllib.parse.urlunparse.encode
    - weakref.WeakKeyDictionary
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - r
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 55
    functionName: scrapy.extensions.httpcache.RFC2616Policy._parse_cachecontrol
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 5
    functionsReached:
    - <builtin>.isinstance
    - key.lower
    - r.headers.get
    - scrapy.extensions.httpcache.parse_cachecontrol
    - directive.strip
    - parsed.pop
    - header.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: r.headers.get
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - header
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 358
    functionName: scrapy.extensions.httpcache.parse_cachecontrol
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 6
    functionsReached:
    - key.lower
    - header.split
    - directive.strip
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parsed.pop
    functionSourceFile: <builtin>
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 65
    functionName: scrapy.extensions.httpcache.RFC2616Policy.should_cache_request
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - key.lower
    - urllib.parse.urlparse
    - r.headers.get
    - scrapy.extensions.httpcache.parse_cachecontrol
    - directive.strip
    - scrapy.extensions.httpcache.RFC2616Policy._parse_cachecontrol
    - parsed.pop
    - header.split
    - scrapy.utils.httpobj.urlparse_cached
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 0
    IfCount: 6
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 75
    functionName: scrapy.extensions.httpcache.RFC2616Policy.should_cache_response
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - key.lower
    - r.headers.get
    - scrapy.extensions.httpcache.parse_cachecontrol
    - directive.strip
    - scrapy.extensions.httpcache.RFC2616Policy._parse_cachecontrol
    - parsed.pop
    - header.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 1
    IfCount: 6
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - cachedresponse
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 103
    functionName: scrapy.extensions.httpcache.RFC2616Policy.is_cached_response_fresh
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - key.lower
    - <builtin>.max
    - <builtin>.min
    - header.split
    - scrapy.extensions.httpcache.RFC2616Policy._get_max_age
    - scrapy.extensions.httpcache.RFC2616Policy._set_conditional_validators
    - scrapy.extensions.httpcache.rfc1123_to_epoch
    - <builtin>.int
    - response.headers.get
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - scrapy.extensions.httpcache.RFC2616Policy._parse_cachecontrol
    - scrapy.extensions.httpcache.RFC2616Policy._compute_current_age
    - urllib.parse.urlparse.decode
    - time.time
    - <builtin>.isinstance
    - email.utils.mktime_tz
    - parsed.pop
    - r.headers.get
    - scrapy.extensions.httpcache.parse_cachecontrol
    - directive.strip
    - scrapy.extensions.httpcache.RFC2616Policy._compute_freshness_lifetime
    - email.utils.parsedate_tz
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 0
    IfCount: 4
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    - now
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 170
    functionName: scrapy.extensions.httpcache.RFC2616Policy._compute_freshness_lifetime
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - key.lower
    - <builtin>.int
    - email.utils.parsedate_tz
    - email.utils.mktime_tz
    - r.headers.get
    - <builtin>.max
    - scrapy.extensions.httpcache.parse_cachecontrol
    - response.headers.get
    - scrapy.extensions.httpcache.RFC2616Policy._get_max_age
    - scrapy.utils.python.to_unicode
    - directive.strip
    - typing.cast.decode
    - scrapy.extensions.httpcache.RFC2616Policy._parse_cachecontrol
    - parsed.pop
    - header.split
    - scrapy.extensions.httpcache.rfc1123_to_epoch
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    - now
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 201
    functionName: scrapy.extensions.httpcache.RFC2616Policy._compute_current_age
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - email.utils.mktime_tz
    - <builtin>.int
    - <builtin>.max
    - response.headers.get
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - email.utils.parsedate_tz
    - scrapy.extensions.httpcache.rfc1123_to_epoch
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - cc
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 164
    functionName: scrapy.extensions.httpcache.RFC2616Policy._get_max_age
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 2
    functionsReached:
    - <builtin>.int
    - <builtin>.max
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - cachedresponse
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 155
    functionName: scrapy.extensions.httpcache.RFC2616Policy._set_conditional_validators
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - cachedresponse
    - response
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 144
    functionName: scrapy.extensions.httpcache.RFC2616Policy.is_cached_response_valid
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - key.lower
    - r.headers.get
    - scrapy.extensions.httpcache.parse_cachecontrol
    - directive.strip
    - scrapy.extensions.httpcache.RFC2616Policy._parse_cachecontrol
    - parsed.pop
    - header.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: response.headers.get
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - date_str
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 378
    functionName: scrapy.extensions.httpcache.rfc1123_to_epoch
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 3
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - email.utils.mktime_tz
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - email.utils.parsedate_tz
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 222
    functionName: scrapy.extensions.httpcache.DbmCacheStorage.__init__
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - scrapy.utils.conf.closest_scrapy_cfg
    - <builtin>.bool
    - pathlib.Path.mkdir
    - scrapy.utils.conf.get_config
    - scrapy.utils.project.inside_project
    - importlib.import_module
    - scrapy.utils.project.data_path
    - os.environ.get
    - scrapy.utils.project.project_data_dir
    - cfgfile.exists
    - pathlib.Path
    - pathlib.Path.expanduser
    - settings.getint
    - pathlib.Path.parent.resolve
    - warnings.warn
    - configparser.ConfigParser.get
    - pathlib.Path.exists
    - configparser.ConfigParser.read
    - configparser.ConfigParser
    - configparser.ConfigParser.has_option
    - sources.append
    - pathlib.Path.resolve
    - <builtin>.str
    - pathlib.Path.is_absolute
    - scrapy.utils.conf.get_sources
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 228
    functionName: scrapy.extensions.httpcache.DbmCacheStorage.open_spider
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - pathlib.Path
    - <builtin>.str
    - importlib.import_module.open
    - logger.debug
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: importlib.import_module.open
    functionSourceFile: importlib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 240
    functionName: scrapy.extensions.httpcache.DbmCacheStorage.close_spider
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 243
    functionName: scrapy.extensions.httpcache.DbmCacheStorage.retrieve_response
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - time.time
    - <builtin>.isinstance
    - urllib.parse.urlencode.lower
    - scrapy.http.headers.Headers.__init__
    - urllib.parse.urlparse.netloc.encode
    - pickle.loads
    - <builtin>.float
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - scrapy.http.response.Response._set_body
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - scrapy.extensions.httpcache.DbmCacheStorage._read_data
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 266
    functionName: scrapy.extensions.httpcache.DbmCacheStorage._read_data
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 1
    functionsReached:
    - time.time
    - <builtin>.float
    - pickle.loads
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - spider
    - request
    - response
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 255
    functionName: scrapy.extensions.httpcache.DbmCacheStorage.store_response
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - time.time
    - <builtin>.dict
    - pickle.dumps
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 281
    functionName: scrapy.extensions.httpcache.FilesystemCacheStorage.__init__
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - scrapy.utils.conf.closest_scrapy_cfg
    - <builtin>.bool
    - pathlib.Path.mkdir
    - scrapy.utils.conf.get_config
    - scrapy.utils.project.inside_project
    - importlib.import_module
    - scrapy.utils.project.data_path
    - os.environ.get
    - scrapy.utils.project.project_data_dir
    - cfgfile.exists
    - pathlib.Path
    - pathlib.Path.expanduser
    - settings.getint
    - pathlib.Path.parent.resolve
    - settings.getbool
    - warnings.warn
    - configparser.ConfigParser.get
    - pathlib.Path.exists
    - configparser.ConfigParser.read
    - configparser.ConfigParser
    - configparser.ConfigParser.has_option
    - sources.append
    - pathlib.Path.resolve
    - <builtin>.str
    - pathlib.Path.is_absolute
    - scrapy.utils.conf.get_sources
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 287
    functionName: scrapy.extensions.httpcache.FilesystemCacheStorage.open_spider
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - logger.debug
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 297
    functionName: scrapy.extensions.httpcache.FilesystemCacheStorage.close_spider
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 300
    functionName: scrapy.extensions.httpcache.FilesystemCacheStorage.retrieve_response
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - scrapy.extensions.httpcache.FilesystemCacheStorage._read_meta
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - urllib.parse.urlunparse.encode
    - scrapy.http.response.Response.__init__
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - <builtin>.int
    - <builtin>.list
    - scrapy.http.response.Response._set_url
    - scrapy.responsetypes.ResponseTypes.from_filename
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - pathlib.Path
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - urllib.parse.urlparse.hostname.lower
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - time.time
    - <builtin>.isinstance
    - w3lib.http.headers_raw_to_dict
    - scrapy.extensions.httpcache.FilesystemCacheStorage._get_request_path
    - metadata.get
    - urllib.parse.urlencode.lower
    - scrapy.http.headers.Headers.__init__
    - pathlib.Path.exists
    - urllib.parse.urlparse.netloc.encode
    - pickle.load
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - urllib.parse.urlparse.scheme.lower
    - typing.cast.split
    - <builtin>.str
    - scrapy.http.response.Response._set_body
    - f.read
    - pathlib.Path.stat
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 346
    functionName: scrapy.extensions.httpcache.FilesystemCacheStorage._read_meta
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 1
    functionsReached:
    - time.time
    - scrapy.extensions.httpcache.FilesystemCacheStorage._get_request_path
    - <builtin>.str
    - pathlib.Path.exists
    - pathlib.Path.stat
    - pickle.load
    - pathlib.Path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 342
    functionName: scrapy.extensions.httpcache.FilesystemCacheStorage._get_request_path
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 3
    functionsReached:
    - pathlib.Path
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: metadata.get
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.http.headers_raw_to_dict
    functionSourceFile: w3lib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 8
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - spider
    - request
    - response
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 317
    functionName: scrapy.extensions.httpcache.FilesystemCacheStorage.store_response
    functionSourceFile: scrapy.extensions.httpcache
    functionUses: 0
    functionsReached:
    - time.time
    - <builtin>.isinstance
    - scrapy.extensions.httpcache.FilesystemCacheStorage._get_request_path
    - urllib.parse.urlparse.scheme.encode
    - pickle.dump
    - pathlib.Path.mkdir
    - <builtin>.str
    - pathlib.Path.exists
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - pathlib.Path
    - <builtin>.repr
    - f.write
    - w3lib.http.headers_dict_to_raw
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: f.write
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.stat
    functionSourceFile: pathlib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: directive.strip
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.utils.parsedate_tz
    functionSourceFile: email
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: email.utils.mktime_tz
    functionSourceFile: email
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.spidermiddlewares.httperror
    functionSourceFile: scrapy.spidermiddlewares.httperror
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 27
    functionName: scrapy.spidermiddlewares.httperror.HttpError.__init__
    functionSourceFile: scrapy.spidermiddlewares.httperror
    functionUses: 0
    functionsReached:
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 34
    functionName: scrapy.spidermiddlewares.httperror.HttpErrorMiddleware.from_crawler
    functionSourceFile: scrapy.spidermiddlewares.httperror
    functionUses: 0
    functionsReached:
    - settings.getlist
    - settings.getbool
    - scrapy.spidermiddlewares.httperror.HttpErrorMiddleware.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 37
    functionName: scrapy.spidermiddlewares.httperror.HttpErrorMiddleware.__init__
    functionSourceFile: scrapy.spidermiddlewares.httperror
    functionUses: 1
    functionsReached:
    - settings.getlist
    - settings.getbool
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 0
    IfCount: 5
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 43
    functionName: scrapy.spidermiddlewares.httperror.HttpErrorMiddleware.process_spider_input
    functionSourceFile: scrapy.spidermiddlewares.httperror
    functionUses: 0
    functionsReached:
    - meta.get
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - HttpError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: meta.get
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - exception
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 61
    functionName: scrapy.spidermiddlewares.httperror.HttpErrorMiddleware.process_spider_exception
    functionSourceFile: scrapy.spidermiddlewares.httperror
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - spider.crawler.stats.inc_value
    - logger.info
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.spidermiddlewares.depth
    functionSourceFile: scrapy.spidermiddlewares.depth
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e0c64c0>
    - <ast.Constant object at 0x7f9a4e0c6490>
    argNames:
    - self
    - maxdepth
    - stats
    - verbose_stats
    - prio
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 25
    functionName: scrapy.spidermiddlewares.depth.DepthMiddleware.__init__
    functionSourceFile: scrapy.spidermiddlewares.depth
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 38
    functionName: scrapy.spidermiddlewares.depth.DepthMiddleware.from_crawler
    functionSourceFile: scrapy.spidermiddlewares.depth
    functionUses: 0
    functionsReached:
    - settings.getbool
    - settings.getint
    - scrapy.spidermiddlewares.depth.DepthMiddleware.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - result
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 46
    functionName: scrapy.spidermiddlewares.depth.DepthMiddleware.process_spider_output
    functionSourceFile: scrapy.spidermiddlewares.depth
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.spidermiddlewares.depth.DepthMiddleware._init_depth
    - logger.debug
    - scrapy.spidermiddlewares.depth.DepthMiddleware._filter
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 60
    functionName: scrapy.spidermiddlewares.depth.DepthMiddleware._init_depth
    functionSourceFile: ''
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 3
    IfCount: 4
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 67
    functionName: scrapy.spidermiddlewares.depth.DepthMiddleware._filter
    functionSourceFile: scrapy.spidermiddlewares.depth
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - logger.debug
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - result
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 52
    functionName: scrapy.spidermiddlewares.depth.DepthMiddleware.process_spider_output_async
    functionSourceFile: scrapy.spidermiddlewares.depth
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.spidermiddlewares.depth.DepthMiddleware._init_depth
    - logger.debug
    - scrapy.spidermiddlewares.depth.DepthMiddleware._filter
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.spidermiddlewares.offsite
    functionSourceFile: scrapy.spidermiddlewares.offsite
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - stats
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 28
    functionName: scrapy.spidermiddlewares.offsite.OffsiteMiddleware.__init__
    functionSourceFile: scrapy.spidermiddlewares.offsite
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 32
    functionName: scrapy.spidermiddlewares.offsite.OffsiteMiddleware.from_crawler
    functionSourceFile: scrapy.spidermiddlewares.offsite
    functionUses: 0
    functionsReached:
    - crawler.signals.connect
    - scrapy.spidermiddlewares.offsite.OffsiteMiddleware.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - result
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 38
    functionName: scrapy.spidermiddlewares.offsite.OffsiteMiddleware.process_spider_output
    functionSourceFile: scrapy.spidermiddlewares.offsite
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.bool
    - logger.debug
    - scrapy.spidermiddlewares.offsite.OffsiteMiddleware.should_follow
    - scrapy.spidermiddlewares.offsite.OffsiteMiddleware._filter
    - regex.search
    - urllib.parse.urlparse
    - scrapy.utils.httpobj.urlparse_cached
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 50
    functionName: scrapy.spidermiddlewares.offsite.OffsiteMiddleware._filter
    functionSourceFile: scrapy.spidermiddlewares.offsite
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.bool
    - logger.debug
    - scrapy.spidermiddlewares.offsite.OffsiteMiddleware.should_follow
    - regex.search
    - urllib.parse.urlparse
    - scrapy.utils.httpobj.urlparse_cached
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - result
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 43
    functionName: scrapy.spidermiddlewares.offsite.OffsiteMiddleware.process_spider_output_async
    functionSourceFile: scrapy.spidermiddlewares.offsite
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - <builtin>.bool
    - logger.debug
    - scrapy.spidermiddlewares.offsite.OffsiteMiddleware.should_follow
    - scrapy.spidermiddlewares.offsite.OffsiteMiddleware._filter
    - regex.search
    - urllib.parse.urlparse
    - scrapy.utils.httpobj.urlparse_cached
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 67
    functionName: scrapy.spidermiddlewares.offsite.OffsiteMiddleware.should_follow
    functionSourceFile: scrapy.spidermiddlewares.offsite
    functionUses: 3
    functionsReached:
    - <builtin>.bool
    - regex.search
    - scrapy.utils.httpobj.urlparse_cached
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 4
    IfCount: 4
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 73
    functionName: scrapy.spidermiddlewares.offsite.OffsiteMiddleware.get_host_regex
    functionSourceFile: scrapy.spidermiddlewares.offsite
    functionUses: 1
    functionsReached:
    - re.compile
    - warnings.warn
    - re.escape
    - domains.append
    - url_pattern.match
    - port_pattern.search
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: url_pattern.match
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: port_pattern.search
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: domains.append
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 101
    functionName: scrapy.spidermiddlewares.offsite.OffsiteMiddleware.spider_opened
    functionSourceFile: scrapy.spidermiddlewares.offsite
    functionUses: 0
    functionsReached:
    - <builtin>.set
    - re.compile
    - warnings.warn
    - re.escape
    - scrapy.spidermiddlewares.offsite.OffsiteMiddleware.get_host_regex
    - url_pattern.match
    - domains.append
    - port_pattern.search
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.spidermiddlewares.referer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response_url
    - request_url
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 59
    functionName: scrapy.spidermiddlewares.referer.ReferrerPolicy.referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - NotImplementedError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 62
    functionName: scrapy.spidermiddlewares.referer.ReferrerPolicy.stripped_referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 5
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f07b580>
    argNames:
    - self
    - url
    - origin_only
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 72
    functionName: scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 10
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 67
    functionName: scrapy.spidermiddlewares.referer.ReferrerPolicy.origin_referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 3
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.origin
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 96
    functionName: scrapy.spidermiddlewares.referer.ReferrerPolicy.origin
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 6
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 100
    functionName: scrapy.spidermiddlewares.referer.ReferrerPolicy.potentially_trustworthy
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 2
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.tls_protected
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - url
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 107
    functionName: scrapy.spidermiddlewares.referer.ReferrerPolicy.tls_protected
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 4
    functionsReached:
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response_url
    - request_url
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 122
    functionName: scrapy.spidermiddlewares.referer.NoReferrerPolicy.referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response_url
    - request_url
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 143
    functionName: scrapy.spidermiddlewares.referer.NoReferrerWhenDowngradePolicy.referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.stripped_referrer
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.tls_protected
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response_url
    - request_url
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 162
    functionName: scrapy.spidermiddlewares.referer.SameOriginPolicy.referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.origin
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.stripped_referrer
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response_url
    - request_url
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 180
    functionName: scrapy.spidermiddlewares.referer.OriginPolicy.referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.origin
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.origin_referrer
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response_url
    - request_url
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 200
    functionName: scrapy.spidermiddlewares.referer.StrictOriginPolicy.referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.origin
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.origin_referrer
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.tls_protected
    - urllib.parse.urlparse
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.potentially_trustworthy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response_url
    - request_url
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 224
    functionName: scrapy.spidermiddlewares.referer.OriginWhenCrossOriginPolicy.referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.origin
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.stripped_referrer
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response_url
    - request_url
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 251
    functionName: scrapy.spidermiddlewares.referer.StrictOriginWhenCrossOriginPolicy.referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.origin
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.origin_referrer
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.stripped_referrer
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.tls_protected
    - urllib.parse.urlparse
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.potentially_trustworthy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response_url
    - request_url
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 280
    functionName: scrapy.spidermiddlewares.referer.UnsafeUrlPolicy.referrer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.stripped_referrer
    - scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c941b50>
    argNames:
    - policy
    - warning_only
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 314
    functionName: scrapy.spidermiddlewares.referer._load_policy_class
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 7
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - urllib.parse.urlparse.lower
    - warnings.warn
    - typing.cast.rindex
    - typing.cast
    - typing.cast.lower
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - RuntimeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.lower
    functionSourceFile: urllib
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: typing.cast.lower
    functionSourceFile: typing
    functionUses: 8
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c928880>
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 337
    functionName: scrapy.spidermiddlewares.referer.RefererMiddleware.__init__
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - urllib.parse.urlparse.lower
    - warnings.warn
    - typing.cast.rindex
    - typing.cast
    - typing.cast.lower
    - settings.get
    - <builtin>.callable
    - scrapy.spidermiddlewares.referer._load_policy_class
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 345
    functionName: scrapy.spidermiddlewares.referer.RefererMiddleware.from_crawler
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - urllib.parse.urlparse.lower
    - scrapy.spidermiddlewares.referer.RefererMiddleware.__init__
    - warnings.warn
    - crawler.signals.connect
    - scrapy.utils.misc.load_object
    - typing.cast.rindex
    - typing.cast
    - typing.cast.lower
    - crawler.settings.getbool
    - <builtin>.callable
    - scrapy.spidermiddlewares.referer._load_policy_class
    - settings.get
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - resp_or_url
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 355
    functionName: scrapy.spidermiddlewares.referer.RefererMiddleware.policy
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 4
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - urllib.parse.urlparse.lower
    - request.meta.get
    - warnings.warn
    - typing.cast.rindex
    - typing.cast
    - typing.cast.lower
    - <builtin>.callable
    - scrapy.utils.python.to_unicode
    - w3lib.url.safe_url_string.headers.get
    - policy_header.decode
    - importlib.import_module
    - scrapy.spidermiddlewares.referer._load_policy_class
    - scrapy.utils.misc.load_object
    - typing.cast.decode
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.safe_url_string.headers.get
    functionSourceFile: w3lib
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: policy_header.decode
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - result
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 382
    functionName: scrapy.spidermiddlewares.referer.RefererMiddleware.process_spider_output
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.lower
    - request.meta.get
    - typing.cast
    - scrapy.spidermiddlewares.referer.RefererMiddleware._set_referer
    - scrapy.spidermiddlewares.referer.RefererMiddleware.policy
    - policy_header.decode
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - r.headers.setdefault
    - scrapy.utils.python.to_unicode
    - <builtin>.callable
    - typing.cast.decode
    - scrapy.spidermiddlewares.referer._load_policy_class
    - typing.cast.lower
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - warnings.warn
    - w3lib.url.safe_url_string.headers.get
    - typing.cast.rindex
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - r
    - response
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 393
    functionName: scrapy.spidermiddlewares.referer.RefererMiddleware._set_referer
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 2
    functionsReached:
    - urllib.parse.urlparse.lower
    - request.meta.get
    - typing.cast
    - scrapy.spidermiddlewares.referer.RefererMiddleware.policy
    - policy_header.decode
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - r.headers.setdefault
    - scrapy.utils.python.to_unicode
    - <builtin>.callable
    - typing.cast.decode
    - scrapy.spidermiddlewares.referer._load_policy_class
    - typing.cast.lower
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - warnings.warn
    - w3lib.url.safe_url_string.headers.get
    - typing.cast.rindex
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - result
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 387
    functionName: scrapy.spidermiddlewares.referer.RefererMiddleware.process_spider_output_async
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.lower
    - request.meta.get
    - typing.cast
    - scrapy.spidermiddlewares.referer.RefererMiddleware._set_referer
    - scrapy.spidermiddlewares.referer.RefererMiddleware.policy
    - policy_header.decode
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - r.headers.setdefault
    - scrapy.utils.python.to_unicode
    - <builtin>.callable
    - typing.cast.decode
    - scrapy.spidermiddlewares.referer._load_policy_class
    - typing.cast.lower
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - warnings.warn
    - w3lib.url.safe_url_string.headers.get
    - typing.cast.rindex
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: r.headers.setdefault
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 400
    functionName: scrapy.spidermiddlewares.referer.RefererMiddleware.request_scheduled
    functionSourceFile: scrapy.spidermiddlewares.referer
    functionUses: 0
    functionsReached:
    - request.headers.pop
    - urllib.parse.urlparse.lower
    - request_referrer.decode
    - request.meta.get
    - typing.cast
    - scrapy.spidermiddlewares.referer.RefererMiddleware.policy
    - policy_header.decode
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - scrapy.utils.python.to_unicode
    - <builtin>.callable
    - request.headers.get
    - typing.cast.decode
    - scrapy.spidermiddlewares.referer._load_policy_class
    - typing.cast.lower
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - warnings.warn
    - w3lib.url.safe_url_string.headers.get
    - typing.cast.rindex
    - scrapy.utils.misc.load_object
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request_referrer.decode
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.headers.pop
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.spidermiddlewares.urllength
    functionSourceFile: scrapy.spidermiddlewares.urllength
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - maxlength
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 25
    functionName: scrapy.spidermiddlewares.urllength.UrlLengthMiddleware.__init__
    functionSourceFile: scrapy.spidermiddlewares.urllength
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 29
    functionName: scrapy.spidermiddlewares.urllength.UrlLengthMiddleware.from_settings
    functionSourceFile: scrapy.spidermiddlewares.urllength
    functionUses: 0
    functionsReached:
    - settings.getint
    - scrapy.spidermiddlewares.urllength.UrlLengthMiddleware.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - result
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 35
    functionName: scrapy.spidermiddlewares.urllength.UrlLengthMiddleware.process_spider_output
    functionSourceFile: scrapy.spidermiddlewares.urllength
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - logger.info
    - scrapy.spidermiddlewares.urllength.UrlLengthMiddleware._filter
    - spider.crawler.stats.inc_value
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 47
    functionName: scrapy.spidermiddlewares.urllength.UrlLengthMiddleware._filter
    functionSourceFile: scrapy.spidermiddlewares.urllength
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - spider.crawler.stats.inc_value
    - <builtin>.len
    - logger.info
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - result
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 40
    functionName: scrapy.spidermiddlewares.urllength.UrlLengthMiddleware.process_spider_output_async
    functionSourceFile: scrapy.spidermiddlewares.urllength
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - logger.info
    - scrapy.spidermiddlewares.urllength.UrlLengthMiddleware._filter
    - spider.crawler.stats.inc_value
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.spidermiddlewares
    functionSourceFile: scrapy.spidermiddlewares
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.pipelines.files
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - path
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 40
    functionName: scrapy.pipelines.files._to_string
    functionSourceFile: scrapy.pipelines.files
    functionUses: 7
    functionsReached:
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - basedir
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 49
    functionName: scrapy.pipelines.files.FSFilesStore.__init__
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - pathlib.Path.parent.mkdir
    - collections.defaultdict
    - <builtin>.set
    - basedir.split
    - scrapy.pipelines.files._to_string
    - pathlib.Path.mkdir
    - pathlib.Path.parent.exists
    - <builtin>.str
    - scrapy.pipelines.files.FSFilesStore._mkdir
    - pathlib.Path.exists
    - pathlib.Path
    - seen.add
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: basedir.split
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6db250>
    argNames:
    - self
    - dirname
    - domain
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 80
    functionName: scrapy.pipelines.files.FSFilesStore._mkdir
    functionSourceFile: scrapy.pipelines.files
    functionUses: 2
    functionsReached:
    - pathlib.Path.parent.mkdir
    - <builtin>.set
    - pathlib.Path.mkdir
    - pathlib.Path.parent.exists
    - <builtin>.str
    - pathlib.Path.exists
    - seen.add
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d768d00>
    - <ast.Constant object at 0x7f9a4d768cd0>
    argNames:
    - self
    - path
    - buf
    - info
    - meta
    - headers
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 57
    functionName: scrapy.pipelines.files.FSFilesStore.persist_file
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - pathlib.Path.parent.mkdir
    - scrapy.pipelines.files.FSFilesStore._get_filesystem_path
    - <builtin>.set
    - scrapy.pipelines.files._to_string
    - pathlib.Path.mkdir
    - pathlib.Path.parent.exists
    - <builtin>.str
    - scrapy.pipelines.files.FSFilesStore._mkdir
    - pathlib.Path.exists
    - buf.getvalue
    - pathlib.Path
    - seen.add
    - pathlib.Path.write_bytes
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - path
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 76
    functionName: scrapy.pipelines.files.FSFilesStore._get_filesystem_path
    functionSourceFile: scrapy.pipelines.files
    functionUses: 2
    functionsReached:
    - pathlib.Path
    - scrapy.pipelines.files._to_string
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: buf.getvalue
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.write_bytes
    functionSourceFile: pathlib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - path
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 64
    functionName: scrapy.pipelines.files.FSFilesStore.stat_file
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - scrapy.utils.misc.md5sum
    - io.BytesIO.read
    - scrapy.pipelines.files.FSFilesStore._get_filesystem_path
    - scrapy.pipelines.files._to_string
    - <builtin>.str
    - m.hexdigest
    - pathlib.Path.stat
    - pathlib.Path
    - m.update
    - pathlib.Path.open
    - hashlib.md5
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - uri
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 102
    functionName: scrapy.pipelines.files.S3FilesStore.__init__
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - session.create_client
    - scrapy.utils.boto.is_botocore_available
    - botocore.session.get_session
    - uri.startswith
    linkageType: pythonLinkage
    raised:
    - NotConfigured
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: uri.startswith
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - path
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 122
    functionName: scrapy.pipelines.files.S3FilesStore.stat_file
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - twisted.internet.threads.deferToThread
    - scrapy.pipelines.files.S3FilesStore._get_boto_key
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - boto_key
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 123
    functionName: scrapy.pipelines.files.S3FilesStore.stat_file._onsuccess
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - last_modified.timetuple
    - time.mktime
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: last_modified.timetuple
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: time.mktime
    functionSourceFile: time
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - path
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 131
    functionName: scrapy.pipelines.files.S3FilesStore._get_boto_key
    functionSourceFile: scrapy.pipelines.files
    functionUses: 1
    functionsReached:
    - twisted.internet.threads.deferToThread
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e7780a0>
    - <ast.Constant object at 0x7f9a4e778430>
    argNames:
    - self
    - path
    - buf
    - info
    - meta
    - headers
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 137
    functionName: scrapy.pipelines.files.S3FilesStore.persist_file
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - headers.items
    - scrapy.pipelines.files.S3FilesStore._headers_to_botocore_kwargs
    - <builtin>.str
    - extra.update
    - twisted.internet.threads.deferToThread
    - buf.seek
    - scrapy.utils.datatypes.CaseInsensitiveDict.__init__
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: buf.seek
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - headers
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 154
    functionName: scrapy.pipelines.files.S3FilesStore._headers_to_botocore_kwargs
    functionSourceFile: scrapy.pipelines.files
    functionUses: 1
    functionsReached:
    - headers.items
    - scrapy.utils.datatypes.CaseInsensitiveDict.__init__
    - <builtin>.super
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: extra.update
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: headers.items
    functionSourceFile: <builtin>
    functionUses: 7
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - uri
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 206
    functionName: scrapy.pipelines.files.GCSFilesStore.__init__
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - client.bucket
    - logger.warning
    - logger.error
    - google.cloud.storage.Client
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: client.bucket
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - path
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 228
    functionName: scrapy.pipelines.files.GCSFilesStore.stat_file
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - scrapy.pipelines.files.GCSFilesStore._get_blob_path
    - twisted.internet.threads.deferToThread
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - blob
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 229
    functionName: scrapy.pipelines.files.GCSFilesStore.stat_file._onsuccess
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - blob.updated.timetuple
    - base64.b64decode
    - time.mktime
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: base64.b64decode
    functionSourceFile: base64
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: blob.updated.timetuple
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - path
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 246
    functionName: scrapy.pipelines.files.GCSFilesStore._get_blob_path
    functionSourceFile: ''
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - headers
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 241
    functionName: scrapy.pipelines.files.GCSFilesStore._get_content_type
    functionSourceFile: scrapy.pipelines.files
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d736490>
    - <ast.Constant object at 0x7f9a4d736460>
    argNames:
    - self
    - path
    - buf
    - info
    - meta
    - headers
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 249
    functionName: scrapy.pipelines.files.GCSFilesStore.persist_file
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - scrapy.pipelines.files.GCSFilesStore._get_blob_path
    - scrapy.pipelines.files.GCSFilesStore._get_content_type
    - <builtin>.str
    - buf.getvalue
    - twisted.internet.threads.deferToThread
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - uri
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 267
    functionName: scrapy.pipelines.files.FTPFilesStore.__init__
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - uri.startswith
    - urllib.parse.urlparse.path.rstrip
    - <builtin>.int
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.path.rstrip
    functionSourceFile: urllib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4dee18e0>
    - <ast.Constant object at 0x7f9a4dee18b0>
    argNames:
    - self
    - path
    - buf
    - info
    - meta
    - headers
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 278
    functionName: scrapy.pipelines.files.FTPFilesStore.persist_file
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - twisted.internet.threads.deferToThread
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - path
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 291
    functionName: scrapy.pipelines.files.FTPFilesStore.stat_file
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - twisted.internet.threads.deferToThread
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - path
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 292
    functionName: scrapy.pipelines.files.FTPFilesStore.stat_file._stat_file
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - ftplib.FTP.voidcmd
    - ftplib.FTP
    - ftplib.FTP.retrbinary
    - m.hexdigest
    - ftplib.FTP.login
    - ftplib.FTP.set_pasv
    - <builtin>.float
    - ftplib.FTP.connect
    - hashlib.md5
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ftplib.FTP.voidcmd
    functionSourceFile: ftplib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4dedc5b0>
    - <ast.Constant object at 0x7f9a4dedc580>
    argNames:
    - self
    - store_uri
    - download_func
    - settings
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 342
    functionName: scrapy.pipelines.files.FilesPipeline.__init__
    functionSourceFile: scrapy.pipelines.files
    functionUses: 2
    functionsReached:
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - importlib.import_module
    - typing.cast.items
    - <builtin>.hasattr
    - <builtin>.int
    - json.loads
    - pathlib.Path
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.pipelines.files._to_string
    - <builtin>.super
    - functools.partial
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - <builtin>.str
    - scrapy.settings.BaseSettings.getint
    - pathlib.Path.is_absolute
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - urllib.parse.urlparse
    - scrapy.settings.Settings.__init__
    - scrapy.pipelines.files.FilesPipeline._get_store
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - uri
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 394
    functionName: scrapy.pipelines.files.FilesPipeline._get_store
    functionSourceFile: scrapy.pipelines.files
    functionUses: 3
    functionsReached:
    - pathlib.Path.is_absolute
    - pathlib.Path
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 371
    functionName: scrapy.pipelines.files.FilesPipeline.from_settings
    functionSourceFile: scrapy.pipelines.files
    functionUses: 1
    functionsReached:
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - importlib.import_module
    - typing.cast.items
    - <builtin>.hasattr
    - <builtin>.int
    - json.loads
    - pathlib.Path
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - settings.getbool
    - scrapy.pipelines.files.FilesPipeline.__init__
    - scrapy.pipelines.files._to_string
    - <builtin>.super
    - functools.partial
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - <builtin>.str
    - scrapy.settings.BaseSettings.getint
    - pathlib.Path.is_absolute
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - urllib.parse.urlparse
    - scrapy.settings.Settings.__init__
    - scrapy.pipelines.files.FilesPipeline._get_store
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 2
    IfCount: 3
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 403
    functionName: scrapy.pipelines.files.FilesPipeline.media_to_download._onsuccess
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - scrapy.utils.request.referer_str
    - time.time
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - logger.debug
    - scrapy.pipelines.files.FilesPipeline.inc_stats
    - spider.crawler.stats.inc_value
    - scrapy.utils.python.to_unicode
    - request.headers.get
    - result.get
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - status
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 521
    functionName: scrapy.pipelines.files.FilesPipeline.inc_stats
    functionSourceFile: scrapy.pipelines.files
    functionUses: 2
    functionsReached:
    - spider.crawler.stats.inc_value
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e79f880>
    - <ast.Constant object at 0x7f9a4e79f850>
    argNames:
    - self
    - request
    - response
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 229
    functionName: scrapy.pipelines.images.ImagesPipeline.file_path
    functionSourceFile: scrapy.pipelines.images
    functionUses: 16
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - hashlib.sha1
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e4ca160>
    - <ast.Constant object at 0x7f9a4e4ca190>
    argNames:
    - self
    - request
    - response
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 543
    functionName: scrapy.pipelines.files.FilesPipeline.file_path
    functionSourceFile: scrapy.pipelines.files
    functionUses: 13
    functionsReached:
    - <builtin>.isinstance
    - mimetypes.guess_extension
    - urllib.parse.urlparse.scheme.encode
    - mimetypes.guess_type
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - hashlib.sha1
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - pathlib.Path
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.pipelines.files.FilesPipeline.media_to_download.<lambda1>
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: -1
    functionName: scrapy.pipelines.files.FilesPipeline.media_to_download.<lambda2>
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - typing.cast
    - logger.error
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - failure
    - request
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 445
    functionName: scrapy.pipelines.files.FilesPipeline.media_failed
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - scrapy.utils.request.referer_str
    - <builtin>.isinstance
    - urllib.parse.urlparse.decode
    - logger.warning
    - scrapy.utils.python.to_unicode
    - request.headers.get
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 6
    IfCount: 2
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 462
    functionName: scrapy.pipelines.files.FilesPipeline.media_downloaded
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - image.thumbnail
    - urllib.parse.urlparse.scheme.encode
    - inspect.signature
    - spider.crawler.stats.inc_value
    - hashlib.sha1
    - scrapy.pipelines.images.ImagesPipeline.get_images
    - urllib.parse.urlunparse.encode
    - image.save
    - scrapy.pipelines.images.ImagesPipeline.thumb_path
    - scrapy.pipelines.files.FilesPipeline.file_path
    - background.convert
    - scrapy.pipelines.files.FilesPipeline.file_downloaded
    - logger.debug
    - scrapy.pipelines.images.ImagesPipeline.convert_image
    - io.BytesIO.seek
    - mimetypes.guess_type
    - scrapy.utils.python.to_bytes
    - scrapy.utils.python.to_unicode
    - pathlib.Path
    - typing.cast.decode
    - request.headers.get
    - <builtin>.callable
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - scrapy.utils.request.referer_str
    - scrapy.utils.misc.md5sum
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - PIL.Image.open
    - PIL.Image.new
    - sig.parameters.items
    - warnings.warn
    - scrapy.pipelines.files.FilesPipeline.inc_stats
    - args.append
    - sig.parameters.keys
    - logger.warning
    - urllib.parse.urlparse.netloc.encode
    - buf.seek
    - hashlib.md5
    - io.BytesIO.read
    - image.convert
    - background.paste
    - mimetypes.guess_extension
    - scrapy.pipelines.images.ImagesPipeline.image_downloaded
    - m.hexdigest
    - scrapy.utils.python.get_func_args
    - image.copy
    - logger.error
    - twisted.internet.protocol.ClientFactory._url.encode
    - io.BytesIO
    - scrapy.pipelines.images.ImagesPipeline.file_downloaded
    - m.update
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - FileException
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 122
    functionName: scrapy.pipelines.images.ImagesPipeline.file_downloaded
    functionSourceFile: scrapy.pipelines.images
    functionUses: 1
    functionsReached:
    - image.thumbnail
    - urllib.parse.urlparse.scheme.encode
    - inspect.signature
    - hashlib.sha1
    - scrapy.pipelines.images.ImagesPipeline.get_images
    - urllib.parse.urlunparse.encode
    - image.save
    - scrapy.pipelines.images.ImagesPipeline.thumb_path
    - background.convert
    - scrapy.pipelines.images.ImagesPipeline.convert_image
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - scrapy.utils.misc.md5sum
    - <builtin>.isinstance
    - PIL.Image.open
    - PIL.Image.new
    - sig.parameters.items
    - warnings.warn
    - args.append
    - sig.parameters.keys
    - urllib.parse.urlparse.netloc.encode
    - buf.seek
    - hashlib.md5
    - io.BytesIO.read
    - image.convert
    - background.paste
    - scrapy.pipelines.images.ImagesPipeline.image_downloaded
    - m.hexdigest
    - scrapy.utils.python.get_func_args
    - image.copy
    - twisted.internet.protocol.ClientFactory._url.encode
    - io.BytesIO
    - m.update
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 530
    functionName: scrapy.pipelines.files.FilesPipeline.file_downloaded
    functionSourceFile: scrapy.pipelines.files
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - hashlib.sha1
    - urllib.parse.urlunparse.encode
    - scrapy.pipelines.files.FilesPipeline.file_path
    - io.BytesIO.seek
    - mimetypes.guess_type
    - scrapy.utils.python.to_bytes
    - pathlib.Path
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - scrapy.utils.misc.md5sum
    - <builtin>.isinstance
    - urllib.parse.urlparse.netloc.encode
    - hashlib.md5
    - io.BytesIO.read
    - mimetypes.guess_extension
    - m.hexdigest
    - twisted.internet.protocol.ClientFactory._url.encode
    - io.BytesIO
    - m.update
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - item
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 526
    functionName: scrapy.pipelines.files.FilesPipeline.get_media_requests
    functionSourceFile: scrapy.pipelines.files
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - itemadapter.ItemAdapter.get
    - itemadapter.ItemAdapter
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itemadapter.ItemAdapter.get
    functionSourceFile: itemadapter
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: io.BytesIO.seek
    functionSourceFile: io
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - results
    - item
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 538
    functionName: scrapy.pipelines.files.FilesPipeline.item_completed
    functionSourceFile: scrapy.pipelines.files
    functionUses: 0
    functionsReached:
    - itemadapter.ItemAdapter
    - contextlib.suppress
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: mimetypes.guess_type
    functionSourceFile: mimetypes
    functionUses: 14
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: mimetypes.guess_extension
    functionSourceFile: mimetypes
    functionUses: 14
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.pipelines.media
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - response
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 18
    functionName: scrapy.pipelines.media._DUMMY_CALLBACK
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 26
    functionName: scrapy.pipelines.media.MediaPipeline.SpiderInfo.__init__
    functionSourceFile: scrapy.pipelines.media
    functionUses: 1
    functionsReached:
    - collections.defaultdict
    - <builtin>.set
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c8834c0>
    - <ast.Constant object at 0x7f9a4c883490>
    argNames:
    - self
    - download_func
    - settings
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 32
    functionName: scrapy.pipelines.media.MediaPipeline.__init__
    functionSourceFile: scrapy.pipelines.media
    functionUses: 1
    functionsReached:
    - <builtin>.bool
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - importlib.import_module
    - typing.cast.items
    - <builtin>.int
    - <builtin>.range
    - scrapy.utils.datatypes.SequenceExclude.__init__
    - json.loads
    - scrapy.settings.BaseSettings.getbool
    - scrapy.pipelines.media.MediaPipeline._handle_statuses
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - <builtin>.super
    - functools.partial
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.settings.Settings.__init__
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - allow_redirects
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 44
    functionName: scrapy.pipelines.media.MediaPipeline._handle_statuses
    functionSourceFile: scrapy.pipelines.media
    functionUses: 2
    functionsReached:
    - <builtin>.range
    - scrapy.utils.datatypes.SequenceExclude.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4dfb7e50>
    - <ast.Constant object at 0x7f9a4dfb7e20>
    argNames:
    - self
    - key
    - base_class_name
    - settings
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 49
    functionName: scrapy.pipelines.media.MediaPipeline._key_for_pipe
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached:
    - settings.get
    - class_name.upper
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: class_name.upper
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 70
    functionName: scrapy.pipelines.media.MediaPipeline.from_crawler
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached:
    - <builtin>.bool
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - importlib.import_module
    - typing.cast.items
    - <builtin>.hasattr
    - <builtin>.int
    - <builtin>.range
    - scrapy.utils.datatypes.SequenceExclude.__init__
    - json.loads
    - scrapy.pipelines.images.ImagesPipeline.__init__
    - pathlib.Path
    - scrapy.settings.BaseSettings.getbool
    - scrapy.pipelines.media.MediaPipeline._handle_statuses
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - settings.getbool
    - scrapy.pipelines.files.FilesPipeline.__init__
    - scrapy.pipelines.media.MediaPipeline.__init__
    - scrapy.pipelines.files.FilesPipeline.from_settings
    - scrapy.pipelines.files._to_string
    - <builtin>.super
    - functools.partial
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - scrapy.pipelines.images.ImagesPipeline.from_settings
    - <builtin>.str
    - scrapy.settings.BaseSettings.getint
    - pathlib.Path.is_absolute
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - urllib.parse.urlparse
    - scrapy.settings.Settings.__init__
    - scrapy.pipelines.files.FilesPipeline._get_store
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 99
    functionName: scrapy.pipelines.images.ImagesPipeline.from_settings
    functionSourceFile: scrapy.pipelines.images
    functionUses: 1
    functionsReached:
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - importlib.import_module
    - typing.cast.items
    - <builtin>.hasattr
    - <builtin>.int
    - json.loads
    - scrapy.pipelines.images.ImagesPipeline.__init__
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - settings.getbool
    - <builtin>.super
    - functools.partial
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - scrapy.settings.BaseSettings.getint
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.settings.Settings.__init__
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 79
    functionName: scrapy.pipelines.media.MediaPipeline.open_spider
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached:
    - collections.defaultdict
    - <builtin>.set
    - scrapy.pipelines.media.MediaPipeline.SpiderInfo.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - item
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 82
    functionName: scrapy.pipelines.media.MediaPipeline.process_item
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.utils.defer.defer_result
    - scrapy.pipelines.media.MediaPipeline._process_request
    - inspect.isawaitable
    - hashlib.sha1
    - urllib.parse.urlunparse.encode
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.http.request.Request._set_body
    - scrapy.http.request.Request._set_url
    - info.downloading.add
    - twisted.internet.defer.DeferredList
    - w3lib.url.safe_url_string.startswith
    - twisted.internet.defer.ensureDeferred
    - scrapy.pipelines.files.FilesPipeline.file_path
    - urllib.parse.urldefrag
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - importlib.import_module
    - asyncio.isfuture
    - dfd.addBoth
    - <builtin>.list
    - scrapy.utils.misc.arg_to_iter
    - frag.startswith
    - mimetypes.guess_type
    - twisted.internet.defer.DeferredList.addCallback
    - scrapy.utils.defer.mustbe_deferred
    - scrapy.utils.python.to_bytes
    - <builtin>.getattr
    - pathlib.Path
    - <builtin>.callable
    - scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    - scrapy.pipelines.files.FilesPipeline.get_media_requests
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - <builtin>.isinstance
    - scrapy.pipelines.media.MediaPipeline.media_to_download
    - dfd.addCallbacks
    - w3lib.url.safe_url_string
    - asyncio.get_event_loop
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - twisted.internet.defer.Deferred.addCallbacks
    - twisted.internet.defer.Deferred
    - dfd.addErrback
    - <builtin>.type
    - urllib.parse.urlparse.netloc.encode
    - scrapy.pipelines.media.MediaPipeline.get_media_requests
    - itemadapter.ItemAdapter.get
    - itemadapter.ItemAdapter
    - twisted.internet.defer.Deferred.fromFuture
    - urllib.parse.urlparse.hostname.encode
    - <builtin>.super
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - <builtin>.dict
    - twisted.internet.reactor.callLater
    - mimetypes.guess_extension
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    - scrapy.pipelines.files.FilesPipeline.media_to_download
    - dfd.addCallback
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - <builtin>.str
    - scrapy.pipelines.images.ImagesPipeline.get_media_requests
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - scrapy.utils.defer.defer_fail
    - warnings.catch_warnings
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - item
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 220
    functionName: scrapy.pipelines.images.ImagesPipeline.get_media_requests
    functionSourceFile: scrapy.pipelines.images
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - itemadapter.ItemAdapter.get
    - itemadapter.ItemAdapter
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - item
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 196
    functionName: scrapy.pipelines.media.MediaPipeline.get_media_requests
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 5
    IfCount: 3
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 89
    functionName: scrapy.pipelines.media.MediaPipeline._process_request
    functionSourceFile: scrapy.pipelines.media
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.utils.defer.defer_result
    - hashlib.sha1
    - inspect.isawaitable
    - urllib.parse.urlunparse.encode
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - info.downloading.add
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - scrapy.pipelines.files.FilesPipeline.file_path
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - dfd.addBoth
    - mimetypes.guess_type
    - scrapy.utils.defer.mustbe_deferred
    - scrapy.utils.python.to_bytes
    - <builtin>.getattr
    - pathlib.Path
    - <builtin>.callable
    - scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - <builtin>.isinstance
    - scrapy.pipelines.media.MediaPipeline.media_to_download
    - dfd.addCallbacks
    - asyncio.get_event_loop
    - twisted.internet.defer.Deferred.addCallbacks
    - twisted.internet.defer.Deferred
    - dfd.addErrback
    - <builtin>.type
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlparse.hostname.encode
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - twisted.internet.reactor.callLater
    - mimetypes.guess_extension
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    - scrapy.pipelines.files.FilesPipeline.media_to_download
    - dfd.addCallback
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - twisted.internet.protocol.ClientFactory._url.encode
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - scrapy.utils.defer.defer_fail
    - warnings.catch_warnings
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.Deferred.addCallbacks
    functionSourceFile: twisted
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: info.downloading.add
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.pipelines.media.MediaPipeline._process_request.<lambda1>
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - result
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 119
    functionName: scrapy.pipelines.media.MediaPipeline._log_exception
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached:
    - logger.exception
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logger.exception
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 123
    functionName: scrapy.pipelines.media.MediaPipeline._modify_media_request
    functionSourceFile: scrapy.pipelines.media
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - result
    - request
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 129
    functionName: scrapy.pipelines.media.MediaPipeline._check_media_to_download
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - typing.cast
    - scrapy.utils.defer.defer_result
    - hashlib.sha1
    - urllib.parse.urlunparse.encode
    - inspect.isawaitable
    - twisted.internet.defer.maybeDeferred
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - scrapy.pipelines.media.MediaPipeline._modify_media_request
    - twisted.internet.defer.ensureDeferred
    - scrapy.pipelines.files.FilesPipeline.file_path
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - asyncio.isfuture
    - mimetypes.guess_type
    - scrapy.utils.defer.mustbe_deferred
    - scrapy.utils.python.to_bytes
    - <builtin>.getattr
    - pathlib.Path
    - <builtin>.callable
    - scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - dfd.addCallbacks
    - scrapy.pipelines.media.MediaPipeline.media_to_download
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - dfd.addErrback
    - twisted.internet.defer.Deferred
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.type
    - urllib.parse.urlparse.hostname.encode
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - twisted.internet.reactor.callLater
    - mimetypes.guess_extension
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.pipelines.files.FilesPipeline.media_to_download
    - scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - twisted.internet.protocol.ClientFactory._url.encode
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - scrapy.utils.defer.defer_fail
    - warnings.catch_warnings
    - scrapy.utils.defer.defer_succeed
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 4
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - result
    - fp
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 154
    functionName: scrapy.pipelines.media.MediaPipeline._cache_result_and_execute_waiters
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - result.cleanFailure
    - info.downloading.remove
    - twisted.internet.reactor.callLater
    - <builtin>.setattr
    - info.waiting.pop
    - scrapy.utils.defer.defer_result
    - twisted.internet.defer.Deferred
    - scrapy.utils.defer.defer_succeed
    - scrapy.utils.defer.defer_fail
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: result.cleanFailure
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: info.downloading.remove
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: info.waiting.pop
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 200
    functionName: scrapy.pipelines.media.MediaPipeline.media_downloaded
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - failure
    - request
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 204
    functionName: scrapy.pipelines.media.MediaPipeline.media_failed
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - results
    - item
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 208
    functionName: scrapy.pipelines.media.MediaPipeline.item_completed
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - typing.cast
    - logger.error
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 5
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c887ca0>
    - <ast.Constant object at 0x7f9a4c887cd0>
    argNames:
    - self
    - request
    - response
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 221
    functionName: scrapy.pipelines.media.MediaPipeline.file_path
    functionSourceFile: scrapy.pipelines.media
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.pipelines.images
    functionSourceFile: scrapy.pipelines.images
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 30
    functionName: scrapy.pipelines.images.NoimagesDrop.__init__
    functionSourceFile: scrapy.pipelines.images
    functionUses: 0
    functionsReached:
    - warnings.warn
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e7c4fd0>
    - <ast.Constant object at 0x7f9a4e7c4fa0>
    argNames:
    - self
    - store_uri
    - download_func
    - settings
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 57
    functionName: scrapy.pipelines.images.ImagesPipeline.__init__
    functionSourceFile: scrapy.pipelines.images
    functionUses: 2
    functionsReached:
    - key.isupper
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - importlib.import_module
    - typing.cast.items
    - <builtin>.hasattr
    - <builtin>.int
    - json.loads
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - <builtin>.super
    - functools.partial
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - scrapy.settings.BaseSettings.getint
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.settings.Settings.__init__
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - NotConfigured
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 125
    functionName: scrapy.pipelines.images.ImagesPipeline.image_downloaded
    functionSourceFile: scrapy.pipelines.images
    functionUses: 2
    functionsReached:
    - image.thumbnail
    - urllib.parse.urlparse.scheme.encode
    - inspect.signature
    - hashlib.sha1
    - scrapy.pipelines.images.ImagesPipeline.get_images
    - urllib.parse.urlunparse.encode
    - image.save
    - scrapy.pipelines.images.ImagesPipeline.thumb_path
    - background.convert
    - scrapy.pipelines.images.ImagesPipeline.convert_image
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - scrapy.utils.misc.md5sum
    - <builtin>.isinstance
    - PIL.Image.open
    - PIL.Image.new
    - sig.parameters.items
    - warnings.warn
    - args.append
    - sig.parameters.keys
    - urllib.parse.urlparse.netloc.encode
    - buf.seek
    - hashlib.md5
    - io.BytesIO.read
    - image.convert
    - background.paste
    - m.hexdigest
    - scrapy.utils.python.get_func_args
    - image.copy
    - twisted.internet.protocol.ClientFactory._url.encode
    - io.BytesIO
    - m.update
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 3
    IfCount: 5
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 141
    functionName: scrapy.pipelines.images.ImagesPipeline.get_images
    functionSourceFile: scrapy.pipelines.images
    functionUses: 3
    functionsReached:
    - image.thumbnail
    - urllib.parse.urlparse.scheme.encode
    - inspect.signature
    - hashlib.sha1
    - urllib.parse.urlunparse.encode
    - image.save
    - scrapy.pipelines.images.ImagesPipeline.thumb_path
    - background.convert
    - scrapy.pipelines.images.ImagesPipeline.convert_image
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - scrapy.pipelines.images.ImagesPipeline.file_path
    - <builtin>.isinstance
    - PIL.Image.open
    - PIL.Image.new
    - sig.parameters.items
    - warnings.warn
    - args.append
    - sig.parameters.keys
    - urllib.parse.urlparse.netloc.encode
    - image.convert
    - background.paste
    - scrapy.utils.python.get_func_args
    - image.copy
    - twisted.internet.protocol.ClientFactory._url.encode
    - io.BytesIO
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - ImageException
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: PIL.Image.open
    functionSourceFile: PIL
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 5
    IfCount: 6
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ce0b430>
    - <ast.Constant object at 0x7f9a4ce0b460>
    argNames:
    - self
    - image
    - size
    - response_body
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 182
    functionName: scrapy.pipelines.images.ImagesPipeline.convert_image
    functionSourceFile: scrapy.pipelines.images
    functionUses: 4
    functionsReached:
    - background.convert
    - image.convert
    - background.paste
    - PIL.Image.new
    - image.thumbnail
    - warnings.warn
    - image.copy
    - io.BytesIO
    - image.save
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e79f2b0>
    - <ast.Constant object at 0x7f9a4e79f280>
    argNames:
    - self
    - request
    - thumb_id
    - response
    - info
    - item
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 233
    functionName: scrapy.pipelines.images.ImagesPipeline.thumb_path
    functionSourceFile: scrapy.pipelines.images
    functionUses: 4
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - hashlib.sha1
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: PIL.Image.new
    functionSourceFile: PIL
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: background.paste
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: background.convert
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: image.convert
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: image.copy
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: image.thumbnail
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: image.save
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - results
    - item
    - info
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 224
    functionName: scrapy.pipelines.images.ImagesPipeline.item_completed
    functionSourceFile: scrapy.pipelines.images
    functionUses: 0
    functionsReached:
    - itemadapter.ItemAdapter
    - contextlib.suppress
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.loader
    functionSourceFile: scrapy.loader
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 6
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d17c0d0>
    - <ast.Constant object at 0x7f9a4d17c580>
    - <ast.Constant object at 0x7f9a4d17c340>
    - <ast.Constant object at 0x7f9a4d17c130>
    argNames:
    - self
    - item
    - selector
    - response
    - parent
    - context
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 84
    functionName: scrapy.loader.ItemLoader.__init__
    functionSourceFile: scrapy.loader
    functionUses: 0
    functionsReached:
    - context.update
    - scrapy.selector.unified.Selector.__init__
    - kwargs.setdefault
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - scrapy.selector.unified._st
    - urllib.parse.urlparse.hostname.encode
    - scrapy.selector.unified._response_from_text
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: context.update
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.contracts.default
    functionSourceFile: scrapy.contracts.default
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - args
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 18
    functionName: scrapy.contracts.default.UrlContract.adjust_request_args
    functionSourceFile: scrapy.contracts.default
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - args
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 32
    functionName: scrapy.contracts.default.CallbackKeywordArgumentsContract.adjust_request_args
    functionSourceFile: scrapy.contracts.default
    functionUses: 0
    functionsReached:
    - json.loads
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.contracts.default.ReturnsContract.<dict1>.<lambda1>
    functionSourceFile: scrapy.contracts.default
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.contracts.default.ReturnsContract.<lambda1>
    functionSourceFile: scrapy.contracts.default
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.contracts.default.ReturnsContract.<dict1>.<lambda2>
    functionSourceFile: scrapy.contracts.default
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.contracts.default.ReturnsContract.<lambda2>
    functionSourceFile: scrapy.contracts.default
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 58
    functionName: scrapy.contracts.default.ReturnsContract.__init__
    functionSourceFile: scrapy.contracts.default
    functionUses: 0
    functionsReached:
    - <builtin>.len
    - <builtin>.float
    - <builtin>.int
    - <builtin>.super
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 0
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - output
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 78
    functionName: scrapy.contracts.default.ReturnsContract.post_process
    functionSourceFile: scrapy.contracts.default
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised:
    - ContractFail
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - output
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 104
    functionName: scrapy.contracts.default.ScrapesContract.post_process
    functionSourceFile: scrapy.contracts.default
    functionUses: 0
    functionsReached:
    - itemadapter.ItemAdapter
    - itemadapter.is_item
    linkageType: pythonLinkage
    raised:
    - ContractFail
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.contracts
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - method
    - args
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 19
    functionName: scrapy.contracts.Contract.__init__
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached:
    - scrapy.contracts._create_testcase
    - <builtin>.setattr
    - unittest.TestCase.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - method
    - desc
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 181
    functionName: scrapy.contracts._create_testcase
    functionSourceFile: scrapy.contracts
    functionUses: 5
    functionsReached:
    - <builtin>.setattr
    - unittest.TestCase.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - results
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 24
    functionName: scrapy.contracts.Contract.add_pre_hook
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 6
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - response
    - cb_kwargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 29
    functionName: scrapy.contracts.Contract.add_pre_hook.wrapper
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached:
    - sys.exc_info
    - typing.cast
    - results.addError
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - importlib.import_module
    - twisted.internet.defer.ensureDeferred
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - asyncio.isfuture
    - <builtin>.list
    - scrapy.utils.misc.arg_to_iter
    - results.addSuccess
    - <builtin>.callable
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - results.addFailure
    - results.startTest
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - results.stopTest
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: results.startTest
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: results.stopTest
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: results.addFailure
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: results.addError
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: results.addSuccess
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - results
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 52
    functionName: scrapy.contracts.Contract.add_post_hook
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 6
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - response
    - cb_kwargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 57
    functionName: scrapy.contracts.Contract.add_post_hook.wrapper
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached:
    - sys.exc_info
    - typing.cast
    - results.addError
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - importlib.import_module
    - twisted.internet.defer.ensureDeferred
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - asyncio.isfuture
    - <builtin>.list
    - scrapy.utils.misc.arg_to_iter
    - results.addSuccess
    - <builtin>.callable
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - results.addFailure
    - results.startTest
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - results.stopTest
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - TypeError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - args
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 79
    functionName: scrapy.contracts.Contract.adjust_request_args
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - contracts
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 86
    functionName: scrapy.contracts.ContractsManager.__init__
    functionSourceFile: scrapy.contracts
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spidercls
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 90
    functionName: scrapy.contracts.ContractsManager.tested_methods_from_spidercls
    functionSourceFile: scrapy.contracts
    functionUses: 3
    functionsReached:
    - re.compile
    - <builtin>.callable
    - inspect.getmembers
    - methods.append
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: methods.append
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - method
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 99
    functionName: scrapy.contracts.ContractsManager.extract_contracts
    functionSourceFile: scrapy.contracts
    functionUses: 3
    functionsReached:
    - re.match
    - contracts.append
    - line.strip
    - line.startswith
    - re.split
    - method.__doc__.split
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: method.__doc__.split
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: line.strip
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: line.startswith
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: re.split
    functionSourceFile: re
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: contracts.append
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - results
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 112
    functionName: scrapy.contracts.ContractsManager.from_spider
    functionSourceFile: scrapy.contracts
    functionUses: 1
    functionsReached:
    - inspect.ismethod
    - re.compile
    - urllib.parse.urlparse.scheme.encode
    - sys.exc_info
    - functools.wraps
    - contract.add_pre_hook
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - re.match
    - method.__doc__.split
    - <builtin>.hasattr
    - methods.append
    - scrapy.contracts.ContractsManager.tested_methods_from_spidercls
    - <builtin>.set
    - <builtin>.list
    - contracts.append
    - frag.startswith
    - scrapy.contracts.ContractsManager.extract_contracts
    - inspect.getfullargspec
    - scrapy.utils.python.to_bytes
    - contract.add_post_hook
    - <builtin>.callable
    - unittest.TextTestResult.addError
    - contract.adjust_request_args
    - re.split
    - <builtin>.isinstance
    - inspect.getmembers
    - unittest.TestCase.__init__
    - w3lib.url.safe_url_string
    - scrapy.utils.python.get_spec
    - <builtin>.setattr
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - requests.append
    - <builtin>.zip
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.type
    - scrapy.contracts._create_testcase
    - line.strip
    - inspect.isfunction
    - line.startswith
    - <builtin>.super
    - scrapy.contracts.ContractsManager._clean_req
    - <builtin>.dict
    - <builtin>.reversed
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.contracts.ContractsManager.from_method
    - scrapy.http.request.Request.__init__
    - <builtin>.len
    - spider.__getattribute__
    - args.remove
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: spider.__getattribute__
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 2
    IfCount: 3
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - method
    - results
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 124
    functionName: scrapy.contracts.ContractsManager.from_method
    functionSourceFile: scrapy.contracts
    functionUses: 2
    functionsReached:
    - inspect.ismethod
    - urllib.parse.urlparse.scheme.encode
    - functools.wraps
    - contract.add_pre_hook
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - re.match
    - method.__doc__.split
    - <builtin>.hasattr
    - <builtin>.set
    - <builtin>.list
    - contracts.append
    - frag.startswith
    - scrapy.contracts.ContractsManager.extract_contracts
    - inspect.getfullargspec
    - scrapy.utils.python.to_bytes
    - contract.add_post_hook
    - <builtin>.callable
    - contract.adjust_request_args
    - re.split
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.utils.python.get_spec
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - <builtin>.zip
    - urllib.parse.urlparse.netloc.encode
    - line.strip
    - inspect.isfunction
    - line.startswith
    - <builtin>.super
    - scrapy.contracts.ContractsManager._clean_req
    - <builtin>.dict
    - <builtin>.reversed
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - <builtin>.len
    - args.remove
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: requests.append
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: unittest.TextTestResult.addError
    functionSourceFile: unittest
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: contract.adjust_request_args
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: args.remove
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: contract.add_pre_hook
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: contract.add_post_hook
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - method
    - results
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 158
    functionName: scrapy.contracts.ContractsManager._clean_req
    functionSourceFile: scrapy.contracts
    functionUses: 3
    functionsReached:
    - functools.wraps
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - response
    - cb_kwargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 164
    functionName: scrapy.contracts.ContractsManager._clean_req.cb_wrapper
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached:
    - sys.exc_info
    - typing.cast
    - results.addError
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - twisted.internet.defer.ensureDeferred
    - importlib.import_module
    - urllib.parse.urlparse.rindex
    - <builtin>.hasattr
    - asyncio.isfuture
    - <builtin>.list
    - scrapy.utils.misc.arg_to_iter
    - <builtin>.callable
    - inspect.isasyncgen
    - scrapy.utils.spider.iterate_spider_output
    - inspect.iscoroutine
    - <builtin>.isinstance
    - unittest.TestCase.__init__
    - asyncio.get_event_loop
    - <builtin>.setattr
    - scrapy.contracts._create_testcase
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - warnings.filterwarnings
    - typing.cast.rindex
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - asyncio.set_event_loop
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - failure
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 172
    functionName: scrapy.contracts.ContractsManager._clean_req.eb_wrapper
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached:
    - unittest.TestCase.__init__
    - <builtin>.setattr
    - results.addError
    - scrapy.contracts._create_testcase
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - _self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 185
    functionName: scrapy.contracts._create_testcase.ContractTestCase.__str__
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.contracts._create_testcase.<lambda1>
    functionSourceFile: scrapy.contracts
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: unittest.TestCase.__init__
    functionSourceFile: ''
    functionUses: 6
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.templates.project.module
    functionSourceFile: scrapy.templates.project.module
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.templates.project.module.spiders
    functionSourceFile: scrapy.templates.project.module.spiders
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.edit
    functionSourceFile: scrapy.commands.edit
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 12
    functionName: scrapy.commands.edit.Command.syntax
    functionSourceFile: scrapy.commands.edit
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 15
    functionName: scrapy.commands.edit.Command.short_desc
    functionSourceFile: scrapy.commands.edit
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 18
    functionName: scrapy.commands.edit.Command.long_desc
    functionSourceFile: scrapy.commands.edit
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - msg
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 24
    functionName: scrapy.commands.edit.Command._err
    functionSourceFile: scrapy.commands.edit
    functionUses: 1
    functionsReached:
    - sys.stderr.write
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 28
    functionName: scrapy.commands.edit.Command.run
    functionSourceFile: scrapy.commands.edit
    functionUses: 0
    functionsReached:
    - sfile.replace
    - sys.stderr.write
    - os.system
    - <builtin>.len
    - scrapy.commands.edit.Command._err
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sfile.replace
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.system
    functionSourceFile: os
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.check
    functionSourceFile: scrapy.commands.check
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 9
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - start
    - stop
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 13
    functionName: scrapy.commands.check.TextTestResult.printSummary
    functionSourceFile: scrapy.commands.check
    functionUses: 1
    functionsReached:
    - unittest.TextTestResult.wasSuccessful
    - <builtin>.map
    - unittest.TextTestResult.stream.writeln
    - unittest.TextTestResult.stream.write
    - infos.append
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: unittest.TextTestResult.stream.writeln
    functionSourceFile: unittest
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: unittest.TextTestResult.wasSuccessful
    functionSourceFile: unittest
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: unittest.TextTestResult.stream.write
    functionSourceFile: unittest
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: infos.append
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 45
    functionName: scrapy.commands.check.Command.syntax
    functionSourceFile: scrapy.commands.check
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 48
    functionName: scrapy.commands.check.Command.short_desc
    functionSourceFile: scrapy.commands.check
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - parser
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 51
    functionName: scrapy.commands.check.Command.add_options
    functionSourceFile: scrapy.commands.check
    functionUses: 0
    functionsReached:
    - scrapy.commands.ScrapyCommand.add_options
    - parser.add_argument
    - parser.add_argument_group
    - group.add_argument
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 7
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 69
    functionName: scrapy.commands.check.Command.run
    functionSourceFile: scrapy.commands.check
    functionUses: 0
    functionsReached:
    - unittest.TextTestResult.wasSuccessful
    - re.compile
    - typing.cast
    - path.replace
    - <builtin>.max
    - scrapy.settings.BaseSettings.update
    - path.startswith
    - scrapy.commands.check.TextTestResult.printSummary
    - compdict.update
    - importlib.import_module
    - typing.cast.items
    - urllib.parse.urlparse.rindex
    - scrapy.utils.conf.build_component_list._check_components
    - collections.defaultdict
    - scrapy.contracts.ContractsManager.tested_methods_from_spidercls
    - methods.append
    - <builtin>.int
    - os.environ.get
    - unittest.TextTestResult.stream.writeln
    - unittest.TextTestResult.stream.write
    - json.loads
    - scrapy.utils.deprecate.update_classpath
    - collections.defaultdict.items
    - scrapy.utils.misc.set_environ
    - scrapy.utils.conf.build_component_list._map_keys
    - <builtin>.callable
    - original_env.items
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - time.time
    - <builtin>.isinstance
    - inspect.getmembers
    - scrapy.utils.python.without_none_values
    - os.environ.update
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.BaseSettings.getpriority
    - scrapy.settings.SettingsAttribute.__init__
    - warnings.warn
    - unittest.TextTestResult.__init__
    - compdict.items
    - <builtin>.print
    - <builtin>.type
    - unittest.TextTestResult.printErrors
    - <builtin>.map
    - scrapy.utils.conf.build_component_list._validate_values
    - scrapy.settings.BaseSettings.maxpriority
    - spider_loader.list
    - typing.cast.rindex
    - unittest.TextTestRunner
    - iterable.items
    - scrapy.utils.misc.load_object
    - scrapy.settings.get_settings_priority
    - operator.itemgetter
    - infos.append
    - scrapy.contracts.ContractsManager.__init__
    - <builtin>.len
    - compdict.getpriority
    - <builtin>.sorted
    - scrapy.utils.conf.build_component_list
    - spider_loader.load
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: unittest.TextTestRunner
    functionSourceFile: unittest
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: unittest.TextTestResult.__init__
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: spider_loader.list
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: -1
    functionName: scrapy.commands.check.Command.run.<lambda1>
    functionSourceFile: scrapy.commands.check
    functionUses: 0
    functionsReached:
    - inspect.ismethod
    - re.compile
    - urllib.parse.urlparse.scheme.encode
    - sys.exc_info
    - functools.wraps
    - contract.add_pre_hook
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - re.match
    - method.__doc__.split
    - <builtin>.hasattr
    - scrapy.contracts.ContractsManager.tested_methods_from_spidercls
    - methods.append
    - <builtin>.set
    - <builtin>.list
    - contracts.append
    - frag.startswith
    - scrapy.contracts.ContractsManager.extract_contracts
    - inspect.getfullargspec
    - scrapy.contracts.ContractsManager.from_spider
    - scrapy.utils.python.to_bytes
    - contract.add_post_hook
    - <builtin>.callable
    - unittest.TextTestResult.addError
    - contract.adjust_request_args
    - re.split
    - <builtin>.isinstance
    - inspect.getmembers
    - unittest.TestCase.__init__
    - w3lib.url.safe_url_string
    - scrapy.utils.python.get_spec
    - <builtin>.setattr
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - requests.append
    - <builtin>.zip
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.type
    - scrapy.contracts._create_testcase
    - line.strip
    - inspect.isfunction
    - line.startswith
    - <builtin>.super
    - scrapy.contracts.ContractsManager._clean_req
    - <builtin>.dict
    - <builtin>.reversed
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.contracts.ContractsManager.from_method
    - scrapy.http.request.Request.__init__
    - <builtin>.len
    - spider.__getattribute__
    - args.remove
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: collections.defaultdict.items
    functionSourceFile: collections
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: unittest.TextTestResult.printErrors
    functionSourceFile: unittest
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.settings
    functionSourceFile: scrapy.commands.settings
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 11
    functionName: scrapy.commands.settings.Command.syntax
    functionSourceFile: scrapy.commands.settings
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 14
    functionName: scrapy.commands.settings.Command.short_desc
    functionSourceFile: scrapy.commands.settings
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 6
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - parser
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 17
    functionName: scrapy.commands.settings.Command.add_options
    functionSourceFile: scrapy.commands.settings
    functionUses: 0
    functionsReached:
    - scrapy.commands.ScrapyCommand.add_options
    - parser.add_argument
    - parser.add_argument_group
    - group.add_argument
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 6
    IfCount: 6
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 47
    functionName: scrapy.commands.settings.Command.run
    functionSourceFile: scrapy.commands.settings
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - json.dumps
    - settings.getfloat
    - settings.getbool
    - settings.getlist
    - s.copy_to_dict
    - <builtin>.print
    - settings.getint
    - settings.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: s.copy_to_dict
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.list
    functionSourceFile: scrapy.commands.list
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 8
    functionName: scrapy.commands.list.Command.short_desc
    functionSourceFile: scrapy.commands.list
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 11
    functionName: scrapy.commands.list.Command.run
    functionSourceFile: scrapy.commands.list
    functionUses: 0
    functionsReached:
    - <builtin>.print
    - <builtin>.sorted
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.genspider
    functionSourceFile: scrapy.commands.genspider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - module_name
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 15
    functionName: scrapy.commands.genspider.sanitize_module_name
    functionSourceFile: scrapy.commands.genspider
    functionUses: 1
    functionsReached:
    - module_name.replace
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: module_name.replace
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - url
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 26
    functionName: scrapy.commands.genspider.extract_domain
    functionSourceFile: scrapy.commands.genspider
    functionUses: 2
    functionsReached:
    - url.lstrip
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: url.lstrip
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - url
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 34
    functionName: scrapy.commands.genspider.verify_url_scheme
    functionSourceFile: scrapy.commands.genspider
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse._replace
    - urllib.parse.urlparse
    - urllib.parse.urlparse.geturl
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse._replace
    functionSourceFile: urllib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.geturl
    functionSourceFile: urllib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 46
    functionName: scrapy.commands.genspider.Command.syntax
    functionSourceFile: scrapy.commands.genspider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 49
    functionName: scrapy.commands.genspider.Command.short_desc
    functionSourceFile: scrapy.commands.genspider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 6
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - parser
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 52
    functionName: scrapy.commands.genspider.Command.add_options
    functionSourceFile: scrapy.commands.genspider
    functionUses: 0
    functionsReached:
    - scrapy.commands.ScrapyCommand.add_options
    - parser.add_argument
    - parser.add_argument_group
    - group.add_argument
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 12
    ICount: 4
    IfCount: 8
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 89
    functionName: scrapy.commands.genspider.Command.run
    functionSourceFile: scrapy.commands.genspider
    functionUses: 0
    functionsReached:
    - shutil.copyfile
    - urllib.parse.urlparse.geturl
    - module_name.replace
    - pathlib.Path.with_suffix
    - typing.cast
    - render_path.write_text
    - string.title
    - string.Template
    - scrapy.utils.template.render_templatefile
    - importlib.import_module
    - os.system
    - pathlib.Path.rename
    - s.capitalize
    - scrapy.commands.genspider.sanitize_module_name
    - pathlib.Path
    - scrapy.commands.genspider.Command._list_templates
    - pathlib.Path.read_text
    - module.split
    - urllib.parse.urlparse._replace
    - pathlib.Path.parent.resolve
    - scrapy.utils.template.string_camelcase
    - pathlib.Path.exists
    - scrapy.commands.genspider.verify_url_scheme
    - <builtin>.print
    - pathlib.Path.iterdir
    - CAMELCASE_INVALID_CHARS.sub
    - scrapy.commands.genspider.extract_domain
    - scrapy.commands.genspider.Command._spider_exists
    - scrapy.commands.genspider.Command._find_template
    - pathlib.Path.resolve
    - <builtin>.len
    - scrapy.commands.genspider.Command._genspider
    - url.lstrip
    - urllib.parse.urlparse
    - <builtin>.sorted
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 155
    functionName: scrapy.commands.genspider.Command._list_templates
    functionSourceFile: scrapy.commands.genspider
    functionUses: 1
    functionsReached:
    - pathlib.Path
    - pathlib.Path.iterdir
    - <builtin>.print
    - <builtin>.sorted
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - template
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 147
    functionName: scrapy.commands.genspider.Command._find_template
    functionSourceFile: scrapy.commands.genspider
    functionUses: 1
    functionsReached:
    - pathlib.Path.exists
    - <builtin>.print
    - pathlib.Path
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 161
    functionName: scrapy.commands.genspider.Command._spider_exists
    functionSourceFile: scrapy.commands.genspider
    functionUses: 1
    functionsReached:
    - pathlib.Path.parent.resolve
    - pathlib.Path.resolve
    - typing.cast
    - pathlib.Path.exists
    - <builtin>.print
    - pathlib.Path
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    IfCount: 2
    argCount: 6
    argDefaultValues: []
    argNames:
    - self
    - module
    - name
    - url
    - template_name
    - template_file
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 118
    functionName: scrapy.commands.genspider.Command._genspider
    functionSourceFile: scrapy.commands.genspider
    functionUses: 1
    functionsReached:
    - shutil.copyfile
    - pathlib.Path.with_suffix
    - render_path.write_text
    - string.title
    - string.Template
    - scrapy.utils.template.render_templatefile
    - importlib.import_module
    - pathlib.Path.rename
    - s.capitalize
    - pathlib.Path
    - pathlib.Path.read_text
    - module.split
    - pathlib.Path.parent.resolve
    - scrapy.utils.template.string_camelcase
    - <builtin>.print
    - CAMELCASE_INVALID_CHARS.sub
    - scrapy.commands.genspider.extract_domain
    - url.lstrip
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: s.capitalize
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: module.split
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: shutil.copyfile
    functionSourceFile: shutil
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: pathlib.Path.iterdir
    functionSourceFile: pathlib
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 196
    functionName: scrapy.commands.genspider.Command.templates_dir
    functionSourceFile: scrapy.commands.genspider
    functionUses: 0
    functionsReached:
    - pathlib.Path
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.runspider
    functionSourceFile: scrapy.commands.runspider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - filepath
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 13
    functionName: scrapy.commands.runspider._import_file
    functionSourceFile: scrapy.commands.runspider
    functionUses: 1
    functionsReached:
    - pathlib.Path.resolve
    - <builtin>.str
    - pathlib.Path
    - sys.path.pop
    - importlib.import_module
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sys.path.pop
    functionSourceFile: sys
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 30
    functionName: scrapy.commands.runspider.Command.syntax
    functionSourceFile: scrapy.commands.runspider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 33
    functionName: scrapy.commands.runspider.Command.short_desc
    functionSourceFile: scrapy.commands.runspider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 36
    functionName: scrapy.commands.runspider.Command.long_desc
    functionSourceFile: scrapy.commands.runspider
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 2
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 39
    functionName: scrapy.commands.runspider.Command.run
    functionSourceFile: scrapy.commands.runspider
    functionUses: 0
    functionsReached:
    - spclasses.pop
    - <builtin>.vars
    - scrapy.commands.runspider._import_file
    - <builtin>.list
    - scrapy.utils.spider.iter_spider_classes
    - pathlib.Path.resolve
    - <builtin>.str
    - pathlib.Path.exists
    - <builtin>.len
    - pathlib.Path
    - <builtin>.issubclass
    - inspect.isclass
    - sys.path.pop
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: spclasses.pop
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.fetch
    functionSourceFile: scrapy.commands.fetch
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 18
    functionName: scrapy.commands.fetch.Command.syntax
    functionSourceFile: scrapy.commands.fetch
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 21
    functionName: scrapy.commands.fetch.Command.short_desc
    functionSourceFile: scrapy.commands.fetch
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 24
    functionName: scrapy.commands.fetch.Command.long_desc
    functionSourceFile: scrapy.commands.fetch
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 4
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - parser
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 30
    functionName: scrapy.commands.fetch.Command.add_options
    functionSourceFile: scrapy.commands.fetch
    functionUses: 0
    functionsReached:
    - scrapy.commands.ScrapyCommand.add_options
    - parser.add_argument
    - parser.add_argument_group
    - group.add_argument
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - headers
    - prefix
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 47
    functionName: scrapy.commands.fetch.Command._print_headers
    functionSourceFile: scrapy.commands.fetch
    functionUses: 1
    functionsReached:
    - headers.items
    - scrapy.commands.fetch.Command._print_bytes
    - sys.stdout.buffer.write
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - bytes_
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 60
    functionName: scrapy.commands.fetch.Command._print_bytes
    functionSourceFile: scrapy.commands.fetch
    functionUses: 2
    functionsReached:
    - sys.stdout.buffer.write
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 52
    functionName: scrapy.commands.fetch.Command._print_response
    functionSourceFile: scrapy.commands.fetch
    functionUses: 0
    functionsReached:
    - scrapy.commands.fetch.Command._print_headers
    - scrapy.commands.fetch.Command._print_bytes
    - headers.items
    - sys.stdout.buffer.write
    - <builtin>.print
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: sys.stdout.buffer.write
    functionSourceFile: sys
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 2
    IfCount: 3
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 63
    functionName: scrapy.commands.fetch.Command.run
    functionSourceFile: scrapy.commands.fetch
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - w3lib.url.is_url
    - <builtin>.range
    - scrapy.utils.datatypes.SequenceExclude.__init__
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - spider_loader.find_by_request
    - scrapy.utils.spider.spidercls_for_request
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - <builtin>.len
    - scrapy.http.request.Request.__init__
    - logger.error
    - spider_loader.load
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.is_url
    functionSourceFile: w3lib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.fetch.Command.run.<lambda1>
    functionSourceFile: scrapy.commands.fetch
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.commands.parse
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 33
    functionName: scrapy.commands.parse.Command.syntax
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 36
    functionName: scrapy.commands.parse.Command.short_desc
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 12
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - parser
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 39
    functionName: scrapy.commands.parse.Command.add_options
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached:
    - scrapy.commands.BaseRunSpiderCommand.add_options
    - group.add_argument
    - parser.add_argument_group
    - scrapy.commands.ScrapyCommand.add_options
    - parser.add_argument
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 109
    functionName: scrapy.commands.parse.Command.max_level
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached:
    - <builtin>.max
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - result
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 123
    functionName: scrapy.commands.parse.Command.iterate_spider_output
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached:
    - results.append
    - typing.cast
    - scrapy.utils.asyncgen.collect_asyncgen
    - inspect.isawaitable
    - scrapy.utils.reactor.is_asyncio_reactor_installed
    - importlib.import_module
    - twisted.internet.defer.ensureDeferred
    - urllib.parse.urlparse.rindex
    - aiterable.__aiter__
    - <builtin>.hasattr
    - asyncio.isfuture
    - it.__anext__
    - scrapy.utils.defer.aiter_errback
    - scrapy.utils.misc.arg_to_iter
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    - <builtin>.callable
    - inspect.isasyncgen
    - logger.log
    - inspect.iscoroutine
    - <builtin>.isinstance
    - asyncio.get_event_loop
    - logkws.get
    - twisted.internet.defer.Deferred.fromFuture
    - scrapy.utils.reactor.set_asyncio_event_loop
    - scrapy.utils.defer.deferred_from_coro
    - asyncio.ensure_future
    - scrapy.utils.log.logformatter_adapter
    - warnings.filterwarnings
    - scrapy.commands.parse.Command.handle_exception
    - typing.cast.rindex
    - scrapy.core.scraper.Scraper.handle_spider_error
    - asyncio.new_event_loop
    - scrapy.utils.reactor._get_asyncio_event_loop
    - logger.error
    - asyncio.set_event_loop
    - twisted.python.failure.Failure
    - scrapy.utils.misc.load_object
    - twisted.internet.defer.ensureDeferred.addCallback
    - warnings.catch_warnings
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - lvl
    - new_items
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 136
    functionName: scrapy.commands.parse.Command.add_items
    functionSourceFile: scrapy.commands.parse
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - lvl
    - new_reqs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 140
    functionName: scrapy.commands.parse.Command.add_requests
    functionSourceFile: scrapy.commands.parse
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e0c7430>
    - <ast.Constant object at 0x7f9a4e0c73a0>
    argNames:
    - self
    - lvl
    - colour
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 144
    functionName: scrapy.commands.parse.Command.print_items
    functionSourceFile: scrapy.commands.parse
    functionUses: 2
    functionsReached:
    - <builtin>.bool
    - scrapy.utils.display._tty_supports_color
    - sys.stdout.isatty
    - scrapy.utils.display.pprint
    - ctypes.windll.kernel32.GetStdHandle
    - packaging.version.Version
    - scrapy.utils.display.pformat
    - platform.version
    - ctypes.windll.kernel32.SetConsoleMode
    - pygments.highlight
    - <builtin>.print
    - itemadapter.ItemAdapter
    - itemadapter.ItemAdapter.asdict
    - scrapy.utils.display._enable_windows_terminal_processing
    - scrapy.utils.display._colorize
    - pygments.formatters.TerminalFormatter
    - pprint.pformat
    - pygments.lexers.PythonLexer
    - kwargs.pop
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4b6757c0>
    - <ast.Constant object at 0x7f9a4b675af0>
    argNames:
    - self
    - lvl
    - colour
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 153
    functionName: scrapy.commands.parse.Command.print_requests
    functionSourceFile: scrapy.commands.parse
    functionUses: 2
    functionsReached:
    - scrapy.utils.display._enable_windows_terminal_processing
    - pygments.highlight
    - <builtin>.bool
    - ctypes.windll.kernel32.GetStdHandle
    - scrapy.utils.display._tty_supports_color
    - scrapy.utils.display._colorize
    - packaging.version.Version
    - pprint.pformat
    - scrapy.utils.display.pformat
    - pygments.formatters.TerminalFormatter
    - sys.stdout.isatty
    - scrapy.utils.display.pprint
    - <builtin>.max
    - platform.version
    - <builtin>.print
    - pygments.lexers.PythonLexer
    - kwargs.pop
    - ctypes.windll.kernel32.SetConsoleMode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 6
    IfCount: 5
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - opts
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 165
    functionName: scrapy.commands.parse.Command.print_results
    functionSourceFile: scrapy.commands.parse
    functionUses: 1
    functionsReached:
    - scrapy.commands.parse.Command.print_requests
    - <builtin>.bool
    - scrapy.utils.display._tty_supports_color
    - <builtin>.max
    - sys.stdout.isatty
    - scrapy.utils.display.pprint
    - ctypes.windll.kernel32.GetStdHandle
    - <builtin>.range
    - packaging.version.Version
    - scrapy.utils.display.pformat
    - platform.version
    - ctypes.windll.kernel32.SetConsoleMode
    - pygments.highlight
    - scrapy.commands.parse.Command.print_items
    - <builtin>.print
    - itemadapter.ItemAdapter
    - itemadapter.ItemAdapter.asdict
    - scrapy.utils.display._enable_windows_terminal_processing
    - scrapy.utils.display._colorize
    - pygments.formatters.TerminalFormatter
    - pprint.pformat
    - pygments.lexers.PythonLexer
    - kwargs.pop
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 6
    argDefaultValues: []
    argNames:
    - self
    - spider_output
    - opts
    - depth
    - spider
    - callback
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 182
    functionName: scrapy.commands.parse.Command._get_items_and_requests
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached:
    - itemadapter.is_item
    - <builtin>.isinstance
    - items.append
    - requests.append
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: items.append
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ce0b940>
    argNames:
    - self
    - response
    - callback
    - cb_kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 191
    functionName: scrapy.commands.parse.Command.run_callback
    functionSourceFile: scrapy.commands.parse
    functionUses: 1
    functionsReached:
    - twisted.internet.defer.maybeDeferred
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - spider
    - response
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 196
    functionName: scrapy.commands.parse.Command.get_callback_from_rules
    functionSourceFile: scrapy.commands.parse
    functionUses: 4
    functionsReached:
    - logger.error
    - rule.link_extractor.matches
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: rule.link_extractor.matches
    functionSourceFile: <builtin>
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 2
    IfCount: 3
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - url
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 208
    functionName: scrapy.commands.parse.Command.set_spidercls
    functionSourceFile: scrapy.commands.parse
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - urllib.parse.urlparse.netloc.encode
    - spider_loader.find_by_request
    - scrapy.utils.spider.spidercls_for_request
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - logger.error
    - scrapy.http.request.Request.__init__
    - twisted.internet.protocol.ClientFactory._url.encode
    - <builtin>.len
    - spider_loader.load
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - spider
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 222
    functionName: scrapy.commands.parse.Command.set_spidercls._start_requests
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - rule.link_extractor.matches
    - scrapy.commands.parse.Command.prepare_request
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - scrapy.commands.parse.Command.get_callback_from_rules
    - functools.update_wrapper
    - scrapy.commands.parse.Command._get_callback
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - logger.error
    - urllib.parse.urlparse.hostname.encode
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 3
    IfCount: 3
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - spider
    - request
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 282
    functionName: scrapy.commands.parse.Command.prepare_request
    functionSourceFile: scrapy.commands.parse
    functionUses: 1
    functionsReached:
    - scrapy.commands.parse.Command.get_callback_from_rules
    - functools.update_wrapper
    - logger.error
    - scrapy.commands.parse.Command._get_callback
    - <builtin>.callable
    - rule.link_extractor.matches
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - url
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 228
    functionName: scrapy.commands.parse.Command.start_parsing
    functionSourceFile: scrapy.commands.parse
    functionUses: 1
    functionsReached:
    - <builtin>.list
    - logger.error
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - args
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 236
    functionName: scrapy.commands.parse.Command.scraped_data
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached:
    - scrapy.commands.parse.Command.add_requests
    - scrapy.commands.parse.Command.add_items
    - itemproc.process_item
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: itemproc.process_item
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 11
    ICount: 0
    IfCount: 7
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - spider
    - opts
    - response
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 255
    functionName: scrapy.commands.parse.Command._get_callback
    functionSourceFile: scrapy.commands.parse
    functionUses: 3
    functionsReached:
    - scrapy.commands.parse.Command.get_callback_from_rules
    - logger.error
    - <builtin>.callable
    - rule.link_extractor.matches
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - ValueError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - response
    - cb_kwargs
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 283
    functionName: scrapy.commands.parse.Command.prepare_request.callback
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached:
    - scrapy.commands.parse.Command.run_callback
    - scrapy.commands.parse.Command.get_callback_from_rules
    - logger.error
    - scrapy.commands.parse.Command._get_callback
    - twisted.internet.defer.maybeDeferred.addCallback
    - twisted.internet.defer.maybeDeferred
    - <builtin>.callable
    - rule.link_extractor.matches
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: twisted.internet.defer.maybeDeferred.addCallback
    functionSourceFile: twisted
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: functools.update_wrapper
    functionSourceFile: functools
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 314
    functionName: scrapy.commands.parse.Command.process_options
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached:
    - settings.getdict
    - settings.getwithbase
    - scrapy.utils.conf.feed_process_params_from_cli.check_valid_format
    - scrapy.commands.BaseRunSpiderCommand.process_options
    - x.split
    - scrapy.commands.parse.Command.process_request_meta
    - scrapy.commands.parse.Command.process_request_cb_kwargs
    - os.getpid
    - json.loads
    - pathlib.Path
    - result.update
    - scrapy.commands.ScrapyCommand.process_options
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - pathlib.Path.write_text
    - scrapy.utils.conf.feed_process_params_from_cli
    - twisted.python.failure.startDebugMode
    - warnings.warn
    - element.rsplit
    - <builtin>.type
    - <builtin>.dict
    - iterable.items
    - <builtin>.str
    - pathlib.Path.suffix.replace
    - scrapy.utils.conf.arglist_to_dict
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - opts
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 320
    functionName: scrapy.commands.parse.Command.process_request_meta
    functionSourceFile: scrapy.commands.parse
    functionUses: 1
    functionsReached:
    - json.loads
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - opts
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 331
    functionName: scrapy.commands.parse.Command.process_request_cb_kwargs
    functionSourceFile: scrapy.commands.parse
    functionUses: 1
    functionsReached:
    - json.loads
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 3
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 8
    functionLinenumber: 342
    functionName: scrapy.commands.parse.Command.run
    functionSourceFile: scrapy.commands.parse
    functionUses: 0
    functionsReached:
    - scrapy.commands.parse.Command.print_requests
    - <builtin>.bool
    - scrapy.utils.display._tty_supports_color
    - urllib.parse.urlparse.scheme.encode
    - <builtin>.max
    - sys.stdout.isatty
    - scrapy.utils.display.pprint
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - w3lib.url.is_url
    - ctypes.windll.kernel32.GetStdHandle
    - <builtin>.range
    - <builtin>.list
    - packaging.version.Version
    - scrapy.utils.display.pformat
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - platform.version
    - <builtin>.callable
    - ctypes.windll.kernel32.SetConsoleMode
    - <builtin>.isinstance
    - pygments.highlight
    - w3lib.url.safe_url_string
    - scrapy.commands.parse.Command.print_items
    - scrapy.http.headers.Headers.__init__
    - scrapy.commands.parse.Command.start_parsing
    - scrapy.utils.url.escape_ajax
    - scrapy.commands.parse.Command.set_spidercls
    - urllib.parse.urlparse.netloc.encode
    - <builtin>.print
    - scrapy.utils.spider.spidercls_for_request
    - spider_loader.find_by_request
    - itemadapter.ItemAdapter
    - itemadapter.ItemAdapter.asdict
    - <builtin>.super
    - scrapy.utils.display._enable_windows_terminal_processing
    - <builtin>.dict
    - scrapy.utils.display._colorize
    - pprint.pformat
    - pygments.formatters.TerminalFormatter
    - <builtin>.str
    - logger.error
    - scrapy.commands.parse.Command.print_results
    - <builtin>.len
    - scrapy.http.request.Request.__init__
    - twisted.internet.protocol.ClientFactory._url.encode
    - pygments.lexers.PythonLexer
    - kwargs.pop
    - spider_loader.load
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.commands.startproject
    functionSourceFile: scrapy.commands.startproject
    functionUses: 0
    functionsReached:
    - shutil.ignore_patterns
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: shutil.ignore_patterns
    functionSourceFile: shutil
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - path
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 25
    functionName: scrapy.commands.startproject._make_writable
    functionSourceFile: scrapy.commands.startproject
    functionUses: 2
    functionsReached:
    - os.stat
    - os.chmod
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.stat
    functionSourceFile: os
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: os.chmod
    functionSourceFile: os
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 34
    functionName: scrapy.commands.startproject.Command.syntax
    functionSourceFile: scrapy.commands.startproject
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 37
    functionName: scrapy.commands.startproject.Command.short_desc
    functionSourceFile: scrapy.commands.startproject
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 2
    IfCount: 2
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - project_name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 40
    functionName: scrapy.commands.startproject.Command._is_valid_name
    functionSourceFile: scrapy.commands.startproject
    functionUses: 1
    functionsReached:
    - scrapy.commands.startproject.Command._is_valid_name._module_exists
    - re.search
    - <builtin>.print
    - importlib.util.find_spec
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - module_name
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 41
    functionName: scrapy.commands.startproject.Command._is_valid_name._module_exists
    functionSourceFile: scrapy.commands.startproject
    functionUses: 2
    functionsReached:
    - importlib.util.find_spec
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: importlib.util.find_spec
    functionSourceFile: importlib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 7
    IfCount: 3
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - src
    - dst
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 56
    functionName: scrapy.commands.startproject.Command._copytree
    functionSourceFile: scrapy.commands.startproject
    functionUses: 1
    functionsReached:
    - os.stat
    - scrapy.commands.startproject._make_writable
    - shutil.copy2
    - dst.mkdir
    - shutil.ignore_patterns
    - scrapy.commands.startproject.Command._copytree
    - dst.exists
    - pathlib.Path.is_dir
    - os.chmod
    - pathlib.Path.iterdir
    - shutil.copystat
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dst.exists
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: dst.mkdir
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: shutil.copy2
    functionSourceFile: shutil
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: shutil.copystat
    functionSourceFile: shutil
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 9
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 87
    functionName: scrapy.commands.startproject.Command.run
    functionSourceFile: scrapy.commands.startproject
    functionUses: 0
    functionsReached:
    - scrapy.commands.startproject.Command._is_valid_name._module_exists
    - scrapy.commands.startproject._make_writable
    - pathlib.Path.with_suffix
    - importlib.util.find_spec
    - render_path.write_text
    - string.Template
    - string.title
    - scrapy.utils.template.render_templatefile
    - scrapy.commands.startproject.Command._is_valid_name
    - scrapy.commands.startproject.Command._copytree
    - pathlib.Path.rename
    - pathlib.Path
    - pathlib.Path.read_text
    - shutil.copystat
    - pathlib.Path.is_dir
    - shutil.copy2
    - shutil.move
    - scrapy.utils.template.string_camelcase
    - dst.exists
    - pathlib.Path.exists
    - <builtin>.print
    - os.chmod
    - pathlib.Path.iterdir
    - CAMELCASE_INVALID_CHARS.sub
    - re.search
    - os.stat
    - dst.mkdir
    - shutil.ignore_patterns
    - pathlib.Path.resolve
    - <builtin>.len
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: shutil.move
    functionSourceFile: shutil
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 132
    functionName: scrapy.commands.startproject.Command.templates_dir
    functionSourceFile: scrapy.commands.startproject
    functionUses: 0
    functionsReached:
    - pathlib.Path
    - <builtin>.str
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.version
    functionSourceFile: scrapy.commands.version
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 9
    functionName: scrapy.commands.version.Command.syntax
    functionSourceFile: scrapy.commands.version
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 12
    functionName: scrapy.commands.version.Command.short_desc
    functionSourceFile: scrapy.commands.version
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - parser
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 15
    functionName: scrapy.commands.version.Command.add_options
    functionSourceFile: scrapy.commands.version
    functionUses: 0
    functionsReached:
    - scrapy.commands.ScrapyCommand.add_options
    - parser.add_argument
    - parser.add_argument_group
    - group.add_argument
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 25
    functionName: scrapy.commands.version.Command.run
    functionSourceFile: scrapy.commands.version
    functionUses: 0
    functionsReached:
    - platform.platform
    - OpenSSL.SSL.SSLeay_version
    - twisted.version.short
    - <builtin>.map
    - scrapy.utils.ssl.get_openssl_version
    - sys.version.replace
    - scrapy.utils.versions.scrapy_components_versions
    - <builtin>.max
    - <builtin>.len
    - <builtin>.print
    - system_openssl_bytes.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.crawl
    functionSourceFile: scrapy.commands.crawl
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 8
    functionName: scrapy.commands.crawl.Command.syntax
    functionSourceFile: scrapy.commands.crawl
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 11
    functionName: scrapy.commands.crawl.Command.short_desc
    functionSourceFile: scrapy.commands.crawl
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 14
    functionName: scrapy.commands.crawl.Command.run
    functionSourceFile: scrapy.commands.crawl
    functionUses: 0
    functionsReached:
    - <builtin>.hasattr
    - <builtin>.len
    - <builtin>.getattr
    - <builtin>.issubclass
    linkageType: pythonLinkage
    raised:
    - UsageError
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.shell
    functionSourceFile: scrapy.commands.shell
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 26
    functionName: scrapy.commands.shell.Command.syntax
    functionSourceFile: scrapy.commands.shell
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 29
    functionName: scrapy.commands.shell.Command.short_desc
    functionSourceFile: scrapy.commands.shell
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 32
    functionName: scrapy.commands.shell.Command.long_desc
    functionSourceFile: scrapy.commands.shell
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 4
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - parser
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 38
    functionName: scrapy.commands.shell.Command.add_options
    functionSourceFile: scrapy.commands.shell
    functionUses: 0
    functionsReached:
    - scrapy.commands.ScrapyCommand.add_options
    - parser.add_argument
    - parser.add_argument_group
    - group.add_argument
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - vars
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 54
    functionName: scrapy.commands.shell.Command.update_vars
    functionSourceFile: scrapy.commands.shell
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 4
    IfCount: 3
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 60
    functionName: scrapy.commands.shell.Command.run
    functionSourceFile: scrapy.commands.shell
    functionUses: 0
    functionsReached:
    - <builtin>.bool
    - scrapy.utils.conf.get_config
    - scrapy.shell.Shell.__init__
    - scrapy.http.request.Request._set_url
    - re.match
    - urllib.parse.urlparse.rindex
    - scrapy.utils.python.to_bytes
    - scrapy.utils.url.escape_ajax
    - configparser.ConfigParser.get
    - scrapy.shell.Shell._is_relevant
    - scrapy.utils.url._is_posix_path
    - crawler._create_engine
    - pathlib.Path.resolve
    - scrapy.http.request.Request.__init__
    - DEFAULT_PYTHON_SHELLS.copy
    - urllib.parse.urlparse.hostname.encode
    - scrapy.utils.conf.closest_scrapy_cfg
    - urllib.parse.urlparse.scheme.encode
    - scrapy.shell.Shell.start
    - scrapy.shell.Shell.fetch
    - scrapy.utils.url.add_http_if_no_scheme
    - os.environ.get
    - <builtin>.list
    - cfgfile.exists
    - scrapy.utils.console.get_shell_embed_func
    - pathlib.Path.expanduser
    - scrapy.commands.shell.Command._start_crawler_thread
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - crawler.engine.start
    - <builtin>.print
    - <builtin>.super
    - configparser.ConfigParser.read
    - scrapy.utils.url.guess_scheme
    - <builtin>.str
    - twisted.internet.protocol.ClientFactory._url.encode
    - logger.error
    - scrapy.utils.conf.get_sources
    - <builtin>.getattr
    - crawler._apply_settings
    - w3lib.url.safe_url_string.startswith
    - urllib.parse.urldefrag
    - importlib.import_module
    - scrapy.utils.url._is_filesystem_path
    - twisted.internet.threads.blockingCallFromThread
    - pathlib.Path
    - <builtin>.callable
    - threading.Thread
    - <builtin>.eval
    - b.append
    - spider_loader.find_by_request
    - DEFAULT_PYTHON_SHELLS.keys
    - itemadapter.is_item
    - configparser.ConfigParser.has_option
    - sources.append
    - typing.cast.rindex
    - threading.Thread.start
    - env.strip
    - signal.signal
    - scrapy.utils.url._is_windows_path
    - <builtin>.sorted
    - <builtin>.globals
    - typing.cast
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - <builtin>.range
    - scrapy.utils.datatypes.SequenceExclude.__init__
    - frag.startswith
    - twisted.python.threadable.isInIOThread
    - scrapy.shell.Shell.populate_vars
    - scrapy.http.headers.Headers.__init__
    - spider_loader.load
    - urllib.parse.urlparse.netloc.encode
    - scrapy.utils.console.start_python_console
    - scrapy.utils.spider.spidercls_for_request
    - configparser.ConfigParser
    - <builtin>.dict
    - scrapy.shell.Shell.get_help
    - <builtin>.len
    - urllib.parse.urlparse
    - w3lib.url.any_to_uri
    - scrapy.utils.misc.load_object
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler._apply_settings
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler._create_engine
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: crawler.engine.start
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 90
    functionName: scrapy.commands.shell.Command._start_crawler_thread
    functionSourceFile: scrapy.commands.shell
    functionUses: 1
    functionsReached:
    - threading.Thread
    - threading.Thread.start
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: threading.Thread
    functionSourceFile: threading
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: threading.Thread.start
    functionSourceFile: threading
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.bench
    functionSourceFile: scrapy.commands.bench
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 18
    functionName: scrapy.commands.bench.Command.short_desc
    functionSourceFile: scrapy.commands.bench
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 21
    functionName: scrapy.commands.bench.Command.run
    functionSourceFile: scrapy.commands.bench
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 28
    functionName: scrapy.commands.bench._BenchServer.__enter__
    functionSourceFile: scrapy.commands.bench
    functionUses: 0
    functionsReached:
    - scrapy.utils.test.get_pythonpath
    - os.environ.get
    - scrapy.utils.test.get_testenv
    - <builtin>.str
    - subprocess.Popen
    - os.environ.copy
    - pathlib.Path
    - importlib.import_module
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: subprocess.Popen
    functionSourceFile: subprocess
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - exc_type
    - exc_value
    - traceback
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 35
    functionName: scrapy.commands.bench._BenchServer.__exit__
    functionSourceFile: scrapy.commands.bench
    functionUses: 0
    functionsReached:
    - time.sleep
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: time.sleep
    functionSourceFile: time
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: -1
    functionName: scrapy.commands.bench._BenchSpider
    functionSourceFile: scrapy.commands.bench
    functionUses: 0
    functionsReached:
    - functools.partial
    - <builtin>.isinstance
    - <builtin>.hasattr
    - <builtin>.map
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor.__init__
    - <builtin>.set
    - scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor.__init__
    - re.compile
    - scrapy.utils.misc.arg_to_iter
    - typing.cast
    - <builtin>.tuple
    - operator.attrgetter
    - <builtin>.callable
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 50
    functionName: scrapy.commands.bench._BenchSpider.start_requests
    functionSourceFile: scrapy.commands.bench
    functionUses: 0
    functionsReached:
    - urllib.parse.urlencode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 7
    functionLinenumber: 55
    functionName: scrapy.commands.bench._BenchSpider.parse
    functionSourceFile: scrapy.commands.bench
    functionUses: 0
    functionsReached:
    - scrapy.linkextractors._is_valid_url
    - result.append
    - <builtin>.any
    - typing.cast
    - host.endswith
    - w3lib.html.strip_html5_whitespace
    - r.search
    - el.get
    - document.iter
    - scrapy.utils.url.parse_url
    - scrapy.linkextractors._matches
    - <builtin>.set
    - logger.debug
    - scrapy.linkextractors.lxmlhtml._nons
    - scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._extract_links
    - w3lib.html.get_base_url
    - d.lower
    - typing.cast.netloc.lower
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - seen.add
    - scrapy.utils.misc.rel_has_nofollow
    - urllib.parse.urlparse.path.lower
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._link_allowed
    - response.xpath
    - scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._process_links
    - w3lib.url.safe_url_string
    - scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor.extract_links
    - scrapy.utils.url.url_has_any_extension
    - scrapy.utils.url.url_is_from_any_domain
    - all_links.extend
    - url.split
    - w3lib.url.canonicalize_url
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._process_links
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._extract_links
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._iter_links
    - urllib.parse.urljoin
    - scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._deduplicate_if_needed
    - tag.split
    - typing.cast.path.lower
    - lowercase_path.endswith
    - scrapy.utils.python.<lambda1>
    - urllib.parse.urlparse.netloc.lower
    - scrapy.link.Link.__init__
    - rel.replace
    - scrapy.utils.response.get_base_url
    - links.append
    - <builtin>.len
    - urllib.parse.urlparse
    - scrapy.utils.python.unique
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.commands.view
    functionSourceFile: scrapy.commands.view
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 8
    functionName: scrapy.commands.view.Command.short_desc
    functionSourceFile: scrapy.commands.view
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 11
    functionName: scrapy.commands.view.Command.long_desc
    functionSourceFile: scrapy.commands.view
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - parser
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 16
    functionName: scrapy.commands.view.Command.add_options
    functionSourceFile: scrapy.commands.view
    functionUses: 0
    functionsReached:
    - parser.add_argument
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - opts
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 20
    functionName: scrapy.commands.view.Command._print_response
    functionSourceFile: scrapy.commands.view
    functionUses: 0
    functionsReached:
    - tempfile.mkstemp
    - <builtin>.isinstance
    - re.sub
    - scrapy.utils.response.open_in_browser
    - urllib.parse.urlparse.scheme.encode
    - os.write
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - os.close
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.http.cookies
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - re.compile
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c639640>
    - <ast.Constant object at 0x7f9a4c639610>
    argNames:
    - self
    - policy
    - check_expired_frequency
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 19
    functionName: scrapy.http.cookies.CookieJar.__init__
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - http.cookiejar.CookieJar
    - http.cookiejar.DefaultCookiePolicy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.DefaultCookiePolicy
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 26
    functionName: scrapy.http.cookies.CookieJar.extract_cookies
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - scrapy.http.cookies.WrappedRequest.__init__
    - http.cookiejar.CookieJar.extract_cookies
    - scrapy.http.cookies.WrappedResponse.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 127
    functionName: scrapy.http.cookies.WrappedRequest.__init__
    functionSourceFile: ''
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 189
    functionName: scrapy.http.cookies.WrappedResponse.__init__
    functionSourceFile: ''
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar.extract_cookies
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 7
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 11
    ICount: 2
    IfCount: 7
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - request
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 31
    functionName: scrapy.http.cookies.CookieJar.add_cookie_header
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - http.cookiejar.CookieJar._cookies_for_domain
    - time.time
    - http.cookiejar.CookieJar.clear_expired_cookies
    - scrapy.http.cookies.WrappedRequest.add_unredirected_header
    - <builtin>.int
    - scrapy.http.cookies.WrappedRequest.__init__
    - domain.rindex
    - matches.append
    - scrapy.utils.httpobj.urlparse_cached
    - scrapy.http.cookies.potential_domain_matches
    - IPV4_RE.search
    - domain.index
    - urllib.parse.urlparse
    - http.cookiejar.CookieJar._cookie_attrs
    - scrapy.http.cookies.WrappedRequest.has_header
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: IPV4_RE.search
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - domain
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 94
    functionName: scrapy.http.cookies.potential_domain_matches
    functionSourceFile: scrapy.http.cookies
    functionUses: 1
    functionsReached:
    - domain.rindex
    - domain.index
    - matches.append
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar._cookies_for_domain
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar._cookie_attrs
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 169
    functionName: scrapy.http.cookies.WrappedRequest.has_header
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - name
    - value
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 184
    functionName: scrapy.http.cookies.WrappedRequest.add_unredirected_header
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar.clear_expired_cookies
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 64
    functionName: scrapy.http.cookies.CookieJar._cookies
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - args
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 67
    functionName: scrapy.http.cookies.CookieJar.clear_session_cookies
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - http.cookiejar.CookieJar.clear_session_cookies
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar.clear_session_cookies
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4c6db160>
    - <ast.Constant object at 0x7f9a4c6db4f0>
    - <ast.Constant object at 0x7f9a4c6db280>
    argNames:
    - self
    - domain
    - path
    - name
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 70
    functionName: scrapy.http.cookies.CookieJar.clear
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - http.cookiejar.CookieJar.clear
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar.clear
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 73
    functionName: scrapy.http.cookies.CookieJar.__iter__
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - <builtin>.iter
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 76
    functionName: scrapy.http.cookies.CookieJar.__len__
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - <builtin>.len
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - pol
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 79
    functionName: scrapy.http.cookies.CookieJar.set_policy
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - http.cookiejar.CookieJar.set_policy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar.set_policy
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 82
    functionName: scrapy.http.cookies.CookieJar.make_cookies
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - scrapy.http.cookies.WrappedRequest.__init__
    - http.cookiejar.CookieJar.make_cookies
    - scrapy.http.cookies.WrappedResponse.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar.make_cookies
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - cookie
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 87
    functionName: scrapy.http.cookies.CookieJar.set_cookie
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - http.cookiejar.CookieJar.set_cookie
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar.set_cookie
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - cookie
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 90
    functionName: scrapy.http.cookies.CookieJar.set_cookie_if_ok
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - scrapy.http.cookies.WrappedRequest.__init__
    - http.cookiejar.CookieJar.set_cookie_if_ok
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: http.cookiejar.CookieJar.set_cookie_if_ok
    functionSourceFile: http
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: domain.index
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: domain.rindex
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: matches.append
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 114
    functionName: scrapy.http.cookies._DummyLock.acquire
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 117
    functionName: scrapy.http.cookies._DummyLock.release
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 130
    functionName: scrapy.http.cookies.WrappedRequest.get_full_url
    functionSourceFile: scrapy.http.cookies
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 133
    functionName: scrapy.http.cookies.WrappedRequest.get_host
    functionSourceFile: scrapy.http.cookies
    functionUses: 1
    functionsReached:
    - scrapy.utils.httpobj.urlparse_cached
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 136
    functionName: scrapy.http.cookies.WrappedRequest.get_type
    functionSourceFile: scrapy.http.cookies
    functionUses: 1
    functionsReached:
    - scrapy.utils.httpobj.urlparse_cached
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 139
    functionName: scrapy.http.cookies.WrappedRequest.is_unverifiable
    functionSourceFile: scrapy.http.cookies
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 150
    functionName: scrapy.http.cookies.WrappedRequest.full_url
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - scrapy.http.cookies.WrappedRequest.get_full_url
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 154
    functionName: scrapy.http.cookies.WrappedRequest.host
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - scrapy.http.cookies.WrappedRequest.get_host
    - scrapy.utils.httpobj.urlparse_cached
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 158
    functionName: scrapy.http.cookies.WrappedRequest.type
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - scrapy.http.cookies.WrappedRequest.get_type
    - scrapy.utils.httpobj.urlparse_cached
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 162
    functionName: scrapy.http.cookies.WrappedRequest.unverifiable
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - scrapy.http.cookies.WrappedRequest.is_unverifiable
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 166
    functionName: scrapy.http.cookies.WrappedRequest.origin_req_host
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - scrapy.utils.httpobj.urlparse_cached
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e26ab50>
    argNames:
    - self
    - name
    - default
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 172
    functionName: scrapy.http.cookies.WrappedRequest.get_header
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - typing.cast.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse.decode
    - scrapy.utils.python.to_unicode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 175
    functionName: scrapy.http.cookies.WrappedRequest.header_items
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - typing.cast.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse.decode
    - scrapy.utils.python.to_unicode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - self
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 192
    functionName: scrapy.http.cookies.WrappedResponse.info
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4ce0b430>
    argNames:
    - self
    - name
    - default
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 195
    functionName: scrapy.http.cookies.WrappedResponse.get_all
    functionSourceFile: scrapy.http.cookies
    functionUses: 0
    functionsReached:
    - typing.cast.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse.decode
    - scrapy.utils.python.to_unicode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.httpauth
    functionSourceFile: scrapy.downloadermiddlewares.httpauth
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 28
    functionName: scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.httpauth
    functionUses: 0
    functionsReached:
    - crawler.signals.connect
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 33
    functionName: scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware.spider_opened
    functionSourceFile: scrapy.downloadermiddlewares.httpauth
    functionUses: 0
    functionsReached:
    - w3lib.http.basic_auth_header
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 40
    functionName: scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware.process_request
    functionSourceFile: scrapy.downloadermiddlewares.httpauth
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse
    - <builtin>.any
    - scrapy.utils.url.url_is_from_any_domain
    - typing.cast
    - host.endswith
    - d.lower
    - scrapy.utils.url.parse_url
    - typing.cast.netloc.lower
    - scrapy.utils.python.to_unicode
    - urllib.parse.urlparse.netloc.lower
    - typing.cast.decode
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.httpcompression
    functionSourceFile: scrapy.downloadermiddlewares.httpcompression
    functionUses: 0
    functionsReached:
    - ACCEPTED_ENCODINGS.append
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: ACCEPTED_ENCODINGS.append
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d205820>
    argNames:
    - self
    - stats
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 40
    functionName: scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.httpcompression
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 44
    functionName: scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.httpcompression
    functionUses: 0
    functionsReached:
    - crawler.settings.getbool
    - scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 49
    functionName: scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware.process_request
    functionSourceFile: scrapy.downloadermiddlewares.httpcompression
    functionUses: 0
    functionsReached:
    - request.headers.setdefault
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.headers.setdefault
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 2
    IfCount: 6
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 55
    functionName: scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware.process_response
    functionSourceFile: scrapy.downloadermiddlewares.httpcompression
    functionUses: 0
    functionsReached:
    - scrapy.http.headers.Headers.get
    - urllib.parse.urlunparse.lower
    - urllib.parse.urlparse.scheme.encode
    - gzip.GzipFile.read1
    - typing.cast
    - content_encoding.pop
    - response.replace
    - urllib.parse.urlunparse.encode
    - scrapy.responsetypes.ResponseTypes.from_content_disposition
    - brotli.decompress
    - zlib.decompress
    - scrapy.responsetypes.ResponseTypes.from_args
    - scrapy.responsetypes.ResponseTypes.from_headers
    - scrapy.responsetypes.ResponseTypes.from_content_type
    - scrapy.utils.python.binary_is_text
    - zstandard.ZstdDecompressor
    - scrapy.responsetypes.ResponseTypes.from_filename
    - gzip.GzipFile
    - scrapy.utils.python.to_bytes
    - w3lib.url.parse_data_uri.media_type.split
    - scrapy.utils.python.to_unicode
    - <builtin>.issubclass
    - urllib.parse.urlparse.hostname.lower
    - typing.cast.decode
    - <builtin>.all
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlencode.lower
    - response.headers.getlist
    - urllib.parse.urlparse.netloc.encode
    - output_list.append
    - urllib.parse.urlparse.netloc.lower
    - <builtin>.super
    - reader.read
    - <builtin>.dict
    - urllib.parse.urlparse.scheme.lower
    - scrapy.utils.gz.gunzip
    - scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware._decode
    - typing.cast.split
    - scrapy.responsetypes.ResponseTypes.from_mimetype
    - <builtin>.len
    - encoding.lower
    - twisted.internet.protocol.ClientFactory._url.lower
    - twisted.internet.protocol.ClientFactory._url.encode
    - io.BytesIO
    - urllib.parse.urlparse.split
    - urllib.parse.urlparse.hostname.encode
    - scrapy.responsetypes.ResponseTypes.from_body
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: response.headers.getlist
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: content_encoding.pop
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: encoding.lower
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 0
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - body
    - encoding
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 88
    functionName: scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware._decode
    functionSourceFile: scrapy.downloadermiddlewares.httpcompression
    functionUses: 1
    functionsReached:
    - reader.read
    - scrapy.utils.gz.gunzip
    - zstandard.ZstdDecompressor
    - gzip.GzipFile.read1
    - gzip.GzipFile
    - io.BytesIO
    - output_list.append
    - brotli.decompress
    - zlib.decompress
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: response.replace
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: zlib.decompress
    functionSourceFile: zlib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: brotli.decompress
    functionSourceFile: brotli
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: zstandard.ZstdDecompressor
    functionSourceFile: zstandard
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: reader.read
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.redirect
    functionSourceFile: scrapy.downloadermiddlewares.redirect
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - source_request
    - url
    - kwargs
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 24
    functionName: scrapy.downloadermiddlewares.redirect._build_redirect_request
    functionSourceFile: scrapy.downloadermiddlewares.redirect
    functionUses: 3
    functionsReached:
    - source_request.replace
    - scrapy.utils.httpobj.urlparse_cached
    - urllib.parse.urlparse
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: source_request.replace
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 43
    functionName: scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.redirect
    functionUses: 1
    functionsReached:
    - settings.getint
    - settings.getbool
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 51
    functionName: scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.redirect
    functionUses: 0
    functionsReached:
    - settings.getbool
    - settings.getint
    - scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - redirected
    - request
    - spider
    - reason
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 54
    functionName: scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware._redirect
    functionSourceFile: scrapy.downloadermiddlewares.redirect
    functionUses: 2
    functionsReached:
    - request.meta.get
    - request.meta.setdefault
    - logger.debug
    linkageType: pythonLinkage
    raised:
    - IgnoreRequest
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.meta.setdefault
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - redirect_url
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 84
    functionName: scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware._redirect_request_using_get
    functionSourceFile: scrapy.downloadermiddlewares.redirect
    functionUses: 2
    functionsReached:
    - scrapy.downloadermiddlewares.redirect._build_redirect_request
    - redirect_request.headers.pop
    - source_request.replace
    - urllib.parse.urlparse
    - scrapy.utils.httpobj.urlparse_cached
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: redirect_request.headers.pop
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 0
    IfCount: 4
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 104
    functionName: scrapy.downloadermiddlewares.redirect.RedirectMiddleware.process_response
    functionSourceFile: scrapy.downloadermiddlewares.redirect
    functionUses: 0
    functionsReached:
    - scrapy.downloadermiddlewares.redirect._build_redirect_request
    - w3lib.url.safe_url_string
    - logger.debug
    - request.meta.get
    - request.meta.setdefault
    - redirect_request.headers.pop
    - scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware._redirect
    - source_request.replace
    - scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware._redirect_request_using_get
    - <builtin>.getattr
    - urllib.parse.urlparse
    - urllib.parse.urljoin
    - urllib.parse.urlparse.scheme.lstrip
    - scrapy.utils.httpobj.urlparse_cached
    - w3lib.url.safe_url_string.lstrip
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.parse.urlparse.scheme.lstrip
    functionSourceFile: urllib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.url.safe_url_string.lstrip
    functionSourceFile: w3lib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 138
    functionName: scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.redirect
    functionUses: 0
    functionsReached:
    - settings.getlist
    - settings.getint
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 143
    functionName: scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware.process_response
    functionSourceFile: scrapy.downloadermiddlewares.redirect
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - scrapy.downloadermiddlewares.redirect._build_redirect_request
    - logger.debug
    - request.meta.get
    - request.meta.setdefault
    - redirect_request.headers.pop
    - typing.cast
    - w3lib.html.get_meta_refresh
    - source_request.replace
    - scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware._redirect
    - scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware._redirect_request_using_get
    - urllib.parse.urlparse
    - scrapy.utils.response.get_meta_refresh
    - scrapy.utils.httpobj.urlparse_cached
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.robotstxt
    functionSourceFile: scrapy.downloadermiddlewares.robotstxt
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 36
    functionName: scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.robotstxt
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - crawler.settings.get
    - crawler.settings.getbool
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 53
    functionName: scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.robotstxt
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - typing.cast.rindex
    - crawler.settings.get
    - crawler.settings.getbool
    - <builtin>.callable
    - scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.__init__
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 56
    functionName: scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.process_request
    functionSourceFile: scrapy.downloadermiddlewares.robotstxt
    functionUses: 0
    functionsReached:
    - request.meta.get
    - d.addCallback
    - request.url.startswith
    - twisted.internet.defer.maybeDeferred
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.url.startswith
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 2
    IfCount: 3
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - rp
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 65
    functionName: scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.process_request_2
    functionSourceFile: scrapy.downloadermiddlewares.robotstxt
    functionUses: 0
    functionsReached:
    - request.headers.get
    - rp.allowed
    - logger.debug
    linkageType: pythonLinkage
    raised:
    - IgnoreRequest
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: rp.allowed
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 5
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 85
    functionName: scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.robot_parser
    functionSourceFile: scrapy.downloadermiddlewares.robotstxt
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.scheme.encode
    - scrapy.http.request.Request._set_body
    - urllib.parse.urlunparse.encode
    - w3lib.url.safe_url_string.startswith
    - scrapy.http.request.Request._set_url
    - urllib.parse.urldefrag
    - <builtin>.list
    - frag.startswith
    - scrapy.utils.python.to_bytes
    - <builtin>.callable
    - <builtin>.isinstance
    - w3lib.url.safe_url_string
    - scrapy.http.headers.Headers.__init__
    - scrapy.utils.url.escape_ajax
    - twisted.internet.defer.Deferred
    - dfd.addErrback
    - parser.addCallback
    - urllib.parse.urlparse.netloc.encode
    - scrapy.utils.httpobj.urlparse_cached
    - <builtin>.super
    - <builtin>.dict
    - <builtin>.str
    - dfd.addCallback
    - twisted.internet.protocol.ClientFactory._url.encode
    - scrapy.http.request.Request.__init__
    - urllib.parse.urlparse
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - result
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 112
    functionName: scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.robot_parser.cb
    functionSourceFile: scrapy.downloadermiddlewares.robotstxt
    functionUses: 0
    functionsReached:
    - d.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: parser.addCallback
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - failure
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 120
    functionName: scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware._logerror
    functionSourceFile: scrapy.downloadermiddlewares.robotstxt
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - typing.cast
    - logger.error
    - scrapy.utils.log.failure_to_exc_info
    - failure.getTracebackObject
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - response
    - netloc
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 130
    functionName: scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware._parse_robots
    functionSourceFile: scrapy.downloadermiddlewares.robotstxt
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - rp_dfd.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: rp_dfd.callback
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - failure
    - netloc
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 142
    functionName: scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware._robots_error
    functionSourceFile: scrapy.downloadermiddlewares.robotstxt
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - rp_dfd.callback
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.useragent
    functionSourceFile: scrapy.downloadermiddlewares.useragent
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4e0c7e50>
    argNames:
    - self
    - user_agent
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 19
    functionName: scrapy.downloadermiddlewares.useragent.UserAgentMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.useragent
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 23
    functionName: scrapy.downloadermiddlewares.useragent.UserAgentMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.useragent
    functionUses: 0
    functionsReached:
    - crawler.signals.connect
    - scrapy.downloadermiddlewares.useragent.UserAgentMiddleware.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 28
    functionName: scrapy.downloadermiddlewares.useragent.UserAgentMiddleware.spider_opened
    functionSourceFile: scrapy.downloadermiddlewares.useragent
    functionUses: 0
    functionsReached:
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 31
    functionName: scrapy.downloadermiddlewares.useragent.UserAgentMiddleware.process_request
    functionSourceFile: scrapy.downloadermiddlewares.useragent
    functionUses: 0
    functionsReached:
    - request.headers.setdefault
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.httpproxy
    functionSourceFile: scrapy.downloadermiddlewares.httpproxy
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4cbb61c0>
    argNames:
    - self
    - auth_encoding
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 25
    functionName: scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.httpproxy
    functionUses: 1
    functionsReached:
    - urllib.request.getproxies
    - <builtin>.isinstance
    - urllib.parse.unquote
    - base64.b64encode
    - urllib.request.getproxies.items
    - urllib.parse.urlunparse
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.request._parse_proxy
    - urllib.parse.urlparse.hostname.encode
    - scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._basic_auth_header
    - scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._get_proxy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.request.getproxies
    functionSourceFile: urllib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.request.getproxies.items
    functionSourceFile: urllib
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - url
    - orig_type
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 49
    functionName: scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._get_proxy
    functionSourceFile: scrapy.downloadermiddlewares.httpproxy
    functionUses: 3
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.unquote
    - base64.b64encode
    - urllib.parse.urlunparse
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.request._parse_proxy
    - urllib.parse.urlparse.hostname.encode
    - scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._basic_auth_header
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 5
    functionLinenumber: 37
    functionName: scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.httpproxy
    functionUses: 0
    functionsReached:
    - urllib.request.getproxies
    - <builtin>.isinstance
    - urllib.parse.unquote
    - base64.b64encode
    - urllib.request.getproxies.items
    - urllib.parse.urlunparse
    - urllib.parse.urlparse.scheme.encode
    - scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware.__init__
    - scrapy.utils.python.to_bytes
    - crawler.settings.get
    - crawler.settings.getbool
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    - urllib.request._parse_proxy
    - scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._basic_auth_header
    - scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._get_proxy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - username
    - password
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 43
    functionName: scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._basic_auth_header
    functionSourceFile: scrapy.downloadermiddlewares.httpproxy
    functionUses: 4
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.unquote
    - base64.b64encode
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: base64.b64encode
    functionSourceFile: base64
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.request._parse_proxy
    functionSourceFile: urllib
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 60
    functionName: scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware.process_request
    functionSourceFile: scrapy.downloadermiddlewares.httpproxy
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.unquote
    - base64.b64encode
    - urllib.parse.urlunparse
    - scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._set_proxy_and_creds
    - request.meta.get
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse
    - urllib.parse.urlparse.hostname.encode
    - urllib.request._parse_proxy
    - scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._basic_auth_header
    - urllib.request.proxy_bypass
    - scrapy.utils.httpobj.urlparse_cached
    - scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._get_proxy
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: urllib.request.proxy_bypass
    functionSourceFile: urllib
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 8
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 12
    ICount: 0
    IfCount: 8
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - proxy_url
    - creds
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 80
    functionName: scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._set_proxy_and_creds
    functionSourceFile: scrapy.downloadermiddlewares.httpproxy
    functionUses: 1
    functionsReached:
    - request.meta.get
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.stats
    functionSourceFile: scrapy.downloadermiddlewares.stats
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 1
    argDefaultValues: []
    argNames:
    - headers
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 20
    functionName: scrapy.downloadermiddlewares.stats.get_header_size
    functionSourceFile: scrapy.downloadermiddlewares.stats
    functionUses: 1
    functionsReached:
    - headers.items
    - <builtin>.isinstance
    - <builtin>.len
    - headers.keys
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: headers.keys
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - response_status
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 29
    functionName: scrapy.downloadermiddlewares.stats.get_status_size
    functionSourceFile: scrapy.downloadermiddlewares.stats
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - <builtin>.len
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - twisted.web.http.RESPONSES.get
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - stats
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 35
    functionName: scrapy.downloadermiddlewares.stats.DownloaderStats.__init__
    functionSourceFile: scrapy.downloadermiddlewares.stats
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 39
    functionName: scrapy.downloadermiddlewares.stats.DownloaderStats.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.stats
    functionUses: 0
    functionsReached:
    - crawler.settings.getbool
    - scrapy.downloadermiddlewares.stats.DownloaderStats.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 45
    functionName: scrapy.downloadermiddlewares.stats.DownloaderStats.process_request
    functionSourceFile: scrapy.downloadermiddlewares.stats
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlunparse
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.httpobj.urlparse_cached
    - scrapy.utils.request.request_httprepr
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - <builtin>.len
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - urllib.parse.urlparse
    - urllib.parse.urlparse.hostname.encode
    - request.headers.to_string
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 3
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 56
    functionName: scrapy.downloadermiddlewares.stats.DownloaderStats.process_response
    functionSourceFile: scrapy.downloadermiddlewares.stats
    functionUses: 0
    functionsReached:
    - scrapy.downloadermiddlewares.stats.get_header_size
    - <builtin>.isinstance
    - headers.items
    - scrapy.downloadermiddlewares.stats.get_status_size
    - urllib.parse.urlparse.scheme.encode
    - scrapy.utils.python.to_bytes
    - twisted.internet.protocol.ClientFactory._url.encode
    - <builtin>.len
    - urllib.parse.urlparse.netloc.encode
    - urllib.parse.urlunparse.encode
    - headers.keys
    - twisted.web.http.RESPONSES.get
    - urllib.parse.urlparse.hostname.encode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - exception
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 73
    functionName: scrapy.downloadermiddlewares.stats.DownloaderStats.process_exception
    functionSourceFile: scrapy.downloadermiddlewares.stats
    functionUses: 0
    functionsReached:
    - scrapy.utils.python.global_object_name
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.retry
    functionSourceFile: scrapy.downloadermiddlewares.retry
    functionUses: 0
    functionsReached:
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - name
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 6
    functionLinenumber: 35
    functionName: scrapy.downloadermiddlewares.retry.backwards_compatibility_getattr
    functionSourceFile: scrapy.downloadermiddlewares.retry
    functionUses: 0
    functionsReached:
    - key.isupper
    - scrapy.settings.BaseSettings.getlist
    - typing.cast
    - <builtin>.max
    - scrapy.settings.BaseSettings.get
    - scrapy.settings.BaseSettings.update
    - importlib.import_module
    - typing.cast.items
    - urllib.parse.urlparse.rindex
    - <builtin>.list
    - json.loads
    - value.split
    - <builtin>.callable
    - scrapy.settings.BaseSettings.set
    - scrapy.settings.BaseSettings.__init__
    - <builtin>.isinstance
    - scrapy.settings.BaseSettings._assert_mutability
    - scrapy.settings.SettingsAttribute.__init__
    - scrapy.settings.BaseSettings.getpriority
    - warnings.warn
    - <builtin>.super
    - <builtin>.dir
    - scrapy.settings.BaseSettings.maxpriority
    - scrapy.settings.get_settings_priority
    - typing.cast.rindex
    - <builtin>.tuple
    - scrapy.settings.BaseSettings.setmodule
    - <builtin>.len
    - scrapy.settings.Settings.__init__
    - scrapy.utils.misc.load_object
    - typing.cast.getpriority
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised:
    - AttributeError
    returnType: N/A
  - BBCount: 6
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 9
    ICount: 6
    IfCount: 6
    argCount: 7
    argDefaultValues: []
    argNames:
    - request
    - spider
    - reason
    - max_retry_times
    - priority_adjust
    - logger
    - stats_base_key
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 56
    functionName: scrapy.downloadermiddlewares.retry.get_retry_request
    functionSourceFile: scrapy.downloadermiddlewares.retry
    functionUses: 3
    functionsReached:
    - <builtin>.isinstance
    - stats.inc_value
    - request.meta.get
    - scrapy.utils.python.global_object_name
    - request.copy
    - logging.getLogger.error
    - <builtin>.callable
    - settings.getint
    - logging.getLogger.debug
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.getLogger.debug
    functionSourceFile: logging
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.copy
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: stats.inc_value
    functionSourceFile: <builtin>
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: logging.getLogger.error
    functionSourceFile: logging
    functionUses: 4
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 145
    functionName: scrapy.downloadermiddlewares.retry.RetryMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.retry
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - <builtin>.set
    - <builtin>.int
    - settings.getbool
    - typing.cast.rindex
    - <builtin>.tuple
    - settings.getlist
    - <builtin>.callable
    - settings.getint
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 164
    functionName: scrapy.downloadermiddlewares.retry.RetryMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.retry
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - scrapy.downloadermiddlewares.retry.RetryMiddleware.__init__
    - <builtin>.set
    - <builtin>.int
    - settings.getbool
    - typing.cast.rindex
    - <builtin>.tuple
    - settings.getlist
    - <builtin>.callable
    - settings.getint
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 0
    IfCount: 2
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 167
    functionName: scrapy.downloadermiddlewares.retry.RetryMiddleware.process_response
    functionSourceFile: scrapy.downloadermiddlewares.retry
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - scrapy.utils.response.response_status_message
    - <builtin>.isinstance
    - stats.inc_value
    - scrapy.downloadermiddlewares.retry.RetryMiddleware._retry
    - <builtin>.int
    - request.meta.get
    - scrapy.utils.python.global_object_name
    - request.copy
    - <builtin>.callable
    - logging.getLogger.error
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - settings.getint
    - logging.getLogger.debug
    - twisted.web.http.RESPONSES.get
    - scrapy.downloadermiddlewares.retry.get_retry_request
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - reason
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 186
    functionName: scrapy.downloadermiddlewares.retry.RetryMiddleware._retry
    functionSourceFile: scrapy.downloadermiddlewares.retry
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - stats.inc_value
    - request.meta.get
    - scrapy.utils.python.global_object_name
    - request.copy
    - logging.getLogger.error
    - <builtin>.callable
    - settings.getint
    - logging.getLogger.debug
    - scrapy.downloadermiddlewares.retry.get_retry_request
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - exception
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 177
    functionName: scrapy.downloadermiddlewares.retry.RetryMiddleware.process_exception
    functionSourceFile: scrapy.downloadermiddlewares.retry
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - stats.inc_value
    - scrapy.downloadermiddlewares.retry.RetryMiddleware._retry
    - request.meta.get
    - scrapy.utils.python.global_object_name
    - request.copy
    - logging.getLogger.error
    - <builtin>.callable
    - settings.getint
    - logging.getLogger.debug
    - scrapy.downloadermiddlewares.retry.get_retry_request
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.downloadtimeout
    functionSourceFile: scrapy.downloadermiddlewares.downloadtimeout
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4f07b760>
    argNames:
    - self
    - timeout
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 20
    functionName: scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.downloadtimeout
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 24
    functionName: scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.downloadtimeout
    functionUses: 0
    functionsReached:
    - crawler.signals.connect
    - scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware.__init__
    - crawler.settings.getfloat
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 29
    functionName: scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware.spider_opened
    functionSourceFile: scrapy.downloadermiddlewares.downloadtimeout
    functionUses: 0
    functionsReached:
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 32
    functionName: scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware.process_request
    functionSourceFile: scrapy.downloadermiddlewares.downloadtimeout
    functionUses: 0
    functionsReached:
    - request.meta.setdefault
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.cookies
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 0
    functionsReached:
    - tldextract.TLDExtract
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: tldextract.TLDExtract
    functionSourceFile: tldextract
    functionUses: 5
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 1
    argDefaultValues: []
    argNames:
    - domain
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 38
    functionName: scrapy.downloadermiddlewares.cookies._is_public_domain
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 3
    functionsReached:
    - tldextract.TLDExtract
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues:
    - <ast.Constant object at 0x7f9a4d3e5850>
    argNames:
    - self
    - debug
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 46
    functionName: scrapy.downloadermiddlewares.cookies.CookiesMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 1
    functionsReached:
    - collections.defaultdict
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 51
    functionName: scrapy.downloadermiddlewares.cookies.CookiesMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 0
    functionsReached:
    - collections.defaultdict
    - crawler.settings.getbool
    - scrapy.downloadermiddlewares.cookies.CookiesMiddleware.__init__
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 1
    IfCount: 3
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - cookies
    - jar
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 56
    functionName: scrapy.downloadermiddlewares.cookies.CookiesMiddleware._process_cookies
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 2
    functionsReached:
    - urllib.parse.urlparse
    - tldextract.TLDExtract
    - scrapy.downloadermiddlewares.cookies._is_public_domain
    - jar.set_cookie_if_ok
    - cookie_domain.startswith
    - scrapy.utils.httpobj.urlparse_cached
    - hostname.lower
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cookie_domain.startswith
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: hostname.lower
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: jar.set_cookie_if_ok
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 4
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 4
    functionLinenumber: 75
    functionName: scrapy.downloadermiddlewares.cookies.CookiesMiddleware.process_request
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 0
    functionsReached:
    - request.headers.getlist
    - request.headers.pop
    - scrapy.downloadermiddlewares.cookies.CookiesMiddleware._get_request_cookies
    - request.meta.get
    - request.cookies.items
    - scrapy.downloadermiddlewares.cookies.CookiesMiddleware._process_cookies
    - scrapy.downloadermiddlewares.cookies._is_public_domain
    - scrapy.http.response.Response.__init__
    - cookie_domain.startswith
    - decoded.pop
    - logger.debug
    - <builtin>.int
    - <builtin>.list
    - tldextract.TLDExtract
    - scrapy.http.response.Response._set_url
    - decoded.items
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    - scrapy.downloadermiddlewares.cookies.CookiesMiddleware._format_cookie
    - cookie.get
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - jar.add_cookie_header
    - urllib.parse.urlparse
    - scrapy.http.headers.Headers.__init__
    - logger.warning
    - jar.make_cookies
    - scrapy.utils.httpobj.urlparse_cached
    - <builtin>.super
    - <builtin>.str
    - scrapy.http.response.Response._set_body
    - jar.set_cookie_if_ok
    - scrapy.downloadermiddlewares.cookies.CookiesMiddleware._debug_cookie
    - <builtin>.filter
    - key.capitalize
    - hostname.lower
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - jar
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 161
    functionName: scrapy.downloadermiddlewares.cookies.CookiesMiddleware._get_request_cookies
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - decoded.pop
    - <builtin>.int
    - <builtin>.list
    - scrapy.http.headers.Headers.__init__
    - request.cookies.items
    - scrapy.http.response.Response._set_body
    - <builtin>.str
    - scrapy.http.response.Response._set_url
    - logger.warning
    - decoded.items
    - jar.make_cookies
    - <builtin>.filter
    - scrapy.http.response.Response.__init__
    - scrapy.downloadermiddlewares.cookies.CookiesMiddleware._format_cookie
    - cookie.get
    - key.capitalize
    - <builtin>.super
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: jar.add_cookie_header
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 108
    functionName: scrapy.downloadermiddlewares.cookies.CookiesMiddleware._debug_cookie
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - request.headers.getlist
    - <builtin>.isinstance
    - logger.debug
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 2
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 92
    functionName: scrapy.downloadermiddlewares.cookies.CookiesMiddleware.process_response
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 0
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - urllib.parse.urlparse
    - logger.debug
    - request.meta.get
    - tldextract.TLDExtract
    - scrapy.downloadermiddlewares.cookies.CookiesMiddleware._process_cookies
    - response.headers.getlist
    - scrapy.downloadermiddlewares.cookies.CookiesMiddleware._debug_set_cookie
    - jar.make_cookies
    - scrapy.downloadermiddlewares.cookies._is_public_domain
    - scrapy.utils.python.to_unicode
    - jar.set_cookie_if_ok
    - typing.cast.decode
    - cookie_domain.startswith
    - scrapy.utils.httpobj.urlparse_cached
    - hostname.lower
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: jar.make_cookies
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 119
    functionName: scrapy.downloadermiddlewares.cookies.CookiesMiddleware._debug_set_cookie
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 1
    functionsReached:
    - urllib.parse.urlparse.decode
    - <builtin>.isinstance
    - logger.debug
    - response.headers.getlist
    - scrapy.utils.python.to_unicode
    - typing.cast.decode
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 5
    ICount: 3
    IfCount: 3
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - cookie
    - request
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 130
    functionName: scrapy.downloadermiddlewares.cookies.CookiesMiddleware._format_cookie
    functionSourceFile: scrapy.downloadermiddlewares.cookies
    functionUses: 2
    functionsReached:
    - <builtin>.isinstance
    - decoded.pop
    - <builtin>.str
    - logger.warning
    - decoded.items
    - cookie.get
    - key.capitalize
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cookie.get
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: decoded.pop
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: decoded.items
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: key.capitalize
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: <builtin>.filter
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.ajaxcrawl
    functionSourceFile: scrapy.downloadermiddlewares.ajaxcrawl
    functionUses: 0
    functionsReached:
    - re.compile
    - logging.getLogger
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - settings
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 28
    functionName: scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.ajaxcrawl
    functionUses: 1
    functionsReached:
    - settings.getint
    - settings.getbool
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 39
    functionName: scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.ajaxcrawl
    functionUses: 0
    functionsReached:
    - settings.getint
    - scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware.__init__
    - settings.getbool
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 4
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 7
    ICount: 1
    IfCount: 4
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 42
    functionName: scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware.process_response
    functionSourceFile: scrapy.downloadermiddlewares.ajaxcrawl
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - w3lib.html.replace_entities
    - w3lib.html.remove_comments
    - logger.debug
    - _ajax_crawlable_re.search
    - scrapy.downloadermiddlewares.ajaxcrawl._has_ajaxcrawlable_meta
    - w3lib.html.remove_tags_with_content
    - scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware._has_ajax_crawlable_variant
    - request.replace
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - response
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 69
    functionName: scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware._has_ajax_crawlable_variant
    functionSourceFile: scrapy.downloadermiddlewares.ajaxcrawl
    functionUses: 1
    functionsReached:
    - w3lib.html.replace_entities
    - w3lib.html.remove_comments
    - _ajax_crawlable_re.search
    - scrapy.downloadermiddlewares.ajaxcrawl._has_ajaxcrawlable_meta
    - w3lib.html.remove_tags_with_content
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 1
    IfCount: 2
    argCount: 1
    argDefaultValues: []
    argNames:
    - text
    argTypes:
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 84
    functionName: scrapy.downloadermiddlewares.ajaxcrawl._has_ajaxcrawlable_meta
    functionSourceFile: scrapy.downloadermiddlewares.ajaxcrawl
    functionUses: 2
    functionsReached:
    - w3lib.html.remove_tags_with_content
    - w3lib.html.replace_entities
    - w3lib.html.remove_comments
    - _ajax_crawlable_re.search
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.html.remove_tags_with_content
    functionSourceFile: w3lib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.html.replace_entities
    functionSourceFile: w3lib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: w3lib.html.remove_comments
    functionSourceFile: w3lib
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: _ajax_crawlable_re.search
    functionSourceFile: <builtin>
    functionUses: 3
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.defaultheaders
    functionSourceFile: scrapy.downloadermiddlewares.defaultheaders
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - headers
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 21
    functionName: scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.defaultheaders
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 25
    functionName: scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.defaultheaders
    functionUses: 0
    functionsReached:
    - headers.items
    - <builtin>.isinstance
    - scrapy.utils.python.without_none_values
    - scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware.__init__
    - iterable.items
    - <builtin>.type
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 29
    functionName: scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware.process_request
    functionSourceFile: scrapy.downloadermiddlewares.defaultheaders
    functionUses: 0
    functionsReached:
    - request.headers.setdefault
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares.httpcache
    functionSourceFile: scrapy.downloadermiddlewares.httpcache
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 0
    IfCount: 1
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - settings
    - stats
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 2
    functionLinenumber: 47
    functionName: scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.__init__
    functionSourceFile: scrapy.downloadermiddlewares.httpcache
    functionUses: 1
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - settings.getbool
    - typing.cast.rindex
    - typing.cast
    - urllib.parse.urlparse
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 2
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - cls
    - crawler
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 3
    functionLinenumber: 56
    functionName: scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.from_crawler
    functionSourceFile: scrapy.downloadermiddlewares.httpcache
    functionUses: 0
    functionsReached:
    - <builtin>.isinstance
    - urllib.parse.urlparse.rindex
    - settings.getbool
    - crawler.signals.connect
    - typing.cast.rindex
    - scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.__init__
    - typing.cast
    - urllib.parse.urlparse
    - <builtin>.callable
    - scrapy.utils.misc.load_object
    - importlib.import_module
    - <builtin>.getattr
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 63
    functionName: scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.spider_opened
    functionSourceFile: scrapy.downloadermiddlewares.httpcache
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 1
    IfCount: 0
    argCount: 2
    argDefaultValues: []
    argNames:
    - self
    - spider
    argTypes:
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 66
    functionName: scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.spider_closed
    functionSourceFile: scrapy.downloadermiddlewares.httpcache
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 4
    IfCount: 5
    argCount: 3
    argDefaultValues: []
    argNames:
    - self
    - request
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 69
    functionName: scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.process_request
    functionSourceFile: scrapy.downloadermiddlewares.httpcache
    functionUses: 0
    functionsReached:
    - request.meta.get
    - cachedresponse.flags.append
    linkageType: pythonLinkage
    raised:
    - IgnoreRequest
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: cachedresponse.flags.append
    functionSourceFile: <builtin>
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 8
    ICount: 6
    IfCount: 5
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - response
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 103
    functionName: scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.process_response
    functionSourceFile: scrapy.downloadermiddlewares.httpcache
    functionUses: 0
    functionsReached:
    - request.meta.pop
    - request.meta.get
    - email.utils.formatdate
    - scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware._cache_response
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: request.meta.pop
    functionSourceFile: <builtin>
    functionUses: 2
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 3
    IfCount: 1
    argCount: 5
    argDefaultValues: []
    argNames:
    - self
    - spider
    - response
    - request
    - cachedresponse
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: 145
    functionName: scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware._cache_response
    functionSourceFile: ''
    functionUses: 1
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 2
    ICount: 1
    IfCount: 1
    argCount: 4
    argDefaultValues: []
    argNames:
    - self
    - request
    - exception
    - spider
    argTypes:
    - N/A
    - N/A
    - N/A
    - N/A
    constantsTouched: []
    functionDepth: 1
    functionLinenumber: 134
    functionName: scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.process_exception
    functionSourceFile: scrapy.downloadermiddlewares.httpcache
    functionUses: 0
    functionsReached:
    - request.meta.pop
    - <builtin>.isinstance
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  - BBCount: 0
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 1
    ICount: 0
    IfCount: 0
    argCount: 0
    argDefaultValues: []
    argNames: []
    argTypes: []
    constantsTouched: []
    functionDepth: 0
    functionLinenumber: -1
    functionName: scrapy.downloadermiddlewares
    functionSourceFile: scrapy.downloadermiddlewares
    functionUses: 0
    functionsReached: []
    linkageType: pythonLinkage
    raised: []
    returnType: N/A
  Function list name: All functions
Function coverage:
  '...fuzz_crawl':
  - 48
  - 49
  '...fuzz_crawl.TestOneInput':
  - 33
  - 36
  - 37
  - 29
  - 30
  '...fuzz_crawl.main':
  - 43
  - 44
  - 45
  scrapy:
  - 32
  - 1
  - 37
  - 38
  - 39
  - 43
  - 31
  scrapy.__main__:
  - 3
  - 4
  scrapy.addons:
  - 9
  - 12
  scrapy.addons.AddonManager:
  - 16
  scrapy.addons.AddonManager.load_settings:
  - 32
  - 34
  - 35
  - 36
  - 37
  - 39
  - 40
  - 45
  - 23
  scrapy.cmdline:
  - 184
  - 189
  - 182
  scrapy.cmdline.ScrapyArgumentParser._parse_optional:
  - 20
  - 23
  scrapy.cmdline._get_commands_dict:
  - 65
  - 66
  - 68
  - 69
  scrapy.cmdline._get_commands_from_entry_points:
  - 51
  - 52
  - 54
  - 55
  - 56
  - 57
  - 58
  scrapy.cmdline._get_commands_from_module:
  - 42
  - 43
  - 44
  - 45
  scrapy.cmdline._iter_command_classes:
  - 32
  - 33
  - 37
  - 29
  - 30
  - 31
  scrapy.cmdline._pop_command_name:
  - 75
  - 76
  scrapy.cmdline._print_commands:
  - 96
  - 97
  - 98
  - 99
  - 100
  - 101
  - 102
  - 103
  - 92
  - 93
  - 94
  - 95
  scrapy.cmdline._print_header:
  - 88
  - 84
  - 85
  scrapy.cmdline._print_unknown_command:
  - 107
  - 108
  - 109
  scrapy.cmdline._run_command:
  - 169
  - 166
  - 167
  scrapy.cmdline._run_command_profiled:
  - 173
  - 174
  - 175
  - 176
  - 177
  - 178
  - 179
  scrapy.cmdline._run_print_help:
  - 114
  - 116
  - 117
  - 118
  - 119
  - 120
  scrapy.cmdline.execute:
  - 128
  - 137
  - 138
  - 139
  - 140
  - 141
  - 142
  - 143
  - 144
  - 145
  - 148
  - 150
  - 152
  - 154
  - 156
  - 157
  - 158
  - 160
  - 161
  - 162
  - 124
  - 127
  scrapy.commands:
  - 1
  scrapy.commands.BaseRunSpiderCommand:
  - 127
  scrapy.commands.BaseRunSpiderCommand.add_options:
  - 132
  - 133
  - 141
  - 149
  - 157
  scrapy.commands.BaseRunSpiderCommand.process_options:
  - 165
  - 167
  - 170
  - 171
  - 177
  scrapy.commands.ScrapyCommand.add_options:
  - 64
  - 67
  - 74
  - 77
  - 92
  - 83
  - 84
  - 60
  - 63
  scrapy.commands.ScrapyCommand.help:
  - 57
  - 53
  scrapy.commands.ScrapyCommand.long_desc:
  - 50
  - 46
  scrapy.commands.ScrapyCommand.process_options:
  - 96
  - 100
  - 101
  - 102
  - 104
  - 105
  - 106
  - 108
  - 109
  - 111
  - 112
  - 113
  - 116
  - 117
  scrapy.commands.ScrapyCommand.run:
  - 120
  scrapy.commands.ScrapyCommand.set_crawler:
  - 29
  scrapy.commands.ScrapyCommand.short_desc:
  - 40
  scrapy.commands.ScrapyCommand.syntax:
  - 34
  scrapy.commands.ScrapyHelpFormatter:
  - 181
  scrapy.commands.ScrapyHelpFormatter.__init__:
  - 186
  scrapy.commands.ScrapyHelpFormatter._join_parts:
  - 194
  - 195
  scrapy.commands.ScrapyHelpFormatter.format_part_strings:
  - 198
  - 201
  - 202
  - 204
  - 206
  - 208
  - 209
  - 210
  scrapy.commands.bench.Command.run:
  - 24
  - 22
  - 23
  scrapy.commands.bench._BenchServer.__enter__:
  - 32
  - 33
  scrapy.commands.bench._BenchServer.__exit__:
  - 36
  - 37
  - 38
  scrapy.commands.bench._BenchSpider:
  - 48
  - 42
  scrapy.commands.bench._BenchSpider.parse:
  - 56
  - 57
  scrapy.commands.bench._BenchSpider.start_requests:
  - 52
  - 53
  scrapy.commands.check.Command.add_options:
  - 52
  - 53
  - 60
  scrapy.commands.check.Command.run:
  - 71
  - 72
  - 73
  - 74
  - 77
  - 81
  - 82
  - 83
  - 84
  - 86
  - 87
  - 88
  - 89
  - 90
  - 91
  - 94
  - 95
  - 96
  - 98
  - 99
  - 100
  - 102
  - 103
  - 104
  - 106
  - 107
  - 108
  scrapy.commands.check.Command.run.<lambda1>:
  - 84
  scrapy.commands.check.TextTestResult.printSummary:
  - 33
  - 35
  - 36
  - 38
  - 20
  - 21
  - 22
  - 25
  - 26
  - 27
  - 28
  - 29
  - 30
  - 31
  scrapy.commands.crawl.Command.run:
  - 32
  - 34
  - 15
  - 17
  - 23
  - 25
  - 30
  scrapy.commands.edit.Command._err:
  - 25
  scrapy.commands.edit.Command.run:
  - 34
  - 36
  - 39
  - 40
  - 29
  scrapy.commands.fetch.Command._print_bytes:
  - 61
  scrapy.commands.fetch.Command._print_headers:
  - 48
  - 49
  - 50
  scrapy.commands.fetch.Command._print_response:
  - 53
  - 54
  - 55
  - 56
  - 58
  scrapy.commands.fetch.Command.add_options:
  - 32
  - 33
  - 39
  - 31
  scrapy.commands.fetch.Command.run:
  - 64
  - 66
  - 74
  - 75
  - 82
  - 83
  - 85
  - 86
  - 87
  scrapy.commands.genspider.Command._find_template:
  - 152
  - 148
  - 149
  - 151
  scrapy.commands.genspider.Command._genspider:
  - 131
  - 132
  - 133
  - 136
  - 138
  - 139
  - 140
  - 144
  - 145
  - 119
  - 120
  - 121
  - 123
  - 124
  scrapy.commands.genspider.Command._list_templates:
  - 156
  - 157
  - 158
  - 159
  scrapy.commands.genspider.Command._spider_exists:
  - 162
  - 164
  - 165
  - 166
  - 175
  - 180
  - 181
  - 185
  - 186
  - 187
  - 189
  - 190
  scrapy.commands.genspider.Command.add_options:
  - 68
  - 75
  - 82
  - 53
  - 54
  - 61
  scrapy.commands.genspider.Command.run:
  - 96
  - 98
  - 102
  - 103
  - 105
  - 106
  - 109
  - 112
  - 113
  - 114
  - 115
  - 116
  - 90
  - 91
  - 93
  - 94
  - 95
  scrapy.commands.genspider.Command.templates_dir:
  - 197
  - 198
  - 199
  scrapy.commands.genspider.extract_domain:
  - 27
  - 28
  - 29
  - 30
  scrapy.commands.genspider.sanitize_module_name:
  - 16
  - 20
  - 21
  scrapy.commands.genspider.verify_url_scheme:
  - 35
  - 36
  - 37
  - 38
  - 39
  scrapy.commands.list.Command.run:
  - 12
  - 13
  scrapy.commands.parse:
  - 21
  scrapy.commands.parse.Command._get_callback:
  - 257
  - 259
  - 260
  - 262
  - 263
  - 264
  - 272
  - 273
  - 274
  scrapy.commands.parse.Command._get_items_and_requests:
  - 184
  - 185
  - 186
  - 187
  - 188
  scrapy.commands.parse.Command.add_items:
  - 137
  scrapy.commands.parse.Command.add_options:
  - 68
  - 100
  - 40
  - 41
  - 75
  - 47
  - 81
  - 50
  - 87
  - 56
  - 92
  - 62
  scrapy.commands.parse.Command.add_requests:
  - 141
  scrapy.commands.parse.Command.get_callback_from_rules:
  - 202
  - 197
  - 198
  - 199
  scrapy.commands.parse.Command.handle_exception:
  - 120
  - 118
  scrapy.commands.parse.Command.iterate_spider_output:
  - 128
  - 130
  - 131
  - 132
  - 134
  - 124
  - 125
  - 126
  scrapy.commands.parse.Command.max_level:
  - 111
  - 112
  - 113
  - 114
  - 115
  scrapy.commands.parse.Command.prepare_request:
  - 299
  - 300
  - 303
  - 304
  - 308
  - 309
  - 310
  scrapy.commands.parse.Command.prepare_request.callback:
  - 288
  - 293
  - 294
  - 295
  - 285
  scrapy.commands.parse.Command.print_items:
  - 145
  - 146
  - 148
  - 150
  - 151
  scrapy.commands.parse.Command.print_requests:
  - 160
  - 162
  - 163
  - 154
  - 155
  - 156
  scrapy.commands.parse.Command.print_results:
  - 168
  - 169
  - 170
  - 171
  - 172
  - 173
  - 174
  - 176
  - 177
  - 178
  - 179
  - 180
  scrapy.commands.parse.Command.process_options:
  - 315
  - 317
  - 318
  scrapy.commands.parse.Command.process_request_cb_kwargs:
  - 332
  - 334
  scrapy.commands.parse.Command.process_request_meta:
  - 321
  - 323
  scrapy.commands.parse.Command.run:
  - 352
  - 353
  - 354
  - 344
  - 350
  scrapy.commands.parse.Command.run_callback:
  - 193
  scrapy.commands.parse.Command.scraped_data:
  - 238
  - 240
  - 241
  - 242
  - 243
  - 246
  - 247
  scrapy.commands.parse.Command.set_spidercls:
  - 225
  - 210
  - 212
  - 214
  - 218
  - 219
  - 220
  scrapy.commands.parse.Command.set_spidercls._start_requests:
  - 223
  scrapy.commands.parse.Command.start_parsing:
  - 229
  - 230
  - 231
  - 233
  - 234
  scrapy.commands.runspider.Command.run:
  - 40
  - 42
  - 43
  - 46
  - 49
  - 50
  - 52
  - 54
  - 55
  - 57
  scrapy.commands.runspider._import_file:
  - 14
  - 15
  - 17
  - 20
  - 22
  scrapy.commands.settings.Command.add_options:
  - 34
  - 40
  - 18
  - 19
  - 22
  - 28
  scrapy.commands.settings.Command.run:
  - 49
  - 50
  - 51
  - 52
  - 54
  - 55
  - 56
  - 57
  - 58
  - 59
  - 60
  - 61
  - 62
  scrapy.commands.shell:
  - 1
  scrapy.commands.shell.Command._start_crawler_thread:
  - 96
  - 91
  scrapy.commands.shell.Command.add_options:
  - 40
  - 45
  - 46
  - 39
  scrapy.commands.shell.Command.run:
  - 64
  - 70
  - 71
  - 72
  - 73
  - 74
  - 79
  - 80
  - 82
  - 83
  - 85
  - 87
  - 88
  - 62
  scrapy.commands.shell.Command.update_vars:
  - 55
  scrapy.commands.startproject:
  - 22
  scrapy.commands.startproject.Command._copytree:
  - 66
  - 67
  - 69
  - 70
  - 72
  - 73
  - 78
  - 79
  - 81
  - 82
  - 84
  - 85
  - 57
  scrapy.commands.startproject.Command._is_valid_name:
  - 50
  - 51
  - 45
  - 46
  scrapy.commands.startproject.Command._is_valid_name._module_exists:
  - 42
  scrapy.commands.startproject.Command.run:
  - 128
  - 129
  - 88
  - 93
  - 94
  - 96
  - 98
  - 100
  - 103
  - 107
  - 108
  - 109
  - 110
  - 113
  - 117
  - 120
  - 122
  - 126
  - 127
  scrapy.commands.startproject.Command.templates_dir:
  - 133
  - 134
  - 135
  scrapy.commands.startproject._make_writable:
  - 26
  - 27
  scrapy.commands.version.Command.add_options:
  - 16
  - 17
  scrapy.commands.version.Command.run:
  - 32
  - 26
  - 27
  - 28
  - 29
  - 30
  scrapy.commands.view.Command._print_response:
  - 21
  scrapy.commands.view.Command.add_options:
  - 17
  - 18
  scrapy.contracts.Contract:
  - 15
  scrapy.contracts.Contract.__init__:
  - 20
  - 21
  scrapy.contracts.Contract.add_post_hook:
  - 56
  - 53
  scrapy.contracts.Contract.add_post_hook.wrapper:
  - 64
  - 65
  - 67
  - 69
  - 71
  - 58
  - 59
  - 61
  - 63
  scrapy.contracts.Contract.add_pre_hook:
  - 25
  - 28
  scrapy.contracts.Contract.add_pre_hook.wrapper:
  - 32
  - 33
  - 35
  - 37
  - 39
  - 41
  - 42
  - 44
  - 45
  - 31
  scrapy.contracts.ContractsManager.__init__:
  - 87
  scrapy.contracts.ContractsManager._clean_req:
  - 163
  - 159
  scrapy.contracts.ContractsManager._clean_req.cb_wrapper:
  - 169
  - 170
  - 166
  - 167
  scrapy.contracts.ContractsManager._clean_req.eb_wrapper:
  - 173
  - 174
  - 175
  scrapy.contracts.ContractsManager.extract_contracts:
  - 101
  - 102
  - 104
  - 105
  - 106
  - 108
  scrapy.contracts.ContractsManager.from_method:
  - 128
  - 129
  - 133
  - 140
  - 141
  - 143
  - 146
  - 147
  - 150
  - 151
  - 152
  - 153
  - 155
  - 125
  - 126
  scrapy.contracts.ContractsManager.from_spider:
  - 114
  - 115
  - 117
  - 119
  - 120
  scrapy.contracts.ContractsManager.tested_methods_from_spidercls:
  - 91
  - 93
  - 94
  - 95
  scrapy.contracts._create_testcase:
  - 189
  - 190
  scrapy.contracts.default.CallbackKeywordArgumentsContract:
  - 24
  scrapy.contracts.default.CallbackKeywordArgumentsContract.adjust_request_args:
  - 33
  scrapy.contracts.default.ReturnsContract:
  - 52
  - 53
  - 38
  scrapy.contracts.default.ReturnsContract.<lambda1>:
  - 52
  scrapy.contracts.default.ReturnsContract.<lambda2>:
  - 53
  scrapy.contracts.default.ReturnsContract.__init__:
  - 69
  - 74
  - 76
  - 59
  - 61
  scrapy.contracts.default.ReturnsContract.post_process:
  - 80
  - 81
  - 86
  - 87
  scrapy.contracts.default.ScrapesContract:
  - 98
  scrapy.contracts.default.ScrapesContract.post_process:
  - 105
  - 106
  - 107
  - 108
  - 109
  scrapy.contracts.default.UrlContract:
  - 12
  scrapy.core:
  - 1
  scrapy.core.downloader:
  - 20
  scrapy.core.downloader.Downloader.__init__:
  - 97
  - 99
  - 100
  - 101
  - 88
  - 89
  - 90
  - 91
  - 94
  - 95
  scrapy.core.downloader.Downloader._download:
  - 194
  - 223
  - 213
  - 207
  scrapy.core.downloader.Downloader._download._downloaded:
  - 199
  scrapy.core.downloader.Downloader._download.finish_transferring:
  - 216
  - 217
  - 218
  scrapy.core.downloader.Downloader._enqueue_request:
  - 146
  - 153
  - 154
  - 157
  - 158
  - 159
  scrapy.core.downloader.Downloader._enqueue_request._deactivate:
  - 150
  scrapy.core.downloader.Downloader._get_slot:
  - 129
  - 130
  - 118
  - 119
  - 120
  - 124
  - 126
  - 127
  scrapy.core.downloader.Downloader._get_slot_key:
  - 136
  - 137
  - 139
  - 140
  - 141
  scrapy.core.downloader.Downloader._process_queue:
  - 165
  - 169
  - 170
  - 171
  - 173
  - 174
  - 180
  - 182
  - 183
  - 184
  - 186
  - 187
  scrapy.core.downloader.Downloader._slot_gc:
  - 232
  - 233
  - 234
  - 231
  scrapy.core.downloader.Downloader.close:
  - 226
  - 227
  - 228
  scrapy.core.downloader.Downloader.fetch:
  - 112
  - 110
  - 111
  scrapy.core.downloader.Downloader.fetch._deactivate:
  - 107
  scrapy.core.downloader.Downloader.needs_backout:
  - 115
  scrapy.core.downloader.Slot:
  - 25
  scrapy.core.downloader.Slot.__init__:
  - 32
  - 33
  - 34
  scrapy.core.downloader.Slot.__str__:
  - 64
  - 62
  - 63
  scrapy.core.downloader.Slot.close:
  - 48
  - 47
  scrapy.core.downloader.Slot.download_delay:
  - 42
  - 43
  scrapy.core.downloader.Slot.free_transfer_slots:
  - 39
  scrapy.core.downloader._get_concurrency_delay:
  - 72
  - 75
  - 71
  scrapy.core.downloader.contextfactory:
  - 25
  scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory:
  - 145
  scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory.__init__:
  - 151
  scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory.creatorForNetloc:
  - 156
  - 159
  scrapy.core.downloader.contextfactory.BrowserLikeContextFactory:
  - 114
  scrapy.core.downloader.contextfactory.BrowserLikeContextFactory.creatorForNetloc:
  - 136
  - 137
  - 138
  scrapy.core.downloader.contextfactory.ScrapyClientContextFactory:
  - 31
  scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.__init__:
  - 49
  - 53
  - 54
  scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.creatorForNetloc:
  - 105
  - 106
  - 107
  scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.from_settings:
  - 66
  - 70
  scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.getCertificateOptions:
  - 90
  - 92
  scrapy.core.downloader.contextfactory.ScrapyClientContextFactory.getContext:
  - 100
  - 101
  scrapy.core.downloader.contextfactory.load_context_factory_from_settings:
  - 164
  - 165
  - 168
  - 175
  - 186
  scrapy.core.downloader.handlers:
  - 1
  - 18
  - 15
  scrapy.core.downloader.handlers.DownloadHandlers.__init__:
  - 32
  - 34
  - 36
  - 29
  - 30
  scrapy.core.downloader.handlers.DownloadHandlers._close:
  - 89
  - 90
  - 91
  scrapy.core.downloader.handlers.DownloadHandlers._get_handler:
  - 39
  - 42
  - 44
  - 46
  - 50
  scrapy.core.downloader.handlers.DownloadHandlers._load_handler:
  - 66
  - 72
  - 55
  - 56
  - 58
  - 63
  scrapy.core.downloader.handlers.DownloadHandlers.download_request:
  - 80
  - 81
  - 85
  - 79
  scrapy.core.downloader.handlers.datauri.DataURIDownloadHandler.download_request:
  - 16
  - 17
  - 20
  - 21
  - 24
  scrapy.core.downloader.handlers.file.FileDownloadHandler.download_request:
  - 16
  - 17
  - 14
  - 15
  scrapy.core.downloader.handlers.ftp:
  - 1
  - 62
  scrapy.core.downloader.handlers.ftp.FTPDownloadHandler._build_response:
  - 112
  - 113
  - 109
  - 111
  scrapy.core.downloader.handlers.ftp.FTPDownloadHandler._failed:
  - 116
  - 117
  - 118
  - 119
  - 120
  - 121
  - 122
  - 123
  scrapy.core.downloader.handlers.ftp.FTPDownloadHandler.download_request:
  - 85
  - 86
  - 87
  - 89
  - 91
  - 94
  - 95
  scrapy.core.downloader.handlers.ftp.FTPDownloadHandler.from_crawler:
  - 80
  scrapy.core.downloader.handlers.ftp.FTPDownloadHandler.gotClient:
  - 99
  - 100
  scrapy.core.downloader.handlers.ftp.ReceivedDataProtocol.__init__:
  - 47
  scrapy.core.downloader.handlers.ftp.ReceivedDataProtocol.close:
  - 59
  scrapy.core.downloader.handlers.ftp.ReceivedDataProtocol.dataReceived:
  - 51
  - 52
  scrapy.core.downloader.handlers.http10:
  - 1
  scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler.__init__:
  - 11
  - 12
  scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler._connect:
  - 32
  - 33
  - 37
  - 38
  - 31
  scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler.download_request:
  - 24
  - 25
  - 23
  scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler.from_crawler:
  - 20
  scrapy.core.downloader.handlers.http11:
  - 1
  - 35
  scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.__init__:
  - 46
  - 47
  - 52
  - 53
  - 54
  - 55
  scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.close:
  - 93
  - 77
  - 86
  scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.close.cancel_delayed_call:
  - 89
  - 90
  scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.download_request:
  - 64
  - 67
  - 68
  - 72
  - 63
  scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler.from_crawler:
  - 60
  scrapy.core.downloader.handlers.http11.ScrapyAgent._cb_bodydone:
  - 516
  - 499
  - 500
  - 503
  - 506
  - 508
  scrapy.core.downloader.handlers.http11.ScrapyAgent._cb_bodyready:
  - 412
  - 414
  - 419
  - 420
  - 421
  - 425
  - 426
  - 437
  - 446
  - 447
  - 449
  - 453
  - 464
  - 466
  - 469
  - 470
  - 480
  - 481
  - 482
  scrapy.core.downloader.handlers.http11.ScrapyAgent._cb_bodyready._cancel:
  - 478
  scrapy.core.downloader.handlers.http11.ScrapyAgent._cb_latency:
  - 400
  scrapy.core.downloader.handlers.http11.ScrapyAgent._cb_timeout:
  - 394
  - 395
  - 389
  - 390
  scrapy.core.downloader.handlers.http11.ScrapyAgent._get_agent:
  - 323
  - 324
  - 325
  - 326
  - 327
  - 328
  - 329
  - 330
  - 332
  - 341
  - 342
  - 344
  - 350
  scrapy.core.downloader.handlers.http11.ScrapyAgent._headers_from_twisted_response:
  - 408
  - 405
  - 406
  - 407
  scrapy.core.downloader.handlers.http11.ScrapyAgent.download_request:
  - 384
  - 385
  - 361
  - 362
  - 365
  - 366
  - 367
  - 368
  - 369
  - 370
  - 371
  - 374
  - 375
  - 376
  - 379
  - 381
  - 382
  scrapy.core.downloader.handlers.http11.ScrapyProxyAgent.__init__:
  - 275
  - 269
  scrapy.core.downloader.handlers.http11.ScrapyProxyAgent.request:
  - 283
  - 285
  - 278
  - 287
  scrapy.core.downloader.handlers.http11.TunnelError:
  - 98
  scrapy.core.downloader.handlers.http11.TunnelingAgent:
  - 216
  scrapy.core.downloader.handlers.http11.TunnelingAgent.__init__:
  - 232
  scrapy.core.downloader.handlers.http11.TunnelingAgent._getEndpoint:
  - 237
  scrapy.core.downloader.handlers.http11.TunnelingAgent._requestWithEndpoint:
  - 254
  scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint:
  - 112
  - 114
  - 102
  scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.__init__:
  - 128
  - 132
  - 127
  scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.connect:
  - 188
  - 189
  - 190
  scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.connectFailed:
  - 184
  - 183
  scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.processProxyResponse:
  - 160
  - 162
  - 165
  - 166
  - 168
  - 170
  - 171
  - 175
  - 176
  - 146
  - 156
  - 159
  scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint.requestTunnel:
  - 136
  - 139
  - 135
  scrapy.core.downloader.handlers.http11._RequestBodyProducer.__init__:
  - 526
  scrapy.core.downloader.handlers.http11._RequestBodyProducer.startProducing:
  - 529
  - 530
  scrapy.core.downloader.handlers.http11._ResponseReader.__init__:
  - 553
  scrapy.core.downloader.handlers.http11._ResponseReader._finish_response:
  - 565
  scrapy.core.downloader.handlers.http11._ResponseReader.connectionLost:
  - 640
  - 643
  - 644
  - 647
  - 648
  - 651
  - 652
  - 654
  - 655
  - 658
  - 659
  - 663
  - 667
  scrapy.core.downloader.handlers.http11._ResponseReader.connectionMade:
  - 577
  - 578
  - 579
  - 580
  - 583
  - 584
  - 585
  scrapy.core.downloader.handlers.http11._ResponseReader.dataReceived:
  - 608
  - 609
  - 611
  - 613
  - 614
  - 590
  - 624
  - 593
  - 594
  - 625
  - 596
  - 627
  - 633
  - 602
  - 603
  - 604
  scrapy.core.downloader.handlers.http11.tunnel_request_data:
  - 209
  - 195
  - 206
  scrapy.core.downloader.handlers.http2:
  - 19
  scrapy.core.downloader.handlers.http2.H2DownloadHandler.__init__:
  - 30
  - 31
  scrapy.core.downloader.handlers.http2.H2DownloadHandler.close:
  - 48
  scrapy.core.downloader.handlers.http2.H2DownloadHandler.download_request:
  - 40
  - 45
  scrapy.core.downloader.handlers.http2.H2DownloadHandler.from_crawler:
  - 37
  scrapy.core.downloader.handlers.http2.ScrapyH2Agent._cb_latency:
  - 118
  scrapy.core.downloader.handlers.http2.ScrapyH2Agent._cb_timeout:
  - 129
  - 125
  - 126
  scrapy.core.downloader.handlers.http2.ScrapyH2Agent._get_agent:
  - 72
  - 73
  - 74
  - 75
  - 76
  - 78
  - 83
  - 86
  - 92
  scrapy.core.downloader.handlers.http2.ScrapyH2Agent.download_request:
  - 103
  - 104
  - 106
  - 107
  - 108
  - 110
  - 111
  scrapy.core.downloader.handlers.s3.S3DownloadHandler.__init__:
  - 33
  - 34
  - 36
  - 42
  - 43
  - 45
  - 47
  - 48
  - 20
  - 53
  - 23
  - 25
  - 27
  scrapy.core.downloader.handlers.s3.S3DownloadHandler.download_request:
  - 64
  - 65
  - 69
  - 70
  - 74
  - 77
  - 80
  - 81
  - 82
  scrapy.core.downloader.handlers.s3.S3DownloadHandler.from_crawler:
  - 61
  scrapy.core.downloader.middleware:
  - 1
  scrapy.core.downloader.middleware.DownloaderMiddlewareManager._add_middleware:
  - 32
  - 33
  - 28
  - 29
  - 30
  - 31
  scrapy.core.downloader.middleware.DownloaderMiddlewareManager._get_mwlist_from_settings:
  - 25
  scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download:
  - 100
  - 101
  - 102
  scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_exception:
  - 96
  - 84
  - 85
  - 86
  - 87
  - 89
  scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_request:
  - 40
  - 41
  - 42
  - 43
  - 45
  - 52
  - 54
  scrapy.core.downloader.middleware.DownloaderMiddlewareManager.download.process_response:
  - 65
  - 66
  - 67
  - 68
  - 70
  - 75
  - 60
  - 62
  scrapy.core.downloader.tls:
  - 89
  - 15
  scrapy.core.downloader.tls.ScrapyClientTLSOptions:
  - 33
  scrapy.core.downloader.tls.ScrapyClientTLSOptions.__init__:
  - 44
  scrapy.core.downloader.tls.ScrapyClientTLSOptions._identityVerifyingInfoCallback:
  - 64
  - 65
  - 67
  - 68
  - 69
  - 72
  - 74
  - 81
  - 50
  - 51
  - 52
  - 53
  - 54
  - 57
  - 58
  - 60
  - 61
  - 62
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.__init__:
  - 160
  - 163
  - 166
  - 167
  - 169
  - 139
  - 171
  - 141
  - 142
  - 144
  - 146
  - 147
  - 148
  - 158
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory._build_response:
  - 117
  - 118
  - 119
  - 120
  - 125
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory._cancelTimeout:
  - 178
  - 179
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory._set_connection_attributes:
  - 129
  - 130
  - 133
  - 134
  - 135
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.buildProtocol:
  - 186
  - 189
  - 190
  - 183
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.clientConnectionFailed:
  - 226
  - 221
  - 230
  - 231
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.gotHeaders:
  - 194
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.gotStatus:
  - 198
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.noPage:
  - 216
  - 218
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory.page:
  - 211
  - 213
  scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.connectionLost:
  - 76
  - 77
  scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.connectionMade:
  - 49
  - 52
  - 54
  - 55
  - 56
  - 57
  - 59
  - 60
  scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.handleEndHeaders:
  - 72
  scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.handleHeader:
  - 66
  scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.handleResponse:
  - 80
  - 81
  - 82
  - 83
  - 85
  - 86
  scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.handleStatus:
  - 69
  scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.lineReceived:
  - 63
  scrapy.core.downloader.webclient.ScrapyHTTPPageGetter.timeout:
  - 96
  - 89
  - 92
  - 93
  - 95
  scrapy.core.downloader.webclient._parse:
  - 33
  - 38
  - 39
  - 41
  - 42
  scrapy.core.downloader.webclient._parsed_url_args:
  - 20
  - 21
  - 23
  - 25
  - 26
  - 27
  scrapy.core.engine:
  - 40
  - 1
  - 44
  scrapy.core.engine.ExecutionEngine.__init__:
  - 98
  - 99
  - 100
  - 95
  scrapy.core.engine.ExecutionEngine._download:
  - 350
  - 348
  - 349
  - 318
  scrapy.core.engine.ExecutionEngine._download._on_complete:
  - 344
  scrapy.core.engine.ExecutionEngine._download._on_success:
  - 321
  - 325
  - 326
  - 329
  - 330
  - 331
  - 332
  - 334
  scrapy.core.engine.ExecutionEngine._downloaded:
  - 312
  - 313
  scrapy.core.engine.ExecutionEngine._get_scheduler_class:
  - 107
  - 108
  scrapy.core.engine.ExecutionEngine._handle_downloader_output:
  - 259
  - 260
  - 263
  - 264
  - 265
  - 253
  scrapy.core.engine.ExecutionEngine._handle_downloader_output.<lambda1>:
  - 265
  - 267
  scrapy.core.engine.ExecutionEngine._needs_backout:
  - 202
  - 203
  - 204
  scrapy.core.engine.ExecutionEngine._next_request:
  - 192
  - 194
  - 195
  - 165
  - 170
  - 174
  - 175
  - 179
  - 181
  - 186
  scrapy.core.engine.ExecutionEngine._next_request_from_scheduler:
  - 229
  - 230
  - 231
  - 238
  - 239
  - 240
  - 211
  - 212
  - 215
  - 216
  - 217
  - 218
  scrapy.core.engine.ExecutionEngine._next_request_from_scheduler.<lambda1>:
  - 218
  - 220
  scrapy.core.engine.ExecutionEngine._next_request_from_scheduler.<lambda2>:
  - 233
  - 231
  scrapy.core.engine.ExecutionEngine._next_request_from_scheduler.<lambda3>:
  - 238
  scrapy.core.engine.ExecutionEngine._next_request_from_scheduler.<lambda4>:
  - 240
  - 242
  scrapy.core.engine.ExecutionEngine._next_request_from_scheduler._remove_request:
  - 227
  scrapy.core.engine.ExecutionEngine._schedule_request:
  - 297
  - 298
  - 294
  scrapy.core.engine.ExecutionEngine._spider_idle:
  - 385
  - 392
  - 394
  - 396
  - 397
  - 398
  - 399
  - 377
  scrapy.core.engine.ExecutionEngine.close:
  - 145
  - 149
  - 150
  - 151
  - 152
  - 155
  - 156
  scrapy.core.engine.ExecutionEngine.close_spider:
  - 402
  - 403
  - 406
  - 409
  - 413
  - 423
  - 424
  - 426
  - 427
  - 429
  - 430
  - 431
  - 433
  - 434
  - 440
  - 446
  - 447
  - 449
  - 450
  - 457
  - 458
  - 460
  - 461
  - 463
  scrapy.core.engine.ExecutionEngine.close_spider.<lambda1>:
  - 423
  scrapy.core.engine.ExecutionEngine.close_spider.<lambda2>:
  - 426
  scrapy.core.engine.ExecutionEngine.close_spider.<lambda3>:
  - 430
  scrapy.core.engine.ExecutionEngine.close_spider.<lambda4>:
  - 434
  scrapy.core.engine.ExecutionEngine.close_spider.<lambda5>:
  - 450
  scrapy.core.engine.ExecutionEngine.close_spider.<lambda6>:
  - 457
  scrapy.core.engine.ExecutionEngine.close_spider.<lambda7>:
  - 460
  scrapy.core.engine.ExecutionEngine.close_spider.<lambda8>:
  - 463
  scrapy.core.engine.ExecutionEngine.close_spider.close_stats:
  - 444
  scrapy.core.engine.ExecutionEngine.close_spider.log_failure.errback:
  - 417
  - 418
  scrapy.core.engine.ExecutionEngine.crawl:
  - 288
  - 290
  - 291
  - 287
  scrapy.core.engine.ExecutionEngine.download:
  - 304
  - 306
  - 303
  scrapy.core.engine.ExecutionEngine.open_spider:
  - 357
  - 359
  - 360
  - 361
  - 362
  - 365
  - 367
  - 368
  - 369
  - 371
  - 372
  - 373
  - 374
  scrapy.core.engine.ExecutionEngine.spider_is_idle:
  - 274
  - 276
  - 278
  - 280
  - 282
  scrapy.core.engine.ExecutionEngine.start:
  - 117
  - 119
  - 120
  - 122
  - 123
  scrapy.core.engine.ExecutionEngine.stop:
  - 133
  - 138
  - 140
  - 142
  - 126
  scrapy.core.engine.ExecutionEngine.stop._finish_stopping_engine:
  - 130
  - 131
  scrapy.core.engine.Slot.__init__:
  - 56
  - 57
  - 61
  scrapy.core.engine.Slot._maybe_fire_closing:
  - 76
  - 77
  - 78
  - 79
  - 80
  - 81
  scrapy.core.engine.Slot.add_request:
  - 64
  scrapy.core.engine.Slot.close:
  - 72
  - 71
  scrapy.core.engine.Slot.remove_request:
  - 67
  - 68
  scrapy.core.http2.agent.H2Agent.__init__:
  - 115
  - 118
  scrapy.core.http2.agent.H2Agent.get_endpoint:
  - 123
  scrapy.core.http2.agent.H2Agent.get_key:
  - 126
  scrapy.core.http2.agent.H2Agent.request:
  - 133
  - 135
  - 137
  - 139
  - 140
  - 141
  scrapy.core.http2.agent.H2Agent.request.<lambda1>:
  - 141
  scrapy.core.http2.agent.H2ConnectionPool._new_connection:
  - 64
  - 65
  - 66
  - 68
  - 69
  - 59
  - 61
  - 62
  scrapy.core.http2.agent.H2ConnectionPool._remove_connection:
  - 88
  - 90
  - 91
  - 85
  scrapy.core.http2.agent.H2ConnectionPool.close_connections:
  - 99
  - 101
  - 94
  scrapy.core.http2.agent.H2ConnectionPool.get_connection:
  - 39
  - 43
  - 44
  - 48
  - 49
  - 51
  - 54
  scrapy.core.http2.agent.H2ConnectionPool.put_connection:
  - 80
  - 77
  - 79
  scrapy.core.http2.agent.ScrapyProxyH2Agent.__init__:
  - 155
  scrapy.core.http2.agent.ScrapyProxyH2Agent.get_endpoint:
  - 165
  scrapy.core.http2.agent.ScrapyProxyH2Agent.get_key:
  - 168
  scrapy.core.http2.protocol:
  - 38
  scrapy.core.http2.protocol.H2ClientFactory.buildProtocol:
  - 435
  scrapy.core.http2.protocol.H2ClientProtocol.__init__:
  - 99
  - 106
  - 82
  - 125
  - 126
  - 93
  - 94
  scrapy.core.http2.protocol.H2ClientProtocol._check_received_data:
  - 267
  - 261
  scrapy.core.http2.protocol.H2ClientProtocol._handle_events:
  - 352
  - 353
  - 354
  - 355
  - 356
  - 357
  - 358
  - 359
  - 360
  - 361
  - 362
  - 363
  - 364
  - 365
  - 343
  - 349
  - 350
  - 351
  scrapy.core.http2.protocol.H2ClientProtocol._lose_connection_with_error:
  - 240
  - 244
  scrapy.core.http2.protocol.H2ClientProtocol._new_stream:
  - 181
  - 182
  - 183
  - 186
  - 189
  scrapy.core.http2.protocol.H2ClientProtocol._send_pending_requests:
  - 169
  - 170
  - 171
  - 159
  scrapy.core.http2.protocol.H2ClientProtocol._write_to_transport:
  - 205
  - 202
  - 204
  - 197
  scrapy.core.http2.protocol.H2ClientProtocol.allowed_max_concurrent_streams:
  - 153
  - 148
  scrapy.core.http2.protocol.H2ClientProtocol.connectionLost:
  - 321
  - 325
  - 326
  - 328
  - 330
  - 331
  - 335
  - 337
  - 338
  - 339
  - 340
  - 317
  scrapy.core.http2.protocol.H2ClientProtocol.connectionMade:
  - 225
  - 229
  - 232
  - 233
  - 236
  - 237
  scrapy.core.http2.protocol.H2ClientProtocol.connection_terminated:
  - 369
  - 370
  scrapy.core.http2.protocol.H2ClientProtocol.dataReceived:
  - 290
  - 292
  - 272
  - 275
  - 276
  - 277
  - 279
  - 284
  scrapy.core.http2.protocol.H2ClientProtocol.data_received:
  - 379
  scrapy.core.http2.protocol.H2ClientProtocol.h2_connected:
  - 144
  - 139
  scrapy.core.http2.protocol.H2ClientProtocol.handshakeCompleted:
  - 256
  - 257
  - 251
  - 247
  scrapy.core.http2.protocol.H2ClientProtocol.pop_stream:
  - 177
  - 174
  - 175
  scrapy.core.http2.protocol.H2ClientProtocol.request:
  - 208
  - 213
  - 214
  - 217
  - 221
  scrapy.core.http2.protocol.H2ClientProtocol.response_received:
  - 387
  scrapy.core.http2.protocol.H2ClientProtocol.settings_acknowledged:
  - 394
  - 398
  scrapy.core.http2.protocol.H2ClientProtocol.stream_ended:
  - 402
  - 406
  scrapy.core.http2.protocol.H2ClientProtocol.stream_reset:
  - 410
  - 414
  scrapy.core.http2.protocol.H2ClientProtocol.timeoutConnection:
  - 295
  - 301
  - 309
  - 310
  - 312
  - 313
  scrapy.core.http2.protocol.H2ClientProtocol.window_updated:
  - 417
  - 418
  - 421
  - 422
  scrapy.core.http2.stream:
  - 19
  - 23
  scrapy.core.http2.stream.InactiveStreamClosed:
  - 27
  scrapy.core.http2.stream.Stream:
  - 76
  scrapy.core.http2.stream.Stream.__init__:
  - 104
  - 137
  - 107
  - 142
  - 116
  - 154
  - 124
  - 94
  scrapy.core.http2.stream.Stream.__init__._cancel:
  - 152
  - 149
  - 150
  scrapy.core.http2.stream.Stream._fire_response_deferred:
  - 481
  - 483
  - 492
  - 470
  - 474
  - 475
  scrapy.core.http2.stream.Stream._get_request_headers:
  - 226
  - 227
  - 197
  - 229
  - 230
  - 200
  - 231
  - 232
  - 233
  - 234
  - 235
  - 209
  - 243
  - 220
  scrapy.core.http2.stream.Stream._log_warnsize:
  - 168
  - 161
  - 169
  scrapy.core.http2.stream.Stream.check_request_url:
  - 188
  - 190
  - 191
  scrapy.core.http2.stream.Stream.close:
  - 385
  - 386
  - 389
  - 398
  - 399
  - 411
  - 412
  - 413
  - 421
  - 422
  - 424
  - 425
  - 428
  - 438
  - 440
  - 441
  - 442
  - 452
  - 453
  - 455
  - 456
  - 457
  - 461
  - 462
  - 464
  scrapy.core.http2.stream.Stream.get_response:
  - 181
  scrapy.core.http2.stream.Stream.initiate_request:
  - 256
  - 248
  - 249
  - 250
  - 252
  scrapy.core.http2.stream.Stream.receive_data:
  - 325
  - 329
  - 333
  - 336
  - 342
  - 345
  scrapy.core.http2.stream.Stream.receive_headers:
  - 354
  - 355
  - 356
  - 359
  - 365
  - 350
  - 351
  scrapy.core.http2.stream.Stream.receive_window_update:
  - 313
  - 322
  - 317
  scrapy.core.http2.stream.Stream.reset_stream:
  - 368
  - 369
  - 373
  - 376
  - 377
  scrapy.core.http2.stream.Stream.send_data:
  - 259
  - 296
  - 269
  - 301
  - 273
  - 306
  - 307
  - 282
  - 286
  scrapy.core.scheduler:
  - 24
  - 19
  - 124
  scrapy.core.scheduler.BaseScheduler:
  - 47
  scrapy.core.scheduler.BaseScheduler.close:
  - 81
  scrapy.core.scheduler.BaseScheduler.enqueue_request:
  - 99
  scrapy.core.scheduler.BaseScheduler.from_crawler:
  - 65
  - 68
  scrapy.core.scheduler.BaseScheduler.has_pending_requests:
  - 92
  scrapy.core.scheduler.BaseScheduler.next_request:
  - 113
  scrapy.core.scheduler.BaseScheduler.open:
  - 71
  scrapy.core.scheduler.BaseSchedulerMeta:
  - 28
  scrapy.core.scheduler.BaseSchedulerMeta.__instancecheck__:
  - 33
  scrapy.core.scheduler.BaseSchedulerMeta.__subclasscheck__:
  - 37
  - 38
  - 39
  - 40
  - 41
  - 42
  scrapy.core.scheduler.Scheduler:
  - 128
  scrapy.core.scheduler.Scheduler.__init__:
  - 190
  scrapy.core.scheduler.Scheduler.__len__:
  - 288
  - 285
  scrapy.core.scheduler.Scheduler._dq:
  - 333
  - 335
  - 336
  - 343
  - 344
  scrapy.core.scheduler.Scheduler._dqdir:
  - 352
  - 353
  - 354
  - 355
  - 356
  - 357
  scrapy.core.scheduler.Scheduler._dqpop:
  - 320
  - 319
  scrapy.core.scheduler.Scheduler._dqpush:
  - 291
  - 294
  - 296
  - 302
  - 310
  scrapy.core.scheduler.Scheduler._mq:
  - 324
  - 325
  scrapy.core.scheduler.Scheduler._mqpush:
  - 316
  scrapy.core.scheduler.Scheduler._read_dqs_state:
  - 361
  - 362
  - 364
  - 365
  scrapy.core.scheduler.Scheduler._write_dqs_state:
  - 368
  - 369
  scrapy.core.scheduler.Scheduler.close:
  - 230
  - 234
  - 235
  - 236
  - 237
  - 238
  scrapy.core.scheduler.Scheduler.enqueue_request:
  - 256
  - 258
  - 259
  - 260
  - 241
  - 250
  - 251
  - 253
  - 255
  scrapy.core.scheduler.Scheduler.from_crawler:
  - 200
  - 203
  - 204
  - 205
  - 206
  - 207
  - 208
  - 209
  - 211
  scrapy.core.scheduler.Scheduler.has_pending_requests:
  - 216
  scrapy.core.scheduler.Scheduler.next_request:
  - 264
  - 272
  - 274
  - 275
  - 277
  - 278
  - 279
  - 280
  - 281
  scrapy.core.scheduler.Scheduler.open:
  - 225
  - 226
  - 219
  - 227
  scrapy.core.scraper:
  - 1
  - 52
  - 45
  scrapy.core.scraper.Scraper.__init__:
  - 106
  - 109
  - 110
  - 103
  scrapy.core.scraper.Scraper._check_if_closing:
  - 137
  - 138
  scrapy.core.scraper.Scraper._itemproc_finished:
  - 388
  - 389
  - 358
  - 390
  - 391
  - 361
  - 363
  - 364
  - 365
  - 366
  - 367
  - 375
  - 376
  - 377
  - 379
  - 381
  scrapy.core.scraper.Scraper._log_download_errors:
  - 323
  - 330
  - 331
  - 332
  - 335
  - 336
  - 338
  - 341
  - 342
  - 343
  - 346
  - 347
  - 351
  scrapy.core.scraper.Scraper._process_spidermw_output:
  - 293
  - 297
  - 299
  - 300
  - 302
  - 303
  - 305
  - 308
  - 309
  scrapy.core.scraper.Scraper._scrape:
  - 175
  - 178
  - 182
  - 185
  - 186
  scrapy.core.scraper.Scraper._scrape2:
  - 192
  - 195
  - 196
  - 200
  - 201
  scrapy.core.scraper.Scraper._scrape_next:
  - 169
  - 170
  scrapy.core.scraper.Scraper.call_spider:
  - 206
  - 207
  - 211
  - 212
  - 213
  - 219
  - 220
  - 221
  - 222
  - 223
  scrapy.core.scraper.Scraper.close_spider:
  - 128
  - 123
  - 124
  - 126
  - 127
  scrapy.core.scraper.Scraper.enqueue_scrape:
  - 163
  - 143
  - 145
  - 154
  - 155
  - 156
  scrapy.core.scraper.Scraper.enqueue_scrape.<lambda1>:
  - 156
  - 159
  scrapy.core.scraper.Scraper.enqueue_scrape.finish_scraping:
  - 149
  - 150
  - 151
  scrapy.core.scraper.Scraper.handle_spider_error:
  - 233
  - 235
  - 237
  - 238
  - 239
  - 240
  - 243
  - 250
  scrapy.core.scraper.Scraper.handle_spider_output:
  - 261
  - 262
  - 264
  - 265
  - 268
  - 277
  - 280
  scrapy.core.scraper.Scraper.is_idle:
  - 132
  scrapy.core.scraper.Scraper.open_spider:
  - 120
  - 118
  - 119
  scrapy.core.scraper.Slot:
  - 56
  scrapy.core.scraper.Slot.__init__:
  - 62
  - 63
  scrapy.core.scraper.Slot.add_response_request:
  - 72
  - 73
  - 74
  - 71
  scrapy.core.scraper.Slot.finish_response:
  - 88
  - 89
  - 87
  scrapy.core.scraper.Slot.next_response_request_deferred:
  - 80
  - 81
  scrapy.core.spidermw:
  - 1
  - 41
  scrapy.core.spidermw.SpiderMiddlewareManager.__init__:
  - 55
  scrapy.core.spidermw.SpiderMiddlewareManager._add_middleware:
  - 64
  - 65
  - 66
  - 67
  - 68
  - 69
  - 70
  - 71
  - 63
  scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable:
  - 128
  - 129
  - 127
  scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_async:
  - 118
  - 120
  - 121
  - 123
  - 125
  scrapy.core.spidermw.SpiderMiddlewareManager._evaluate_iterable.process_sync:
  - 106
  - 108
  - 109
  - 111
  - 113
  scrapy.core.spidermw.SpiderMiddlewareManager._get_async_method_pair:
  - 321
  - 323
  - 324
  - 326
  - 327
  - 332
  - 333
  - 338
  - 339
  scrapy.core.spidermw.SpiderMiddlewareManager._get_mwlist_from_settings:
  - 60
  scrapy.core.spidermw.SpiderMiddlewareManager._process_callback_output:
  - 272
  - 273
  - 275
  - 276
  - 277
  - 278
  - 280
  - 281
  - 282
  - 283
  - 284
  - 285
  scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_exception:
  - 160
  - 165
  - 170
  - 140
  - 142
  - 145
  - 146
  - 148
  - 149
  - 150
  - 153
  - 158
  scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_input:
  - 80
  - 81
  - 83
  - 84
  - 87
  - 93
  - 94
  scrapy.core.spidermw.SpiderMiddlewareManager._process_spider_output:
  - 259
  - 262
  - 264
  - 265
  - 266
  - 189
  - 190
  - 191
  - 193
  - 202
  - 203
  - 204
  - 207
  - 213
  - 215
  - 218
  - 220
  - 221
  - 222
  - 223
  - 228
  - 230
  - 231
  - 232
  - 233
  - 235
  - 237
  - 239
  - 240
  - 242
  - 245
  - 246
  - 250
  - 251
  scrapy.core.spidermw.SpiderMiddlewareManager.process_start_requests:
  - 314
  scrapy.core.spidermw.SpiderMiddlewareManager.scrape_response:
  - 305
  - 306
  - 302
  scrapy.core.spidermw.SpiderMiddlewareManager.scrape_response.process_callback_output:
  - 297
  scrapy.core.spidermw.SpiderMiddlewareManager.scrape_response.process_spider_exception:
  - 300
  scrapy.core.spidermw._isiterable:
  - 48
  scrapy.crawler:
  - 51
  - 55
  scrapy.crawler.Crawler.__init__:
  - 65
  - 68
  - 69
  - 72
  - 73
  - 74
  - 76
  - 77
  scrapy.crawler.Crawler._apply_settings:
  - 128
  - 129
  - 130
  - 132
  - 133
  - 135
  - 136
  - 96
  - 99
  - 100
  - 102
  - 103
  - 106
  - 107
  - 109
  - 110
  - 112
  - 113
  - 119
  - 122
  - 123
  - 126
  - 127
  scrapy.crawler.Crawler._apply_settings.<lambda1>:
  - 106
  scrapy.crawler.Crawler._create_engine:
  - 170
  scrapy.crawler.Crawler._create_engine.<lambda1>:
  - 170
  scrapy.crawler.Crawler._create_spider:
  - 167
  scrapy.crawler.Crawler._get_component:
  - 184
  - 183
  scrapy.crawler.Crawler._update_root_log_handler:
  - 91
  - 93
  scrapy.crawler.Crawler.crawl:
  - 162
  - 163
  - 142
  - 144
  - 145
  - 153
  - 154
  - 155
  - 156
  - 157
  - 158
  - 159
  scrapy.crawler.Crawler.get_addon:
  - 189
  scrapy.crawler.Crawler.get_downloader_middleware:
  - 192
  - 197
  scrapy.crawler.Crawler.get_extension:
  - 200
  - 205
  scrapy.crawler.Crawler.get_item_pipeline:
  - 208
  - 213
  scrapy.crawler.Crawler.get_spider_middleware:
  - 216
  - 221
  scrapy.crawler.Crawler.stop:
  - 176
  - 179
  - 174
  scrapy.crawler.CrawlerProcess:
  - 357
  scrapy.crawler.CrawlerProcess.__init__:
  - 385
  - 386
  - 387
  scrapy.crawler.CrawlerProcess._create_crawler:
  - 417
  - 418
  - 412
  - 413
  scrapy.crawler.CrawlerProcess._graceful_stop_reactor:
  - 460
  - 461
  scrapy.crawler.CrawlerProcess._signal_kill:
  - 409
  - 404
  - 406
  scrapy.crawler.CrawlerProcess._signal_shutdown:
  - 393
  - 395
  - 399
  scrapy.crawler.CrawlerProcess._stop_reactor:
  - 468
  scrapy.crawler.CrawlerProcess.start:
  - 448
  - 449
  - 450
  - 451
  - 452
  - 453
  - 454
  - 424
  - 457
  - 440
  - 441
  - 443
  - 445
  - 447
  scrapy.crawler.CrawlerRunner:
  - 225
  - 237
  - 238
  scrapy.crawler.CrawlerRunner.__init__:
  - 256
  - 257
  - 252
  - 253
  - 255
  scrapy.crawler.CrawlerRunner._crawl:
  - 296
  - 297
  - 298
  - 306
  scrapy.crawler.CrawlerRunner._crawl._done:
  - 301
  - 302
  - 303
  scrapy.crawler.CrawlerRunner._create_crawler:
  - 331
  - 332
  - 334
  scrapy.crawler.CrawlerRunner._get_spider_loader:
  - 245
  - 246
  - 247
  - 248
  - 249
  scrapy.crawler.CrawlerRunner.crawl:
  - 266
  - 292
  - 293
  - 287
  scrapy.crawler.CrawlerRunner.create_crawler:
  - 328
  - 321
  - 326
  - 311
  scrapy.crawler.CrawlerRunner.join:
  - 353
  - 346
  scrapy.crawler.CrawlerRunner.stop:
  - 337
  - 342
  scrapy.downloadermiddlewares.ajaxcrawl:
  - 19
  - 79
  - 15
  scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware:
  - 23
  scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware.__init__:
  - 36
  - 29
  scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware._has_ajax_crawlable_variant:
  - 75
  - 70
  scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware.from_crawler:
  - 40
  scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware.process_response:
  - 45
  - 48
  - 52
  - 55
  - 59
  - 60
  scrapy.downloadermiddlewares.ajaxcrawl._has_ajaxcrawlable_meta:
  - 99
  - 101
  - 104
  - 105
  - 106
  - 107
  - 85
  scrapy.downloadermiddlewares.cookies:
  - 32
  - 35
  - 27
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware:
  - 44
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware.__init__:
  - 47
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware._debug_cookie:
  - 109
  - 111
  - 112
  - 114
  - 115
  - 117
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware._debug_set_cookie:
  - 128
  - 120
  - 122
  - 123
  - 125
  - 126
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware._format_cookie:
  - 131
  - 136
  - 137
  - 138
  - 140
  - 143
  - 144
  - 147
  - 149
  - 154
  - 156
  - 157
  - 158
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware._get_request_cookies:
  - 164
  - 167
  - 170
  - 171
  - 174
  - 175
  - 176
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware._process_cookies:
  - 64
  - 66
  - 68
  - 69
  - 73
  - 59
  - 61
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware.from_crawler:
  - 52
  - 54
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware.process_request:
  - 78
  - 81
  - 83
  - 84
  - 87
  - 88
  - 89
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware.process_response:
  - 99
  - 101
  - 102
  - 104
  - 95
  scrapy.downloadermiddlewares.cookies._is_public_domain:
  - 39
  scrapy.downloadermiddlewares.defaultheaders:
  - 1
  - 15
  scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware.from_crawler:
  - 26
  - 27
  scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware.process_request:
  - 32
  - 33
  scrapy.downloadermiddlewares.downloadtimeout:
  - 1
  - 14
  scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware.from_crawler:
  - 25
  - 26
  scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware.process_request:
  - 35
  - 36
  scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware.spider_opened:
  - 30
  scrapy.downloadermiddlewares.httpauth:
  - 1
  - 18
  scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware:
  - 24
  scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware.from_crawler:
  - 29
  - 30
  scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware.process_request:
  - 43
  - 44
  - 45
  scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware.spider_opened:
  - 34
  - 35
  - 36
  - 37
  scrapy.downloadermiddlewares.httpcache:
  - 28
  scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.__init__:
  - 48
  - 50
  - 51
  - 52
  scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware._cache_response:
  - 152
  - 153
  - 154
  - 156
  scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.from_crawler:
  - 58
  - 59
  - 60
  scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.process_exception:
  - 137
  - 138
  - 141
  scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.process_request:
  - 72
  - 76
  - 81
  - 84
  - 85
  - 86
  - 87
  - 92
  - 93
  - 94
  scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.process_response:
  - 130
  - 131
  - 106
  - 110
  - 111
  - 116
  - 117
  - 120
  - 121
  - 122
  - 123
  - 126
  - 127
  scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.spider_closed:
  - 67
  scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware.spider_opened:
  - 64
  scrapy.downloadermiddlewares.httpcompression:
  - 24
  - 31
  - 15
  scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware:
  - 37
  scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware._decode:
  - 101
  - 102
  - 103
  - 104
  - 107
  - 108
  - 89
  - 90
  - 92
  - 94
  scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware.from_crawler:
  - 45
  - 47
  scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware.process_request:
  - 52
  scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware.process_response:
  - 64
  - 65
  - 66
  - 68
  - 71
  - 74
  - 77
  - 78
  - 82
  - 83
  - 58
  - 60
  - 61
  - 62
  - 63
  scrapy.downloadermiddlewares.httpproxy:
  - 19
  scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware.__init__:
  - 28
  - 30
  scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._basic_auth_header:
  - 44
  - 45
  - 47
  scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._get_proxy:
  - 50
  - 51
  - 53
  - 54
  scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware._set_proxy_and_creds:
  - 96
  - 83
  - 85
  - 87
  - 90
  - 91
  - 92
  - 95
  scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware.from_crawler:
  - 40
  - 41
  - 38
  scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware.process_request:
  - 64
  - 65
  - 66
  - 67
  - 68
  - 70
  - 73
  - 77
  scrapy.downloadermiddlewares.redirect:
  - 17
  - 21
  scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware.__init__:
  - 48
  - 44
  - 47
  scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware._redirect:
  - 66
  - 71
  - 77
  - 57
  - 58
  - 60
  - 63
  scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware._redirect_request_using_get:
  - 93
  - 94
  - 87
  scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware.from_crawler:
  - 52
  scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware.__init__:
  - 139
  - 140
  - 141
  scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware.process_response:
  - 146
  - 147
  - 149
  - 153
  - 154
  - 155
  - 156
  scrapy.downloadermiddlewares.redirect.RedirectMiddleware:
  - 99
  scrapy.downloadermiddlewares.redirect.RedirectMiddleware.process_response:
  - 128
  - 129
  - 131
  - 132
  - 107
  - 108
  - 109
  - 110
  - 111
  - 116
  - 120
  - 121
  - 122
  - 123
  - 125
  - 127
  scrapy.downloadermiddlewares.redirect._build_redirect_request:
  - 32
  - 33
  - 34
  - 35
  - 27
  scrapy.downloadermiddlewares.retry:
  - 32
  - 1
  - 28
  scrapy.downloadermiddlewares.retry.RetryMiddleware.__init__:
  - 160
  - 146
  - 148
  - 149
  - 150
  - 152
  - 155
  - 158
  - 159
  scrapy.downloadermiddlewares.retry.RetryMiddleware._retry:
  - 192
  - 193
  - 194
  scrapy.downloadermiddlewares.retry.RetryMiddleware.from_crawler:
  - 165
  scrapy.downloadermiddlewares.retry.RetryMiddleware.process_exception:
  - 180
  - 183
  scrapy.downloadermiddlewares.retry.RetryMiddleware.process_response:
  - 170
  - 172
  - 173
  - 174
  scrapy.downloadermiddlewares.retry.backwards_compatibility_getattr:
  - 36
  - 37
  - 43
  - 44
  - 45
  scrapy.downloadermiddlewares.retry.get_retry_request:
  - 128
  - 129
  - 130
  - 132
  - 133
  - 135
  - 136
  - 66
  - 109
  - 110
  - 111
  - 112
  - 113
  - 114
  - 115
  - 120
  - 123
  - 124
  - 127
  scrapy.downloadermiddlewares.robotstxt:
  - 1
  - 25
  - 30
  scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.__init__:
  - 37
  - 39
  - 40
  - 45
  - 46
  - 50
  scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware._logerror:
  - 121
  - 122
  - 125
  scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware._parse_robots:
  - 132
  - 133
  - 136
  - 138
  - 140
  scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware._robots_error:
  - 146
  - 148
  - 150
  - 143
  scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.from_crawler:
  - 54
  scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.process_request:
  - 57
  - 59
  - 61
  - 62
  scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.process_request_2:
  - 68
  - 72
  - 73
  - 75
  - 76
  - 82
  scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.robot_parser:
  - 102
  - 103
  - 104
  - 105
  - 106
  - 109
  - 110
  - 116
  - 88
  - 91
  - 92
  - 94
  scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware.robot_parser.cb:
  - 113
  scrapy.downloadermiddlewares.stats:
  - 15
  scrapy.downloadermiddlewares.stats.DownloaderStats.from_crawler:
  - 40
  - 43
  scrapy.downloadermiddlewares.stats.DownloaderStats.process_exception:
  - 76
  - 77
  - 78
  scrapy.downloadermiddlewares.stats.DownloaderStats.process_request:
  - 48
  - 49
  - 52
  - 53
  scrapy.downloadermiddlewares.stats.DownloaderStats.process_response:
  - 64
  - 65
  - 66
  - 70
  - 59
  - 60
  scrapy.downloadermiddlewares.stats.get_header_size:
  - 22
  - 23
  - 24
  - 25
  - 26
  scrapy.downloadermiddlewares.stats.get_status_size:
  - 30
  scrapy.downloadermiddlewares.useragent:
  - 1
  - 11
  scrapy.downloadermiddlewares.useragent.UserAgentMiddleware:
  - 17
  scrapy.downloadermiddlewares.useragent.UserAgentMiddleware.from_crawler:
  - 24
  - 25
  scrapy.downloadermiddlewares.useragent.UserAgentMiddleware.process_request:
  - 34
  - 35
  scrapy.downloadermiddlewares.useragent.UserAgentMiddleware.spider_opened:
  - 29
  scrapy.dupefilters:
  - 19
  scrapy.dupefilters.BaseDupeFilter.from_settings:
  - 29
  scrapy.dupefilters.BaseDupeFilter.log:
  - 41
  scrapy.dupefilters.RFPDupeFilter:
  - 46
  scrapy.dupefilters.RFPDupeFilter.__init__:
  - 64
  - 65
  - 66
  - 57
  - 59
  - 62
  - 63
  scrapy.dupefilters.RFPDupeFilter.close:
  - 99
  - 100
  scrapy.dupefilters.RFPDupeFilter.from_crawler:
  - 81
  scrapy.dupefilters.RFPDupeFilter.from_settings:
  - 75
  - 76
  scrapy.dupefilters.RFPDupeFilter.log:
  - 103
  - 105
  - 106
  - 107
  - 113
  - 117
  scrapy.dupefilters.RFPDupeFilter.request_fingerprint:
  - 96
  scrapy.dupefilters.RFPDupeFilter.request_seen:
  - 87
  - 88
  - 90
  - 91
  - 92
  scrapy.exceptions:
  - 1
  scrapy.exceptions.CloseSpider:
  - 41
  scrapy.exceptions.CloseSpider.__init__:
  - 44
  scrapy.exceptions.ContractFail:
  - 95
  scrapy.exceptions.DontCloseSpider:
  - 35
  scrapy.exceptions.DropItem:
  - 64
  scrapy.exceptions.IgnoreRequest:
  - 31
  scrapy.exceptions.NotConfigured:
  - 13
  scrapy.exceptions.NotSupported:
  - 70
  scrapy.exceptions.ScrapyDeprecationWarning:
  - 87
  scrapy.exceptions.StopDownload:
  - 49
  scrapy.exceptions.StopDownload.__init__:
  - 56
  scrapy.exceptions.UsageError:
  - 79
  scrapy.exceptions.UsageError.__init__:
  - 82
  - 83
  scrapy.exceptions._InvalidOutput:
  - 19
  scrapy.exporters:
  - 1
  scrapy.exporters.BaseItemExporter.__init__:
  - 34
  scrapy.exporters.BaseItemExporter._configure:
  - 37
  - 41
  - 42
  - 43
  - 44
  - 45
  scrapy.exporters.BaseItemExporter._get_serialized_fields:
  - 65
  - 67
  - 99
  - 70
  - 71
  - 72
  - 74
  - 75
  - 76
  - 77
  - 80
  - 83
  - 94
  - 88
  - 89
  - 93
  - 62
  - 95
  scrapy.exporters.BaseItemExporter.serialize_field:
  - 52
  - 53
  scrapy.exporters.CsvItemExporter.__init__:
  - 226
  - 234
  - 222
  - 223
  scrapy.exporters.CsvItemExporter._build_row:
  - 265
  - 267
  - 263
  scrapy.exporters.CsvItemExporter._join_if_needed:
  - 243
  - 245
  scrapy.exporters.CsvItemExporter._write_headers_and_set_fields_to_export:
  - 270
  - 271
  - 273
  - 274
  - 275
  - 278
  - 279
  scrapy.exporters.CsvItemExporter.export_item:
  - 256
  - 257
  - 251
  - 253
  - 255
  scrapy.exporters.CsvItemExporter.finish_exporting:
  - 260
  scrapy.exporters.CsvItemExporter.serialize_field:
  - 240
  - 239
  scrapy.exporters.JsonItemExporter.__init__:
  - 125
  - 117
  - 126
  - 127
  scrapy.exporters.JsonItemExporter._add_comma_after_first:
  - 138
  - 139
  - 135
  scrapy.exporters.JsonItemExporter._beautify_newline:
  - 131
  - 132
  scrapy.exporters.JsonItemExporter.export_item:
  - 152
  - 153
  - 150
  - 151
  scrapy.exporters.JsonItemExporter.finish_exporting:
  - 146
  - 147
  scrapy.exporters.JsonItemExporter.start_exporting:
  - 142
  - 143
  scrapy.exporters.JsonLinesItemExporter.__init__:
  - 104
  - 106
  - 107
  scrapy.exporters.JsonLinesItemExporter.export_item:
  - 112
  - 110
  - 111
  scrapy.exporters.MarshalItemExporter:
  - 294
  scrapy.exporters.MarshalItemExporter.__init__:
  - 303
  scrapy.exporters.MarshalItemExporter.export_item:
  - 307
  scrapy.exporters.PickleItemExporter.__init__:
  - 284
  scrapy.exporters.PickleItemExporter.export_item:
  - 289
  - 290
  scrapy.exporters.PprintItemExporter.__init__:
  - 312
  scrapy.exporters.PprintItemExporter.export_item:
  - 316
  - 317
  scrapy.exporters.PythonItemExporter:
  - 321
  scrapy.exporters.PythonItemExporter._configure:
  - 331
  - 332
  scrapy.exporters.PythonItemExporter._serialize_item:
  - 352
  - 351
  scrapy.exporters.PythonItemExporter._serialize_value:
  - 340
  - 341
  - 342
  - 343
  - 344
  - 345
  - 346
  - 347
  scrapy.exporters.PythonItemExporter.export_item:
  - 355
  scrapy.exporters.PythonItemExporter.serialize_field:
  - 336
  - 337
  scrapy.exporters.XmlItemExporter.__init__:
  - 160
  - 161
  - 163
  - 158
  - 159
  scrapy.exporters.XmlItemExporter._beautify_indent:
  - 170
  - 171
  scrapy.exporters.XmlItemExporter._beautify_newline:
  - 166
  - 167
  scrapy.exporters.XmlItemExporter._export_xml_field:
  - 193
  - 194
  - 195
  - 196
  - 197
  - 198
  - 199
  - 200
  - 201
  - 202
  - 203
  - 204
  - 205
  - 206
  - 208
  - 209
  - 210
  scrapy.exporters.XmlItemExporter.export_item:
  - 179
  - 180
  - 181
  - 182
  - 183
  - 184
  - 185
  - 186
  scrapy.exporters.XmlItemExporter.finish_exporting:
  - 189
  - 190
  scrapy.exporters.XmlItemExporter.start_exporting:
  - 176
  - 174
  - 175
  scrapy.extension:
  - 1
  scrapy.extension.ExtensionManager._get_mwlist_from_settings:
  - 15
  scrapy.extensions.closespider:
  - 1
  - 13
  scrapy.extensions.closespider.CloseSpider.__init__:
  - 21
  - 22
  - 23
  - 24
  - 25
  - 28
  - 31
  - 33
  - 34
  - 35
  - 36
  - 37
  - 38
  - 39
  - 40
  - 41
  - 44
  - 47
  - 50
  scrapy.extensions.closespider.CloseSpider._count_items_produced:
  - 112
  - 105
  - 108
  scrapy.extensions.closespider.CloseSpider.error_count:
  - 58
  - 59
  scrapy.extensions.closespider.CloseSpider.from_crawler:
  - 54
  scrapy.extensions.closespider.CloseSpider.item_scraped:
  - 78
  - 79
  scrapy.extensions.closespider.CloseSpider.page_count:
  - 64
  - 63
  scrapy.extensions.closespider.CloseSpider.spider_closed:
  - 82
  - 83
  - 84
  - 86
  - 87
  - 88
  scrapy.extensions.closespider.CloseSpider.spider_opened:
  - 69
  scrapy.extensions.closespider.CloseSpider.spider_opened_no_item:
  - 96
  - 93
  - 94
  scrapy.extensions.corestats:
  - 1
  scrapy.extensions.corestats.CoreStats.from_crawler:
  - 16
  - 17
  - 18
  - 19
  - 20
  - 21
  scrapy.extensions.corestats.CoreStats.item_dropped:
  - 46
  - 47
  scrapy.extensions.corestats.CoreStats.item_scraped:
  - 39
  scrapy.extensions.corestats.CoreStats.response_received:
  - 42
  scrapy.extensions.corestats.CoreStats.spider_closed:
  - 32
  - 35
  - 36
  - 29
  - 31
  scrapy.extensions.corestats.CoreStats.spider_opened:
  - 25
  - 26
  scrapy.extensions.debug:
  - 1
  - 17
  scrapy.extensions.debug.Debugger.__init__:
  - 60
  scrapy.extensions.debug.Debugger._enter_debugger:
  - 66
  scrapy.extensions.debug.StackTraceDump.__init__:
  - 24
  - 25
  scrapy.extensions.debug.StackTraceDump._thread_stacks:
  - 48
  - 50
  - 51
  - 52
  scrapy.extensions.debug.StackTraceDump.dump_stacktrace:
  - 40
  - 36
  - 37
  - 38
  scrapy.extensions.debug.StackTraceDump.from_crawler:
  - 32
  scrapy.extensions.feedexport:
  - 1
  - 34
  - 385
  scrapy.extensions.feedexport.BlockingFeedStorage.open:
  - 104
  - 107
  scrapy.extensions.feedexport.BlockingFeedStorage.store:
  - 110
  scrapy.extensions.feedexport.FTPFeedStorage.__init__:
  - 288
  - 291
  - 282
  - 283
  - 286
  scrapy.extensions.feedexport.FTPFeedStorage._store_in_thread:
  - 303
  scrapy.extensions.feedexport.FTPFeedStorage.from_crawler:
  - 298
  - 295
  scrapy.extensions.feedexport.FeedExporter.__init__:
  - 446
  - 422
  - 423
  - 424
  - 427
  - 441
  - 431
  - 433
  - 434
  - 437
  - 439
  - 440
  - 409
  - 442
  - 444
  - 413
  - 414
  scrapy.extensions.feedexport.FeedExporter._close_slot:
  - 482
  - 484
  - 485
  - 487
  - 488
  - 494
  - 496
  - 497
  - 499
  - 500
  - 502
  - 503
  - 504
  - 508
  scrapy.extensions.feedexport.FeedExporter._close_slot.<lambda1>:
  - 504
  scrapy.extensions.feedexport.FeedExporter._close_slot.<lambda2>:
  - 508
  scrapy.extensions.feedexport.FeedExporter._close_slot.get_file:
  - 477
  - 478
  scrapy.extensions.feedexport.FeedExporter._exporter_supported:
  - 597
  - 599
  scrapy.extensions.feedexport.FeedExporter._get_storage:
  - 640
  - 647
  - 648
  - 650
  - 651
  - 654
  - 656
  - 634
  - 639
  scrapy.extensions.feedexport.FeedExporter._get_storage.build_instance:
  - 643
  scrapy.extensions.feedexport.FeedExporter._get_uri_params:
  - 674
  - 676
  - 678
  - 667
  - 668
  - 669
  - 670
  - 671
  scrapy.extensions.feedexport.FeedExporter._handle_store_error:
  - 513
  - 516
  - 519
  scrapy.extensions.feedexport.FeedExporter._handle_store_success:
  - 522
  - 523
  scrapy.extensions.feedexport.FeedExporter._load_components:
  - 587
  - 589
  - 591
  scrapy.extensions.feedexport.FeedExporter._load_filter:
  - 683
  - 684
  scrapy.extensions.feedexport.FeedExporter._settings_are_valid:
  - 602
  - 610
  - 606
  - 607
  scrapy.extensions.feedexport.FeedExporter._start_new_batch:
  - 536
  - 548
  - 526
  - 535
  scrapy.extensions.feedexport.FeedExporter._storage_supported:
  - 620
  - 621
  - 623
  - 626
  - 631
  scrapy.extensions.feedexport.FeedExporter.close_spider:
  - 463
  - 464
  - 467
  - 468
  - 471
  - 472
  scrapy.extensions.feedexport.FeedExporter.from_crawler:
  - 396
  - 397
  - 398
  - 399
  scrapy.extensions.feedexport.FeedExporter.item_scraped:
  - 583
  - 554
  - 555
  - 556
  - 561
  - 562
  - 565
  - 569
  - 572
  - 573
  - 574
  scrapy.extensions.feedexport.FeedExporter.open_spider:
  - 450
  - 451
  - 452
  - 453
  scrapy.extensions.feedexport.FeedSlot._get_exporter:
  - 377
  scrapy.extensions.feedexport.FeedSlot._get_instance:
  - 374
  scrapy.extensions.feedexport.FeedSlot.finish_exporting:
  - 380
  - 381
  scrapy.extensions.feedexport.FeedSlot.start_exporting:
  - 353
  - 354
  - 355
  - 356
  - 359
  - 369
  - 370
  scrapy.extensions.feedexport.FileFeedStorage.__init__:
  - 140
  - 142
  scrapy.extensions.feedexport.FileFeedStorage.open:
  - 145
  - 146
  - 147
  - 148
  scrapy.extensions.feedexport.FileFeedStorage.store:
  - 151
  scrapy.extensions.feedexport.GCSFeedStorage.__init__:
  - 252
  scrapy.extensions.feedexport.GCSFeedStorage._store_in_thread:
  - 265
  - 268
  - 269
  - 270
  - 271
  scrapy.extensions.feedexport.GCSFeedStorage.from_crawler:
  - 258
  scrapy.extensions.feedexport.IFeedStorage:
  - 86
  scrapy.extensions.feedexport.IFeedStorage.__init__:
  - 89
  scrapy.extensions.feedexport.IFeedStorage.open:
  - 93
  scrapy.extensions.feedexport.IFeedStorage.store:
  - 97
  scrapy.extensions.feedexport.ItemFilter:
  - 50
  scrapy.extensions.feedexport.ItemFilter.__init__:
  - 64
  - 65
  - 66
  - 69
  - 63
  scrapy.extensions.feedexport.ItemFilter.accepts:
  - 72
  - 81
  - 80
  scrapy.extensions.feedexport.S3FeedStorage.__init__:
  - 193
  - 167
  - 169
  - 201
  - 203
  - 179
  - 212
  - 213
  - 182
  - 184
  scrapy.extensions.feedexport.S3FeedStorage._store_in_thread:
  - 234
  - 235
  - 237
  - 242
  - 245
  scrapy.extensions.feedexport.S3FeedStorage.from_crawler:
  - 221
  scrapy.extensions.feedexport.StdoutFeedStorage.__init__:
  - 122
  - 123
  - 119
  scrapy.extensions.feedexport.build_storage:
  - 46
  scrapy.extensions.httpcache:
  - 20
  scrapy.extensions.httpcache.DbmCacheStorage.__init__:
  - 224
  - 225
  - 223
  scrapy.extensions.httpcache.DbmCacheStorage._read_data:
  - 274
  - 267
  - 277
  - 270
  scrapy.extensions.httpcache.DbmCacheStorage.close_spider:
  - 241
  scrapy.extensions.httpcache.DbmCacheStorage.open_spider:
  - 232
  - 229
  - 230
  scrapy.extensions.httpcache.DbmCacheStorage.retrieve_response:
  - 244
  - 245
  - 249
  - 251
  - 252
  scrapy.extensions.httpcache.DbmCacheStorage.store_response:
  - 256
  - 264
  - 260
  - 263
  scrapy.extensions.httpcache.DummyPolicy.__init__:
  - 25
  - 27
  scrapy.extensions.httpcache.DummyPolicy.should_cache_request:
  - 31
  scrapy.extensions.httpcache.FilesystemCacheStorage.__init__:
  - 282
  - 283
  - 284
  scrapy.extensions.httpcache.FilesystemCacheStorage._get_request_path:
  - 344
  - 343
  scrapy.extensions.httpcache.FilesystemCacheStorage._read_meta:
  - 352
  - 354
  - 355
  - 347
  - 349
  - 351
  scrapy.extensions.httpcache.FilesystemCacheStorage.open_spider:
  - 288
  scrapy.extensions.httpcache.FilesystemCacheStorage.retrieve_response:
  - 301
  - 302
  - 303
  - 305
  - 306
  - 307
  - 308
  - 309
  - 310
  - 312
  - 313
  - 314
  scrapy.extensions.httpcache.FilesystemCacheStorage.store_response:
  - 320
  - 321
  - 327
  - 329
  - 330
  - 331
  - 332
  - 333
  - 334
  - 335
  - 336
  - 337
  - 338
  - 339
  - 340
  - 318
  - 319
  scrapy.extensions.httpcache.RFC2616Policy.__init__:
  - 47
  - 48
  - 49
  - 51
  - 52
  scrapy.extensions.httpcache.RFC2616Policy._compute_current_age:
  - 207
  - 208
  - 211
  - 213
  - 214
  scrapy.extensions.httpcache.RFC2616Policy._compute_freshness_lifetime:
  - 195
  - 173
  - 174
  - 175
  - 179
  - 182
  - 183
  - 186
  - 190
  - 191
  scrapy.extensions.httpcache.RFC2616Policy._get_max_age:
  - 166
  scrapy.extensions.httpcache.RFC2616Policy._parse_cachecontrol:
  - 56
  - 57
  - 58
  - 59
  - 60
  - 61
  scrapy.extensions.httpcache.RFC2616Policy._set_conditional_validators:
  - 161
  - 156
  scrapy.extensions.httpcache.RFC2616Policy.is_cached_response_fresh:
  - 131
  - 135
  - 104
  - 105
  - 106
  - 109
  - 110
  - 141
  - 113
  - 115
  - 116
  - 117
  - 119
  - 122
  scrapy.extensions.httpcache.RFC2616Policy.is_cached_response_valid:
  - 147
  - 148
  - 149
  scrapy.extensions.httpcache.RFC2616Policy.should_cache_request:
  - 66
  - 68
  - 70
  scrapy.extensions.httpcache.RFC2616Policy.should_cache_response:
  - 96
  - 79
  - 81
  - 84
  - 87
  - 90
  - 93
  scrapy.extensions.httpcache.parse_cachecontrol:
  - 359
  - 371
  - 372
  - 373
  - 374
  scrapy.extensions.httpcache.rfc1123_to_epoch:
  - 380
  - 381
  scrapy.extensions.logstats:
  - 8
  scrapy.extensions.logstats.LogStats:
  - 12
  scrapy.extensions.logstats.LogStats.from_crawler:
  - 22
  - 23
  - 25
  - 26
  - 27
  scrapy.extensions.logstats.LogStats.log:
  - 54
  - 38
  - 39
  scrapy.extensions.logstats.LogStats.spider_closed:
  - 57
  - 58
  scrapy.extensions.logstats.LogStats.spider_opened:
  - 34
  - 35
  scrapy.extensions.memdebug:
  - 1
  scrapy.extensions.memdebug.MemoryDebugger.from_crawler:
  - 20
  - 22
  - 23
  scrapy.extensions.memdebug.MemoryDebugger.spider_closed:
  - 32
  - 34
  - 35
  - 27
  - 28
  - 29
  - 31
  scrapy.extensions.memusage:
  - 1
  - 19
  scrapy.extensions.memusage.MemoryUsage.__init__:
  - 34
  - 35
  - 36
  - 37
  - 40
  - 41
  - 42
  - 24
  - 28
  scrapy.extensions.memusage.MemoryUsage._check_limit:
  - 96
  - 97
  - 101
  - 103
  - 79
  - 80
  - 81
  - 83
  - 88
  - 91
  - 93
  - 94
  scrapy.extensions.memusage.MemoryUsage._check_warning:
  - 109
  - 111
  - 112
  - 114
  - 119
  - 122
  - 124
  - 125
  scrapy.extensions.memusage.MemoryUsage._send_report:
  - 129
  - 131
  - 132
  - 133
  - 139
  - 141
  scrapy.extensions.memusage.MemoryUsage.engine_started:
  - 64
  - 65
  - 66
  - 67
  - 68
  - 56
  - 58
  - 59
  - 60
  - 61
  - 62
  - 63
  scrapy.extensions.memusage.MemoryUsage.engine_stopped:
  - 72
  - 73
  - 71
  scrapy.extensions.memusage.MemoryUsage.from_crawler:
  - 46
  scrapy.extensions.memusage.MemoryUsage.get_virtual_size:
  - 49
  - 50
  scrapy.extensions.memusage.MemoryUsage.update:
  - 76
  scrapy.extensions.periodic_log:
  - 10
  scrapy.extensions.periodic_log.PeriodicLog:
  - 14
  scrapy.extensions.periodic_log.PeriodicLog.__init__:
  - 32
  - 33
  - 34
  - 28
  - 29
  - 30
  - 31
  scrapy.extensions.periodic_log.PeriodicLog.from_crawler:
  - 64
  - 39
  - 40
  - 71
  - 72
  - 43
  - 47
  - 51
  - 55
  - 59
  - 62
  scrapy.extensions.periodic_log.PeriodicLog.log:
  - 85
  - 86
  - 87
  - 88
  - 89
  - 90
  - 91
  scrapy.extensions.periodic_log.PeriodicLog.log_crawler_stats:
  - 120
  - 119
  scrapy.extensions.periodic_log.PeriodicLog.log_delta:
  - 96
  - 97
  - 98
  - 100
  scrapy.extensions.periodic_log.PeriodicLog.log_timing:
  - 105
  - 110
  - 111
  scrapy.extensions.periodic_log.PeriodicLog.param_allowed:
  - 128
  - 130
  - 132
  - 133
  - 125
  - 127
  scrapy.extensions.periodic_log.PeriodicLog.spider_closed:
  - 138
  - 139
  - 140
  scrapy.extensions.periodic_log.PeriodicLog.spider_opened:
  - 80
  - 81
  - 76
  scrapy.extensions.postprocessing:
  - 1
  scrapy.extensions.postprocessing.Bz2Plugin:
  - 49
  scrapy.extensions.postprocessing.Bz2Plugin.__init__:
  - 62
  - 63
  scrapy.extensions.postprocessing.Bz2Plugin.close:
  - 72
  - 71
  scrapy.extensions.postprocessing.Bz2Plugin.write:
  - 68
  scrapy.extensions.postprocessing.GzipPlugin:
  - 14
  scrapy.extensions.postprocessing.GzipPlugin.__init__:
  - 32
  - 29
  - 30
  - 31
  scrapy.extensions.postprocessing.GzipPlugin.close:
  - 44
  - 45
  scrapy.extensions.postprocessing.GzipPlugin.write:
  - 41
  scrapy.extensions.postprocessing.LZMAPlugin:
  - 76
  scrapy.extensions.postprocessing.LZMAPlugin.__init__:
  - 96
  - 97
  - 98
  - 99
  - 100
  scrapy.extensions.postprocessing.LZMAPlugin.close:
  - 113
  - 114
  scrapy.extensions.postprocessing.LZMAPlugin.write:
  - 110
  scrapy.extensions.postprocessing.PostProcessingManager:
  - 121
  scrapy.extensions.postprocessing.PostProcessingManager.__init__:
  - 136
  - 133
  scrapy.extensions.postprocessing.PostProcessingManager._get_head_plugin:
  - 168
  - 167
  scrapy.extensions.postprocessing.PostProcessingManager._load_plugins:
  - 162
  scrapy.extensions.postprocessing.PostProcessingManager.close:
  - 153
  - 156
  scrapy.extensions.postprocessing.PostProcessingManager.tell:
  - 150
  scrapy.extensions.postprocessing.PostProcessingManager.write:
  - 139
  - 147
  scrapy.extensions.spiderstate.SpiderState:
  - 10
  scrapy.extensions.spiderstate.SpiderState.from_crawler:
  - 17
  - 18
  - 21
  - 22
  - 23
  scrapy.extensions.spiderstate.SpiderState.spider_closed:
  - 27
  - 28
  - 29
  scrapy.extensions.spiderstate.SpiderState.spider_opened:
  - 32
  - 33
  - 34
  scrapy.extensions.spiderstate.SpiderState.statefn:
  - 40
  scrapy.extensions.statsmailer:
  - 1
  scrapy.extensions.statsmailer.StatsMailer.from_crawler:
  - 20
  - 21
  - 23
  - 24
  - 25
  scrapy.extensions.statsmailer.StatsMailer.spider_closed:
  - 33
  - 34
  - 29
  - 31
  scrapy.extensions.telnet:
  - 1
  - 35
  - 21
  - 31
  scrapy.extensions.telnet.TelnetConsole.__init__:
  - 40
  - 42
  - 50
  - 56
  - 57
  - 58
  - 60
  - 61
  scrapy.extensions.telnet.TelnetConsole._get_telnet_vars:
  - 114
  - 108
  scrapy.extensions.telnet.TelnetConsole._get_telnet_vars.<lambda1>:
  - 108
  scrapy.extensions.telnet.TelnetConsole.from_crawler:
  - 65
  scrapy.extensions.telnet.TelnetConsole.protocol:
  - 96
  scrapy.extensions.telnet.TelnetConsole.protocol.Portal:
  - 81
  scrapy.extensions.telnet.TelnetConsole.protocol.Portal.login:
  - 85
  - 86
  - 87
  - 91
  - 92
  - 94
  scrapy.extensions.telnet.TelnetConsole.start_listening:
  - 68
  - 69
  - 70
  scrapy.extensions.telnet.TelnetConsole.stop_listening:
  - 77
  scrapy.extensions.throttle:
  - 6
  scrapy.extensions.throttle.AutoThrottle.__init__:
  - 12
  - 15
  - 16
  - 19
  - 20
  scrapy.extensions.throttle.AutoThrottle._adjust_delay:
  - 89
  - 98
  - 92
  - 77
  scrapy.extensions.throttle.AutoThrottle._get_slot:
  - 73
  - 74
  scrapy.extensions.throttle.AutoThrottle._max_delay:
  - 38
  scrapy.extensions.throttle.AutoThrottle._min_delay:
  - 35
  scrapy.extensions.throttle.AutoThrottle._response_downloaded:
  - 46
  - 47
  - 48
  - 52
  - 53
  - 55
  - 56
  - 57
  scrapy.extensions.throttle.AutoThrottle._spider_opened:
  - 29
  - 30
  - 31
  scrapy.extensions.throttle.AutoThrottle._start_delay:
  - 41
  - 42
  scrapy.extensions.throttle.AutoThrottle.from_crawler:
  - 26
  scrapy.http:
  - 1
  scrapy.http.cookies:
  - 15
  scrapy.http.cookies.CookieJar.__init__:
  - 20
  - 21
  - 22
  scrapy.http.cookies.CookieJar.__iter__:
  - 74
  scrapy.http.cookies.CookieJar.__len__:
  - 77
  scrapy.http.cookies.CookieJar.add_cookie_header:
  - 32
  - 33
  - 37
  - 38
  - 41
  - 42
  - 43
  - 49
  - 50
  - 51
  - 53
  - 54
  - 55
  - 56
  - 59
  - 61
  scrapy.http.cookies.CookieJar.clear:
  - 71
  scrapy.http.cookies.CookieJar.clear_session_cookies:
  - 68
  scrapy.http.cookies.CookieJar.extract_cookies:
  - 27
  - 28
  - 29
  scrapy.http.cookies.CookieJar.make_cookies:
  - 83
  - 84
  - 85
  scrapy.http.cookies.CookieJar.set_cookie:
  - 88
  scrapy.http.cookies.CookieJar.set_cookie_if_ok:
  - 91
  scrapy.http.cookies.CookieJar.set_policy:
  - 80
  scrapy.http.cookies.WrappedRequest:
  - 122
  scrapy.http.cookies.WrappedRequest.add_unredirected_header:
  - 185
  scrapy.http.cookies.WrappedRequest.full_url:
  - 151
  scrapy.http.cookies.WrappedRequest.get_header:
  - 173
  scrapy.http.cookies.WrappedRequest.get_host:
  - 134
  scrapy.http.cookies.WrappedRequest.get_type:
  - 137
  scrapy.http.cookies.WrappedRequest.header_items:
  - 178
  - 179
  - 181
  scrapy.http.cookies.WrappedRequest.host:
  - 155
  scrapy.http.cookies.WrappedRequest.is_unverifiable:
  - 147
  - 140
  scrapy.http.cookies.WrappedRequest.origin_req_host:
  - 167
  scrapy.http.cookies.WrappedRequest.type:
  - 159
  scrapy.http.cookies.WrappedRequest.unverifiable:
  - 163
  scrapy.http.cookies.WrappedResponse.get_all:
  - 197
  scrapy.http.cookies.potential_domain_matches:
  - 103
  - 104
  - 106
  - 107
  - 95
  scrapy.http.headers:
  - 22
  scrapy.http.headers.Headers:
  - 33
  scrapy.http.headers.Headers.__copy__:
  - 135
  scrapy.http.headers.Headers.__getitem__:
  - 81
  scrapy.http.headers.Headers.__init__:
  - 41
  scrapy.http.headers.Headers._tobytes:
  - 71
  - 73
  - 74
  - 75
  - 76
  scrapy.http.headers.Headers.appendlist:
  - 108
  - 109
  scrapy.http.headers.Headers.get:
  - 87
  scrapy.http.headers.Headers.getlist:
  - 96
  - 93
  - 95
  scrapy.http.headers.Headers.items:
  - 113
  scrapy.http.headers.Headers.normkey:
  - 53
  - 54
  scrapy.http.headers.Headers.normvalue:
  - 68
  - 57
  - 59
  - 61
  - 63
  scrapy.http.headers.Headers.setlistdefault:
  - 105
  scrapy.http.headers.Headers.to_string:
  - 120
  scrapy.http.headers.Headers.to_unicode_dict:
  - 128
  - 129
  - 131
  - 123
  - 126
  scrapy.http.headers.Headers.update:
  - 48
  - 49
  - 50
  - 46
  scrapy.http.headers.Headers.values:
  - 116
  scrapy.http.request:
  - 1
  - 34
  scrapy.http.request.NO_CALLBACK:
  - 38
  scrapy.http.request.Request:
  - 81
  - 62
  scrapy.http.request.Request.__init__:
  - 128
  - 130
  - 106
  - 107
  - 108
  - 109
  - 113
  - 117
  - 123
  - 126
  scrapy.http.request.Request._set_body:
  - 167
  scrapy.http.request.Request._set_url:
  - 149
  - 152
  - 153
  - 155
  - 157
  - 158
  scrapy.http.request.Request.cb_kwargs:
  - 134
  scrapy.http.request.Request.copy:
  - 177
  scrapy.http.request.Request.from_curl:
  - 193
  - 220
  - 221
  - 222
  scrapy.http.request.Request.meta:
  - 140
  scrapy.http.request.Request.replace:
  - 180
  - 181
  - 182
  - 183
  - 184
  scrapy.http.request.Request.to_dict:
  - 225
  - 234
  - 235
  - 237
  - 238
  - 240
  - 242
  - 243
  - 244
  scrapy.http.request._find_method:
  - 260
  - 250
  - 252
  - 253
  - 254
  scrapy.http.request.form:
  - 1
  - 29
  scrapy.http.request.form.FormRequest.__init__:
  - 44
  - 47
  - 49
  - 50
  - 51
  - 52
  - 53
  - 56
  - 58
  - 59
  scrapy.http.request.form.FormRequest.from_response:
  - 76
  - 78
  - 81
  - 83
  - 84
  - 85
  - 87
  - 88
  - 89
  - 90
  - 93
  scrapy.http.request.form._get_clickable:
  - 256
  - 226
  - 260
  - 261
  - 262
  - 231
  - 232
  - 263
  - 264
  - 238
  - 242
  - 244
  - 249
  - 250
  - 252
  scrapy.http.request.form._get_form:
  - 128
  - 129
  - 130
  - 131
  - 133
  - 134
  - 135
  - 136
  - 139
  - 140
  - 141
  - 144
  - 145
  - 146
  - 147
  - 157
  - 122
  - 123
  - 124
  - 125
  scrapy.http.request.form._get_form_url:
  - 98
  - 99
  - 100
  - 102
  - 103
  scrapy.http.request.form._get_inputs:
  - 192
  - 194
  - 195
  - 197
  - 166
  - 168
  - 172
  - 174
  - 185
  - 189
  - 190
  - 191
  scrapy.http.request.form._select_value:
  - 215
  scrapy.http.request.form._urlencode:
  - 112
  - 108
  - 110
  scrapy.http.request.form._value:
  - 206
  - 207
  scrapy.http.request.json_request:
  - 1
  scrapy.http.request.json_request.JsonRequest.__init__:
  - 32
  - 33
  - 34
  - 37
  - 38
  - 39
  - 22
  - 23
  - 26
  - 27
  - 30
  - 31
  scrapy.http.request.json_request.JsonRequest._dumps:
  - 60
  - 61
  scrapy.http.request.json_request.JsonRequest.replace:
  - 48
  - 49
  - 52
  - 53
  - 54
  - 55
  - 57
  scrapy.http.request.rpc:
  - 1
  - 13
  scrapy.http.request.rpc.XmlRpcRequest.__init__:
  - 32
  - 33
  - 18
  - 19
  - 20
  - 23
  - 26
  - 29
  scrapy.http.response:
  - 1
  - 35
  scrapy.http.response.Response:
  - 40
  - 55
  scrapy.http.response.Response.__init__:
  - 74
  - 75
  - 76
  - 77
  - 79
  scrapy.http.response.Response._set_body:
  - 121
  - 123
  scrapy.http.response.Response._set_url:
  - 109
  scrapy.http.response.Response.copy:
  - 136
  - 137
  scrapy.http.response.Response.css:
  - 159
  scrapy.http.response.Response.follow:
  - 192
  - 205
  - 207
  - 209
  - 211
  - 213
  scrapy.http.response.Response.follow_all:
  - 257
  - 260
  - 245
  scrapy.http.response.Response.jmespath:
  - 165
  scrapy.http.response.Response.replace:
  - 140
  - 141
  - 142
  - 143
  - 144
  scrapy.http.response.Response.text:
  - 153
  scrapy.http.response.Response.urljoin:
  - 147
  - 149
  scrapy.http.response.Response.xpath:
  - 171
  scrapy.http.response.html:
  - 1
  scrapy.http.response.json:
  - 1
  scrapy.http.response.text:
  - 1
  - 44
  - 47
  scrapy.http.response.text.TextResponse.__init__:
  - 57
  - 61
  scrapy.http.response.text.TextResponse._auto_detect_fun:
  - 136
  - 139
  - 134
  scrapy.http.response.text.TextResponse._body_declared_encoding:
  - 144
  scrapy.http.response.text.TextResponse._body_inferred_encoding:
  - 120
  - 121
  - 123
  - 119
  scrapy.http.response.text.TextResponse._bom_encoding:
  - 148
  scrapy.http.response.text.TextResponse._declared_encoding:
  - 82
  - 83
  - 84
  scrapy.http.response.text.TextResponse._headers_encoding:
  - 115
  - 116
  scrapy.http.response.text.TextResponse._set_body:
  - 73
  - 65
  - 66
  - 71
  scrapy.http.response.text.TextResponse.css:
  - 176
  scrapy.http.response.text.TextResponse.encoding:
  - 77
  scrapy.http.response.text.TextResponse.follow:
  - 194
  - 210
  - 211
  - 212
  - 215
  scrapy.http.response.text.TextResponse.follow_all:
  - 288
  - 289
  - 281
  - 273
  - 277
  - 278
  - 279
  - 280
  - 249
  - 282
  - 285
  - 286
  - 287
  scrapy.http.response.text.TextResponse.jmespath:
  - 161
  - 166
  scrapy.http.response.text.TextResponse.json:
  - 88
  - 93
  - 94
  scrapy.http.response.text.TextResponse.selector:
  - 154
  - 155
  scrapy.http.response.text.TextResponse.text:
  - 105
  - 99
  - 103
  scrapy.http.response.text.TextResponse.urljoin:
  - 109
  - 111
  scrapy.http.response.text.TextResponse.xpath:
  - 171
  scrapy.http.response.text._InvalidSelector:
  - 306
  scrapy.http.response.text._url_from_selector:
  - 321
  - 322
  - 324
  - 312
  - 314
  - 315
  - 317
  scrapy.http.response.xml:
  - 1
  scrapy.interfaces.ISpiderLoader.find_by_request:
  - 17
  scrapy.interfaces.ISpiderLoader.from_settings:
  - 6
  scrapy.interfaces.ISpiderLoader.list:
  - 13
  scrapy.interfaces.ISpiderLoader.load:
  - 9
  scrapy.item:
  - 1
  scrapy.item.Field:
  - 17
  scrapy.item.Item:
  - 48
  scrapy.item.Item.__getattr__:
  - 91
  scrapy.item.Item.__init__:
  - 74
  - 75
  scrapy.item.Item.__iter__:
  - 104
  scrapy.item.Item.__len__:
  - 101
  scrapy.item.Item.__repr__:
  - 112
  scrapy.item.Item.__setattr__:
  - 96
  - 98
  scrapy.item.Item.__setitem__:
  - 82
  scrapy.item.Item.copy:
  - 115
  scrapy.item.Item.deepcopy:
  - 118
  - 119
  scrapy.item.Item.keys:
  - 109
  scrapy.item.ItemMeta:
  - 21
  scrapy.item.ItemMeta.__new__:
  - 33
  - 34
  - 35
  - 37
  - 42
  - 44
  - 27
  - 28
  - 29
  - 31
  scrapy.link:
  - 1
  scrapy.link.Link:
  - 11
  scrapy.link.Link.__eq__:
  - 42
  scrapy.link.Link.__hash__:
  - 53
  scrapy.link.Link.__init__:
  - 33
  scrapy.linkextractors:
  - 112
  - 1
  scrapy.linkextractors._is_valid_url:
  - 120
  scrapy.linkextractors._matches:
  - 116
  scrapy.linkextractors.lxmlhtml:
  - 32
  - 1
  - 27
  scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor:
  - 130
  scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor.__init__:
  - 162
  - 165
  - 166
  - 168
  - 169
  - 170
  - 173
  - 176
  - 178
  - 179
  - 149
  - 150
  - 151
  - 152
  - 159
  scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._extract_links:
  - 227
  scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._link_allowed:
  - 194
  - 196
  - 200
  - 183
  - 185
  - 187
  - 189
  - 190
  scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor._process_links:
  - 219
  - 220
  - 221
  - 222
  - 223
  scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor.extract_links:
  - 230
  - 239
  - 240
  - 242
  - 247
  - 248
  - 249
  - 250
  - 251
  scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor.matches:
  - 205
  - 207
  - 211
  - 215
  - 216
  scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor.__init__:
  - 66
  - 60
  - 61
  - 62
  scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._deduplicate_if_needed:
  - 124
  - 125
  scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._extract_links:
  - 97
  - 101
  - 102
  - 104
  - 105
  - 107
  - 108
  - 82
  - 85
  - 86
  - 87
  - 91
  - 92
  - 95
  scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._iter_links:
  - 70
  - 71
  - 74
  - 75
  - 77
  scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor._process_links:
  - 121
  - 117
  scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor.extract_links:
  - 112
  - 111
  scrapy.linkextractors.lxmlhtml._canonicalize_link_url:
  - 47
  scrapy.linkextractors.lxmlhtml._nons:
  - 36
  - 37
  - 38
  scrapy.loader:
  - 1
  scrapy.loader.ItemLoader:
  - 13
  scrapy.loader.ItemLoader.__init__:
  - 90
  - 91
  - 85
  - 87
  scrapy.logformatter:
  - 13
  scrapy.logformatter.LogFormatter:
  - 30
  scrapy.logformatter.LogFormatter.crawled:
  - 78
  - 68
  - 69
  - 70
  scrapy.logformatter.LogFormatter.download_error:
  - 165
  - 159
  scrapy.logformatter.LogFormatter.dropped:
  - 106
  scrapy.logformatter.LogFormatter.from_crawler:
  - 178
  scrapy.logformatter.LogFormatter.item_error:
  - 119
  scrapy.logformatter.LogFormatter.scraped:
  - 88
  - 90
  - 91
  scrapy.logformatter.LogFormatter.spider_error:
  - 139
  - 148
  scrapy.mail:
  - 1
  - 22
  scrapy.mail.MailSender.__init__:
  - 50
  - 51
  scrapy.mail.MailSender._create_sender_factory:
  - 195
  - 198
  scrapy.mail.MailSender._sendmail:
  - 171
  - 172
  - 174
  - 176
  - 177
  - 178
  - 181
  scrapy.mail.MailSender._sent_failed:
  - 153
  - 154
  scrapy.mail.MailSender._sent_ok:
  - 141
  scrapy.mail.MailSender.from_settings:
  - 64
  - 65
  - 66
  - 59
  scrapy.mail.MailSender.send:
  - 130
  - 131
  - 137
  - 82
  - 83
  - 85
  - 87
  - 88
  - 91
  - 92
  - 95
  - 96
  - 97
  - 99
  - 100
  - 101
  - 102
  - 103
  - 104
  - 105
  - 106
  - 107
  - 110
  - 112
  - 114
  - 115
  - 117
  - 118
  scrapy.mail._to_bytes_or_none:
  - 33
  - 31
  scrapy.middleware:
  - 35
  - 28
  scrapy.middleware.MiddlewareManager:
  - 39
  scrapy.middleware.MiddlewareManager.__init__:
  - 49
  - 50
  - 51
  scrapy.middleware.MiddlewareManager._add_middleware:
  - 96
  - 97
  - 98
  - 99
  scrapy.middleware.MiddlewareManager._process_chain:
  - 106
  - 107
  scrapy.middleware.MiddlewareManager._process_parallel:
  - 102
  - 103
  scrapy.middleware.MiddlewareManager.close_spider:
  - 113
  scrapy.middleware.MiddlewareManager.from_crawler:
  - 93
  scrapy.middleware.MiddlewareManager.from_settings:
  - 64
  - 66
  - 67
  - 68
  - 70
  - 71
  - 72
  - 74
  - 75
  - 81
  - 89
  - 61
  scrapy.middleware.MiddlewareManager.open_spider:
  - 110
  scrapy.pipelines:
  - 1
  scrapy.pipelines.ItemPipelineManager._add_middleware:
  - 24
  - 25
  - 26
  - 27
  scrapy.pipelines.ItemPipelineManager._get_mwlist_from_settings:
  - 21
  scrapy.pipelines.ItemPipelineManager.process_item:
  - 31
  scrapy.pipelines.files:
  - 1
  - 37
  scrapy.pipelines.files.FSFilesStore.__init__:
  - 50
  - 51
  - 52
  - 54
  - 55
  scrapy.pipelines.files.FSFilesStore._get_filesystem_path:
  - 77
  - 78
  scrapy.pipelines.files.FSFilesStore._mkdir:
  - 81
  - 82
  - 83
  - 84
  - 85
  scrapy.pipelines.files.FSFilesStore.persist_file:
  - 60
  - 61
  - 62
  scrapy.pipelines.files.FSFilesStore.stat_file:
  - 72
  - 65
  - 67
  - 71
  scrapy.pipelines.files.FTPFilesStore.__init__:
  - 273
  - 268
  - 276
  - 270
  scrapy.pipelines.files.FTPFilesStore.persist_file:
  - 280
  scrapy.pipelines.files.FTPFilesStore.stat_file:
  - 308
  scrapy.pipelines.files.FTPFilesStore.stat_file._stat_file:
  - 294
  - 295
  - 296
  - 297
  - 298
  - 300
  - 301
  - 302
  - 303
  scrapy.pipelines.files.FileException:
  - 45
  scrapy.pipelines.files.FilesPipeline:
  - 312
  scrapy.pipelines.files.FilesPipeline.__init__:
  - 352
  - 353
  - 356
  - 357
  - 359
  - 361
  - 362
  - 364
  - 365
  - 368
  - 345
  - 346
  - 349
  - 350
  scrapy.pipelines.files.FilesPipeline._get_store:
  - 400
  - 395
  - 398
  scrapy.pipelines.files.FilesPipeline.file_downloaded:
  - 531
  - 532
  - 533
  - 534
  - 535
  scrapy.pipelines.files.FilesPipeline.file_path:
  - 544
  - 545
  - 548
  - 550
  - 551
  - 552
  scrapy.pipelines.files.FilesPipeline.from_settings:
  - 392
  - 389
  scrapy.pipelines.files.FilesPipeline.get_media_requests:
  - 528
  - 527
  scrapy.pipelines.files.FilesPipeline.inc_stats:
  - 522
  - 523
  scrapy.pipelines.files.FilesPipeline.item_completed:
  - 539
  - 540
  scrapy.pipelines.files.FilesPipeline.media_downloaded:
  - 484
  - 490
  - 493
  - 494
  - 463
  - 496
  - 465
  - 466
  - 505
  - 474
  - 475
  scrapy.pipelines.files.FilesPipeline.media_failed:
  - 448
  - 446
  - 447
  scrapy.pipelines.files.FilesPipeline.media_to_download:
  - 433
  - 434
  - 435
  - 436
  - 437
  scrapy.pipelines.files.FilesPipeline.media_to_download.<lambda2>:
  - 437
  - 439
  scrapy.pipelines.files.FilesPipeline.media_to_download._onsuccess:
  - 416
  - 417
  - 423
  - 425
  - 404
  - 407
  - 408
  - 411
  - 413
  scrapy.pipelines.files.GCSFilesStore.__init__:
  - 209
  - 210
  - 211
  - 213
  - 216
  - 217
  - 222
  - 223
  scrapy.pipelines.files.GCSFilesStore._get_content_type:
  - 242
  scrapy.pipelines.files.GCSFilesStore.persist_file:
  - 256
  - 257
  - 250
  - 251
  - 253
  - 254
  scrapy.pipelines.files.GCSFilesStore.stat_file:
  - 236
  - 237
  scrapy.pipelines.files.GCSFilesStore.stat_file._onsuccess:
  - 232
  - 230
  - 231
  scrapy.pipelines.files.S3FilesStore.__init__:
  - 103
  - 107
  - 108
  - 118
  - 120
  scrapy.pipelines.files.S3FilesStore._get_boto_key:
  - 133
  scrapy.pipelines.files.S3FilesStore._headers_to_botocore_kwargs:
  - 187
  - 155
  - 157
  scrapy.pipelines.files.S3FilesStore.persist_file:
  - 138
  - 140
  - 141
  - 142
  - 143
  - 144
  - 149
  scrapy.pipelines.files.S3FilesStore.stat_file:
  - 129
  scrapy.pipelines.files.S3FilesStore.stat_file._onsuccess:
  - 124
  - 126
  scrapy.pipelines.files._to_string:
  - 41
  scrapy.pipelines.images:
  - 1
  scrapy.pipelines.images.ImageException:
  - 40
  scrapy.pipelines.images.ImagesPipeline:
  - 44
  scrapy.pipelines.images.ImagesPipeline.__init__:
  - 69
  - 71
  - 72
  - 74
  - 79
  - 81
  - 83
  - 86
  - 87
  - 89
  - 90
  - 92
  - 93
  - 94
  scrapy.pipelines.images.ImagesPipeline.convert_image:
  - 183
  - 184
  - 191
  - 192
  - 193
  - 194
  - 195
  - 196
  - 197
  - 198
  - 199
  - 200
  - 201
  - 203
  - 204
  - 212
  - 213
  - 216
  - 217
  scrapy.pipelines.images.ImagesPipeline.file_downloaded:
  - 123
  scrapy.pipelines.images.ImagesPipeline.file_path:
  - 230
  scrapy.pipelines.images.ImagesPipeline.from_settings:
  - 120
  - 117
  scrapy.pipelines.images.ImagesPipeline.get_images:
  - 164
  - 165
  - 167
  - 168
  - 170
  - 172
  - 173
  - 142
  - 143
  - 176
  - 177
  - 146
  - 179
  - 180
  - 153
  - 154
  - 157
  - 158
  scrapy.pipelines.images.ImagesPipeline.get_media_requests:
  - 221
  - 222
  scrapy.pipelines.images.ImagesPipeline.image_downloaded:
  - 128
  - 129
  - 130
  - 132
  - 127
  scrapy.pipelines.images.ImagesPipeline.item_completed:
  - 225
  - 226
  scrapy.pipelines.images.ImagesPipeline.thumb_path:
  - 234
  scrapy.pipelines.images.NoimagesDrop:
  - 28
  scrapy.pipelines.images.NoimagesDrop.__init__:
  - 36
  - 31
  scrapy.pipelines.media:
  - 15
  scrapy.pipelines.media.MediaPipeline.SpiderInfo.__init__:
  - 28
  - 30
  scrapy.pipelines.media.MediaPipeline.__init__:
  - 36
  - 37
  - 38
  - 41
  - 42
  scrapy.pipelines.media.MediaPipeline._cache_result_and_execute_waiters:
  - 189
  - 182
  - 183
  - 184
  - 186
  - 155
  - 188
  - 157
  scrapy.pipelines.media.MediaPipeline._check_media_to_download:
  - 130
  - 132
  - 134
  - 135
  - 143
  - 144
  - 145
  scrapy.pipelines.media.MediaPipeline._handle_statuses:
  - 46
  - 47
  scrapy.pipelines.media.MediaPipeline._key_for_pipe:
  - 64
  - 50
  - 59
  - 60
  scrapy.pipelines.media.MediaPipeline._log_exception:
  - 120
  scrapy.pipelines.media.MediaPipeline._modify_media_request:
  - 124
  scrapy.pipelines.media.MediaPipeline._process_request:
  - 100
  - 101
  - 104
  - 105
  - 108
  - 112
  - 113
  - 114
  - 115
  - 116
  - 117
  - 90
  - 91
  scrapy.pipelines.media.MediaPipeline.file_path:
  - 222
  scrapy.pipelines.media.MediaPipeline.from_crawler:
  - 72
  - 74
  scrapy.pipelines.media.MediaPipeline.get_media_requests:
  - 197
  scrapy.pipelines.media.MediaPipeline.item_completed:
  - 209
  - 210
  - 211
  - 212
  - 213
  - 216
  scrapy.pipelines.media.MediaPipeline.media_downloaded:
  - 201
  scrapy.pipelines.media.MediaPipeline.media_failed:
  - 205
  scrapy.pipelines.media.MediaPipeline.media_to_download:
  - 193
  scrapy.pipelines.media.MediaPipeline.open_spider:
  - 80
  scrapy.pipelines.media.MediaPipeline.process_item:
  - 84
  - 85
  - 86
  - 87
  scrapy.pqueues:
  - 6
  scrapy.pqueues.DownloaderAwarePriorityQueue:
  - 146
  scrapy.pqueues.DownloaderAwarePriorityQueue.__init__:
  - 161
  - 172
  - 178
  - 179
  - 156
  scrapy.pqueues.DownloaderAwarePriorityQueue.__len__:
  - 229
  scrapy.pqueues.DownloaderAwarePriorityQueue.close:
  - 224
  - 225
  scrapy.pqueues.DownloaderAwarePriorityQueue.from_crawler:
  - 153
  scrapy.pqueues.DownloaderAwarePriorityQueue.peek:
  - 210
  - 216
  - 217
  - 219
  - 221
  scrapy.pqueues.DownloaderAwarePriorityQueue.pop:
  - 192
  - 195
  - 197
  - 198
  - 190
  scrapy.pqueues.DownloaderAwarePriorityQueue.pqfactory:
  - 185
  - 182
  scrapy.pqueues.DownloaderAwarePriorityQueue.push:
  - 203
  - 204
  - 205
  - 207
  scrapy.pqueues.DownloaderInterface._active_downloads:
  - 139
  - 140
  - 142
  scrapy.pqueues.DownloaderInterface.get_slot_key:
  - 136
  scrapy.pqueues.DownloaderInterface.stats:
  - 133
  scrapy.pqueues.ScrapyPriorityQueue:
  - 28
  scrapy.pqueues.ScrapyPriorityQueue.__init__:
  - 63
  scrapy.pqueues.ScrapyPriorityQueue.__len__:
  - 125
  scrapy.pqueues.ScrapyPriorityQueue.close:
  - 120
  - 121
  - 119
  scrapy.pqueues.ScrapyPriorityQueue.from_crawler:
  - 55
  scrapy.pqueues.ScrapyPriorityQueue.init_prios:
  - 72
  - 66
  - 69
  - 70
  scrapy.pqueues.ScrapyPriorityQueue.peek:
  - 112
  - 106
  - 115
  scrapy.pqueues.ScrapyPriorityQueue.pop:
  - 97
  - 98
  - 100
  - 101
  - 102
  - 94
  scrapy.pqueues.ScrapyPriorityQueue.push:
  - 85
  - 86
  - 87
  - 89
  - 90
  scrapy.pqueues.ScrapyPriorityQueue.qfactory:
  - 75
  - 78
  scrapy.pqueues._path_safe:
  - 24
  - 10
  - 20
  - 23
  scrapy.resolver:
  - 16
  scrapy.resolver.CachingHostnameResolver:
  - 91
  scrapy.resolver.CachingHostnameResolver.from_crawler:
  - 104
  - 107
  - 103
  scrapy.resolver.CachingHostnameResolver.install_on_reactor:
  - 110
  scrapy.resolver.CachingHostnameResolver.resolveHostName:
  - 131
  - 132
  - 133
  - 134
  - 123
  - 124
  scrapy.resolver.CachingThreadedResolver:
  - 21
  scrapy.resolver.CachingThreadedResolver.__init__:
  - 26
  scrapy.resolver.CachingThreadedResolver.from_crawler:
  - 32
  - 33
  - 36
  scrapy.resolver.CachingThreadedResolver.getHostByName:
  - 42
  - 43
  - 49
  - 50
  - 51
  scrapy.resolver.CachingThreadedResolver.install_on_reactor:
  - 39
  scrapy.resolver._CachingResolutionReceiver.addressResolved:
  - 80
  - 81
  scrapy.resolver._CachingResolutionReceiver.resolutionBegan:
  - 76
  scrapy.resolver._CachingResolutionReceiver.resolutionComplete:
  - 84
  - 85
  scrapy.responsetypes:
  - 1
  - 139
  scrapy.responsetypes.ResponseTypes.__init__:
  - 35
  - 36
  - 37
  - 41
  - 42
  - 43
  scrapy.responsetypes.ResponseTypes.from_args:
  - 128
  - 129
  - 130
  - 131
  - 132
  - 133
  - 134
  - 135
  - 125
  scrapy.responsetypes.ResponseTypes.from_body:
  - 101
  - 106
  - 107
  - 108
  - 109
  - 110
  - 111
  - 112
  - 113
  - 114
  - 115
  - 116
  scrapy.responsetypes.ResponseTypes.from_content_disposition:
  - 76
  - 71
  scrapy.responsetypes.ResponseTypes.from_content_type:
  - 64
  - 57
  - 59
  - 62
  scrapy.responsetypes.ResponseTypes.from_filename:
  - 96
  - 97
  - 94
  - 95
  scrapy.responsetypes.ResponseTypes.from_headers:
  - 81
  - 84
  - 85
  - 87
  - 89
  - 90
  scrapy.responsetypes.ResponseTypes.from_mimetype:
  - 46
  - 47
  - 49
  - 51
  - 52
  scrapy.robotstxt:
  - 18
  - 12
  scrapy.robotstxt.ProtegoRobotParser.__init__:
  - 136
  - 135
  scrapy.robotstxt.ProtegoRobotParser.allowed:
  - 145
  - 146
  - 147
  scrapy.robotstxt.ProtegoRobotParser.from_crawler:
  - 141
  scrapy.robotstxt.PythonRobotParser.__init__:
  - 73
  - 76
  - 77
  scrapy.robotstxt.PythonRobotParser.allowed:
  - 88
  - 86
  - 87
  scrapy.robotstxt.PythonRobotParser.from_crawler:
  - 82
  scrapy.robotstxt.ReppyRobotParser.__init__:
  - 97
  - 93
  scrapy.robotstxt.ReppyRobotParser.allowed:
  - 106
  scrapy.robotstxt.ReppyRobotParser.from_crawler:
  - 102
  scrapy.robotstxt.RerpRobotParser.__init__:
  - 114
  - 115
  - 116
  scrapy.robotstxt.RerpRobotParser.allowed:
  - 125
  - 126
  - 127
  scrapy.robotstxt.RerpRobotParser.from_crawler:
  - 121
  scrapy.robotstxt.RobotParser.allowed:
  - 57
  scrapy.robotstxt.RobotParser.from_crawler:
  - 44
  scrapy.robotstxt.decode_robotstxt:
  - 33
  - 23
  - 24
  - 26
  - 30
  scrapy.selector:
  - 1
  scrapy.selector.unified:
  - 1
  - 14
  scrapy.selector.unified.Selector:
  - 36
  scrapy.selector.unified.Selector.__init__:
  - 97
  - 77
  - 83
  - 85
  - 86
  - 88
  - 90
  - 94
  scrapy.selector.unified.SelectorList:
  - 29
  scrapy.selector.unified._response_from_text:
  - 25
  scrapy.selector.unified._st:
  - 18
  - 19
  scrapy.settings:
  - 29
  scrapy.settings.BaseSettings:
  - 89
  - 110
  scrapy.settings.BaseSettings.__delitem__:
  - 435
  scrapy.settings.BaseSettings.__getitem__:
  - 121
  scrapy.settings.BaseSettings.__init__:
  - 117
  - 118
  scrapy.settings.BaseSettings.__iter__:
  - 475
  scrapy.settings.BaseSettings.__len__:
  - 478
  scrapy.settings.BaseSettings.__setitem__:
  - 317
  scrapy.settings.BaseSettings._assert_mutability:
  - 439
  scrapy.settings.BaseSettings._get_key:
  - 489
  - 490
  scrapy.settings.BaseSettings._repr_pretty_:
  - 512
  - 514
  - 511
  scrapy.settings.BaseSettings._to_dict:
  - 482
  - 483
  scrapy.settings.BaseSettings.copy:
  - 443
  - 452
  scrapy.settings.BaseSettings.copy_to_dict:
  - 506
  - 507
  - 494
  scrapy.settings.BaseSettings.delete:
  - 427
  - 429
  - 430
  - 431
  scrapy.settings.BaseSettings.freeze:
  - 455
  scrapy.settings.BaseSettings.frozencopy:
  - 465
  - 470
  - 471
  scrapy.settings.BaseSettings.get:
  - 129
  scrapy.settings.BaseSettings.getbool:
  - 160
  - 162
  - 141
  - 156
  - 158
  scrapy.settings.BaseSettings.getdict:
  - 233
  - 234
  - 235
  - 236
  - 218
  scrapy.settings.BaseSettings.getdictorlist:
  - 264
  - 265
  - 267
  - 269
  - 270
  - 273
  - 274
  - 243
  - 275
  - 276
  - 277
  scrapy.settings.BaseSettings.getfloat:
  - 192
  - 183
  scrapy.settings.BaseSettings.getint:
  - 171
  - 180
  scrapy.settings.BaseSettings.getlist:
  - 197
  - 210
  - 211
  - 212
  - 213
  scrapy.settings.BaseSettings.getpriority:
  - 301
  - 294
  scrapy.settings.BaseSettings.getwithbase:
  - 288
  - 289
  - 290
  - 280
  - 286
  scrapy.settings.BaseSettings.maxpriority:
  - 312
  - 313
  - 306
  - 314
  scrapy.settings.BaseSettings.pop:
  - 520
  - 525
  scrapy.settings.BaseSettings.set:
  - 322
  - 339
  - 340
  - 341
  - 342
  - 345
  - 347
  scrapy.settings.BaseSettings.setdefault:
  - 355
  - 356
  scrapy.settings.BaseSettings.setdict:
  - 364
  scrapy.settings.BaseSettings.setmodule:
  - 384
  - 385
  - 386
  - 387
  - 388
  - 369
  - 383
  scrapy.settings.BaseSettings.update:
  - 416
  - 417
  - 418
  - 419
  - 421
  - 422
  - 392
  - 413
  - 414
  - 415
  scrapy.settings.Settings:
  - 530
  scrapy.settings.Settings.__init__:
  - 546
  - 547
  - 550
  - 551
  - 552
  - 553
  scrapy.settings.SettingsAttribute:
  - 62
  scrapy.settings.SettingsAttribute.__init__:
  - 72
  - 71
  scrapy.settings.SettingsAttribute.set:
  - 80
  - 77
  - 78
  - 79
  scrapy.settings.default_settings:
  - 318
  - 1
  - 322
  - 126
  scrapy.settings.get_settings_priority:
  - 50
  - 55
  scrapy.settings.iter_default_settings:
  - 560
  - 557
  - 558
  - 559
  scrapy.settings.overridden_settings:
  - 569
  - 570
  - 566
  - 567
  scrapy.shell:
  - 1
  scrapy.shell.Shell.__init__:
  - 32
  - 33
  - 35
  scrapy.shell.Shell._is_relevant:
  - 171
  scrapy.shell.Shell._open_spider:
  - 98
  - 91
  - 94
  - 95
  scrapy.shell.Shell._schedule:
  - 80
  - 83
  - 84
  - 85
  - 86
  - 87
  scrapy.shell.Shell.fetch:
  - 105
  - 108
  - 109
  - 110
  - 111
  - 112
  - 118
  - 123
  scrapy.shell.Shell.get_help:
  - 161
  - 165
  - 166
  - 168
  - 148
  - 149
  - 152
  - 153
  - 154
  - 155
  - 156
  - 157
  scrapy.shell.Shell.populate_vars:
  - 130
  - 135
  - 139
  - 140
  - 141
  scrapy.shell.Shell.print_help:
  - 144
  scrapy.shell.Shell.start:
  - 41
  - 42
  - 43
  - 44
  - 45
  - 46
  - 48
  - 50
  - 51
  - 52
  - 54
  - 63
  - 65
  - 67
  - 68
  - 69
  - 70
  - 72
  - 75
  - 76
  scrapy.shell._request_deferred:
  - 202
  - 203
  - 204
  - 205
  - 184
  scrapy.shell.inspect_response:
  - 178
  - 179
  - 180
  - 175
  scrapy.signalmanager.SignalManager.connect:
  - 27
  - 28
  - 14
  scrapy.signalmanager.SignalManager.disconnect:
  - 36
  - 37
  - 31
  scrapy.signalmanager.SignalManager.disconnect_all:
  - 64
  - 70
  - 71
  scrapy.signalmanager.SignalManager.send_catch_log:
  - 40
  - 46
  - 47
  scrapy.signalmanager.SignalManager.send_catch_log_deferred:
  - 50
  - 60
  - 61
  scrapy.signals:
  - 1
  - 8
  - 9
  - 10
  - 11
  - 12
  - 13
  - 14
  - 15
  - 16
  - 17
  - 18
  - 19
  - 20
  - 21
  - 22
  - 23
  - 24
  - 25
  - 26
  scrapy.spiderloader:
  - 17
  scrapy.spiderloader.SpiderLoader:
  - 24
  scrapy.spiderloader.SpiderLoader.__init__:
  - 33
  - 34
  - 30
  - 31
  scrapy.spiderloader.SpiderLoader._check_name_duplicates:
  - 38
  - 39
  - 43
  - 47
  - 48
  - 49
  scrapy.spiderloader.SpiderLoader._load_all_spiders:
  - 64
  - 66
  - 67
  - 68
  - 75
  - 61
  - 63
  scrapy.spiderloader.SpiderLoader._load_spiders:
  - 56
  - 57
  scrapy.spiderloader.SpiderLoader.find_by_request:
  - 96
  - 92
  scrapy.spiderloader.SpiderLoader.from_settings:
  - 79
  scrapy.spiderloader.SpiderLoader.list:
  - 100
  - 103
  scrapy.spiderloader.SpiderLoader.load:
  - 82
  scrapy.spidermiddlewares.depth:
  - 1
  - 21
  - 17
  scrapy.spidermiddlewares.depth.DepthMiddleware._filter:
  - 68
  - 72
  - 74
  - 75
  - 81
  - 82
  - 83
  scrapy.spidermiddlewares.depth.DepthMiddleware._init_depth:
  - 64
  - 65
  - 62
  scrapy.spidermiddlewares.depth.DepthMiddleware.from_crawler:
  - 40
  - 41
  - 42
  - 44
  scrapy.spidermiddlewares.depth.DepthMiddleware.process_spider_output:
  - 49
  - 50
  scrapy.spidermiddlewares.depth.DepthMiddleware.process_spider_output_async:
  - 57
  - 58
  - 55
  scrapy.spidermiddlewares.httperror:
  - 1
  - 21
  - 17
  scrapy.spidermiddlewares.httperror.HttpError:
  - 25
  scrapy.spidermiddlewares.httperror.HttpError.__init__:
  - 29
  scrapy.spidermiddlewares.httperror.HttpErrorMiddleware.__init__:
  - 38
  - 39
  scrapy.spidermiddlewares.httperror.HttpErrorMiddleware.from_crawler:
  - 35
  scrapy.spidermiddlewares.httperror.HttpErrorMiddleware.process_spider_exception:
  - 64
  - 66
  - 67
  - 70
  scrapy.spidermiddlewares.httperror.HttpErrorMiddleware.process_spider_input:
  - 44
  - 47
  - 49
  - 51
  - 54
  - 57
  scrapy.spidermiddlewares.offsite:
  - 24
  - 1
  - 19
  scrapy.spidermiddlewares.offsite.OffsiteMiddleware._filter:
  - 64
  - 51
  - 53
  - 55
  - 56
  - 57
  - 58
  - 63
  scrapy.spidermiddlewares.offsite.OffsiteMiddleware.from_crawler:
  - 34
  - 35
  scrapy.spidermiddlewares.offsite.OffsiteMiddleware.get_host_regex:
  - 97
  - 98
  - 99
  - 74
  - 75
  - 76
  - 77
  - 78
  - 79
  - 81
  - 82
  - 84
  - 89
  - 90
  - 95
  scrapy.spidermiddlewares.offsite.OffsiteMiddleware.process_spider_output:
  - 41
  scrapy.spidermiddlewares.offsite.OffsiteMiddleware.process_spider_output_async:
  - 48
  - 47
  scrapy.spidermiddlewares.offsite.OffsiteMiddleware.should_follow:
  - 70
  - 71
  scrapy.spidermiddlewares.offsite.OffsiteMiddleware.spider_opened:
  - 102
  - 103
  scrapy.spidermiddlewares.referer:
  - 1
  - 33
  scrapy.spidermiddlewares.referer.DefaultReferrerPolicy:
  - 285
  scrapy.spidermiddlewares.referer.NoReferrerPolicy:
  - 112
  scrapy.spidermiddlewares.referer.NoReferrerWhenDowngradePolicy:
  - 127
  scrapy.spidermiddlewares.referer.NoReferrerWhenDowngradePolicy.referrer:
  - 144
  - 145
  scrapy.spidermiddlewares.referer.OriginPolicy:
  - 169
  scrapy.spidermiddlewares.referer.OriginPolicy.referrer:
  - 181
  scrapy.spidermiddlewares.referer.OriginWhenCrossOriginPolicy:
  - 211
  scrapy.spidermiddlewares.referer.OriginWhenCrossOriginPolicy.referrer:
  - 225
  - 226
  - 227
  scrapy.spidermiddlewares.referer.RefererMiddleware.__init__:
  - 339
  - 340
  scrapy.spidermiddlewares.referer.RefererMiddleware._set_referer:
  - 394
  - 395
  - 396
  - 397
  scrapy.spidermiddlewares.referer.RefererMiddleware.from_crawler:
  - 346
  - 348
  - 351
  scrapy.spidermiddlewares.referer.RefererMiddleware.policy:
  - 358
  - 370
  - 371
  - 372
  - 373
  - 374
  - 375
  - 376
  - 377
  - 379
  - 380
  scrapy.spidermiddlewares.referer.RefererMiddleware.process_spider_output:
  - 385
  scrapy.spidermiddlewares.referer.RefererMiddleware.process_spider_output_async:
  - 391
  scrapy.spidermiddlewares.referer.RefererMiddleware.request_scheduled:
  - 416
  - 417
  - 418
  - 402
  - 403
  - 404
  - 406
  - 412
  - 413
  scrapy.spidermiddlewares.referer.ReferrerPolicy.origin:
  - 97
  - 98
  scrapy.spidermiddlewares.referer.ReferrerPolicy.origin_referrer:
  - 68
  - 69
  scrapy.spidermiddlewares.referer.ReferrerPolicy.potentially_trustworthy:
  - 105
  - 102
  - 103
  scrapy.spidermiddlewares.referer.ReferrerPolicy.strip_url:
  - 88
  - 73
  - 86
  scrapy.spidermiddlewares.referer.ReferrerPolicy.stripped_referrer:
  - 64
  - 63
  scrapy.spidermiddlewares.referer.ReferrerPolicy.tls_protected:
  - 108
  scrapy.spidermiddlewares.referer.SameOriginPolicy:
  - 150
  scrapy.spidermiddlewares.referer.SameOriginPolicy.referrer:
  - 163
  - 164
  scrapy.spidermiddlewares.referer.StrictOriginPolicy:
  - 185
  scrapy.spidermiddlewares.referer.StrictOriginPolicy.referrer:
  - 201
  - 202
  - 203
  - 204
  - 206
  scrapy.spidermiddlewares.referer.StrictOriginWhenCrossOriginPolicy:
  - 232
  scrapy.spidermiddlewares.referer.StrictOriginWhenCrossOriginPolicy.referrer:
  - 256
  - 257
  - 258
  - 260
  - 252
  - 253
  - 254
  - 255
  scrapy.spidermiddlewares.referer.UnsafeUrlPolicy:
  - 265
  scrapy.spidermiddlewares.referer.UnsafeUrlPolicy.referrer:
  - 281
  scrapy.spidermiddlewares.referer._load_policy_class:
  - 323
  - 326
  - 329
  - 332
  - 317
  scrapy.spidermiddlewares.urllength:
  - 1
  - 21
  - 17
  scrapy.spidermiddlewares.urllength.UrlLengthMiddleware._filter:
  - 48
  - 49
  - 55
  scrapy.spidermiddlewares.urllength.UrlLengthMiddleware.from_settings:
  - 33
  - 30
  - 31
  scrapy.spidermiddlewares.urllength.UrlLengthMiddleware.process_spider_output:
  - 38
  scrapy.spidermiddlewares.urllength.UrlLengthMiddleware.process_spider_output_async:
  - 44
  - 45
  scrapy.spiders:
  - 1
  - 18
  scrapy.spiders.Spider:
  - 27
  scrapy.spiders.Spider.__init__:
  - 40
  - 35
  - 37
  - 39
  scrapy.spiders.Spider.__repr__:
  - 102
  scrapy.spiders.Spider._parse:
  - 79
  scrapy.spiders.Spider._set_crawler:
  - 66
  scrapy.spiders.Spider.close:
  - 96
  - 97
  - 98
  scrapy.spiders.Spider.from_crawler:
  - 59
  - 60
  scrapy.spiders.Spider.handles_request:
  - 92
  scrapy.spiders.Spider.log:
  - 49
  - 55
  scrapy.spiders.Spider.logger:
  - 45
  - 46
  scrapy.spiders.Spider.start_requests:
  - 75
  - 76
  - 69
  scrapy.spiders.Spider.update_settings:
  - 88
  scrapy.spiders.crawl:
  - 1
  - 33
  scrapy.spiders.crawl.CrawlSpider.__init__:
  - 66
  - 67
  scrapy.spiders.crawl.CrawlSpider._build_request:
  - 88
  - 84
  scrapy.spiders.crawl.CrawlSpider._callback:
  - 108
  scrapy.spiders.crawl.CrawlSpider._compile_rules:
  - 138
  - 139
  - 140
  scrapy.spiders.crawl.CrawlSpider._errback:
  - 114
  scrapy.spiders.crawl.CrawlSpider._handle_failure:
  - 132
  - 133
  - 134
  scrapy.spiders.crawl.CrawlSpider._parse:
  - 70
  scrapy.spiders.crawl.CrawlSpider._parse_response:
  - 128
  - 129
  - 117
  - 118
  - 119
  - 120
  - 121
  - 123
  - 124
  - 125
  - 127
  scrapy.spiders.crawl.CrawlSpider._requests_to_follow:
  - 98
  - 101
  - 102
  - 103
  - 104
  - 92
  - 94
  - 95
  scrapy.spiders.crawl.CrawlSpider.from_crawler:
  - 144
  - 145
  scrapy.spiders.crawl.Rule._compile:
  - 56
  - 57
  - 58
  - 59
  scrapy.spiders.crawl._get_method:
  - 27
  - 29
  - 30
  scrapy.spiders.feed:
  - 1
  scrapy.spiders.feed.CSVFeedSpider:
  - 96
  scrapy.spiders.feed.CSVFeedSpider._parse:
  - 138
  - 142
  - 143
  scrapy.spiders.feed.CSVFeedSpider.adapt_response:
  - 117
  scrapy.spiders.feed.CSVFeedSpider.parse_row:
  - 121
  scrapy.spiders.feed.CSVFeedSpider.parse_rows:
  - 131
  - 125
  - 134
  - 135
  scrapy.spiders.feed.CSVFeedSpider.process_results:
  - 113
  scrapy.spiders.feed.XMLFeedSpider:
  - 15
  scrapy.spiders.feed.XMLFeedSpider._iternodes:
  - 88
  - 86
  - 87
  scrapy.spiders.feed.XMLFeedSpider._parse:
  - 64
  - 69
  - 70
  - 71
  - 72
  - 73
  - 74
  - 75
  - 76
  - 77
  - 78
  - 79
  - 83
  scrapy.spiders.feed.XMLFeedSpider._register_namespaces:
  - 91
  - 92
  scrapy.spiders.feed.XMLFeedSpider.adapt_response:
  - 39
  scrapy.spiders.feed.XMLFeedSpider.parse_node:
  - 48
  - 46
  - 47
  scrapy.spiders.feed.XMLFeedSpider.parse_nodes:
  - 59
  - 52
  - 61
  - 60
  scrapy.spiders.feed.XMLFeedSpider.process_results:
  - 29
  scrapy.spiders.init.InitSpider:
  - 6
  scrapy.spiders.init.InitSpider.init_request:
  - 19
  - 31
  scrapy.spiders.init.InitSpider.initialized:
  - 16
  - 13
  scrapy.spiders.init.InitSpider.start_requests:
  - 9
  - 10
  scrapy.spiders.sitemap:
  - 9
  scrapy.spiders.sitemap.SitemapSpider.__init__:
  - 19
  - 21
  - 22
  - 23
  - 24
  - 25
  scrapy.spiders.sitemap.SitemapSpider._get_sitemap_body:
  - 67
  - 70
  - 72
  - 73
  - 83
  scrapy.spiders.sitemap.SitemapSpider._parse_sitemap:
  - 39
  - 40
  - 41
  - 43
  - 44
  - 45
  - 52
  - 53
  - 55
  - 56
  - 57
  - 58
  - 59
  - 60
  - 61
  - 62
  - 63
  scrapy.spiders.sitemap.SitemapSpider.sitemap_filter:
  - 32
  - 36
  scrapy.spiders.sitemap.SitemapSpider.start_requests:
  - 28
  - 29
  scrapy.spiders.sitemap.iterloc:
  - 98
  - 99
  - 94
  - 95
  scrapy.spiders.sitemap.regex:
  - 88
  - 89
  scrapy.squeues:
  - 128
  - 1
  - 129
  - 131
  - 132
  - 134
  - 135
  - 139
  - 140
  - 141
  - 142
  - 143
  - 144
  - 125
  - 126
  scrapy.squeues._pickle_serialize:
  - 118
  scrapy.squeues._scrapy_non_serialization_queue.ScrapyRequestQueue.from_crawler:
  - 96
  scrapy.squeues._scrapy_non_serialization_queue.ScrapyRequestQueue.peek:
  - 106
  - 99
  scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.__init__:
  - 61
  scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.from_crawler:
  - 65
  scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.peek:
  - 84
  - 85
  - 78
  - 87
  scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.pop:
  - 72
  - 73
  - 75
  scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue.push:
  - 68
  - 69
  scrapy.squeues._serializable_queue.SerializableQueue.peek:
  - 51
  - 52
  - 46
  - 39
  scrapy.squeues._serializable_queue.SerializableQueue.pop:
  - 34
  - 35
  - 36
  scrapy.squeues._serializable_queue.SerializableQueue.push:
  - 30
  - 31
  scrapy.squeues._with_mkdir.DirectoriesCreated.__init__:
  - 19
  - 20
  - 21
  - 22
  scrapy.statscollectors:
  - 1
  - 10
  - 13
  scrapy.statscollectors.MemoryStatsCollector.__init__:
  - 70
  scrapy.statscollectors.StatsCollector.__init__:
  - 21
  scrapy.statscollectors.StatsCollector.clear_stats:
  - 51
  scrapy.statscollectors.StatsCollector.close_spider:
  - 57
  - 58
  - 59
  - 62
  scrapy.statscollectors.StatsCollector.get_value:
  - 27
  scrapy.statscollectors.StatsCollector.inc_value:
  - 42
  scrapy.statscollectors.StatsCollector.max_value:
  - 45
  scrapy.statscollectors.StatsCollector.min_value:
  - 48
  scrapy.utils.asyncgen.as_async_generator:
  - 12
  - 13
  - 15
  - 17
  - 18
  scrapy.utils.asyncgen.collect_asyncgen:
  - 7
  scrapy.utils.benchserver:
  - 34
  - 37
  - 38
  - 39
  - 45
  - 46
  scrapy.utils.benchserver.Root.render:
  - 15
  - 16
  - 17
  - 18
  - 19
  - 20
  - 22
  - 23
  - 24
  - 26
  scrapy.utils.benchserver._getarg:
  - 31
  scrapy.utils.benchserver._print_listening:
  - 42
  - 43
  scrapy.utils.boto:
  - 1
  scrapy.utils.conf.arglist_to_dict:
  - 90
  - 87
  scrapy.utils.conf.build_component_list:
  - 32
  - 68
  - 69
  - 76
  - 77
  - 78
  - 79
  - 81
  - 82
  - 83
  scrapy.utils.conf.build_component_list._check_components:
  - 35
  scrapy.utils.conf.build_component_list._map_keys:
  - 42
  - 43
  - 44
  - 45
  - 47
  - 54
  - 56
  - 57
  scrapy.utils.conf.build_component_list._validate_values:
  - 60
  - 61
  - 62
  scrapy.utils.conf.closest_scrapy_cfg:
  - 97
  - 100
  - 102
  - 104
  - 105
  - 106
  scrapy.utils.conf.feed_complete_default_values_from_settings:
  - 160
  - 150
  - 151
  - 152
  - 153
  - 154
  - 155
  - 156
  - 157
  - 158
  scrapy.utils.conf.feed_process_params_from_cli:
  - 194
  - 226
  - 228
  - 229
  - 232
  - 170
  - 234
  - 236
  - 206
  - 175
  - 176
  - 207
  - 208
  - 238
  - 242
  - 218
  - 189
  - 190
  scrapy.utils.conf.feed_process_params_from_cli.check_valid_format:
  - 180
  scrapy.utils.conf.get_config:
  - 128
  - 125
  - 126
  - 127
  scrapy.utils.conf.get_sources:
  - 134
  - 139
  - 140
  - 142
  - 143
  scrapy.utils.conf.init_env:
  - 110
  - 114
  - 115
  - 116
  - 117
  - 118
  - 119
  - 120
  - 121
  scrapy.utils.console._embed_bpython_shell:
  - 33
  - 30
  scrapy.utils.console._embed_bpython_shell.wrapper:
  - 35
  scrapy.utils.console._embed_ipython_shell:
  - 13
  - 5
  scrapy.utils.console._embed_ipython_shell.wrapper:
  - 24
  - 20
  - 21
  - 15
  scrapy.utils.console._embed_ptpython_shell:
  - 41
  - 44
  scrapy.utils.console._embed_ptpython_shell.wrapper:
  - 46
  - 47
  scrapy.utils.console._embed_standard_shell:
  - 65
  - 53
  - 63
  scrapy.utils.console._embed_standard_shell.wrapper:
  - 67
  scrapy.utils.console.get_shell_embed_func:
  - 81
  - 84
  - 85
  - 86
  - 87
  - 88
  - 89
  - 93
  scrapy.utils.console.start_python_console:
  - 99
  - 102
  - 106
  - 107
  - 108
  scrapy.utils.curl:
  - 41
  - 42
  - 24
  - 25
  - 26
  - 27
  - 28
  - 29
  scrapy.utils.curl.DataAction.__call__:
  - 12
  - 13
  - 15
  scrapy.utils.curl._parse_headers_and_cookies:
  - 48
  - 49
  - 50
  - 51
  - 52
  - 53
  - 56
  - 58
  - 59
  - 60
  scrapy.utils.curl.curl_to_request_kwargs:
  - 96
  - 68
  - 101
  - 103
  - 105
  - 107
  - 77
  - 109
  - 79
  - 111
  - 82
  - 84
  - 85
  - 86
  - 87
  - 95
  scrapy.utils.datatypes:
  - 1
  - 34
  - 35
  - 29
  scrapy.utils.datatypes.CaseInsensitiveDict:
  - 109
  scrapy.utils.datatypes.CaseInsensitiveDict.__contains__:
  - 137
  - 138
  scrapy.utils.datatypes.CaseInsensitiveDict.__delitem__:
  - 132
  - 133
  - 134
  scrapy.utils.datatypes.CaseInsensitiveDict.__getitem__:
  - 118
  - 119
  scrapy.utils.datatypes.CaseInsensitiveDict.__init__:
  - 115
  scrapy.utils.datatypes.CaseInsensitiveDict.__repr__:
  - 141
  scrapy.utils.datatypes.CaseInsensitiveDict.__setitem__:
  - 128
  - 129
  - 122
  - 124
  scrapy.utils.datatypes.CaselessDict.__contains__:
  - 71
  scrapy.utils.datatypes.CaselessDict.__copy__:
  - 76
  scrapy.utils.datatypes.CaselessDict.__delitem__:
  - 68
  scrapy.utils.datatypes.CaselessDict.__getitem__:
  - 62
  scrapy.utils.datatypes.CaselessDict.__init__:
  - 57
  - 58
  - 59
  scrapy.utils.datatypes.CaselessDict.__new__:
  - 51
  - 44
  - 45
  scrapy.utils.datatypes.CaselessDict.__setitem__:
  - 65
  scrapy.utils.datatypes.CaselessDict.fromkeys:
  - 102
  scrapy.utils.datatypes.CaselessDict.get:
  - 89
  scrapy.utils.datatypes.CaselessDict.normkey:
  - 81
  - 82
  scrapy.utils.datatypes.CaselessDict.normvalue:
  - 85
  scrapy.utils.datatypes.CaselessDict.pop:
  - 105
  scrapy.utils.datatypes.CaselessDict.setdefault:
  - 92
  scrapy.utils.datatypes.CaselessDict.update:
  - 96
  - 97
  - 98
  scrapy.utils.datatypes.LocalCache:
  - 151
  scrapy.utils.datatypes.LocalCache.__init__:
  - 157
  scrapy.utils.datatypes.LocalCache.__setitem__:
  - 161
  - 162
  - 163
  - 164
  scrapy.utils.datatypes.LocalWeakReferencedCache:
  - 168
  scrapy.utils.datatypes.LocalWeakReferencedCache.__getitem__:
  - 191
  scrapy.utils.datatypes.LocalWeakReferencedCache.__init__:
  - 180
  - 181
  scrapy.utils.datatypes.LocalWeakReferencedCache.__setitem__:
  - 185
  scrapy.utils.datatypes.SequenceExclude:
  - 197
  scrapy.utils.decorators.defers:
  - 34
  - 36
  scrapy.utils.decorators.defers.wrapped:
  - 38
  scrapy.utils.decorators.deprecated:
  - 27
  - 12
  - 28
  scrapy.utils.decorators.deprecated.deco:
  - 17
  scrapy.utils.decorators.deprecated.deco.wrapped:
  - 20
  - 22
  - 23
  scrapy.utils.decorators.inthread:
  - 48
  - 44
  scrapy.utils.decorators.inthread.wrapped:
  - 50
  scrapy.utils.defer:
  - 1
  - 302
  - 303
  scrapy.utils.defer._AsyncCooperatorAdapter:
  - 107
  scrapy.utils.defer._AsyncCooperatorAdapter.__init__:
  - 159
  scrapy.utils.defer._AsyncCooperatorAdapter.__next__:
  - 199
  - 201
  - 202
  - 203
  - 204
  scrapy.utils.defer._AsyncCooperatorAdapter._call_anext:
  - 193
  - 194
  scrapy.utils.defer._AsyncCooperatorAdapter._callback:
  - 172
  - 173
  - 174
  - 175
  - 177
  - 178
  - 179
  scrapy.utils.defer._AsyncCooperatorAdapter._errback:
  - 185
  - 187
  - 188
  scrapy.utils.defer.aiter_errback:
  - 289
  - 299
  - 292
  - 295
  scrapy.utils.defer.defer_fail:
  - 41
  - 50
  - 49
  scrapy.utils.defer.defer_result:
  - 72
  - 73
  - 69
  - 71
  scrapy.utils.defer.defer_succeed:
  - 64
  - 63
  - 55
  scrapy.utils.defer.deferred_f_from_coro_f:
  - 338
  - 332
  scrapy.utils.defer.deferred_f_from_coro_f.f:
  - 340
  scrapy.utils.defer.deferred_from_coro:
  - 320
  - 321
  - 324
  - 326
  - 327
  - 308
  - 313
  - 317
  - 318
  scrapy.utils.defer.deferred_to_future:
  - 362
  - 380
  scrapy.utils.defer.iter_errback:
  - 273
  - 283
  - 276
  - 279
  scrapy.utils.defer.maybeDeferred_coro:
  - 352
  - 354
  - 355
  - 356
  - 357
  - 358
  - 346
  - 348
  - 350
  scrapy.utils.defer.maybe_deferred_to_future:
  - 384
  - 409
  - 411
  scrapy.utils.defer.mustbe_deferred:
  - 77
  - 81
  - 86
  - 88
  - 90
  scrapy.utils.defer.parallel:
  - 96
  - 101
  - 102
  - 103
  scrapy.utils.defer.parallel_async:
  - 216
  - 217
  - 218
  - 215
  scrapy.utils.defer.process_chain:
  - 225
  - 226
  - 227
  - 228
  - 229
  scrapy.utils.defer.process_chain_both:
  - 240
  - 241
  - 242
  - 243
  - 251
  - 252
  - 254
  scrapy.utils.defer.process_parallel:
  - 264
  - 265
  - 266
  - 261
  scrapy.utils.deprecate:
  - 1
  scrapy.utils.deprecate._clspath:
  - 132
  scrapy.utils.deprecate.attribute:
  - 12
  scrapy.utils.deprecate.create_deprecated_class:
  - 114
  - 117
  - 118
  - 119
  - 126
  - 31
  scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__call__:
  - 106
  - 107
  - 108
  - 109
  - 111
  - 112
  scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__init__:
  - 72
  - 74
  - 75
  - 76
  - 77
  - 79
  - 81
  - 82
  scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__instancecheck__:
  - 88
  scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__new__:
  - 64
  - 65
  scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass.__subclasscheck__:
  - 96
  - 98
  - 101
  - 102
  - 91
  scrapy.utils.deprecate.method_is_overridden:
  - 164
  - 190
  - 191
  scrapy.utils.deprecate.update_classpath:
  - 142
  - 147
  - 151
  - 152
  - 153
  - 154
  - 155
  scrapy.utils.display:
  - 1
  scrapy.utils.display._colorize:
  - 33
  - 43
  scrapy.utils.display._enable_windows_terminal_processing:
  - 17
  scrapy.utils.display._tty_supports_color:
  - 24
  - 29
  - 21
  scrapy.utils.display.pformat:
  - 47
  scrapy.utils.display.pprint:
  - 51
  scrapy.utils.engine:
  - 1
  - 7
  scrapy.utils.engine.format_engine_status:
  - 41
  - 43
  scrapy.utils.engine.get_engine_status:
  - 33
  - 35
  - 12
  - 31
  scrapy.utils.engine.print_engine_status:
  - 51
  scrapy.utils.ftp.ftp_makedirs_cwd:
  - 8
  - 13
  - 15
  - 16
  - 17
  - 18
  scrapy.utils.ftp.ftp_store_file:
  - 32
  - 35
  - 36
  - 37
  - 38
  - 39
  - 40
  - 41
  - 42
  - 44
  - 45
  scrapy.utils.gz.gunzip:
  - 10
  - 14
  - 19
  - 20
  - 25
  - 28
  scrapy.utils.httpobj:
  - 1
  - 10
  scrapy.utils.httpobj.urlparse_cached:
  - 18
  - 19
  - 15
  scrapy.utils.iterators:
  - 24
  - 27
  scrapy.utils.iterators._StreamReader.__init__:
  - 105
  - 107
  - 111
  scrapy.utils.iterators._StreamReader._read_string:
  - 127
  scrapy.utils.iterators._StreamReader._read_unicode:
  - 132
  scrapy.utils.iterators._StreamReader.read:
  - 121
  - 118
  - 119
  scrapy.utils.iterators._body_or_str:
  - 224
  - 225
  - 226
  - 196
  - 201
  - 206
  - 213
  - 214
  - 218
  - 219
  - 221
  - 223
  scrapy.utils.iterators.csviter:
  - 162
  - 165
  - 167
  - 169
  - 171
  - 173
  - 142
  - 176
  - 178
  - 179
  - 180
  - 181
  - 157
  - 191
  scrapy.utils.iterators.csviter.row_to_unicode:
  - 160
  scrapy.utils.iterators.xmliter:
  - 33
  - 41
  - 43
  - 44
  - 45
  - 46
  - 47
  - 49
  - 51
  - 53
  - 54
  - 56
  - 57
  - 59
  - 62
  - 63
  - 66
  - 67
  - 70
  - 71
  - 75
  scrapy.utils.iterators.xmliter_lxml:
  - 96
  - 97
  - 98
  - 86
  - 88
  - 89
  - 92
  - 93
  - 94
  - 95
  scrapy.utils.job.job_dir:
  - 9
  - 11
  - 12
  scrapy.utils.log:
  - 16
  - 19
  scrapy.utils.log.LogCounterHandler:
  - 215
  scrapy.utils.log.LogCounterHandler.__init__:
  - 218
  scrapy.utils.log.LogCounterHandler.emit:
  - 224
  scrapy.utils.log.StreamLogger:
  - 194
  scrapy.utils.log.StreamLogger.flush:
  - 210
  - 211
  scrapy.utils.log.StreamLogger.write:
  - 206
  - 207
  scrapy.utils.log.TopLevelFormatter:
  - 38
  scrapy.utils.log.TopLevelFormatter.filter:
  - 53
  - 54
  scrapy.utils.log._get_handler:
  - 160
  - 161
  - 162
  - 144
  - 145
  - 147
  - 148
  - 149
  - 150
  - 151
  - 152
  - 154
  - 156
  - 157
  - 159
  scrapy.utils.log.configure_logging:
  - 104
  - 106
  - 108
  - 109
  - 111
  - 81
  - 113
  - 114
  - 116
  - 117
  - 119
  - 120
  scrapy.utils.log.failure_to_exc_info:
  - 32
  - 25
  - 26
  scrapy.utils.log.install_scrapy_root_handler:
  - 129
  - 133
  - 134
  - 135
  - 136
  scrapy.utils.log.log_reactor_info:
  - 185
  - 186
  - 182
  scrapy.utils.log.log_scrapy_info:
  - 176
  - 173
  - 167
  scrapy.utils.log.logformatter_adapter:
  - 234
  - 235
  - 228
  - 238
  scrapy.utils.misc:
  - 32
  - 1
  - 244
  scrapy.utils.misc.arg_to_iter:
  - 40
  - 48
  - 45
  - 47
  scrapy.utils.misc.build_from_crawler:
  - 172
  - 178
  - 179
  - 181
  - 182
  - 185
  - 187
  scrapy.utils.misc.build_from_settings:
  - 193
  - 199
  - 200
  - 203
  - 205
  scrapy.utils.misc.create_instance:
  - 160
  - 161
  - 130
  - 164
  - 166
  - 146
  - 153
  - 154
  - 157
  - 158
  scrapy.utils.misc.is_generator_with_return_value:
  - 261
  - 263
  - 266
  - 267
  - 268
  - 270
  - 271
  - 272
  - 274
  - 275
  - 276
  - 278
  - 248
  - 281
  - 252
  - 253
  scrapy.utils.misc.is_generator_with_return_value.returns_none:
  - 258
  scrapy.utils.misc.load_object:
  - 70
  - 75
  - 78
  - 53
  - 62
  - 63
  scrapy.utils.misc.md5sum:
  - 108
  - 115
  - 117
  - 118
  - 120
  - 121
  scrapy.utils.misc.rel_has_nofollow:
  - 125
  - 126
  scrapy.utils.misc.set_environ:
  - 212
  - 216
  - 217
  - 219
  - 221
  - 222
  scrapy.utils.misc.walk_callable:
  - 229
  - 232
  - 235
  - 236
  - 237
  - 240
  - 241
  scrapy.utils.misc.walk_modules:
  - 96
  - 97
  - 99
  - 100
  - 102
  - 103
  - 86
  - 94
  - 95
  scrapy.utils.misc.warn_on_generator_with_return_value:
  - 301
  - 290
  - 291
  - 285
  scrapy.utils.ossignal:
  - 11
  - 12
  - 13
  - 14
  scrapy.utils.ossignal.install_shutdown_handlers:
  - 21
  - 26
  - 27
  - 28
  - 30
  - 31
  scrapy.utils.project.data_path:
  - 50
  - 54
  - 55
  - 56
  - 57
  - 59
  - 60
  - 61
  - 62
  scrapy.utils.project.get_project_settings:
  - 66
  - 67
  - 68
  - 70
  - 71
  - 72
  - 73
  - 84
  - 85
  - 88
  scrapy.utils.project.inside_project:
  - 17
  - 18
  - 20
  - 22
  - 27
  scrapy.utils.project.project_data_dir:
  - 32
  - 34
  - 35
  - 36
  - 38
  - 39
  - 43
  - 44
  - 45
  - 46
  - 31
  scrapy.utils.python:
  - 321
  - 1
  - 187
  scrapy.utils.python.MutableAsyncChain:
  - 359
  scrapy.utils.python.MutableAsyncChain.__anext__:
  - 373
  scrapy.utils.python.MutableAsyncChain.__init__:
  - 364
  scrapy.utils.python.MutableAsyncChain.extend:
  - 367
  scrapy.utils.python.MutableChain:
  - 335
  scrapy.utils.python.MutableChain.__init__:
  - 340
  scrapy.utils.python.MutableChain.__next__:
  - 349
  scrapy.utils.python.MutableChain.extend:
  - 343
  scrapy.utils.python._async_chain:
  - 353
  - 354
  - 355
  scrapy.utils.python.binary_is_text:
  - 192
  - 195
  - 197
  scrapy.utils.python.equal_attributes:
  - 270
  - 272
  - 275
  - 276
  - 278
  - 279
  - 281
  scrapy.utils.python.flatten:
  - 51
  - 35
  scrapy.utils.python.garbage_collect:
  - 331
  - 325
  - 326
  scrapy.utils.python.get_func_args:
  - 225
  - 201
  - 202
  - 207
  - 211
  - 215
  - 216
  - 218
  - 220
  - 222
  - 223
  scrapy.utils.python.get_spec:
  - 261
  - 231
  - 263
  - 252
  - 253
  - 254
  - 255
  scrapy.utils.python.global_object_name:
  - 311
  scrapy.utils.python.iflatten:
  - 55
  - 58
  - 59
  - 60
  - 62
  scrapy.utils.python.is_listlike:
  - 66
  - 86
  scrapy.utils.python.memoizemethod_noargs:
  - 177
  - 172
  - 175
  scrapy.utils.python.memoizemethod_noargs.new_method:
  - 179
  - 180
  scrapy.utils.python.re_rsearch:
  - 160
  - 161
  - 163
  - 164
  - 165
  - 166
  - 138
  scrapy.utils.python.re_rsearch._chunk_iter:
  - 152
  - 155
  - 157
  - 158
  scrapy.utils.python.to_bytes:
  - 130
  - 132
  - 122
  - 124
  - 126
  scrapy.utils.python.to_unicode:
  - 105
  - 107
  - 109
  - 114
  - 116
  scrapy.utils.python.unique:
  - 97
  - 98
  - 90
  - 91
  - 93
  - 94
  - 95
  scrapy.utils.python.without_none_values:
  - 289
  - 294
  - 298
  - 303
  - 304
  - 307
  scrapy.utils.reactor.CallLaterOnce:
  - 36
  scrapy.utils.reactor.CallLaterOnce.__call__:
  - 58
  scrapy.utils.reactor.CallLaterOnce.cancel:
  - 53
  - 54
  scrapy.utils.reactor.CallLaterOnce.schedule:
  - 49
  - 50
  scrapy.utils.reactor._get_asyncio_event_loop:
  - 116
  scrapy.utils.reactor._get_asyncio_event_loop_policy:
  - 86
  - 87
  - 90
  - 92
  - 93
  scrapy.utils.reactor.get_asyncio_event_loop_policy:
  - 82
  - 70
  scrapy.utils.reactor.install_reactor:
  - 98
  - 101
  - 102
  - 103
  - 104
  - 105
  - 106
  - 108
  - 110
  - 111
  - 112
  scrapy.utils.reactor.is_asyncio_reactor_installed:
  - 188
  scrapy.utils.reactor.listen_tcp:
  - 16
  - 19
  - 21
  - 22
  - 23
  - 24
  - 25
  - 26
  - 27
  - 29
  - 31
  scrapy.utils.reactor.set_asyncio_event_loop:
  - 134
  - 139
  - 145
  - 146
  - 120
  - 121
  - 122
  - 123
  - 124
  - 127
  scrapy.utils.reactor.set_asyncio_event_loop_policy:
  - 66
  - 62
  scrapy.utils.reactor.verify_installed_asyncio_event_loop:
  - 169
  - 170
  scrapy.utils.reactor.verify_installed_reactor:
  - 156
  - 157
  - 151
  scrapy.utils.request:
  - 48
  - 1
  - 34
  scrapy.utils.request.RequestFingerprinter:
  - 122
  scrapy.utils.request.RequestFingerprinter.__init__:
  - 146
  - 139
  - 140
  - 151
  scrapy.utils.request.RequestFingerprinter.fingerprint:
  - 155
  scrapy.utils.request.RequestFingerprinter.from_crawler:
  - 136
  scrapy.utils.request.RequestFingerprinterProtocol.fingerprint:
  - 118
  scrapy.utils.request._get_method:
  - 210
  - 211
  - 213
  scrapy.utils.request._serialize_headers:
  - 41
  - 42
  - 43
  - 44
  scrapy.utils.request.fingerprint:
  - 89
  - 98
  - 99
  - 100
  - 101
  - 102
  - 103
  - 106
  - 107
  - 108
  - 111
  - 112
  - 88
  - 57
  - 90
  - 92
  - 94
  scrapy.utils.request.referer_str:
  - 187
  - 188
  - 189
  - 191
  scrapy.utils.request.request_authenticate:
  - 163
  - 166
  scrapy.utils.request.request_from_dict:
  - 195
  - 200
  - 201
  - 202
  - 203
  - 204
  - 205
  - 206
  scrapy.utils.request.request_httprepr:
  - 170
  - 175
  - 176
  - 177
  - 178
  - 179
  - 180
  scrapy.utils.request.request_to_curl:
  - 227
  - 229
  - 230
  - 235
  - 236
  - 237
  - 239
  - 240
  - 241
  - 245
  - 246
  - 219
  scrapy.utils.response:
  - 1
  - 19
  - 33
  scrapy.utils.response.get_base_url:
  - 24
  - 26
  - 23
  scrapy.utils.response.get_meta_refresh:
  - 41
  - 42
  - 44
  scrapy.utils.response.open_in_browser:
  - 64
  - 71
  - 72
  - 74
  - 75
  - 77
  - 81
  - 82
  - 83
  - 84
  scrapy.utils.response.response_status_message:
  - 51
  - 52
  - 53
  - 54
  scrapy.utils.serialize.ScrapyJSONEncoder.default:
  - 17
  - 18
  - 19
  - 20
  - 21
  - 22
  - 23
  - 24
  - 25
  - 26
  - 27
  - 28
  - 29
  - 30
  - 31
  - 32
  - 33
  - 34
  - 35
  scrapy.utils.signal:
  - 1
  - 22
  scrapy.utils.signal.disconnect_all:
  - 112
  - 108
  - 111
  scrapy.utils.signal.send_catch_log:
  - 34
  - 67
  - 36
  - 37
  - 41
  - 43
  - 46
  - 49
  - 50
  - 56
  - 58
  - 59
  - 31
  scrapy.utils.signal.send_catch_log_deferred:
  - 96
  - 99
  - 100
  - 101
  - 102
  - 103
  - 77
  - 92
  - 93
  - 95
  scrapy.utils.signal.send_catch_log_deferred.logerror:
  - 83
  - 84
  - 87
  scrapy.utils.sitemap:
  - 1
  scrapy.utils.sitemap.Sitemap:
  - 14
  scrapy.utils.sitemap.Sitemap.__init__:
  - 18
  - 21
  - 23
  scrapy.utils.sitemap.Sitemap.__iter__:
  - 32
  - 33
  - 34
  - 36
  - 38
  - 39
  - 26
  - 28
  - 30
  scrapy.utils.sitemap.sitemap_urls_from_robots:
  - 45
  - 48
  - 49
  - 50
  - 51
  scrapy.utils.spider:
  - 32
  - 27
  - 30
  scrapy.utils.spider.iter_spider_classes:
  - 69
  - 70
  - 71
  - 72
  - 74
  - 76
  - 62
  scrapy.utils.spider.iterate_spider_output:
  - 38
  - 43
  - 48
  - 52
  - 54
  - 55
  - 56
  - 58
  scrapy.utils.spider.spidercls_for_request:
  - 129
  - 98
  - 130
  - 131
  - 133
  - 134
  - 139
  - 140
  - 109
  - 87
  - 119
  scrapy.utils.ssl.ffi_buf_to_string:
  - 12
  scrapy.utils.ssl.get_openssl_version:
  - 61
  - 62
  scrapy.utils.ssl.get_temp_key_info:
  - 27
  - 30
  - 31
  - 34
  - 36
  - 38
  - 39
  - 40
  - 41
  - 42
  - 43
  - 44
  - 45
  - 46
  - 47
  - 48
  - 50
  - 51
  - 52
  - 53
  - 55
  - 56
  - 57
  scrapy.utils.ssl.x509name_to_string:
  - 17
  - 18
  - 19
  - 22
  scrapy.utils.template:
  - 24
  - 1
  scrapy.utils.template.render_templatefile:
  - 11
  - 12
  - 14
  - 16
  - 18
  - 19
  - 21
  scrapy.utils.template.string_camelcase:
  - 28
  - 37
  scrapy.utils.test:
  - 1
  scrapy.utils.test.assert_gcs_environ:
  - 22
  scrapy.utils.test.assert_samelines:
  - 115
  - 118
  scrapy.utils.test.get_crawler:
  - 81
  - 89
  - 90
  - 91
  - 92
  scrapy.utils.test.get_from_asyncio_queue:
  - 122
  - 123
  - 124
  scrapy.utils.test.get_ftp_content_and_delete:
  - 65
  - 66
  - 67
  - 68
  - 69
  - 55
  - 56
  - 57
  - 58
  - 59
  scrapy.utils.test.get_ftp_content_and_delete.buffer_data:
  - 63
  scrapy.utils.test.get_gcs_content_and_delete:
  - 36
  - 37
  - 38
  - 39
  - 40
  - 41
  scrapy.utils.test.get_pythonpath:
  - 97
  - 99
  - 100
  scrapy.utils.test.get_testenv:
  - 104
  - 107
  - 108
  scrapy.utils.test.get_web_client_agent_req:
  - 149
  - 150
  scrapy.utils.test.mock_google_cloud_storage:
  - 136
  - 129
  - 139
  - 134
  scrapy.utils.test.skip_if_no_boto:
  - 27
  scrapy.utils.testproc.ProcessTest:
  - 16
  scrapy.utils.testproc.ProcessTest._process_finished:
  - 41
  - 43
  - 45
  - 39
  scrapy.utils.testproc.ProcessTest.execute:
  - 32
  - 33
  - 26
  - 27
  - 30
  - 31
  scrapy.utils.testproc.TestProcessProtocol.__init__:
  - 50
  scrapy.utils.testproc.TestProcessProtocol.processEnded:
  - 62
  - 63
  scrapy.utils.testsite:
  - 50
  - 53
  - 54
  - 55
  scrapy.utils.testsite.NoMetaRefreshRedirect.render:
  - 24
  - 25
  scrapy.utils.testsite.SiteTest.setUp:
  - 10
  - 11
  - 12
  scrapy.utils.testsite.SiteTest.tearDown:
  - 16
  - 15
  scrapy.utils.testsite.SiteTest.url:
  - 19
  scrapy.utils.testsite.test_site:
  - 32
  - 33
  - 35
  - 40
  - 42
  - 44
  - 45
  - 46
  - 47
  - 31
  scrapy.utils.trackref:
  - 24
  - 1
  - 18
  - 23
  scrapy.utils.trackref.format_live_refs:
  - 40
  - 42
  - 43
  - 44
  - 46
  - 48
  - 49
  scrapy.utils.trackref.get_oldest:
  - 64
  - 59
  - 60
  - 61
  - 62
  scrapy.utils.trackref.iter_all:
  - 68
  - 69
  - 70
  - 71
  scrapy.utils.trackref.object_ref:
  - 28
  scrapy.utils.trackref.object_ref.__new__:
  - 33
  - 34
  scrapy.utils.trackref.print_live_refs:
  - 54
  - 55
  scrapy.utils.url:
  - 1
  - 19
  scrapy.utils.url._is_filesystem_path:
  - 136
  scrapy.utils.url._is_posix_path:
  - 98
  - 99
  scrapy.utils.url._is_windows_path:
  - 120
  - 121
  scrapy.utils.url.add_http_if_no_scheme:
  - 88
  - 89
  - 90
  - 87
  scrapy.utils.url.escape_ajax:
  - 80
  - 81
  - 58
  - 83
  scrapy.utils.url.guess_scheme:
  - 144
  - 140
  - 142
  - 143
  scrapy.utils.url.parse_url:
  - 49
  - 52
  - 54
  scrapy.utils.url.strip_url:
  - 164
  - 166
  - 169
  - 170
  - 171
  - 176
  - 177
  - 154
  scrapy.utils.url.url_has_any_extension:
  - 43
  - 44
  - 45
  scrapy.utils.url.url_is_from_any_domain:
  - 32
  - 27
  - 28
  - 29
  - 31
  scrapy.utils.url.url_is_from_spider:
  - 36
  - 37
  - 38
  scrapy.utils.versions.scrapy_components_versions:
  - 17
  - 18
  - 27
  - 28
  - 29
  - 31
Fuzzer filename: /src/fuzz_crawl.py
Inheritance:
  '...fuzz_crawl.test_spider': []
  scrapy.addons.AddonManager: []
  scrapy.cmdline.ScrapyArgumentParser: []
  scrapy.commands.BaseRunSpiderCommand:
  - ScrapyCommand
  scrapy.commands.ScrapyCommand: []
  scrapy.commands.ScrapyHelpFormatter: []
  scrapy.commands.bench.Command:
  - ScrapyCommand
  scrapy.commands.bench._BenchServer: []
  scrapy.commands.bench._BenchSpider: []
  scrapy.commands.check.Command:
  - ScrapyCommand
  scrapy.commands.check.TextTestResult:
  - _TextTestResult
  scrapy.commands.crawl.Command:
  - BaseRunSpiderCommand
  scrapy.commands.edit.Command:
  - ScrapyCommand
  scrapy.commands.fetch.Command:
  - ScrapyCommand
  scrapy.commands.genspider.Command:
  - ScrapyCommand
  scrapy.commands.list.Command:
  - ScrapyCommand
  scrapy.commands.parse.Command:
  - BaseRunSpiderCommand
  scrapy.commands.runspider.Command:
  - BaseRunSpiderCommand
  scrapy.commands.settings.Command:
  - ScrapyCommand
  scrapy.commands.shell.Command:
  - ScrapyCommand
  scrapy.commands.startproject.Command:
  - ScrapyCommand
  scrapy.commands.version.Command:
  - ScrapyCommand
  scrapy.commands.view.Command: []
  scrapy.contracts.Contract: []
  scrapy.contracts.ContractsManager: []
  scrapy.contracts._create_testcase.ContractTestCase:
  - TestCase
  scrapy.contracts.default.CallbackKeywordArgumentsContract:
  - Contract
  scrapy.contracts.default.ReturnsContract:
  - Contract
  scrapy.contracts.default.ScrapesContract:
  - Contract
  scrapy.contracts.default.UrlContract:
  - Contract
  scrapy.core.downloader.Downloader: []
  scrapy.core.downloader.Slot: []
  scrapy.core.downloader.contextfactory.AcceptableProtocolsContextFactory: []
  scrapy.core.downloader.contextfactory.BrowserLikeContextFactory:
  - ScrapyClientContextFactory
  scrapy.core.downloader.contextfactory.ScrapyClientContextFactory:
  - BrowserLikePolicyForHTTPS
  scrapy.core.downloader.handlers.DownloadHandlers: []
  scrapy.core.downloader.handlers.datauri.DataURIDownloadHandler: []
  scrapy.core.downloader.handlers.file.FileDownloadHandler: []
  scrapy.core.downloader.handlers.ftp.FTPDownloadHandler: []
  scrapy.core.downloader.handlers.ftp.ReceivedDataProtocol:
  - Protocol
  scrapy.core.downloader.handlers.http10.HTTP10DownloadHandler: []
  scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler: []
  scrapy.core.downloader.handlers.http11.ScrapyAgent: []
  scrapy.core.downloader.handlers.http11.ScrapyProxyAgent:
  - Agent
  scrapy.core.downloader.handlers.http11.TunnelError:
  - Exception
  scrapy.core.downloader.handlers.http11.TunnelingAgent:
  - Agent
  scrapy.core.downloader.handlers.http11.TunnelingTCP4ClientEndpoint:
  - TCP4ClientEndpoint
  scrapy.core.downloader.handlers.http11._RequestBodyProducer: []
  scrapy.core.downloader.handlers.http11._ResponseReader: []
  scrapy.core.downloader.handlers.http2.H2DownloadHandler: []
  scrapy.core.downloader.handlers.http2.ScrapyH2Agent: []
  scrapy.core.downloader.handlers.s3.S3DownloadHandler: []
  scrapy.core.downloader.middleware.DownloaderMiddlewareManager:
  - MiddlewareManager
  scrapy.core.downloader.tls.ScrapyClientTLSOptions:
  - ClientTLSOptions
  scrapy.core.downloader.webclient.ScrapyHTTPClientFactory:
  - ClientFactory
  scrapy.core.downloader.webclient.ScrapyHTTPPageGetter:
  - HTTPClient
  scrapy.core.engine.ExecutionEngine: []
  scrapy.core.engine.Slot: []
  scrapy.core.http2.agent.H2Agent: []
  scrapy.core.http2.agent.H2ConnectionPool: []
  scrapy.core.http2.agent.ScrapyProxyH2Agent:
  - H2Agent
  scrapy.core.http2.protocol.H2ClientFactory:
  - Factory
  scrapy.core.http2.protocol.H2ClientProtocol:
  - Protocol
  - TimeoutMixin
  scrapy.core.http2.protocol.InvalidNegotiatedProtocol:
  - H2Error
  scrapy.core.http2.protocol.MethodNotAllowed405:
  - H2Error
  scrapy.core.http2.protocol.RemoteTerminatedConnection:
  - H2Error
  scrapy.core.http2.stream.InactiveStreamClosed:
  - ConnectionClosed
  scrapy.core.http2.stream.InvalidHostname:
  - H2Error
  scrapy.core.http2.stream.Stream: []
  scrapy.core.http2.stream.StreamCloseReason:
  - Enum
  scrapy.core.scheduler.BaseScheduler: []
  scrapy.core.scheduler.BaseSchedulerMeta:
  - type
  scrapy.core.scheduler.Scheduler:
  - BaseScheduler
  scrapy.core.scraper.Scraper: []
  scrapy.core.scraper.Slot: []
  scrapy.core.spidermw.SpiderMiddlewareManager:
  - MiddlewareManager
  scrapy.crawler.Crawler: []
  scrapy.crawler.CrawlerProcess:
  - CrawlerRunner
  scrapy.crawler.CrawlerRunner: []
  scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware: []
  scrapy.downloadermiddlewares.cookies.CookiesMiddleware: []
  scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware: []
  scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware: []
  scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware: []
  scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware: []
  scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware: []
  scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware: []
  scrapy.downloadermiddlewares.redirect.BaseRedirectMiddleware: []
  scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware:
  - BaseRedirectMiddleware
  scrapy.downloadermiddlewares.redirect.RedirectMiddleware:
  - BaseRedirectMiddleware
  scrapy.downloadermiddlewares.retry.BackwardsCompatibilityMetaclass:
  - type
  scrapy.downloadermiddlewares.retry.RetryMiddleware: []
  scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware: []
  scrapy.downloadermiddlewares.stats.DownloaderStats: []
  scrapy.downloadermiddlewares.useragent.UserAgentMiddleware: []
  scrapy.dupefilters.BaseDupeFilter: []
  scrapy.dupefilters.RFPDupeFilter:
  - BaseDupeFilter
  scrapy.exceptions.CloseSpider:
  - Exception
  scrapy.exceptions.ContractFail:
  - AssertionError
  scrapy.exceptions.DontCloseSpider:
  - Exception
  scrapy.exceptions.DropItem:
  - Exception
  scrapy.exceptions.IgnoreRequest:
  - Exception
  scrapy.exceptions.NotConfigured:
  - Exception
  scrapy.exceptions.NotSupported:
  - Exception
  scrapy.exceptions.ScrapyDeprecationWarning:
  - Warning
  scrapy.exceptions.StopDownload:
  - Exception
  scrapy.exceptions.UsageError:
  - Exception
  scrapy.exceptions._InvalidOutput:
  - TypeError
  scrapy.exporters.BaseItemExporter: []
  scrapy.exporters.CsvItemExporter:
  - BaseItemExporter
  scrapy.exporters.JsonItemExporter:
  - BaseItemExporter
  scrapy.exporters.JsonLinesItemExporter:
  - BaseItemExporter
  scrapy.exporters.MarshalItemExporter:
  - BaseItemExporter
  scrapy.exporters.PickleItemExporter:
  - BaseItemExporter
  scrapy.exporters.PprintItemExporter:
  - BaseItemExporter
  scrapy.exporters.PythonItemExporter:
  - BaseItemExporter
  scrapy.exporters.XmlItemExporter:
  - BaseItemExporter
  scrapy.extension.ExtensionManager:
  - MiddlewareManager
  scrapy.extensions.closespider.CloseSpider: []
  scrapy.extensions.corestats.CoreStats: []
  scrapy.extensions.debug.Debugger: []
  scrapy.extensions.debug.StackTraceDump: []
  scrapy.extensions.feedexport.BlockingFeedStorage: []
  scrapy.extensions.feedexport.FTPFeedStorage:
  - BlockingFeedStorage
  scrapy.extensions.feedexport.FeedExporter: []
  scrapy.extensions.feedexport.FeedSlot: []
  scrapy.extensions.feedexport.FileFeedStorage: []
  scrapy.extensions.feedexport.GCSFeedStorage:
  - BlockingFeedStorage
  scrapy.extensions.feedexport.IFeedStorage:
  - Interface
  scrapy.extensions.feedexport.ItemFilter: []
  scrapy.extensions.feedexport.S3FeedStorage:
  - BlockingFeedStorage
  scrapy.extensions.feedexport.StdoutFeedStorage: []
  scrapy.extensions.httpcache.DbmCacheStorage: []
  scrapy.extensions.httpcache.DummyPolicy: []
  scrapy.extensions.httpcache.FilesystemCacheStorage: []
  scrapy.extensions.httpcache.RFC2616Policy: []
  scrapy.extensions.logstats.LogStats: []
  scrapy.extensions.memdebug.MemoryDebugger: []
  scrapy.extensions.memusage.MemoryUsage: []
  scrapy.extensions.periodic_log.PeriodicLog: []
  scrapy.extensions.postprocessing.Bz2Plugin: []
  scrapy.extensions.postprocessing.GzipPlugin: []
  scrapy.extensions.postprocessing.LZMAPlugin: []
  scrapy.extensions.postprocessing.PostProcessingManager:
  - IOBase
  scrapy.extensions.spiderstate.SpiderState: []
  scrapy.extensions.statsmailer.StatsMailer: []
  scrapy.extensions.telnet.TelnetConsole: []
  scrapy.extensions.telnet.TelnetConsole.protocol.Portal: []
  scrapy.extensions.throttle.AutoThrottle: []
  scrapy.http.cookies.CookieJar: []
  scrapy.http.cookies.WrappedRequest: []
  scrapy.http.cookies.WrappedResponse: []
  scrapy.http.cookies._DummyLock: []
  scrapy.http.headers.Headers:
  - CaselessDict
  scrapy.http.request.Request:
  - object_ref
  scrapy.http.request.form.FormRequest:
  - Request
  scrapy.http.request.json_request.JsonRequest:
  - Request
  scrapy.http.request.rpc.XmlRpcRequest:
  - Request
  scrapy.http.response.Response:
  - object_ref
  scrapy.http.response.html.HtmlResponse:
  - TextResponse
  scrapy.http.response.json.JsonResponse:
  - TextResponse
  scrapy.http.response.text.TextResponse:
  - Response
  scrapy.http.response.text._InvalidSelector:
  - ValueError
  scrapy.http.response.xml.XmlResponse:
  - TextResponse
  scrapy.interfaces.ISpiderLoader:
  - Interface
  scrapy.item.Field:
  - dict
  scrapy.item.Item:
  - object_ref
  - MutableMapping
  scrapy.item.ItemMeta:
  - ABCMeta
  scrapy.link.Link: []
  scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor: []
  scrapy.linkextractors.lxmlhtml.LxmlParserLinkExtractor: []
  scrapy.loader.ItemLoader: []
  scrapy.logformatter.LogFormatter: []
  scrapy.mail.MailSender: []
  scrapy.middleware.MiddlewareManager: []
  scrapy.pipelines.ItemPipelineManager:
  - MiddlewareManager
  scrapy.pipelines.files.FSFilesStore: []
  scrapy.pipelines.files.FTPFilesStore: []
  scrapy.pipelines.files.FileException:
  - Exception
  scrapy.pipelines.files.FilesPipeline:
  - MediaPipeline
  scrapy.pipelines.files.GCSFilesStore: []
  scrapy.pipelines.files.S3FilesStore: []
  scrapy.pipelines.images.ImageException:
  - FileException
  scrapy.pipelines.images.ImagesPipeline:
  - FilesPipeline
  scrapy.pipelines.images.NoimagesDrop:
  - DropItem
  scrapy.pipelines.media.MediaPipeline: []
  scrapy.pipelines.media.MediaPipeline.SpiderInfo: []
  scrapy.pqueues.DownloaderAwarePriorityQueue: []
  scrapy.pqueues.DownloaderInterface: []
  scrapy.pqueues.ScrapyPriorityQueue: []
  scrapy.resolver.CachingHostnameResolver: []
  scrapy.resolver.CachingThreadedResolver:
  - ThreadedResolver
  scrapy.resolver.HostResolution: []
  scrapy.resolver._CachingResolutionReceiver: []
  scrapy.responsetypes.ResponseTypes: []
  scrapy.robotstxt.ProtegoRobotParser:
  - RobotParser
  scrapy.robotstxt.PythonRobotParser:
  - RobotParser
  scrapy.robotstxt.ReppyRobotParser:
  - RobotParser
  scrapy.robotstxt.RerpRobotParser:
  - RobotParser
  scrapy.robotstxt.RobotParser: []
  scrapy.selector.unified.Selector:
  - object_ref
  - _ParselSelector
  scrapy.selector.unified.SelectorList:
  - object_ref
  scrapy.settings.BaseSettings: []
  scrapy.settings.Settings:
  - BaseSettings
  scrapy.settings.SettingsAttribute: []
  scrapy.shell.Shell: []
  scrapy.signalmanager.SignalManager: []
  scrapy.spiderloader.SpiderLoader: []
  scrapy.spidermiddlewares.depth.DepthMiddleware: []
  scrapy.spidermiddlewares.httperror.HttpError:
  - IgnoreRequest
  scrapy.spidermiddlewares.httperror.HttpErrorMiddleware: []
  scrapy.spidermiddlewares.offsite.OffsiteMiddleware: []
  scrapy.spidermiddlewares.offsite.PortWarning:
  - Warning
  scrapy.spidermiddlewares.offsite.URLWarning:
  - Warning
  scrapy.spidermiddlewares.referer.DefaultReferrerPolicy:
  - NoReferrerWhenDowngradePolicy
  scrapy.spidermiddlewares.referer.NoReferrerPolicy:
  - ReferrerPolicy
  scrapy.spidermiddlewares.referer.NoReferrerWhenDowngradePolicy:
  - ReferrerPolicy
  scrapy.spidermiddlewares.referer.OriginPolicy:
  - ReferrerPolicy
  scrapy.spidermiddlewares.referer.OriginWhenCrossOriginPolicy:
  - ReferrerPolicy
  scrapy.spidermiddlewares.referer.RefererMiddleware: []
  scrapy.spidermiddlewares.referer.ReferrerPolicy: []
  scrapy.spidermiddlewares.referer.SameOriginPolicy:
  - ReferrerPolicy
  scrapy.spidermiddlewares.referer.StrictOriginPolicy:
  - ReferrerPolicy
  scrapy.spidermiddlewares.referer.StrictOriginWhenCrossOriginPolicy:
  - ReferrerPolicy
  scrapy.spidermiddlewares.referer.UnsafeUrlPolicy:
  - ReferrerPolicy
  scrapy.spidermiddlewares.urllength.UrlLengthMiddleware: []
  scrapy.spiders.Spider:
  - object_ref
  scrapy.spiders.crawl.CrawlSpider:
  - Spider
  scrapy.spiders.crawl.Rule: []
  scrapy.spiders.feed.CSVFeedSpider:
  - Spider
  scrapy.spiders.feed.XMLFeedSpider:
  - Spider
  scrapy.spiders.init.InitSpider:
  - Spider
  scrapy.spiders.sitemap.SitemapSpider:
  - Spider
  scrapy.squeues._scrapy_non_serialization_queue.ScrapyRequestQueue:
  - queue_class
  scrapy.squeues._scrapy_serialization_queue.ScrapyRequestQueue:
  - queue_class
  scrapy.squeues._serializable_queue.SerializableQueue:
  - queue_class
  scrapy.squeues._with_mkdir.DirectoriesCreated:
  - queue_class
  scrapy.statscollectors.DummyStatsCollector:
  - StatsCollector
  scrapy.statscollectors.MemoryStatsCollector:
  - StatsCollector
  scrapy.statscollectors.StatsCollector: []
  scrapy.utils.benchserver.Root:
  - Resource
  scrapy.utils.curl.CurlParser: []
  scrapy.utils.curl.DataAction: []
  scrapy.utils.datatypes.CaseInsensitiveDict: []
  scrapy.utils.datatypes.CaselessDict:
  - dict
  scrapy.utils.datatypes.LocalCache: []
  scrapy.utils.datatypes.LocalWeakReferencedCache: []
  scrapy.utils.datatypes.SequenceExclude: []
  scrapy.utils.defer._AsyncCooperatorAdapter:
  - Iterator
  scrapy.utils.deprecate.create_deprecated_class.DeprecatedClass: []
  scrapy.utils.iterators._StreamReader: []
  scrapy.utils.log.LogCounterHandler: []
  scrapy.utils.log.StreamLogger: []
  scrapy.utils.log.TopLevelFormatter: []
  scrapy.utils.python.MutableAsyncChain:
  - AsyncIterable
  scrapy.utils.python.MutableChain:
  - Iterable
  scrapy.utils.reactor.CallLaterOnce: []
  scrapy.utils.request.RequestFingerprinter: []
  scrapy.utils.request.RequestFingerprinterProtocol:
  - Protocol
  scrapy.utils.serialize.ScrapyJSONDecoder: []
  scrapy.utils.serialize.ScrapyJSONEncoder: []
  scrapy.utils.sitemap.Sitemap: []
  scrapy.utils.spider.DefaultSpider:
  - Spider
  scrapy.utils.test.TestSpider:
  - Spider
  scrapy.utils.testproc.ProcessTest: []
  scrapy.utils.testproc.TestProcessProtocol:
  - ProcessProtocol
  scrapy.utils.testsite.NoMetaRefreshRedirect: []
  scrapy.utils.testsite.SiteTest: []
  scrapy.utils.trackref.object_ref: []
ep:
  func_name: TestOneInput
  module: '...fuzz_crawl'
