{ "info": { "author": "Emmanuel Dyan", "author_email": "emmanuel@impulsare.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: Science/Research", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Scientific/Engineering", "Topic :: System :: Distributed Computing", "Topic :: System :: Systems Administration" ], "description": "impulsare/job\n=============\n\n\n.. image:: https://travis-ci.org/impulsare/job.svg?branch=master\n :target: https://travis-ci.org/impulsare/job\n\n.. image:: https://scrutinizer-ci.com/g/impulsare/job/badges/quality-score.png?b=master\n :target: https://scrutinizer-ci.com/g/impulsare/job/\n\n.. image:: https://scrutinizer-ci.com/g/impulsare/job/badges/coverage.png?b=master\n :target: https://travis-ci.org/impulsare/job\n\nOverview\n--------\n\nA jobs manager, specific to **impulsare**. It reads, write and delete jobs from an sqlite db.\n\nSee ``tests/static/`` for examples of configuration.\n\n\nInstallation / Usage\n====================\nTo install use pip:\n\n.. code-block:: bash\n\n $ pip install --upgrade impulsare-job\n\n\nConfiguration\n=============\nYou need to create a configuration file that contains:\n\n.. code-block:: yaml\n\n job:\n db: /tmp/test.db # required\n\n\nArchitecture\n============\nWriter\n------\nimpulsare/job implements a writer to :\n\n- Create / Update jobs (``save()``)\n- Delete jobs (``delete()``)\n- Add / Remove Hooks (`hooks_writer.add_hook()` and ``hooks_writer.del_hook()``)\n- Add / Remove Fields (``fields_writer.add_field()`` and ``fields_writer.del_field()``)\n- Add / Remove Rules related to Fields (``fields_writer.add_rule()`` and ``fields_writer.del_rule()``)\n\n\nReader\n------\nAnd a Reader to :\n\n- Get a Job\n- Get related hooks\n- Get related fields + their rules\n\n\nProperties of a job\n-------------------------\n\n.. code-block:: python\n\n {\n 'name': str, # required\n 'active': bool, # default : True\n 'description': str,\n 'priority': int, # default : 1\n 'input': str, # required\n 'input_parameters': dict,\n 'output': str, # required\n 'output_parameters': dict,\n 'mode': str # c (create), u (update), cu (create/update), d (delete). Default: c\n }\n\n\nExamples\n--------\nCreate a simple Job (no hooks / rules)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n from impulsare_job import Writer\n\n\n writer = Writer('/etc/impulsare/config.yml')\n writer.set_prop('name', 'My Job')\n writer.set_prop('input', 'csv')\n writer.set_prop('input_parameters', {'delimiter': 'csv'})\n writer.set_prop('output', 'sql')\n writer.set_prop('output_parameters', {'db': 'test'})\n job = writer.save()\n\n\nUpdate a Job\n~~~~~~~~~~~~\n\n.. code-block:: python\n\n from impulsare_job import Writer\n\n\n # Lets assume the job id = 1\n writer = Writer('/etc/impulsare/config.yml', 'My Job')\n job = writer.get_job()\n print(job.name)\n # Output: 'My Job'\n\n # Set the job to Inactive\n writer.set_prop('active', False)\n writer.save()\n\n\n\nVerify if a hook exists, else add it\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n # .... continuation of code above\n if not writer.hooks_writer.hook_exists('test'):\n writer.hooks_writer.add_hook(name='upload_file', method='upload_file', when='after_process')\n\n\nAllowed properties for hooks:\n\n.. code-block:: python\n\n {\n 'name': str, # required\n 'method': str, # required\n 'when': str, # required\n 'description': str,\n 'active': bool, # Default : True\n 'priority': int # Default: 1\n }\n\n\nOther methods:\n\n- `hooks_writer.get_hooks`\n- `hooks_writer.del_hook`\n\n\nThere is no method `update`, to update a hook, delete it then recreate it.\n\n\nVerify if a field exists, else update it and add a transformation rule\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n**Warning** : a field is identified by its ``output`` value that must be unique\n(we can't send two values for the same field while we can use the same input field\nfor various output).\n\n\n**Field**\n\n.. code-block:: python\n\n # .... continuation of code above\n if writer.fields_writer.field_exists('firstname'):\n writer.fields_writer.del_field('firstname')\n\n writer.fields_writer.add_field(input='first_name', output='firstname')\n\n\nAllowed properties for fields:\n\n.. code-block:: python\n\n {\n 'input': str, # required\n 'output': str, # required\n }\n\n\nOther methods:\n\n- `fields_writer.get_field`\n- `fields_writer.get_fields`\n\n\nThere is no method `update`, to update a field, delete it then recreate it.\n\n\nAdd a rule\n~~~~~~~~~~\n\n.. code-block:: python\n\n writer.fields_writer.add_rule(output_field='firstname', name='uppercase', method='uppercase')\n\n\nAllowed properties for rules:\n\n.. code-block:: python\n\n {\n 'name': str, # required\n 'method': str, # required\n 'description': str,\n 'active': bool, # Default : True\n 'params': list,\n 'blocking': bool, # Default : False\n 'priority': int # Default: 1\n }\n\n\nOther methods:\n\n- `fields_writer.del_rule`\n- `fields_writer.get_rules`\n- `fields_writer.rule_exists`\n\n\nThere is no method ``update``, to update a rule, delete it then recreate it.\n\n\nRetrieve a Job, its hooks and fields\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n from impulsare_job import Reader\n\n\n Reader = Reader('/etc/impulsare/config.yml', 'My Job')\n job = Reader.get_job()\n hooks = Reader.get_hooks()\n fields = Reader.get_fields() # Get rules for first field : rules = fields[0].rules\n\n\nDevelopment & Tests\n===================\n\n.. code-block:: bash\n\n $ pip install -r requirements.txt\n $ pip install -r requirements-dev.txt\n $ py.test\n\n\n\nTODO\n----\nDon't check if table exists on each model but do it on app installation\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nTo get the DB :\n\n.. code-block:: python\n\n from impulsare_job import models\n\n\n db = models.get_db('/etc/impulsare/config.yml')\n db.create_tables([models.Job, models.Hook, models.Rule])\n\n\nRefactor writer\n~~~~~~~~~~~~~~~\nTo have a class for hooks, and another for rules.", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/impulsare/job/tarball/1.0a2", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/impulsare/job", "keywords": "job,python,yaml", "license": "AGPLv3", "maintainer": "", "maintainer_email": "", "name": "impulsare-job", "package_url": "https://pypi.org/project/impulsare-job/", "platform": "", "project_url": "https://pypi.org/project/impulsare-job/", "project_urls": { "Download": "https://github.com/impulsare/job/tarball/1.0a2", "Homepage": "https://github.com/impulsare/job" }, "release_url": "https://pypi.org/project/impulsare-job/1.0a2/", "requires_dist": null, "requires_python": "", "summary": "A job reader / writer to define mappings for impulsare.", "version": "1.0a2" }, "last_serial": 3098309, "releases": { "1.0a1": [ { "comment_text": "", "digests": { "md5": "f046b88fed9fb5ea5450c227ef007715", "sha256": "c316fd050099452c05d53bbc5e02dd3267db3885a621eb81e50ba32382c2a441" }, "downloads": -1, "filename": "impulsare-job-1.0a1.tar.gz", "has_sig": false, "md5_digest": "f046b88fed9fb5ea5450c227ef007715", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9199, "upload_time": "2017-08-15T10:04:05", "url": "https://files.pythonhosted.org/packages/0e/53/02e40d457ab40f365450504e06265747b23ccd2cf746dd3b29cc0128d6da/impulsare-job-1.0a1.tar.gz" } ], "1.0a2": [ { "comment_text": "", "digests": { "md5": "5b02c5f0c7abce6e6140d3502f4e849c", "sha256": "b3390d972bcf31a08a08d1656d1db86c6a6b6da65d0f0635381ad6a482393c95" }, "downloads": -1, "filename": "impulsare-job-1.0a2.tar.gz", "has_sig": false, "md5_digest": "5b02c5f0c7abce6e6140d3502f4e849c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9420, "upload_time": "2017-08-15T14:21:40", "url": "https://files.pythonhosted.org/packages/64/a2/8c0edf747ce51928bac082223f6f1f3a1a7c18f19f853f78e24c5dec4b99/impulsare-job-1.0a2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5b02c5f0c7abce6e6140d3502f4e849c", "sha256": "b3390d972bcf31a08a08d1656d1db86c6a6b6da65d0f0635381ad6a482393c95" }, "downloads": -1, "filename": "impulsare-job-1.0a2.tar.gz", "has_sig": false, "md5_digest": "5b02c5f0c7abce6e6140d3502f4e849c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9420, "upload_time": "2017-08-15T14:21:40", "url": "https://files.pythonhosted.org/packages/64/a2/8c0edf747ce51928bac082223f6f1f3a1a7c18f19f853f78e24c5dec4b99/impulsare-job-1.0a2.tar.gz" } ] }