Metadata-Version: 2.0
Name: facts
Version: 0.4
Summary: Return facts of server
Home-page: https://github.com/johnnoone/facts
Author: Xavier Barbosa
Author-email: clint.northwood@gmail.com
License: UNKNOWN
Keywords: infrastructure,asyncio
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Topic :: System :: Clustering
Requires-Dist: aioutils
Requires-Dist: netifaces
Requires-Dist: PyYAML
Requires-Dist: psutil
Requires-Dist: uptime
Requires-Dist: asyncio; python_version=="3.3"

Facts
=====

Returns facts of local machine.


Installation
------------

::

    pip install facts


CLI Usage
---------

Get all facts::

    facts all

Get one fact::

    fact read foo

Get the human readable memory usage::

    fact read memory --human

Set one custom fact::

    fact write foo 'It is nice'

When value is a mapping, then you can choose between 2 merging strategies::

    fact write foo '{is: bar}' --format yaml --replace
    fact write foo '{not: baz}' --format yaml --merge

Delete a custom fact::

    fact delete foo


Targeting
---------

By convention key facts can't have colon marks.
Because facts can be nested, and it's possible to target these sub data.
Each parts must be seperated by a colon. For example if::

    fact read foo

returns::

    is: bar
    not: baz

Then::

    fact read foo:is

returns::

    bar

But::

    fact read foo:wrong:key

will return nothing.


Matching
--------

It is also possible to check if a certain fact turns out true::

    fact match foo:is:bar


Grafting
--------

Facts allow you to extends with 'grafts'. There is 2 ways


1. by modules
~~~~~~~~~~~~~

You can extend with your own facts. Any python modules under ``~/.facts/grafts`` will be loaded. For example::

    # ~/.facts/grafts/my_grafts.py

    from facts import graft, mark

    @graft
    def hello_world():
        return {
            'hello': 'world',
            'size': mark(1234567890, 'bytes')
        }

Will append the fact ``hello`` with the value ``world``, and the fact ``size``
with one of these values (depending the --human switch) ``1234567890`` or ``1.1G``.


2. with setuptools
~~~~~~~~~~~~~~~~~~

You also write python libraries that will contribute to facts with using setuptools. Add the following to the setup.py function::

    entry_points={
        'facts.graft': [
            'plugin-1 = mylib:plugin_1',
            'plugin-2 = mylib:plugin_2'
        ]
    }


