Skip to main content

Python wrapper for libmagic

Project description

https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg Github Actions Latest Version https://img.shields.io/pypi/wheel/cmagic.svg https://img.shields.io/pypi/pyversions/cmagic.svg https://img.shields.io/pypi/l/cmagic.svg

Python wrapper for libmagic.

Usage

# MacOS
$ export MAGIC=/usr/local/Cellar/libmagic/5.39/share/misc/magic.mgc

# Ubuntu
$ export MAGIC=/usr/lib/file/magic.mgc
import cmagic

# Database path from MAGIC environment variable
m = cmagic.Magic()

if m.check():
   print("Database is ok")

m.load()

m.guess_file("/etc/hosts")
# 'ASCII text'
m.guess_bytes("hello world")
# 'ASCII text'

# Setting flags
m.set_flags(mime_type=True)


m = cmagic.Magic(
   # Setting flags here
   mime_type=True
)

# Trying to find database on the standard paths
m.load(cmagic.find_db())

m.guess_file("/etc/hosts")
# 'text/plain'

m.guess_bytes("hello world")
# 'text/plain'

asyncio example

import asyncio
import cmagic
from threading import local


magic_tls = local()


def get_instance():
    global magic_tls

    if not hasattr(magic_tls, "instance"):
        m = cmagic.Magic(mime_type=True)
        m.load(cmagic.find_db())
        magic_tls.instance = m

    return magic_tls.instance


async def guess_file(fname):
    loop = asyncio.get_event_loop()

    def run():
        m = get_instance()
        return m.guess_file(fname)

    return await loop.run_in_executor(None, run)


async def guess_bytes(payload):
    loop = asyncio.get_event_loop()

    def run():
        m = get_instance()
        return m.guess_bytes(payload)

    return await loop.run_in_executor(None, run)


if __name__ == "__main__":
    print(asyncio.run(guess_file("/etc/hosts")))
    # text/plain
    print(asyncio.run(guess_bytes(b"\0\0\0\0\0\0\0")))
    # application/octet-stream

Installation

Ubuntu/Debian

apt-get install -y libmagic1 libmagic-mgc   # when using manilinux wheel
apt-get install -y libmagic-dev             # for building from sources
python3 -m pip install cmagic

Centos

yum install -y file-libs            # when using manilinux wheel
yum install -y file-devel           # for building from sources
python3 -m pip install cmagic

MacOS

brew install libmagic
export CFLAGS="-I$(brew --prefix libmagic)/include" LDFLAGS="-L$(brew --prefix libmagic)/lib"
python3 -m pip install cmagic

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cmagic-1.0.3.tar.gz (12.5 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page