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
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
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
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
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
def pipfile(self): p_path = os.sep.join([self.path, 'Pipfile']) with open(p_path, 'r') as f: return toml.loads(f.read())