{ "info": { "author": "Matthijs van der Kroon", "author_email": "matthijs@primed.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "# pyprimed: a python library to manage PrimedIO\n\nCreate a personalized web application that is unique and relevant for each and every user with [Primed.io](https://www.primed.io/).\n\n## Installation\n```\npip install pyprimed\n```\n\n## Quickstart\n### Import the SDK and initiate the connection\n```python\nfrom pyprimed.pio import Pio\n\npio = Pio(uri='http://:@:')\n```\n\n### Create a Universe, and attach a few Targets\n```python\n# create a new universe and attach a single target\npio\\\n .universes\\\n .create(name='myfirstuniverse')\\\n .targets\\\n .upsert([{'key':'ARTICLE-1', 'value':{'url': 'www.example.com/article-1'}}])\n\n# retrieving the newly created universe\nu = pio.universes.filter(name='myfirstuniverse').first\n\n# list all targets currently associated with this universe\nfor target in u.targets.all():\n print(target.key, target.created_at)\n\n# prepare a list of new targets\nnew_targets = [\n {'key': 'ARTICLE-2', 'value': {'url': 'www.example.com/article-2'}}, \n {'key': 'ARTICLE-3', 'value': {'url': 'www.example.com/article-3'}}\n]\n\n# upsert the new targets\nu.targets.upsert(new_targets)\n\n# targets are upserted, which means that for a given key there\n# can be only one instance in the database. Trying to create an\n# instance with the same key will update the value of the record\n# in the database\nu.targets.upsert([{'key':'ARTICLE-1', 'value':{'url': 'THIS IS NEW!'}}])\nu.targets.filter(key='ARTICLE-1').first.value \n```\n\n### Create a Model, and attach a few Signals\n```python\n# create a new model and attach a single signal\npio\\\n .models\\\n .create(name='myfirstmodel')\\\n .signals\\\n .upsert([{'key':'ALICE'}])\n\n# retrieving the created model\nm = pio.models.filter(name='myfirstmodel').first\n\n# list all signals currently associated with this model\nfor signal in m.signals.all():\n print(signal.key, signal.created_at)\n\n# prepare a list of new signals\nnew_signals = [\n {'key': 'BOB'}, \n {'key': 'CHRIS'}\n]\n\n# create the new signals\nm.signals.upsert(new_signals)\n\n# prepare a set of predictions (sk stand for signal.key, and tk for target.key)\n# WARNING: `sk` and `tk` should always be a string!\npredictions = [\n {'sk': 'ALICE', 'tk': 'ARTICLE-1', 'score': 0.35},\n {'sk': 'BOB', 'tk': 'ARTICLE-1', 'score': 0.75}, \n {'sk': 'CHRIS', 'tk': 'ARTICLE-1', 'score': 0.15}\n]\n\n# create the new predictions \nu = pio.universes.filter(name='myfirstuniverse').first\n\npio\\\n .predictions\\\n .on(model=m, universe=u)\\\n .upsert(predictions, asynchronous=False)\n# the `asynchronous=False` settings waits for this operation to end before \n# continuing\n```\n\n### Create a Campaign, Experiment and set up an AB test to start using the Predictions\n```python\nfrom pyprimed.models.abvariant import CustomAbvariant, RandomControlAbvariant, NullControlAbvariant\n\n# we create a custom abvariant that blends models m1 and m2 using a 60%/40% weight ratio\nab0 = CustomAbvariant(label='A', models={m1: 0.6, m2: 0.4})\nab1 = RandomControlAbvariant(label='B')\nab2 = NullControlAbvariant(label='C')\n\n# we attach the abvariants to the experiment\n# `ab0` will receive 80% of traffic, `ab1` and `ab2`\n# receive 10% each\ne.abvariants.create({ab0: 0.8, ab1: 0.1, ab2: 0.1})\n\nres = c.personalise(\n pubkey='mypubkey',\n secretkey='mysecretkey',\n signals={'userid': 'BOB'},\n abvariant='A'\n) # abvariant with label 'A' will be returned\n```\n\n### Update Experiment\n```python\nfrom pyprimed.models.abvariant import CustomAbvariant, RandomControlAbvariant, NullControlAbvariant\n\n# obtain existing experiment\ne = c.experiments.filter(name=\"myexperiment\").first()\n\n# change property\ne.salt = \"new_salt\"\ne.update()\n\n# update abvariants\nab1 = CustomAbvariant(label=\"NEWLABEL\", {m1: 0.33, m2: 0.77})\nab2 = RandomControlAbvariant(label=\"NEWRANDOMCONTROL\")\n\ne.abvariants.update({ab1: 0.5, ab2: 0.5})\n```\n\n## Developer\nBuild the documentation:\n```\ncd docs && pydocmd build\n```\n\nPreview documentation on http://localhost:8000\n```\ncd docs && pydocmd serve\n```", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/primedio/delivery-pyprimed", "keywords": "pyprimed primedio", "license": "Apache Software License 2.0", "maintainer": "", "maintainer_email": "", "name": "pyprimed", "package_url": "https://pypi.org/project/pyprimed/", "platform": "", "project_url": "https://pypi.org/project/pyprimed/", "project_urls": { "Homepage": "https://gitlab.com/primedio/delivery-pyprimed" }, "release_url": "https://pypi.org/project/pyprimed/2.2.2/", "requires_dist": null, "requires_python": "", "summary": "Python client to manage PrimedIO", "version": "2.2.2", "yanked": false, "yanked_reason": null }, "last_serial": 6046133, "releases": { "2.1.0": [ { "comment_text": "", "digests": { "md5": "22c44b11848adbb71d6838d4e8c36899", "sha256": "f9333039ab29cdc5a019c3d1602a55dc15d3b3a6b5eb469cd9494668497945f7" }, "downloads": -1, "filename": "pyprimed-2.1.0.tar.gz", "has_sig": false, "md5_digest": "22c44b11848adbb71d6838d4e8c36899", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23420, "upload_time": "2018-10-19T07:15:16", "upload_time_iso_8601": "2018-10-19T07:15:16.815758Z", "url": "https://files.pythonhosted.org/packages/88/b4/1ef19345bf959fdf0bbce64ffa4a836e76e8238fc70ed3957baf8fb651c7/pyprimed-2.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "ccab81e9c9148204da37a34b29c71498", "sha256": "dbef5b4d59c2ab0624101f6d9f7e1cb5ab89877620767f74d548155ca7a7a93c" }, "downloads": -1, "filename": "pyprimed-2.1.1.tar.gz", "has_sig": false, "md5_digest": "ccab81e9c9148204da37a34b29c71498", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24006, "upload_time": "2018-11-06T09:04:00", "upload_time_iso_8601": "2018-11-06T09:04:00.643161Z", "url": "https://files.pythonhosted.org/packages/ab/50/5ce692ca103b2de0857af5e9be1e9fdbccda03e935eb9dd807d677876132/pyprimed-2.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.10": [ { "comment_text": "", "digests": { "md5": "01463639cd64a1b8fe860720d90e91cf", "sha256": "148510d0184898c8ba89038e58b625661ef48a44b369f01d4ee2c6591c24499d" }, "downloads": -1, "filename": "pyprimed-2.1.10.tar.gz", "has_sig": false, "md5_digest": "01463639cd64a1b8fe860720d90e91cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29962, "upload_time": "2019-07-04T07:34:54", "upload_time_iso_8601": "2019-07-04T07:34:54.274359Z", "url": "https://files.pythonhosted.org/packages/89/82/3a6ecce81011c5a31462ebc39f3d31ea93706ad510c2e9637a45770e1d68/pyprimed-2.1.10.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.2": [ { "comment_text": "", "digests": { "md5": "98dbc019bad183ab579b353e3b7e2529", "sha256": "05bd37d707c215393b81d81e58cba83aea7f8db65cfc5fc0d7ae4c10f66fca3a" }, "downloads": -1, "filename": "pyprimed-2.1.2.tar.gz", "has_sig": false, "md5_digest": "98dbc019bad183ab579b353e3b7e2529", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24055, "upload_time": "2018-11-06T09:10:12", "upload_time_iso_8601": "2018-11-06T09:10:12.333820Z", "url": "https://files.pythonhosted.org/packages/ba/11/f6d652017a08a2a322550ef23c89ec3875535b167ad29af6fbcb2152cca9/pyprimed-2.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.3": [ { "comment_text": "", "digests": { "md5": "c19ad764406c216c6d3ae6ae7d3af9f9", "sha256": "87404bea95ddd8b0fba62dc3347e2f24b4e2dd3199fccaa13e94f3c879f7629c" }, "downloads": -1, "filename": "pyprimed-2.1.3.tar.gz", "has_sig": false, "md5_digest": "c19ad764406c216c6d3ae6ae7d3af9f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24058, "upload_time": "2018-11-20T12:04:46", "upload_time_iso_8601": "2018-11-20T12:04:46.618370Z", "url": "https://files.pythonhosted.org/packages/b2/09/6464aea3c34117a23b3827e8d28b5ee30854a888891284d5727835f8f2f1/pyprimed-2.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.4": [ { "comment_text": "", "digests": { "md5": "6bb93afd34b021ab152a6023ce61ec8b", "sha256": "a41458d44bb81538d2487a84d1c225eb43af8030425104264d5831b64d014f1e" }, "downloads": -1, "filename": "pyprimed-2.1.4.tar.gz", "has_sig": false, "md5_digest": "6bb93afd34b021ab152a6023ce61ec8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24134, "upload_time": "2018-11-26T10:17:51", "upload_time_iso_8601": "2018-11-26T10:17:51.858672Z", "url": "https://files.pythonhosted.org/packages/a8/11/53612cdc4c865febb7461433f808c4663974b46ae825c7eeb43c77839cf9/pyprimed-2.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.5": [ { "comment_text": "", "digests": { "md5": "9afb07759786be6712eb9f8a97389859", "sha256": "92c00b02d48eee79119a2b247aa1bc14e0a2fd96ec9b5297b869b94fa6c96e8a" }, "downloads": -1, "filename": "pyprimed-2.1.5.tar.gz", "has_sig": false, "md5_digest": "9afb07759786be6712eb9f8a97389859", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24332, "upload_time": "2018-11-27T09:11:01", "upload_time_iso_8601": "2018-11-27T09:11:01.345216Z", "url": "https://files.pythonhosted.org/packages/f9/97/9f92f0ecb00c7a58b4b8aaf7ba61d740e97c9b98ddad7fc1d88677a7e276/pyprimed-2.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.6": [ { "comment_text": "", "digests": { "md5": "4bd46b6e9f5e7e39ce3de2d72259f1f9", "sha256": "b9d2d9471312f1acce5a9182488b7d21994a6fbf682507c978a40ea1898b4e21" }, "downloads": -1, "filename": "pyprimed-2.1.6.tar.gz", "has_sig": false, "md5_digest": "4bd46b6e9f5e7e39ce3de2d72259f1f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24674, "upload_time": "2018-12-24T09:24:42", "upload_time_iso_8601": "2018-12-24T09:24:42.816678Z", "url": "https://files.pythonhosted.org/packages/10/eb/c10b747f0eac9c0ce6030b223ecc506f5d59ae49b483672513a3736d3bb2/pyprimed-2.1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.7": [ { "comment_text": "", "digests": { "md5": "83d395a28fd4db40865f43857920e959", "sha256": "2104513d401ad309d74b3bc277261235058af2f5f2a701914891c8a56908cf3d" }, "downloads": -1, "filename": "pyprimed-2.1.7.tar.gz", "has_sig": false, "md5_digest": "83d395a28fd4db40865f43857920e959", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24706, "upload_time": "2019-01-30T13:08:15", "upload_time_iso_8601": "2019-01-30T13:08:15.824441Z", "url": "https://files.pythonhosted.org/packages/b0/55/9acac1f372bdfd9600e49b65cd71451640fc89b7869bc28b62f6f33bb786/pyprimed-2.1.7.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.8": [ { "comment_text": "", "digests": { "md5": "970493b6fd1874cc906178d668e4ddd9", "sha256": "f966e36ae3e1d1ea11f955aae60e0f906ac41ff7c1e65a1b61ccd88b8f9f2385" }, "downloads": -1, "filename": "pyprimed-2.1.8.tar.gz", "has_sig": false, "md5_digest": "970493b6fd1874cc906178d668e4ddd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29651, "upload_time": "2019-04-26T09:59:39", "upload_time_iso_8601": "2019-04-26T09:59:39.255666Z", "url": "https://files.pythonhosted.org/packages/fd/f6/194c96a79224311a0a7a744589b1edf79ecd00f49906c0e5cf5a94090062/pyprimed-2.1.8.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.9": [ { "comment_text": "", "digests": { "md5": "de75eda1d46928df0d18de31ec2ddcc3", "sha256": "acaef4ae53195945853d16d95028aaa8d38c7f7e23e60f292e1fce694c11cbda" }, "downloads": -1, "filename": "pyprimed-2.1.9.tar.gz", "has_sig": false, "md5_digest": "de75eda1d46928df0d18de31ec2ddcc3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29946, "upload_time": "2019-07-03T10:03:15", "upload_time_iso_8601": "2019-07-03T10:03:15.633534Z", "url": "https://files.pythonhosted.org/packages/1b/4f/f7d585929d18af64b5a2d47302e8fe9c412b792ab7200a2043e05eeb4fd5/pyprimed-2.1.9.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "a8bc995917792d6f241c41e227b0777b", "sha256": "b1d9c92f23a2f6ae3eeb15b351843984ba26e5fecfded27c74c3ced85d6497c3" }, "downloads": -1, "filename": "pyprimed-2.2.0.tar.gz", "has_sig": false, "md5_digest": "a8bc995917792d6f241c41e227b0777b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30069, "upload_time": "2019-07-04T09:40:46", "upload_time_iso_8601": "2019-07-04T09:40:46.677081Z", "url": "https://files.pythonhosted.org/packages/79/46/c6727fdf50f4a369468cf345ee49b0ad3f75dd551b01f41c9000e70e9f45/pyprimed-2.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "cd6053676862e0d7e2ab76ef403ff947", "sha256": "b4bb6d55fa6674a9603d4bcf90731538376e048755004566d31370b517ad402a" }, "downloads": -1, "filename": "pyprimed-2.2.1.tar.gz", "has_sig": false, "md5_digest": "cd6053676862e0d7e2ab76ef403ff947", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25220, "upload_time": "2019-10-29T09:08:49", "upload_time_iso_8601": "2019-10-29T09:08:49.019735Z", "url": "https://files.pythonhosted.org/packages/60/82/e851b0a0d983dcf51f8402df39705a6c721ce4ee7cedd68a2978d8053918/pyprimed-2.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2.2": [ { "comment_text": "", "digests": { "md5": "439455888e0af366da92695a6eb7ac44", "sha256": "6367b68ddbf571ba18a4c567c879183dd71724e3d22fc3e18b0f63e2e47a537e" }, "downloads": -1, "filename": "pyprimed-2.2.2.tar.gz", "has_sig": false, "md5_digest": "439455888e0af366da92695a6eb7ac44", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25237, "upload_time": "2019-10-29T09:29:22", "upload_time_iso_8601": "2019-10-29T09:29:22.889780Z", "url": "https://files.pythonhosted.org/packages/aa/7e/44da542246b51334ea8b475ddb8bacca0c1d58a0979eabe53cf20ce96471/pyprimed-2.2.2.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "439455888e0af366da92695a6eb7ac44", "sha256": "6367b68ddbf571ba18a4c567c879183dd71724e3d22fc3e18b0f63e2e47a537e" }, "downloads": -1, "filename": "pyprimed-2.2.2.tar.gz", "has_sig": false, "md5_digest": "439455888e0af366da92695a6eb7ac44", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25237, "upload_time": "2019-10-29T09:29:22", "upload_time_iso_8601": "2019-10-29T09:29:22.889780Z", "url": "https://files.pythonhosted.org/packages/aa/7e/44da542246b51334ea8b475ddb8bacca0c1d58a0979eabe53cf20ce96471/pyprimed-2.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }