Ejemplo n.º 1
0
    def test_ensure_proper_casing_no_change(self):
        """Ensure changed flag is false with no changes."""
        pfile_test = ("[packages]\n"
                      "Flask = \"==0.11\"\n"
                      "\n\n"
                      "[dev-packages]\n"
                      "pytest = \"*\"\n")

        # Load test Pipfile.
        p = toml.loads(pfile_test)
        changed = ensure_proper_casing(p)

        assert 'Flask' in p['packages']
        assert 'pytest' in p['dev-packages']
        assert changed is False
Ejemplo n.º 2
0
    def parse(self, inject_env=True):
        # Open the Pipfile.
        with open(self.filename) as f:
            content = f.read()

        # Load the default configuration.
        default_config = {
            u'source': [DEFAULT_SOURCE],
            u'packages': {},
            u'requires': {},
            u'dev-packages': {}
        }

        config = {}
        config.update(default_config)

        # Deserialize the TOML, and parse for Environment Variables
        parsed = toml.loads(content)

        if inject_env:
            injected_toml = self.inject_environment_variables(parsed)

            # Load the Pipfile's configuration.
            config.update(injected_toml)
        else:
            config.update(parsed)

        # Structure the data for output.
        data = {
            '_meta': {
                'sources': config['source'],
                'requires': config['requires']
            },
        }

        # TODO: Validate given data here.
        self.groups['default'] = config['packages']
        self.groups['develop'] = config['dev-packages']

        # Update the data structure with group information.
        data.update(self.groups)
        return data
Ejemplo n.º 3
0
 def update(cls, content, dependency, version, spec="==", hashes=()):
     data = toml.loads(content)
     if data:
         for package_type in ['packages', 'dev-packages']:
             if package_type in data:
                 if dependency.full_name in data[package_type]:
                     data[package_type][
                         dependency.full_name] = "{spec}{version}".format(
                             spec=spec, version=version)
     try:
         from pipenv.project import Project
     except ImportError:
         raise ImportError(
             "Updating a Pipfile requires the pipenv extra to be installed. Install it with "
             "pip install dparse[pipenv]")
     pipfile = tempfile.NamedTemporaryFile(delete=False)
     p = Project(chdir=False)
     p.write_toml(data=data, path=pipfile.name)
     data = open(pipfile.name).read()
     os.remove(pipfile.name)
     return data
Ejemplo n.º 4
0
    def test_ensure_proper_casing_names(self):
        """Ensure proper casing for package names."""
        pfile_test = ("[packages]\n"
                      "DjAnGO = \"*\"\n"
                      "flask = \"==0.11\"\n"
                      "\n\n"
                      "[dev-packages]\n"
                      "PyTEST = \"*\"\n")

        # Load test Pipfile.
        p = toml.loads(pfile_test)

        assert 'DjAnGO' in p['packages']
        assert 'PyTEST' in p['dev-packages']

        changed = ensure_proper_casing(p)

        assert 'Django' in p['packages']
        assert 'DjAnGO' not in p['packages']

        assert 'pytest' in p['dev-packages']
        assert 'PyTEST' not in p['dev-packages']

        assert changed is True
Ejemplo n.º 5
0
 def parse(self):
     """
     Parse a Pipfile (as seen in pipenv)
     :return:
     """
     try:
         data = toml.loads(self.obj.content, _dict=OrderedDict)
         if data:
             for package_type in ['packages', 'dev-packages']:
                 if package_type in data:
                     for name, specs in data[package_type].items():
                         # skip on VCS dependencies
                         if not isinstance(specs, str):
                             continue
                         if specs == '*':
                             specs = ''
                         self.obj.dependencies.append(
                             Dependency(name=name,
                                        specs=SpecifierSet(specs),
                                        dependency_type=filetypes.pipfile,
                                        line=''.join([name, specs]),
                                        section=package_type))
     except (toml.TomlDecodeError, IndexError) as e:
         pass
Ejemplo n.º 6
0
 def pipfile(self):
     p_path = os.sep.join([self.path, 'Pipfile'])
     with open(p_path, 'r') as f:
         return toml.loads(f.read())
Ejemplo n.º 7
0
 def pipfile(self):
     p_path = os.sep.join([self.path, 'Pipfile'])
     with open(p_path, 'r') as f:
         return toml.loads(f.read())