1415
1428
perms.append(m)
1434
Build paths compliant with XDG Base Directory Specification.
1435
http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
1439
>>> os.environ["HOME"] = "/home/test_user"
1441
# XDG_CONFIG_HOME unavailable
1442
>>> os.environ["XDG_CONFIG_HOME"] = ""
1443
>>> XDGDirs.get_config_home("onboard/test.dat")
1444
'/home/test_user/.config/onboard/test.dat'
1446
# XDG_CONFIG_HOME available
1447
>>> os.environ["XDG_CONFIG_HOME"] = "/home/test_user/.config_home"
1448
>>> XDGDirs.get_config_home("onboard/test.dat")
1449
'/home/test_user/.config_home/onboard/test.dat'
1451
# XDG_DATA_HOME unavailable
1452
>>> os.environ["XDG_DATA_HOME"] = ""
1453
>>> XDGDirs.get_data_home("onboard/test.dat")
1454
'/home/test_user/.local/share/onboard/test.dat'
1456
# XDG_DATA_HOME available
1457
>>> os.environ["XDG_DATA_HOME"] = "/home/test_user/.data_home"
1458
>>> XDGDirs.get_data_home("onboard/test.dat")
1459
'/home/test_user/.data_home/onboard/test.dat'
1461
# XDG_CONFIG_DIRS unvailable
1462
>>> os.environ["XDG_CONFIG_HOME"] = ""
1463
>>> os.environ["XDG_CONFIG_DIRS"] = ""
1464
>>> XDGDirs.get_all_config_dirs("onboard/test.dat")
1465
['/home/test_user/.config/onboard/test.dat', '/etc/xdg/onboard/test.dat']
1467
# XDG_CONFIG_DIRS available
1468
>>> os.environ["XDG_CONFIG_HOME"] = ""
1469
>>> os.environ["XDG_CONFIG_DIRS"] = "/etc/xdg/xdg-ubuntu:/etc/xdg"
1470
>>> XDGDirs.get_all_config_dirs("onboard/test.dat")
1471
['/home/test_user/.config/onboard/test.dat', \
1472
'/etc/xdg/xdg-ubuntu/onboard/test.dat', \
1473
'/etc/xdg/onboard/test.dat']
1475
# XDG_DATA_DIRS unvailable
1476
>>> os.environ["XDG_DATA_HOME"] = ""
1477
>>> os.environ["XDG_DATA_DIRS"] = ""
1478
>>> XDGDirs.get_all_data_dirs("onboard/test.dat")
1479
['/home/test_user/.local/share/onboard/test.dat', \
1480
'/usr/local/share/onboard/test.dat', \
1481
'/usr/share/onboard/test.dat']
1483
# XDG_DATA_DIRS available
1484
>>> os.environ["XDG_DATA_HOME"] = ""
1485
>>> os.environ["XDG_DATA_DIRS"] = "/usr/share/gnome:/usr/local/share/:/usr/share/"
1486
>>> XDGDirs.get_all_data_dirs("onboard/test.dat")
1487
['/home/test_user/.local/share/onboard/test.dat', \
1488
'/usr/share/gnome/onboard/test.dat', \
1489
'/usr/local/share/onboard/test.dat', \
1490
'/usr/share/onboard/test.dat']
1494
def get_config_home(file = None):
1496
User specific config directory.
1498
path = os.environ.get("XDG_CONFIG_HOME")
1499
if path and not os.path.isabs(path):
1500
_logger.warning("XDG_CONFIG_HOME doesn't contain an absolute path,"
1504
path = os.path.join(os.path.expanduser("~"), ".config")
1507
path = os.path.join(path, file)
1512
def get_config_dirs():
1514
Config directories ordered by preference.
1518
value = os.environ.get("XDG_CONFIG_DIRS")
1522
paths = value.split(":")
1523
paths = [p for p in paths if os.path.isabs(p)]
1528
def get_all_config_dirs(file = None):
1529
paths = [XDGDirs.get_config_home()] + XDGDirs.get_config_dirs()
1532
paths = [os.path.join(p, file) for p in paths]
1537
def find_config_files(file):
1538
""" Find file in all config directories, highest priority first. """
1539
paths = XDGDirs.get_all_config_dirs(file)
1540
return [p for p in paths if os.path.isfile(path) and \
1541
os.access(filename, os.R_OK)]
1544
def find_config_file(file):
1545
""" Find file of highest priority """
1546
paths = XDGDirs.find_config_files(file)
1552
def get_data_home(file = None):
1554
User specific data directory.
1556
path = os.environ.get("XDG_DATA_HOME")
1557
if path and not os.path.isabs(path):
1558
_logger.warning("XDG_DATA_HOME doesn't contain an absolute path,"
1562
path = os.path.join(os.path.expanduser("~"), ".local", "share")
1565
path = os.path.join(path, file)
1570
def get_data_dirs():
1572
Data directories ordered by preference.
1576
value = os.environ.get("XDG_DATA_DIRS")
1578
value = "/usr/local/share/:/usr/share/"
1580
paths = value.split(":")
1581
paths = [p for p in paths if os.path.isabs(p)]
1586
def get_all_data_dirs(file = None):
1587
paths = [XDGDirs.get_data_home()] + XDGDirs.get_data_dirs()
1590
paths = [os.path.join(p, file) for p in paths]
1595
def find_data_files(file):
1596
""" Find file in all data directories, highest priority first. """
1597
paths = XDGDirs.get_all_data_dirs(file)
1598
return [p for p in paths if os.path.isfile(path) and \
1599
os.access(filename, os.R_OK)]
1602
def find_data_file(file):
1603
""" Find file of highest priority """
1604
paths = XDGDirs.find_data_files(file)
1609
def assure_user_dir_exists(path):
1611
If necessary create user XDG directory.
1614
exists = os.path.exists(path)
1617
os.makedirs(path, mode = 0o700)
1619
except OSError as ex:
1620
_logger.error(_format("failed to create directory '{}': {}",
1621
path, unicode_str(ex)))