Metadata-Version: 2.1
Name: cmagic
Version: 1.0.2
Summary: Python wrapper for libmagic
Home-page: https://github.com/mosquito/cmagic/
Author: Dmitry Orlov <me@mosquito.su>
Author-email: me@mosquito.su
License: Apache Software License
Project-URL: Documentation, https://github.com/mosquito/cmagic/
Project-URL: Source, https://github.com/mosquito/cmagic/
Project-URL: Tracker, https://github.com/mosquito/cmagic/issues
Project-URL: Say Thanks!, https://saythanks.io/to/me%40mosquito.su
Platform: UNKNOWN
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Libraries
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: Operating System :: MacOS
Classifier: Operating System :: POSIX
Classifier: Operating System :: Microsoft
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: Implementation :: CPython
Requires-Python: >=3.5.*, <4
Provides-Extra: develop
License-File: LICENSE

cmagic
======

.. image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg
   :target: https://saythanks.io/to/me@mosquito.su

.. image:: https://github.com/mosquito/cmagic/workflows/tox/badge.svg
    :target: https://github.com/mosquito/cmagic/actions?query=workflow%3Atox
    :alt: Github Actions

.. image:: https://img.shields.io/pypi/v/cmagic.svg
    :target: https://pypi.python.org/pypi/cmagic/
    :alt: Latest Version

.. image:: https://img.shields.io/pypi/wheel/cmagic.svg
    :target: https://pypi.python.org/pypi/cmagic/

.. image:: https://img.shields.io/pypi/pyversions/cmagic.svg
    :target: https://pypi.python.org/pypi/cmagic/

.. image:: https://img.shields.io/pypi/l/cmagic.svg
    :target: https://pypi.python.org/pypi/cmagic/

Python wrapper for libmagic.

Usage
-----

.. code-block::

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

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

.. code-block:: python

   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
+++++++++++++++

.. code-block:: python

   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
+++++++++++++

.. code-block:: bash

   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
++++++

.. code-block:: bash

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


MacOS
+++++

.. code-block:: bash

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


