Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
new_path = new_path.strip()
if not new_path:
return
path_env = _os_module.environ.get(b'PATH')
if not path_env:
# this is quite unlikely to ever happen, but here for safety
path_env = ''
# ensure we use unicode or bytes depending on OSes
if on_linux:
new_path = fsencode(new_path)
path_env = fsencode(path_env)
sep = _os_module.pathsep
else:
new_path = fsdecode(new_path)
path_env = fsdecode(path_env)
sep = unicode(_os_module.pathsep)
path_segments = path_env.split(sep)
# add lib path to the front of the PATH env var
# this will use bytes on Linux and unicode elsewhere
if new_path not in path_segments:
if not path_env:
new_path_env = new_path
else:
new_path_env = sep.join([new_path, path_env])
if not on_linux:
# recode to bytes using FS encoding
new_path_env = fsencode(new_path_env)
if not new_path:
return
path_env = _os_module.environ.get(b'PATH')
if not path_env:
# this is quite unlikely to ever happen, but here for safety
path_env = ''
# ensure we use unicode or bytes depending on OSes
if on_linux:
new_path = fsencode(new_path)
path_env = fsencode(path_env)
sep = _os_module.pathsep
else:
new_path = fsdecode(new_path)
path_env = fsdecode(path_env)
sep = unicode(_os_module.pathsep)
path_segments = path_env.split(sep)
# add lib path to the front of the PATH env var
# this will use bytes on Linux and unicode elsewhere
if new_path not in path_segments:
if not path_env:
new_path_env = new_path
else:
new_path_env = sep.join([new_path, path_env])
if not on_linux:
# recode to bytes using FS encoding
new_path_env = fsencode(new_path_env)
# ... and set the variable back as bytes
if self._use_disk_cache_for_resource(rid):
cache_location = self._get_resource_cache_location(rid, create=True)
else:
cache_location = None
# If the codebase is virtual, then there is no location
parent_location = parent.location
if parent_location:
location = join(parent_location, name)
else:
location = None
# If the codebase is virtual, we provide the path
if not path:
path = posixpath.join(parent.path, fsdecode(name))
if TRACE:
logger_debug(' Codebase._create_resource: parent.path:', parent.path, 'path:', path)
resource_data = resource_data or {}
if resource_data:
resource_data = remove_properties_and_basics(resource_data)
child = self.resource_class(
name=name,
location=location,
path=path,
cache_location=cache_location,
rid=rid,
pid=parent.rid,
is_file=is_file,
**resource_data
def get_codebase_cache_dir(temp_dir):
"""
Return a new, created and unique per-run cache storage directory path rooted
at the `temp_dir` base temp directory in the OS-preferred representation
(either bytes on Linux and Unicode elsewhere).
"""
from commoncode.fileutils import get_temp_dir
from commoncode.timeutils import time2tstamp
prefix = 'scancode-codebase-' + time2tstamp() + '-'
cache_dir = get_temp_dir(base_dir=temp_dir, prefix=prefix)
if on_linux and py2:
cache_dir = fsencode(cache_dir)
else:
cache_dir = fsdecode(cache_dir)
return cache_dir
def serialize(self):
"""
Return a mapping of representing this Resource and its scans in a form
that is fully serializable and can be used to reconstruct a Resource.
All path-derived OS-native strings are decoded to Unicode for ulterior
JSON serialization.
"""
# we save all fields, not just the one in .to_dict()
saveable = attr.asdict(self, dict_factory=OrderedDict)
saveable['name'] = fsdecode(self.name)
if self.location:
saveable['location'] = fsdecode(self.location)
if self.cache_location:
saveable['cache_location'] = fsdecode(self.cache_location)
return saveable
self.original_location = location
self.full_root = full_root
self.strip_root = strip_root
# Resource sub-class to use: Configured with attributes in _populate
self.resource_class = Resource
self.resource_attributes = resource_attributes or OrderedDict()
self.codebase_attributes = codebase_attributes or OrderedDict()
# setup location
########################################################################
if on_linux and py2:
location = fsencode(location)
else:
location = fsdecode(location)
location = abspath(normpath(expanduser(location)))
location = location.rstrip(POSIX_PATH_SEP).rstrip(WIN_PATH_SEP)
# TODO: we should also accept to create "virtual" codebase without a
# backing filesystem location
assert exists(location)
# FIXME: what if is_special(location)???
self.location = location
self.is_file = filetype_is_file(location)
# True if this codebase root is a file or an empty directory.
self.has_single_resource = bool(self.is_file or not os.listdir(location))
# Set up caching, summary, timing, and error info
self._setup_essentials(temp_dir, max_in_memory)
- If `strip_root` is True, return a relative path without the first root
segment. Ignored if `full_root` is True.
"""
posix_loc = fsdecode(as_posixpath(location))
if full_root:
return posix_loc
if not strip_root:
# keep the root directory name by default
root_loc = parent_directory(root_location)
else:
root_loc = root_location
posix_root_loc = fsdecode(as_posixpath(root_loc)).rstrip('/') + '/'
return posix_loc.replace(posix_root_loc, '', 1)
def to_native_path(path):
"""
Return `path` using the preferred OS encoding (bytes on Linux,
Unicode elsewhere) given a unicode or bytes path string.
"""
if not path:
return path
if on_linux and py2:
return fsencode(path)
else:
return fsdecode(path)