def test_generate_requirements(): lines = generate_requirements('boto3', ignore=('docutils', 's3transfer')) packages = [] for l in lines.split('\n'): pkg_name, version = l.split('==') packages.append(pkg_name) assert packages == ['botocore', 'jmespath']
def custodian_archive(packages=None, deps=()): if not packages: packages = [] packages.append('c7n_gcp') archive = base_archive(packages) # Requirements are fetched server-side, which helps for binary extensions # but for pure python packages, if we have a local install and its # relatively small, it might be faster to just upload. # # note we pin requirements to the same versions installed locally. requirements = set() requirements.update(( 'jmespath', 'retrying', 'python-dateutil', 'ratelimiter', 'google-auth', 'google-auth-httplib2', 'google-api-python-client')) requirements.update(deps) archive.add_contents( 'requirements.txt', generate_requirements(requirements, include_self=True)) return archive
def get_mailer_requirements(): deps = ['azure-keyvault', 'azure-storage-queue', 'azure-storage-blob', 'sendgrid'] + list(CORE_DEPS) requirements = generate_requirements( deps, ignore=['boto3', 'botocore', 'pywin32'], include_self=True) return requirements
def test_generate_requirements(): lines = generate_requirements( 'boto3', ignore=('docutils', 's3transfer', 'six'), exclude=['urllib3']) packages = [] for l in lines.split('\n'): pkg_name, version = l.split('==') packages.append(pkg_name) assert set(packages) == {'botocore', 'jmespath', 'python-dateutil'}
def get_mailer_requirements(): deps = ['azure-identity', 'azure-mgmt-managementgroups', 'azure-mgmt-web', 'azure-graphrbac', 'azure-keyvault', 'azure-storage-queue', 'azure-storage-blob', 'netaddr', 'sendgrid', 'pyyaml'] + list(CORE_DEPS) requirements = generate_requirements( deps, ignore=['boto3', 'botocore', 'pywin32'], exclude=['pkg_resources'], include_self=True) return requirements
def main(package, template, output): """recursive dependency pinning for package""" requirements = generate_requirements(package) pinned_packages = requirements.split('\n') if not template and output: print('\n'.join(pinned_packages)) return with open(template) as fh: t = jinja2.Template(fh.read(), trim_blocks=True, lstrip_blocks=True) with open(output, 'w') as fh: fh.write(t.render(pinned_packages=pinned_packages))
def build_functions_package(self, queue_name=None, target_subscription_ids=None): self.log.info("Building function package for %s" % self.function_params.function_app_name) requirements = generate_requirements('c7n-azure', ignore=['boto3', 'botocore', 'pywin32'], exclude='c7n') package = FunctionPackage(self.policy_name, target_sub_ids=target_subscription_ids) package.build(self.policy.data, modules=['c7n', 'c7n-azure'], requirements=requirements, queue_name=queue_name) package.close() self.log.info("Function package built, size is %dKB" % (package.pkg.size / 1024)) return package
def version_cmd(options): from c7n.version import version from c7n.resources import load_available from c7n.mu import generate_requirements if not options.debug: print(version) return indent = 13 print( "\nPlease copy/paste the following info along with any bug reports:\n") print("Custodian: ", version) pyversion = sys.version.replace('\n', '\n' + ' ' * indent) # For readability print("Python: ", pyversion) # os.uname is only available on recent versions of Unix try: print("Platform: ", os.uname()) except Exception: # pragma: no cover print("Platform: ", sys.platform) is_venv = (hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix)) print("Using venv: ", is_venv) in_container = os.path.exists('/.dockerenv') print("Docker: %s" % str(bool(in_container))) print("Installed: \n") packages = ['c7n'] found = load_available(resources=False) if 'gcp' in found: packages.append('c7n_gcp') if 'azure' in found: packages.append('c7n_azure') if 'k8s' in found: packages.append('c7n_kube') if 'openstack' in found: packages.append('c7n_openstack') print(generate_requirements(packages))