Extra PlatformsΒΆ
What is Extra Platforms?ΒΆ
Provides a list of all known platforms
Detect the current platform, at the distribution level
Gather current platform metadata (version, codename, etc.)
Group platforms into families
Manage collection of platforms and groups
Associate each platform and group to an emoji symbol
New conditional markers for
pytest
:@skip_linux
,@skip_macos
and@skip_windows
@unless_linux
,@unless_macos
and@unless_windows
ExamplesΒΆ
Get the current platform, from which you can access lots of metadata:
>>> from extra_platforms import current_os
>>> my_os = current_os()
>>> my_os
Platform(id='macos', name='macOS', current=True)
>>> my_os.id
'macos'
>>> my_os.name
'macOS'
>>> my_os.icon
'π'
>>> my_os.info()
{
"id": "macos",
"name": "macOS",
"icon": "π",
"current": True,
"distro_id": "darwin",
"version": "23.6.0",
"version_parts": {"major": "23", "minor": "6", "build_number": "0"},
"like": None,
"codename": None,
}
Check if a platform is a specific system:
>>> from extra_platforms import is_gentoo
>>> is_gentoo()
False
Use groups to check if the current platform is part of a specific family:
>>> from extra_platforms import UNIX, current_os
>>> current_os() in UNIX
False
Or directly use the boolean variables available for each family:
>>> from extra_platforms import is_unix
>>> is_unix()
False
List all platforms of a family:
>>> from extra_platforms import LINUX
>>> LINUX
Group(id='linux', name='Any Linux', platform_ids=frozenset({'ibm_powerkvm', 'rocky', 'debian', 'tuxedo', 'ubuntu', 'mageia', 'xenserver', 'opensuse', 'nobara', 'buildroot', 'rhel', 'parallels', 'pidora', 'sles', 'amzn', 'scientific', 'linuxmint', 'centos', 'android', 'gentoo', 'raspbian', 'unknown_linux', 'mandriva', 'exherbo', 'cloudlinux', 'fedora', 'guix', 'arch', 'altlinux', 'slackware', 'oracle', 'kvmibm'}))
>>> print("\n".join([p.name for p in LINUX]))
ALT Linux
Amazon Linux
Android
Arch Linux
Buildroot
CentOS
CloudLinux OS
Debian
Exherbo Linux
Fedora
Gentoo Linux
Guix System
IBM PowerKVM
KVM for IBM z Systems
Linux Mint
Mageia
Mandriva Linux
Nobara
openSUSE
Oracle Linux
Parallels
Pidora
Raspbian
RedHat Enterprise Linux
Rocky Linux
Scientific Linux
Slackware
SUSE Linux Enterprise Server
Tuxedo OS
Ubuntu
Unknown Linux
XenServer
Reduce a disparate collection of groups and platforms into a minimal descriptive set, by grouping all platforms into families:
>>> from extra_platforms import AIX, MACOS, SOLARIS, reduce
>>> reduce([AIX, MACOS])
{
Platform(id='aix', name='IBM AIX', current=False),
Platform(id='macos', name='macOS', current=True),
}
>>> reduce([AIX, MACOS, SOLARIS])
{
Group(id='system_v', name='Any Unix derived from AT&T System Five', platform_ids=frozenset({'aix', 'solaris'})),
Platform(id='macos', name='macOS', current=True),
}
Groups β Platforms mappingΒΆ
Relationships between groups and platforms:
--- config: sankey: height: 400 showValues: false width: 800 --- sankey-beta ALL_PLATFORMS,aix,1 ALL_PLATFORMS,altlinux,1 ALL_PLATFORMS,amzn,1 ALL_PLATFORMS,android,1 ALL_PLATFORMS,arch,1 ALL_PLATFORMS,buildroot,1 ALL_PLATFORMS,centos,1 ALL_PLATFORMS,cloudlinux,1 ALL_PLATFORMS,cygwin,1 ALL_PLATFORMS,debian,1 ALL_PLATFORMS,exherbo,1 ALL_PLATFORMS,fedora,1 ALL_PLATFORMS,freebsd,1 ALL_PLATFORMS,gentoo,1 ALL_PLATFORMS,guix,1 ALL_PLATFORMS,hurd,1 ALL_PLATFORMS,ibm_powerkvm,1 ALL_PLATFORMS,kvmibm,1 ALL_PLATFORMS,linuxmint,1 ALL_PLATFORMS,macos,1 ALL_PLATFORMS,mageia,1 ALL_PLATFORMS,mandriva,1 ALL_PLATFORMS,midnightbsd,1 ALL_PLATFORMS,netbsd,1 ALL_PLATFORMS,nobara,1 ALL_PLATFORMS,openbsd,1 ALL_PLATFORMS,opensuse,1 ALL_PLATFORMS,oracle,1 ALL_PLATFORMS,parallels,1 ALL_PLATFORMS,pidora,1 ALL_PLATFORMS,raspbian,1 ALL_PLATFORMS,rhel,1 ALL_PLATFORMS,rocky,1 ALL_PLATFORMS,scientific,1 ALL_PLATFORMS,slackware,1 ALL_PLATFORMS,sles,1 ALL_PLATFORMS,solaris,1 ALL_PLATFORMS,sunos,1 ALL_PLATFORMS,tumbleweed,1 ALL_PLATFORMS,tuxedo,1 ALL_PLATFORMS,ubuntu,1 ALL_PLATFORMS,unknown_linux,1 ALL_PLATFORMS,windows,1 ALL_PLATFORMS,wsl1,1 ALL_PLATFORMS,wsl2,1 ALL_PLATFORMS,xenserver,1 UNIX,aix,1 UNIX,altlinux,1 UNIX,amzn,1 UNIX,android,1 UNIX,arch,1 UNIX,buildroot,1 UNIX,centos,1 UNIX,cloudlinux,1 UNIX,cygwin,1 UNIX,debian,1 UNIX,exherbo,1 UNIX,fedora,1 UNIX,freebsd,1 UNIX,gentoo,1 UNIX,guix,1 UNIX,hurd,1 UNIX,ibm_powerkvm,1 UNIX,kvmibm,1 UNIX,linuxmint,1 UNIX,macos,1 UNIX,mageia,1 UNIX,mandriva,1 UNIX,midnightbsd,1 UNIX,netbsd,1 UNIX,nobara,1 UNIX,openbsd,1 UNIX,opensuse,1 UNIX,oracle,1 UNIX,parallels,1 UNIX,pidora,1 UNIX,raspbian,1 UNIX,rhel,1 UNIX,rocky,1 UNIX,scientific,1 UNIX,slackware,1 UNIX,sles,1 UNIX,solaris,1 UNIX,sunos,1 UNIX,tumbleweed,1 UNIX,tuxedo,1 UNIX,ubuntu,1 UNIX,unknown_linux,1 UNIX,wsl1,1 UNIX,wsl2,1 UNIX,xenserver,1 UNIX_WITHOUT_MACOS,aix,1 UNIX_WITHOUT_MACOS,altlinux,1 UNIX_WITHOUT_MACOS,amzn,1 UNIX_WITHOUT_MACOS,android,1 UNIX_WITHOUT_MACOS,arch,1 UNIX_WITHOUT_MACOS,buildroot,1 UNIX_WITHOUT_MACOS,centos,1 UNIX_WITHOUT_MACOS,cloudlinux,1 UNIX_WITHOUT_MACOS,cygwin,1 UNIX_WITHOUT_MACOS,debian,1 UNIX_WITHOUT_MACOS,exherbo,1 UNIX_WITHOUT_MACOS,fedora,1 UNIX_WITHOUT_MACOS,freebsd,1 UNIX_WITHOUT_MACOS,gentoo,1 UNIX_WITHOUT_MACOS,guix,1 UNIX_WITHOUT_MACOS,hurd,1 UNIX_WITHOUT_MACOS,ibm_powerkvm,1 UNIX_WITHOUT_MACOS,kvmibm,1 UNIX_WITHOUT_MACOS,linuxmint,1 UNIX_WITHOUT_MACOS,mageia,1 UNIX_WITHOUT_MACOS,mandriva,1 UNIX_WITHOUT_MACOS,midnightbsd,1 UNIX_WITHOUT_MACOS,netbsd,1 UNIX_WITHOUT_MACOS,nobara,1 UNIX_WITHOUT_MACOS,openbsd,1 UNIX_WITHOUT_MACOS,opensuse,1 UNIX_WITHOUT_MACOS,oracle,1 UNIX_WITHOUT_MACOS,parallels,1 UNIX_WITHOUT_MACOS,pidora,1 UNIX_WITHOUT_MACOS,raspbian,1 UNIX_WITHOUT_MACOS,rhel,1 UNIX_WITHOUT_MACOS,rocky,1 UNIX_WITHOUT_MACOS,scientific,1 UNIX_WITHOUT_MACOS,slackware,1 UNIX_WITHOUT_MACOS,sles,1 UNIX_WITHOUT_MACOS,solaris,1 UNIX_WITHOUT_MACOS,sunos,1 UNIX_WITHOUT_MACOS,tumbleweed,1 UNIX_WITHOUT_MACOS,tuxedo,1 UNIX_WITHOUT_MACOS,ubuntu,1 UNIX_WITHOUT_MACOS,unknown_linux,1 UNIX_WITHOUT_MACOS,wsl1,1 UNIX_WITHOUT_MACOS,wsl2,1 UNIX_WITHOUT_MACOS,xenserver,1 LINUX_LIKE,altlinux,1 LINUX_LIKE,amzn,1 LINUX_LIKE,android,1 LINUX_LIKE,arch,1 LINUX_LIKE,buildroot,1 LINUX_LIKE,centos,1 LINUX_LIKE,cloudlinux,1 LINUX_LIKE,debian,1 LINUX_LIKE,exherbo,1 LINUX_LIKE,fedora,1 LINUX_LIKE,gentoo,1 LINUX_LIKE,guix,1 LINUX_LIKE,ibm_powerkvm,1 LINUX_LIKE,kvmibm,1 LINUX_LIKE,linuxmint,1 LINUX_LIKE,mageia,1 LINUX_LIKE,mandriva,1 LINUX_LIKE,nobara,1 LINUX_LIKE,opensuse,1 LINUX_LIKE,oracle,1 LINUX_LIKE,parallels,1 LINUX_LIKE,pidora,1 LINUX_LIKE,raspbian,1 LINUX_LIKE,rhel,1 LINUX_LIKE,rocky,1 LINUX_LIKE,scientific,1 LINUX_LIKE,slackware,1 LINUX_LIKE,sles,1 LINUX_LIKE,tumbleweed,1 LINUX_LIKE,tuxedo,1 LINUX_LIKE,ubuntu,1 LINUX_LIKE,unknown_linux,1 LINUX_LIKE,wsl1,1 LINUX_LIKE,wsl2,1 LINUX_LIKE,xenserver,1 LINUX,altlinux,1 LINUX,amzn,1 LINUX,android,1 LINUX,arch,1 LINUX,buildroot,1 LINUX,centos,1 LINUX,cloudlinux,1 LINUX,debian,1 LINUX,exherbo,1 LINUX,fedora,1 LINUX,gentoo,1 LINUX,guix,1 LINUX,ibm_powerkvm,1 LINUX,kvmibm,1 LINUX,linuxmint,1 LINUX,mageia,1 LINUX,mandriva,1 LINUX,nobara,1 LINUX,opensuse,1 LINUX,oracle,1 LINUX,parallels,1 LINUX,pidora,1 LINUX,raspbian,1 LINUX,rhel,1 LINUX,rocky,1 LINUX,scientific,1 LINUX,slackware,1 LINUX,sles,1 LINUX,tumbleweed,1 LINUX,tuxedo,1 LINUX,ubuntu,1 LINUX,unknown_linux,1 LINUX,xenserver,1 BSD,freebsd,1 BSD,macos,1 BSD,midnightbsd,1 BSD,netbsd,1 BSD,openbsd,1 BSD,sunos,1 BSD_WITHOUT_MACOS,freebsd,1 BSD_WITHOUT_MACOS,midnightbsd,1 BSD_WITHOUT_MACOS,netbsd,1 BSD_WITHOUT_MACOS,openbsd,1 BSD_WITHOUT_MACOS,sunos,1 SYSTEM_V,aix,1 SYSTEM_V,solaris,1 LINUX_LAYERS,wsl1,1 LINUX_LAYERS,wsl2,1 UNIX_LAYERS,cygwin,1 OTHER_UNIX,hurd,1 ANY_WINDOWS,windows,1
OS familiesΒΆ
Each platform is assigned to a group of non-overlpaping families:
--- config: mindmap: padding: 5 --- mindmap ((Extra Platforms)) )β UNIX_LAYERS( (ΟΎ cygwin) )β € SYSTEM_V( (βΏ aix) (π solaris) )β OTHER_UNIX( (π hurd) )β LINUX_LAYERS( (β wsl1) (β wsl2) )π§ LINUX( (π§ altlinux) (π amzn) (π€ android) (ποΈ arch) (βοΈ buildroot) (π centos) (κ© cloudlinux) (π debian) (π½ exherbo) (π© fedora) (ποΈ gentoo) (π guix) (π€Ή ibm_powerkvm) (π€Ή kvmibm) (πΏ linuxmint) (β₯ mageia) (π« mandriva) (ο nobara) (π¦ opensuse) (𦴠oracle) (β₯ parallels) (π pidora) (π raspbian) (π© rhel) (β°οΈ rocky) (βοΈ scientific) (π¬ slackware) (π¦ sles) (β» tumbleweed) (π€΅ tuxedo) (π― ubuntu) (π§ unknown_linux) (β xenserver) )π ±οΈ+ BSD( (π freebsd) (π macos) (π midnightbsd) (π© netbsd) (π‘ openbsd) (βοΈ sunos) )πͺ ANY_WINDOWS( (πͺ windows)
Used inΒΆ
Check these projects to get real-life examples of extra-platforms
usage:
Meta Package Manager - A unifying CLI for multiple package managers.
Click Extra - Drop-in replacement for Click to make user-friendly and colorful CLI.
Feel free to send a PR to add your project in this list if you are relying on Click Extra in any way.
DevelopmentΒΆ
Development guidelines are the same as parent project Click Extra, from which extra-platforms
originated.