def test_list_dependency_items_in_repo(self):
     "Test generating a list of items from opencontrol.yaml file dependencies section"
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     revision = 'master'
     component_path = ''
     item_type = "systems"
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     # load opencontrol.yaml file
     items = ocf.list_dependency_items_in_repo(ocfileurl, item_type)
     print("test_list_dependency_items_in_repo 'standards' are: ", items)
     self.assertTrue({
         'revision': 'master',
         'url': 'https://github.com/opencontrol/cf-compliance'
     } in items)
     self.assertTrue({
         'revision': 'master',
         'url': 'https://github.com/opencontrol/aws-compliance'
     } in items)
     # test certifications
     item_type = "certifications"
     items = ocf.list_dependency_items_in_repo(ocfileurl, item_type)
     print("test_list_dependency_items_in_repo 'certfications' are: ",
           items)
     self.assertTrue(
         {
             'revision': 'master',
             'url': 'https://github.com/opencontrol/FedRAMP-Certifications'
         } in items)
     # test non-existent type
     item_type = "non-existent-type"
     items = ocf.list_dependency_items_in_repo(ocfileurl, item_type)
     print("test_list_dependency_items_in_repo 'non-existent-type' are: ",
           items)
     self.assertTrue([] == items)
 def test_resolve_ocfile_url_github(self):
     "Test resolution of a opencontrol.yaml url"
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     revision = 'master'
     component_path = ''
     correct_url = ocf.resolve_ocfile_url(repo_ref, revision)
     self.assertTrue( 'https://raw.githubusercontent.com/18F/cg-compliance/master/opencontrol.yaml' == correct_url)
 def test_resolve_ocfile_url_github(self):
     "Test resolution of a opencontrol.yaml url"
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     revision = 'master'
     component_path = ''
     correct_url = ocf.resolve_ocfile_url(repo_ref, revision)
     self.assertTrue(
         'https://raw.githubusercontent.com/18F/cg-compliance/master/opencontrol.yaml'
         == correct_url)
 def test_list_items_in_repo_no_key(self):
     "Test graceful failure of a list of items for a item_type that is not listed in opencontrol.yaml file"
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     revision = 'master'
     component_path = ''
     item_type = "standards"
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     # load opencontrol.yaml file
     items = ocf.list_items_in_repo(ocfileurl, item_type)
     self.assertTrue([] == items)
 def test_list_items_in_repo(self):
     "Test generating a list of components from opencontrol.yaml file"
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     revision = 'master'
     component_path = ''
     item_type = "components"
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     # load opencontrol.yaml file
     components = ocf.list_items_in_repo(ocfileurl, item_type)
     self.assertTrue(['./AC_Policy', './AT_Policy', './AU_Policy', './CA_Policy', './CICloudGov', './CM_Policy', './CP_Policy', './CloudCheckr', './ELKStack', './IA_Policy', './IR_Policy', './JumpBox', './MA_Policy', './MP_Policy', './PE_Policy', './PL_Policy', './PS_Policy', './RA_Policy', './SA_Policy', './SC_Policy', './SI_Policy', './SecureProxy'] == components)
 def test_list_items_in_repo_no_key(self):
     "Test graceful failure of a list of items for a item_type that is not listed in opencontrol.yaml file"
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     revision = 'master'
     component_path = ''
     item_type = "standards"
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     # load opencontrol.yaml file
     items = ocf.list_items_in_repo(ocfileurl, item_type)
     self.assertTrue([] == items)
 def test_resolve_ocfile_url_localfile(self):
     "Test resolution of a opencontrol.yaml url that is a localfile"
     ocf = OpenControlFiles()
     # construct absolute file path
     dir_path = os.path.dirname(os.path.realpath(__file__))
     repo_ref = "file://{}/{}".format(dir_path, "test_data/repo1")
     print("dir_path is {}".format(dir_path))
     print("repo_ref is {}".format(repo_ref))
     revision = 'master'
     component_path = ''
     correct_url = ocf.resolve_ocfile_url(repo_ref, revision)
     self.assertTrue( "{}/{}".format(repo_ref,'opencontrol.yaml') == correct_url)
 def test_resolve_ocfile_url_localfile(self):
     "Test resolution of a opencontrol.yaml url that is a localfile"
     ocf = OpenControlFiles()
     # construct absolute file path
     dir_path = os.path.dirname(os.path.realpath(__file__))
     repo_ref = "file://{}/{}".format(dir_path, "test_data/repo1")
     print("dir_path is {}".format(dir_path))
     print("repo_ref is {}".format(repo_ref))
     revision = 'master'
     component_path = ''
     correct_url = ocf.resolve_ocfile_url(repo_ref, revision)
     self.assertTrue(
         "{}/{}".format(repo_ref, 'opencontrol.yaml') == correct_url)
 def test_list_standards_in_repo(self):
     "Test listing of standards from opencontrol.yaml file"
     ocf = OpenControlFiles()
     # test with repo on localfile system with local and remote certifications references
     print("\n******* test repo on localfile system ****")
     revision = 'master'
     item_type = "standards"
     # construct absolute file path
     dir_path = os.path.dirname(os.path.realpath(__file__))
     repo_ref = "file://{}/{}".format(dir_path, "test_data/repo2")
     # resolve the `opencontrol.yaml` file
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     items = ocf.list_items_in_repo(ocfileurl, item_type)
     print("ocf.list_items_in_repo: ", items)
     self.assertTrue(['./standards/FRIST-800-53.yaml'] == items)
 def test_list_standards_in_repo(self):
     "Test listing of standards from opencontrol.yaml file"
     ocf = OpenControlFiles()
     # test with repo on localfile system with local and remote certifications references
     print("\n******* test repo on localfile system ****")
     revision = 'master'
     item_type = "standards"
     # construct absolute file path
     dir_path = os.path.dirname(os.path.realpath(__file__))
     repo_ref = "file://{}/{}".format(dir_path, "test_data/repo2")
     # resolve the `opencontrol.yaml` file
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     items = ocf.list_items_in_repo(ocfileurl, item_type)
     print("ocf.list_items_in_repo: ", items)
     self.assertTrue(['./standards/FRIST-800-53.yaml'] == items)
 def test_list_certifications_in_repo(self):
     "Test generating a list of certifications from opencontrol.yaml file"
     ocf = OpenControlFiles()
     # test with repo on localfile system with local and remote certifications references
     print("\n******* test repo on localfile system ****")
     revision = 'master'
     item_type = "certifications"
     # construct absolute file path
     dir_path = os.path.dirname(os.path.realpath(__file__))
     repo_ref = "file://{}/{}".format(dir_path, "test_data/repo2")
     # resolve the `opencontrol.yaml` file
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     items = ocf.list_items_in_repo(ocfileurl, item_type)
     print("ocf.list_items_in_repo: ", items)
     self.assertTrue('./certifications/FredRAMP-low.yaml' in items)
     self.assertTrue('./certifications/LATO.yaml' in items)
 def test_list_certifications_in_repo(self):
     "Test generating a list of certifications from opencontrol.yaml file"
     ocf = OpenControlFiles()
     # test with repo on localfile system with local and remote certifications references
     print("\n******* test repo on localfile system ****")
     revision = 'master'
     item_type = "certifications"
     # construct absolute file path
     dir_path = os.path.dirname(os.path.realpath(__file__))
     repo_ref = "file://{}/{}".format(dir_path, "test_data/repo2")
     # resolve the `opencontrol.yaml` file
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     items = ocf.list_items_in_repo(ocfileurl, item_type)
     print("ocf.list_items_in_repo: ", items)
     self.assertTrue('./certifications/FredRAMP-low.yaml' in items)
     self.assertTrue('./certifications/LATO.yaml' in items)
 def test_list_items_in_repo(self):
     "Test generating a list of components from opencontrol.yaml file"
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     revision = 'master'
     component_path = ''
     item_type = "components"
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     # load opencontrol.yaml file
     components = ocf.list_items_in_repo(ocfileurl, item_type)
     self.assertTrue([
         './AC_Policy', './AT_Policy', './AU_Policy', './CA_Policy',
         './CICloudGov', './CM_Policy', './CP_Policy', './CloudCheckr',
         './ELKStack', './IA_Policy', './IR_Policy', './JumpBox',
         './MA_Policy', './MP_Policy', './PE_Policy', './PL_Policy',
         './PS_Policy', './RA_Policy', './SA_Policy', './SC_Policy',
         './SI_Policy', './SecureProxy'
     ] == components)
 def test_parse_opencontrolfile(self):
     "Test retrieve and parsing of an opencontrol.yaml file"
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     revision = 'master'
     component_path = ''
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     my_dict = ocf.load_ocfile_from_url(ocfileurl)
     print(my_dict.keys())
     print("------")
     print(my_dict['components'])
     self.assertTrue(len(list(my_dict)) == 5)
     self.assertTrue('metadata' in list(my_dict))
     self.assertTrue('dependencies' in list(my_dict))
     self.assertTrue('components' in list(my_dict))
     self.assertTrue('name' in list(my_dict))
     self.assertTrue('schema_version' in list(my_dict))
 def test_list_dependency_items_in_repo_no_dependencies(self):
     "Test generating a list of items from opencontrol.yaml file dependencies section"
     ocf = OpenControlFiles()
     # TODO: need better test in case Docker adds dependencies
     # construct absolute file path
     dir_path = os.path.dirname(os.path.realpath(__file__))
     repo_ref = "file://{}/{}".format(dir_path,
                                      "test_data/repo_no_dependencies")
     revision = 'master'
     item_type = "dependencies"
     # resolve the `opencontrol.yaml` file
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     # print debug info
     print("dir_path is {}".format(dir_path))
     print("repo_ref is {}".format(repo_ref))
     # load opencontrol.yaml file
     items = ocf.list_dependency_items_in_repo(ocfileurl, item_type)
     print("test_list_dependency_items_in_repo 'dependencies' are: ", items)
     self.assertTrue([] == items)
 def test_parse_opencontrolfile(self):
     "Test retrieve and parsing of an opencontrol.yaml file"
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     revision = 'master'
     component_path = ''
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     my_dict = ocf.load_ocfile_from_url(ocfileurl)
     print(my_dict.keys())
     print("------")
     print(my_dict['components'])
     self.assertTrue(len(list(my_dict)) == 5)
     self.assertTrue('metadata' in list(my_dict))
     self.assertTrue('dependencies' in list(my_dict))
     self.assertTrue('components' in list(my_dict))
     self.assertTrue('name' in list(my_dict))
     self.assertTrue('schema_version' in list(my_dict))
 def test_list_dependency_items_in_repo(self):
     "Test generating a list of items from opencontrol.yaml file dependencies section"
     ocf = OpenControlFiles()
     repo_ref = 'https://github.com/18F/cg-compliance'
     revision = 'master'
     component_path = ''
     item_type = "systems"
     ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
     # load opencontrol.yaml file
     items = ocf.list_dependency_items_in_repo(ocfileurl, item_type)
     print("test_list_dependency_items_in_repo 'standards' are: ", items)
     self.assertTrue({'revision': 'master', 'url': 'https://github.com/opencontrol/cf-compliance'} in items)
     self.assertTrue({'revision': 'master', 'url': 'https://github.com/opencontrol/aws-compliance'} in items)
     # test certifications
     item_type = "certifications"
     items = ocf.list_dependency_items_in_repo(ocfileurl, item_type)
     print("test_list_dependency_items_in_repo 'certfications' are: ", items)
     self.assertTrue({'revision': 'master', 'url': 'https://github.com/opencontrol/FedRAMP-Certifications'} in items)
     # test non-existent type
     item_type = "non-existent-type"
     items = ocf.list_dependency_items_in_repo(ocfileurl, item_type)
     print("test_list_dependency_items_in_repo 'non-existent-type' are: ", items)
     self.assertTrue([] == items)
    def test_list_items_urls_in_repo(self):
        "Test generating a list of items (components, standards, certifications, etc) URL files from opencontrol.yaml file"
        ocf = OpenControlFiles()
        repo_ref = 'https://github.com/18F/cg-compliance'
        revision = 'master'
        component_path = ''
        # test for graceful handling of non-existent item_type
        item_type = "standardsx"
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        print("repo_ref 1: %s" % repo_ref)
        print("ocfileurl 1: ocfileurl %s" % ocfileurl)
        # load opencontrol.yaml file
        components_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        self.assertTrue(len(components_urls) == 0)

        # test for existing item_type "components"
        item_type = "components"
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        print("repo_ref 1: %s" % repo_ref)
        print("ocfileurl 1: ocfileurl %s" % ocfileurl)
        # load opencontrol.yaml file
        components_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        # print components_urls
        self.assertTrue(len(components_urls) == 22)
        self.assertTrue('https://raw.githubusercontent.com/18F/cg-compliance/master/./AC_Policy/component.yaml' in components_urls)
        self.assertTrue('https://raw.githubusercontent.com/18F/cg-compliance/master/./ELKStack/component.yaml' in components_urls)
        self.assertTrue('https://raw.githubusercontent.com/18F/cg-compliance/master/./MA_Policy/component.yaml' in components_urls)
        self.assertTrue('https://raw.githubusercontent.com/18F/cg-compliance/master/./CICloudGov/component.yaml' in components_urls)

        # test with other repo
        repo_ref = 'https://github.com/opencontrol/freedonia-compliance'
        revision = 'master'
        component_path = ''
        item_type = "components"
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        print("ocfileurl 2: ocfileurl %s" % ocfileurl)
        # load opencontrol.yaml file
        components_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        print(components_urls)
        self.assertTrue(len(components_urls) == 1)
        self.assertTrue(['https://raw.githubusercontent.com/opencontrol/freedonia-compliance/master/./AU_policy/component.yaml'] == components_urls)

        # test for components with repo on localfile system
        print("\n******* test repo on localfile system ****")
        # construct absolute file path
        dir_path = os.path.dirname(os.path.realpath(__file__))
        repo_ref = "file://{}/{}".format(dir_path, "test_data/repo1")
        # resolve the `opencontrol.yaml` file
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        # print debug info
        print("dir_path is {}".format(dir_path))
        print("repo_ref is {}".format(repo_ref))
        print("ocfileurl 3: ocfileurl %s" % ocfileurl)
        revision = 'master'
        item_type = "components"
        components_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        # components_urls = ["a", "b"]
        print("component_urls equal {}".format(components_urls))
        expected_url = "file://{}/{}".format(dir_path, "test_data/repo1/./AU_policy/component.yaml")
        print("expected_url is {}".format(expected_url))
        self.assertTrue([expected_url] == components_urls)

        # test for standards with repo on localfile system
        # construct absolute file path
        dir_path = os.path.dirname(os.path.realpath(__file__))
        repo_ref = "file://{}/{}".format(dir_path, "test_data/repo2")
        # resolve the `opencontrol.yaml` file
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        # print debug info
        print("dir_path is {}".format(dir_path))
        print("repo_ref is {}".format(repo_ref))
        print("ocfileurl 4: ocfileurl %s" % ocfileurl)
        revision = 'master'
        item_type = "standards"
        items_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        print("items_urls equal {}".format(items_urls))
        expected_url = "file://{}/{}".format(dir_path, "test_data/repo2/./standards/FRIST-800-53.yaml")
        print("expected_url is {}".format(expected_url))
        self.assertTrue([expected_url] == items_urls)

        # test for certifications with repo on localfile system
        # construct absolute file path
        dir_path = os.path.dirname(os.path.realpath(__file__))
        repo_ref = "file://{}/{}".format(dir_path, "test_data/repo2")
        # resolve the `opencontrol.yaml` file
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        # print debug info
        print("dir_path is {}".format(dir_path))
        print("repo_ref is {}".format(repo_ref))
        print("ocfileurl 4: ocfileurl %s" % ocfileurl)
        revision = 'master'
        item_type = "certifications"
        items_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        print("************\n items_urls equal {}".format(items_urls))
        expected_urls = ["file://{}/{}".format(dir_path, "test_data/repo2/./certifications/FredRAMP-low.yaml"), "file://{}/{}".format(dir_path, "test_data/repo2/./certifications/LATO.yaml")]
        print("expected_urls is {}".format(expected_urls))
        self.assertTrue("file://{}/{}".format(dir_path, "test_data/repo2/./certifications/FredRAMP-low.yaml") in items_urls)
        self.assertTrue("file://{}/{}".format(dir_path, "test_data/repo2/./certifications/LATO.yaml") in items_urls)
    def test_list_items_urls_in_repo(self):
        "Test generating a list of items (components, standards, certifications, etc) URL files from opencontrol.yaml file"
        ocf = OpenControlFiles()
        repo_ref = 'https://github.com/18F/cg-compliance'
        revision = 'master'
        component_path = ''
        # test for graceful handling of non-existent item_type
        item_type = "standardsx"
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        print("repo_ref 1: %s" % repo_ref)
        print("ocfileurl 1: ocfileurl %s" % ocfileurl)
        # load opencontrol.yaml file
        components_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        self.assertTrue(len(components_urls) == 0)

        # test for existing item_type "components"
        item_type = "components"
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        print("repo_ref 1: %s" % repo_ref)
        print("ocfileurl 1: ocfileurl %s" % ocfileurl)
        # load opencontrol.yaml file
        components_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        # print components_urls
        self.assertTrue(len(components_urls) == 22)
        self.assertTrue(
            'https://raw.githubusercontent.com/18F/cg-compliance/master/./AC_Policy/component.yaml'
            in components_urls)
        self.assertTrue(
            'https://raw.githubusercontent.com/18F/cg-compliance/master/./ELKStack/component.yaml'
            in components_urls)
        self.assertTrue(
            'https://raw.githubusercontent.com/18F/cg-compliance/master/./MA_Policy/component.yaml'
            in components_urls)
        self.assertTrue(
            'https://raw.githubusercontent.com/18F/cg-compliance/master/./CICloudGov/component.yaml'
            in components_urls)

        # test with other repo
        repo_ref = 'https://github.com/opencontrol/freedonia-compliance'
        revision = 'master'
        component_path = ''
        item_type = "components"
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        print("ocfileurl 2: ocfileurl %s" % ocfileurl)
        # load opencontrol.yaml file
        components_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        print(components_urls)
        self.assertTrue(len(components_urls) == 1)
        self.assertTrue([
            'https://raw.githubusercontent.com/opencontrol/freedonia-compliance/master/./AU_policy/component.yaml'
        ] == components_urls)

        # test for components with repo on localfile system
        print("\n******* test repo on localfile system ****")
        # construct absolute file path
        dir_path = os.path.dirname(os.path.realpath(__file__))
        repo_ref = "file://{}/{}".format(dir_path, "test_data/repo1")
        # resolve the `opencontrol.yaml` file
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        # print debug info
        print("dir_path is {}".format(dir_path))
        print("repo_ref is {}".format(repo_ref))
        print("ocfileurl 3: ocfileurl %s" % ocfileurl)
        revision = 'master'
        item_type = "components"
        components_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        # components_urls = ["a", "b"]
        print("component_urls equal {}".format(components_urls))
        expected_url = "file://{}/{}".format(
            dir_path, "test_data/repo1/./AU_policy/component.yaml")
        print("expected_url is {}".format(expected_url))
        self.assertTrue([expected_url] == components_urls)

        # test for standards with repo on localfile system
        # construct absolute file path
        dir_path = os.path.dirname(os.path.realpath(__file__))
        repo_ref = "file://{}/{}".format(dir_path, "test_data/repo2")
        # resolve the `opencontrol.yaml` file
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        # print debug info
        print("dir_path is {}".format(dir_path))
        print("repo_ref is {}".format(repo_ref))
        print("ocfileurl 4: ocfileurl %s" % ocfileurl)
        revision = 'master'
        item_type = "standards"
        items_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        print("items_urls equal {}".format(items_urls))
        expected_url = "file://{}/{}".format(
            dir_path, "test_data/repo2/./standards/FRIST-800-53.yaml")
        print("expected_url is {}".format(expected_url))
        self.assertTrue([expected_url] == items_urls)

        # test for certifications with repo on localfile system
        # construct absolute file path
        dir_path = os.path.dirname(os.path.realpath(__file__))
        repo_ref = "file://{}/{}".format(dir_path, "test_data/repo2")
        # resolve the `opencontrol.yaml` file
        ocfileurl = ocf.resolve_ocfile_url(repo_ref, revision)
        # print debug info
        print("dir_path is {}".format(dir_path))
        print("repo_ref is {}".format(repo_ref))
        print("ocfileurl 4: ocfileurl %s" % ocfileurl)
        revision = 'master'
        item_type = "certifications"
        items_urls = ocf.list_items_urls_in_repo(ocfileurl, item_type)
        print("************\n items_urls equal {}".format(items_urls))
        expected_urls = [
            "file://{}/{}".format(
                dir_path,
                "test_data/repo2/./certifications/FredRAMP-low.yaml"),
            "file://{}/{}".format(
                dir_path, "test_data/repo2/./certifications/LATO.yaml")
        ]
        print("expected_urls is {}".format(expected_urls))
        self.assertTrue("file://{}/{}".format(
            dir_path, "test_data/repo2/./certifications/FredRAMP-low.yaml") in
                        items_urls)
        self.assertTrue("file://{}/{}".format(
            dir_path, "test_data/repo2/./certifications/LATO.yaml") in
                        items_urls)