{ "info": { "author": "Timo Moeller, Malte Pietsch, Branden Chan, Tanay Soni, Bogdan Kostic, Julian Risch", "author_email": "timo.moeller@deepset.ai", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Artificial Intelligence" ], "description": "\n.. image:: https://github.com/deepset-ai/FARM/blob/master/docs/img/farm_logo_text_right_wide.png?raw=true\n :width: 269\n :height: 109\n :align: left\n :alt: FARM LOGO\n\n\n(**F**\\ ramework for **A**\\ dapting **R**\\ epresentation **M**\\ odels)\n\n.. image:: https://img.shields.io/badge/docs-latest-success.svg\n :target: https://farm.deepset.ai/\n :alt: Docs\n\n.. image:: https://dev.azure.com/deepset/FARM/_apis/build/status/deepset-ai.FARM?branchName=master\n\t:target: https://dev.azure.com/deepset/FARM/_build\n\t:alt: Build\n\n.. image:: https://img.shields.io/github/release/deepset-ai/farm\n\t:target: https://github.com/deepset-ai/FARM/releases\n\t:alt: Release\n\n.. image:: https://img.shields.io/github/license/deepset-ai/farm\n\t:target: https://github.com/deepset-ai/FARM/blob/master/LICENSE\n\t:alt: License\n\n.. image:: https://img.shields.io/github/last-commit/deepset-ai/farm\n\t:target: https://github.com/deepset-ai/FARM/commits/master\n\t:alt: Last Commit\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square\n\t:target: https://github.com/ambv/black\n\t:alt: Last Commit\n\n.. image:: https://pepy.tech/badge/farm\n\t:target: https://pepy.tech/project/farm\n\t:alt: Downloads\n\n.. image:: https://img.shields.io/badge/Jobs-We're%20hiring-blue\n\t:target: https://apply.workable.com/deepset/\n\t:alt: Jobs\n\n.. image:: https://img.shields.io/twitter/follow/deepset_ai?style=social\n\t:target: https://twitter.com/intent/follow?screen_name=deepset_ai\n\t:alt: Twitter\n\nWhat is it?\n############\nFARM makes **Transfer Learning** with BERT & Co **simple, fast and enterprise-ready**.\nIt's built upon `transformers `_ and provides additional features to simplify the life of developers:\nParallelized preprocessing, highly modular design, multi-task learning, experiment tracking, easy debugging and close integration with AWS SageMaker.\n\nWith FARM you can build **fast proof-of-concepts** for tasks like text classification, NER or question answering and **transfer them easily into production**.\n\n\n- `What is it? `_\n- `Core Features `_\n- `Resources `_\n- `Installation `_\n- `Basic Usage `_\n- `Advanced Usage `_\n- `Core Concepts `_\n- `FAQ `_\n- `Upcoming features `_\n\n\nCore features\n##############\n- **Easy fine-tuning of language models** to your task and domain language\n- **Speed**: AMP optimizers (~35% faster) and parallel preprocessing (16 CPU cores => ~16x faster)\n- **Modular design** of language models and prediction heads\n- Switch between heads or combine them for **multitask learning**\n- **Full Compatibility** with HuggingFace Transformers' models and model hub\n- **Smooth upgrading** to newer language models\n- Integration of **custom datasets** via Processor class\n- Powerful **experiment tracking** & execution\n- **Checkpointing & Caching** to resume training and reduce costs with spot instances\n- Simple **deployment** and **visualization** to showcase your model\n\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| Task | BERT | RoBERTa* | XLNet | ALBERT | DistilBERT | XLMRoBERTa | ELECTRA | MiniLM |\n+==============================+===================+===================+===================+===================+===================+===================+===================+===================+\n| Text classification | x | x | x | x | x | x | x | x |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| NER | x | x | x | x | x | x | x | x |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| Question Answering | x | x | x | x | x | x | x | x |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| Language Model Fine-tuning | x | | | | | | | |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| Text Regression | x | x | x | x | x | x | x | x |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| Multilabel Text classif. | x | x | x | x | x | x | x | x |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| Extracting embeddings | x | x | x | x | x | x | x | x |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| LM from scratch | x | | | | | | | |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| Text Pair Classification | x | x | x | x | x | x | x | x |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| Passage Ranking | x | x | x | x | x | x | x | x |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n| Document retrieval (DPR) | x | x | | x | x | x | x | x |\n+------------------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+\n\n\n\\* including CamemBERT and UmBERTo\n\n****NEW**** Interested in doing Question Answering at scale? Checkout `Haystack `_!\n\nResources\n##########\n**Docs**\n\n`Online documentation `_\n\n**Tutorials**\n\n- Tutorial 1 (Overview of building blocks): `Jupyter notebook 1 `_ or `Colab 1 `_\n- Tutorial 2 (How to use custom datasets): `Jupyter notebook 2 `_ or `Colab 2 `_\n- Tutorial 3 (How to train and showcase your own QA model): `Colab 3 `_\n- Example scripts for each task: `FARM/examples/ `_\n\n**Demo**\n\nCheckout https://demos.deepset.ai to play around with some models\n\n**More**\n\n- `Intro to Transfer Learning (Blog) `_\n- `Intro to Transfer Learning & FARM (Video) `_\n- `Question Answering Systems Explained (Blog) `_\n- `GermanBERT (Blog) `_\n- `XLM-Roberta: The alternative for non-english NLP (Blog) `_\n\nInstallation\n#############\nRecommended (because of active development)::\n\n git clone https://github.com/deepset-ai/FARM.git\n cd FARM\n pip install -r requirements.txt\n pip install --editable .\n\nIf problems occur, please do a git pull. The --editable flag will update changes immediately.\n\nFrom PyPi::\n\n pip install farm\n\nNote: On windows you might need :code:`pip install farm -f https://download.pytorch.org/whl/torch_stable.html` to install PyTorch correctly\n\nBasic Usage\n############\n1. Train a downstream model\n****************************\nFARM offers two modes for model training:\n\n**Option 1: Run experiment(s) from config**\n\n.. image:: https://raw.githubusercontent.com/deepset-ai/FARM/master/docs/img/code_snippet_experiment.png\n\n*Use cases:* Training your first model, hyperparameter optimization, evaluating a language model on multiple down-stream tasks.\n\n**Option 2: Stick together your own building blocks**\n\n.. image:: https://raw.githubusercontent.com/deepset-ai/FARM/master/docs/img/code_snippet_building_blocks.png\n\n*Usecases:* Custom datasets, language models, prediction heads ...\n\nMetrics and parameters of your model training get automatically logged via MLflow. We provide a `public MLflow server `_ for testing and learning purposes. Check it out to see your own experiment results! Just be aware: We will start deleting all experiments on a regular schedule to ensure decent server performance for everybody!\n\n2. Run Inference\n*******************************\nUse a `public model `__ or your own to get predictions:\n\n.. image:: https://raw.githubusercontent.com/deepset-ai/FARM/master/docs/img/code_snippet_inference.png\n\n\n3. Showcase your models (API + UI)\n**********************************\n\n* Run :code:`docker-compose up`\n* Open http://localhost:3000 in your browser\n\n.. image:: https://github.com/deepset-ai/FARM/blob/master/docs/img/inference-api-screen.png?raw=true\n :alt: FARM Inferennce UI\n\nOne docker container exposes a REST API (localhost:5000) and another one runs a simple demo UI (localhost:3000).\nYou can use both of them individually and mount your own models. Check out the `docs `__ for details.\n\nAdvanced Usage\n##############\nOnce you got started with FARM, there's plenty of options to customize your pipeline and boost your models.\nLet's highlight a few of them ...\n\n1. Optimizers & Learning rate schedules\n****************************************\nWhile FARM provides decent defaults for both, you can easily configure many other optimizers & LR schedules:\n\n- any optimizer from PyTorch, Apex or Transformers\n- any learning rate schedule from PyTorch or Transformers\n\nYou can configure them by passing a dict to :code:`initialize_optimizer()` (see `example `__).\n\n\n2. Early Stopping\n******************\nWith early stopping, the run stops once a chosen metric is not improving any further and you take the best model up to this point.\nThis helps prevent overfitting on small datasets and reduces training time if your model doesn't improve any further (see `example `__).\n\n3. Imbalanced classes\n*********************\nIf you do classification on imbalanced classes, consider using class weights. They change the loss function to down-weight frequent classes.\nYou can set them when you init a prediction head::\n\n prediction_head = TextClassificationHead(\n class_weights=data_silo.calculate_class_weights(task_name=\"text_classification\"),\n num_labels=len(label_list))`\n\n\n4. Cross Validation\n*******************\nGet more reliable eval metrics on small datasets (see `example `__)\n\n\n5. Caching & Checkpointing\n***************************\nSave time if you run similar pipelines (e.g. only experimenting with model params): Store your preprocessed dataset & load it next time from cache::\n\n data_silo = DataSilo(processor=processor, batch_size=batch_size, caching=True)\n\nStart & stop training by saving checkpoints of the trainer::\n\n trainer = Trainer.create_or_load_checkpoint(\n ...\n checkpoint_on_sigterm=True,\n checkpoint_every=200,\n checkpoint_root_dir=Path(\u201c/opt/ml/checkpoints/training\u201d),\n resume_from_checkpoint=\u201clatest\u201d)\n\nThe checkpoints include the state of everything that matters (model, optimizer, lr_schedule ...) to resume training.\nThis is particularly useful, if your training crashes (e.g. because your are using spot cloud instances).\nYou can either save checkpoints every X steps or when a SIGTERM signal is received.\n\n6. Training on AWS SageMaker (incl. Spot Instances)\n***************************************************\nWe are currently working a lot on simplifying large scale training and deployment. As a first step, we are adding support for training on AWS SageMaker. The interesting part\nhere is the option to use Managed Spot Instances and save about 70% on costs compared to the regular EC2 instances. This is particularly relevant for training models from scratch, which we\nintroduce in a basic version in this release and will improve over the next weeks.\nSee this `tutorial `__ to get started with using SageMaker for training on down-stream tasks.\n\nCore concepts\n#########################\nModel\n************\nAdaptiveModel = Language Model + Prediction Head(s)\nWith this modular approach you can easily add prediction heads (multitask learning) and re-use them for different types of language models.\n`(Learn more) `__\n\n\n.. image:: https://raw.githubusercontent.com/deepset-ai/FARM/master/docs/img/adaptive_model_no_bg_small.jpg\n\n\nData Processing\n********************\nCustom Datasets can be loaded by customizing the Processor. It converts \"raw data\" into PyTorch Datasets.\nMuch of the heavy lifting is then handled behind the scenes to make it fast & simple to debug.\n`(Learn more) `__\n\n.. image:: https://raw.githubusercontent.com/deepset-ai/FARM/master/docs/img/data_silo_no_bg_small.jpg\n\nInference Time Benchmarks\n##########################\n\nFARM has a configurable `test suite `__ for benchmarking inference times with combinations of inference engine(PyTorch, `ONNXRuntime `__), batch size, document length, maximum sequence length, and other parameters. `Here `__ is a benchmark for Question Answering inference with the current FARM version.\n\nFAQ\n####\n**1. What language model shall I use for non-english NLP?**\nIf you\u2019re working with German, French, Chinese, Japanese or Finnish you might be interested in trying out the pretrained BERT models in your language. You can see a list `here `__ of the available models hosted by our friends over at HuggingFace which can be directly accessed through FARM. If your language isn\u2019t one of those (or even if it is), we\u2019d encourage you to try out XLM-Roberta (https://arxiv.org/pdf/1911.02116.pdf)\nwhich supports 100 different languages and shows surprisingly strong performance compared to single language models.\n\n**2. Why do you have separate prediction heads?**\nPredictionHeads are needed in order to adapt the general language understanding capabilities of the language model to a specific task.\nFor example, the predictions of NER and document classification require very different output formats.\nHaving separate PredictionHead classes means that it is a) very easy to re-use prediction heads on top of different language models\nand b) it simplifies multitask-learning. The latter allows you e.g. to add proxy tasks that facilitate learning of your \"true objective\".\nExample: You want to classify documents into classes and know that some document tags (e.g. author) already provide helpful information for this task. It might help to add additional tasks for classifying these meta tags.\n\n**3. When is adaptation of a language model to a domain corpus useful?**\nMostly when your domain language differs a lot to the one that the original model was trained on.\nExample: Your corpus is from the aerospace industry and contains a lot of engineering terminology.\nThis is very different to Wikipedia text on in terms of vocab and semantics.\nWe found that this can boost performance especially if your down-stream tasks are using rather small domain datasets.\nIn contrast, if you have huge downstream datasets, the model can often adapt to the domain \"on-the-fly\" during downstream training.\n\n**4. How can I adapt a language model to a domain corpus?**\nThere are two main methods: you can extend the vocabulary by :code:`Tokenizer.add_tokens([\"term_a\", \"term_b\"...])` or fine-tune your model on a domain text corpus (see `example `__).\n\n**5. How can I convert from / to HuggingFace's models?**\nWe support conversion in both directions (see `example `__)\nYou can also load any language model from HuggingFace's model hub by just specifying the name, e.g. :code:`LanguageModel.load(\"deepset/bert-base-cased-squad2\")`\n\n**6. How can you scale Question Answering to larger collections of documents?**\nIt's currently most common to put a fast \"retriever\" in front of the QA model.\nCheckout `haystack `__ for such an implementation and more features you need to really run QA in production.\n\n**7. How can you tailor Question Answering to your own domain?**\nWe attained high performance by training a model first on public datasets (e.g. SQuAD, Natural Questions ...) and then fine-tuning it on a few custom QA labels from the domain.\nEven ~2000 domain labels can give you the essential performance boost you need.\nCheckout `haystack `__ for more details and a QA labeling tool.\n\n**8. My GPU runs out of memory. How can I train with decent batch sizes?**\nUse gradient accumulation! It combines multiple batches before applying backprop. In FARM, just set the param :code:`grad_acc_steps` in :code:`initialize_optimizer()` and :code:`Trainer()` to the number of batches you want to combine (i.e. :code:`grad_acc_steps=2` and :code:`batch_size=16` results in an effective batch size of 32).\n\n\nAcknowledgements\n###################\n- FARM is built upon parts of the great `Transformers `_ repository from HuggingFace. It utilizes their implementations of models and tokenizers.\n- FARM is a community effort! Essential pieces of it have been implemented by our FARMers out there. Thanks to all contributors!\n- The original BERT model and `paper `_ was published by Jacob Devlin, Ming-Wei Chang, Kenton Lee and Kristina Toutanova.\n\nCitation\n###################\nAs of now there is no published paper on FARM. If you want to use or cite our framework, please include\nthe link to this repository. If you are working with the German Bert model, you can link our\n`blog post `_ describing its training details and performance.\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "https://github.com/deepset-ai/FARM/archive/v0.8.0.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/deepset-ai/FARM", "keywords": "BERT NLP deep-learning language-model transformer qa question-answering transfer-learning", "license": "Apache", "maintainer": "", "maintainer_email": "", "name": "farm", "package_url": "https://pypi.org/project/farm/", "platform": "", "project_url": "https://pypi.org/project/farm/", "project_urls": { "Download": "https://github.com/deepset-ai/FARM/archive/v0.8.0.tar.gz", "Homepage": "https://github.com/deepset-ai/FARM" }, "release_url": "https://pypi.org/project/farm/0.8.0/", "requires_dist": [ "setuptools", "wheel", "torch (<1.9,>1.5)", "tqdm", "boto3", "requests", "scipy (>=1.3.2)", "sklearn", "seqeval", "mlflow (<=1.13.1)", "transformers (==4.6.1)", "dotmap", "Werkzeug (==0.16.1)", "flask", "flask-restplus", "flask-cors", "dill", "psutil", "sentencepiece", "fasttext (==0.9.1) ; extra == 'fasttext'", "onnxruntime ; extra == 'onnx'" ], "requires_python": ">=3.6.0", "summary": "Framework for finetuning and evaluating transformer based language models", "version": "0.8.0", "yanked": false, "yanked_reason": null }, "last_serial": 10610014, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "1fde71163072e01967007beb36afd6a9", "sha256": "4c0c82c643737f59af85fb97e56c7634c8b52c1296741f96d7a95bc5c0085d66" }, "downloads": -1, "filename": "farm-0.1.2.tar.gz", "has_sig": false, "md5_digest": "1fde71163072e01967007beb36afd6a9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 57851, "upload_time": "2019-07-29T14:27:39", "upload_time_iso_8601": "2019-07-29T14:27:39.454335Z", "url": "https://files.pythonhosted.org/packages/65/8d/ee5d2149f9b3b6eb2df6b034acca646e668cbc61ec470bb6facd9675b812/farm-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "7442b08b4fd4d89d56fb744d1bda1b8e", "sha256": "3a044615b12982cfb78222f5f367c2321d641684dcb8de04b7bd31e3654a4b87" }, "downloads": -1, "filename": "farm-0.2.0.tar.gz", "has_sig": false, "md5_digest": "7442b08b4fd4d89d56fb744d1bda1b8e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 68894, "upload_time": "2019-08-19T09:12:39", "upload_time_iso_8601": "2019-08-19T09:12:39.792731Z", "url": "https://files.pythonhosted.org/packages/9a/b3/b35c26aea084d7998d403061c4c139c7f024952dec39854da8e1e2435cdf/farm-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "299ef13e2998bb7f756c36c1b7c74e0a", "sha256": "434331fa7c09c5cda908fe58caa3f9fea11d2ae31819cb58bbf914e4a21006cf" }, "downloads": -1, "filename": "farm-0.2.1.tar.gz", "has_sig": false, "md5_digest": "299ef13e2998bb7f756c36c1b7c74e0a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 78278, "upload_time": "2019-10-10T10:25:59", "upload_time_iso_8601": "2019-10-10T10:25:59.174783Z", "url": "https://files.pythonhosted.org/packages/39/18/2ff409ade228b56812da0098ce829caab15f2daece9a2787918f09f1413a/farm-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "0aaab1071e23719c0181bd743fce3073", "sha256": "ad0e016003ae054f85447e3554ab3bd3e670467ae3aefe47b297a01c4440e866" }, "downloads": -1, "filename": "farm-0.2.2.tar.gz", "has_sig": false, "md5_digest": "0aaab1071e23719c0181bd743fce3073", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 80248, "upload_time": "2019-10-14T19:14:01", "upload_time_iso_8601": "2019-10-14T19:14:01.843460Z", "url": "https://files.pythonhosted.org/packages/04/dd/c9646cad37b940cfaf96457408c671773f669e2f9e768390dcfb7f51a1ea/farm-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "2db2326cbb433213dc37cac14e6be28d", "sha256": "5efe3d2422045333781112e757c947143c100855eb945556e356968f8a85a707" }, "downloads": -1, "filename": "farm-0.3.0.tar.gz", "has_sig": false, "md5_digest": "2db2326cbb433213dc37cac14e6be28d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 83279, "upload_time": "2019-10-28T13:52:07", "upload_time_iso_8601": "2019-10-28T13:52:07.350570Z", "url": "https://files.pythonhosted.org/packages/4e/3b/0cfe70f2875ba82d29320b935a7831eb8e2cc4a00c1f696181fbfaac563e/farm-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "0a0667f4d2bd24ffd2c9ff6af065cc7f", "sha256": "d70a0a42c35e5965a69852c987aeed7fb3f940e12679fba646cd5a16571e700a" }, "downloads": -1, "filename": "farm-0.3.1.tar.gz", "has_sig": false, "md5_digest": "0a0667f4d2bd24ffd2c9ff6af065cc7f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 85544, "upload_time": "2019-11-04T13:49:15", "upload_time_iso_8601": "2019-11-04T13:49:15.358947Z", "url": "https://files.pythonhosted.org/packages/a4/eb/5abcd91898ddccc32168c05e7767885fccfcc1daf095ccf9433cf8d03bd8/farm-0.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "1345cd5273aad3913704a8dd45bc4142", "sha256": "78c898905c5a4a669a86db1b12d24ddf95142a886601fca7ae80d31f4ac9b828" }, "downloads": -1, "filename": "farm-0.3.2.tar.gz", "has_sig": false, "md5_digest": "1345cd5273aad3913704a8dd45bc4142", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 94551, "upload_time": "2019-11-28T10:11:03", "upload_time_iso_8601": "2019-11-28T10:11:03.404236Z", "url": "https://files.pythonhosted.org/packages/b9/cd/e7e42bf91ba506fe1193094cbaa96969730981bb248942756e077ce10832/farm-0.3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "d467e4b6e95f719b97d66a3e8cc94bc6", "sha256": "325cf2ef98050906dad6ff35b2da5babf50fea1b8ec685308956cef4b3e57882" }, "downloads": -1, "filename": "farm-0.4.1.tar.gz", "has_sig": false, "md5_digest": "d467e4b6e95f719b97d66a3e8cc94bc6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 120115, "upload_time": "2020-02-03T10:13:56", "upload_time_iso_8601": "2020-02-03T10:13:56.364359Z", "url": "https://files.pythonhosted.org/packages/d1/86/5ad3bb2311a2401ad11bf958b1d8645940432f6539feb0ac3198cad1d432/farm-0.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "bc5085d2ae149caa37337010e0be57c6", "sha256": "23cad49455b1528c0ed32b84d11b24e50f9801e194e03d839aa8b737fb4b391b" }, "downloads": -1, "filename": "farm-0.4.2.tar.gz", "has_sig": false, "md5_digest": "bc5085d2ae149caa37337010e0be57c6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 135347, "upload_time": "2020-04-02T12:19:55", "upload_time_iso_8601": "2020-04-02T12:19:55.798029Z", "url": "https://files.pythonhosted.org/packages/5e/52/d9bcda51ec5a87d4066ededed48df13c0074180c2178439037bbc67c7fbb/farm-0.4.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "cad070175cca5b1bf7c63c4517ea519a", "sha256": "c0a567c38c13b9b1794d210b687a65975f6625b6180d561dc40016170e0ee6c0" }, "downloads": -1, "filename": "farm-0.4.3.tar.gz", "has_sig": false, "md5_digest": "cad070175cca5b1bf7c63c4517ea519a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 153722, "upload_time": "2020-04-29T15:52:42", "upload_time_iso_8601": "2020-04-29T15:52:42.177910Z", "url": "https://files.pythonhosted.org/packages/0e/a9/b1f1ff65af01d5cd1d6df698e0c142ab3164afb1189b7cecd8075fee853b/farm-0.4.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "a5daeb2f91c2e7a49e2cee858a287df5", "sha256": "4f0219132bee95d40726da993b35b807e39b4e52eed80cba39086d7493ac8774" }, "downloads": -1, "filename": "farm-0.4.4.tar.gz", "has_sig": false, "md5_digest": "a5daeb2f91c2e7a49e2cee858a287df5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 182926, "upload_time": "2020-06-18T08:27:53", "upload_time_iso_8601": "2020-06-18T08:27:53.922644Z", "url": "https://files.pythonhosted.org/packages/3c/b2/03643569d2bd781e41ec0fccd636c0e2d211a0d624efa9d184623645317e/farm-0.4.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.5": [ { "comment_text": "", "digests": { "md5": "d7ade12f848ed2e10e0b1a2618a3cc29", "sha256": "cba2d229a3168e1492458a4cd6402d53474bf815f9f01ba4d85640caf537fab9" }, "downloads": -1, "filename": "farm-0.4.5-py3-none-any.whl", "has_sig": false, "md5_digest": "d7ade12f848ed2e10e0b1a2618a3cc29", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5.0", "size": 184809, "upload_time": "2020-07-08T12:11:15", "upload_time_iso_8601": "2020-07-08T12:11:15.453118Z", "url": "https://files.pythonhosted.org/packages/52/b9/6e709976c72c6e0503884b90d7838071a069db3a34480b7af235378b31df/farm-0.4.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b47391681d5ca40ecdd8e6f38db57625", "sha256": "b127229e5d0118be393ebf026d00515d0ae14ab31d1a0040e5d1640c3d53caa5" }, "downloads": -1, "filename": "farm-0.4.5.tar.gz", "has_sig": false, "md5_digest": "b47391681d5ca40ecdd8e6f38db57625", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 186235, "upload_time": "2020-06-24T09:08:54", "upload_time_iso_8601": "2020-06-24T09:08:54.509683Z", "url": "https://files.pythonhosted.org/packages/10/f7/5b3c4d94b20b985a4b730e850af9a137597210227e2cdd2b3d6a5d0e8ce9/farm-0.4.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.6": [ { "comment_text": "", "digests": { "md5": "eeddf546dc131ba8d946c1bb9495ce82", "sha256": "2d574b5e1d9d7fd89c0a57c728e8a1754f0f72979abf3b1db974b9ebfdae06e4" }, "downloads": -1, "filename": "farm-0.4.6-py3-none-any.whl", "has_sig": false, "md5_digest": "eeddf546dc131ba8d946c1bb9495ce82", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 184793, "upload_time": "2020-07-10T13:27:31", "upload_time_iso_8601": "2020-07-10T13:27:31.709562Z", "url": "https://files.pythonhosted.org/packages/e2/93/1beb613753a9845b689eee4571ba4a7f3210b60b4bd90f024fc324c96785/farm-0.4.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "536025dd122380582917ba9aed7979c1", "sha256": "6e534f80c71803c7aeb5a78eb29bb740d4f4543abedc053c7c54effcbdadfc31" }, "downloads": -1, "filename": "farm-0.4.6.tar.gz", "has_sig": false, "md5_digest": "536025dd122380582917ba9aed7979c1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 186365, "upload_time": "2020-07-10T13:27:34", "upload_time_iso_8601": "2020-07-10T13:27:34.190782Z", "url": "https://files.pythonhosted.org/packages/36/37/5ab5154b880b179fca9b19a2446b1436af6ff28689bfdcbb2b0a3fb4f29a/farm-0.4.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.7": [ { "comment_text": "", "digests": { "md5": "ae5c8fdaf2d251abd454b3251065e68f", "sha256": "7fff4944703b4971be9408c27d0e8ce29d13fa2665d90152c02ff874d98a1696" }, "downloads": -1, "filename": "farm-0.4.7-py3-none-any.whl", "has_sig": false, "md5_digest": "ae5c8fdaf2d251abd454b3251065e68f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 187034, "upload_time": "2020-08-27T15:35:43", "upload_time_iso_8601": "2020-08-27T15:35:43.307830Z", "url": "https://files.pythonhosted.org/packages/d6/ab/dd3bf1921645519ecc8a416f9a87ac6a5c24fe90b841115f8d9654778b2f/farm-0.4.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a3f2c95c05d65e1f82251e9776308785", "sha256": "e07a16b8b87ed2fe9aa46129962681a5d120daa7375b3471f08d363f44d7d577" }, "downloads": -1, "filename": "farm-0.4.7.tar.gz", "has_sig": false, "md5_digest": "a3f2c95c05d65e1f82251e9776308785", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 188489, "upload_time": "2020-08-27T15:35:45", "upload_time_iso_8601": "2020-08-27T15:35:45.351782Z", "url": "https://files.pythonhosted.org/packages/91/92/f95364e701f12c2d3c0f87544e5d9d32f480d98d0ce763dd63c0683bc91f/farm-0.4.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.8": [ { "comment_text": "", "digests": { "md5": "2acb6166939ac5b8e622d30dad6d8617", "sha256": "da826771dd0f420fa7359b202fac77ce6536e572dd06604ace14538400b50b25" }, "downloads": -1, "filename": "farm-0.4.8-py3-none-any.whl", "has_sig": false, "md5_digest": "2acb6166939ac5b8e622d30dad6d8617", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 189731, "upload_time": "2020-09-14T15:23:01", "upload_time_iso_8601": "2020-09-14T15:23:01.066783Z", "url": "https://files.pythonhosted.org/packages/a8/27/20e91b3efe077ee7ed4d1026c20e3fee82f2766d34cf4c67d8218690fdc2/farm-0.4.8-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ec2a83be40e60bd236b23055ca8e217d", "sha256": "dab3448cba9b2b5a0f1d8bda67434fa3306c1c71f43c784b62848f469d1b066a" }, "downloads": -1, "filename": "farm-0.4.8.tar.gz", "has_sig": false, "md5_digest": "ec2a83be40e60bd236b23055ca8e217d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 192184, "upload_time": "2020-09-14T15:22:44", "upload_time_iso_8601": "2020-09-14T15:22:44.909707Z", "url": "https://files.pythonhosted.org/packages/92/49/a5027daa4f958c9b09631c8384fa8df5689f53fc2d92477e6a1f59f57140/farm-0.4.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.9": [ { "comment_text": "", "digests": { "md5": "b60bd835e50ad34b3e0a01f169e886f3", "sha256": "c9644c6face15fa56a445dcc8958d167fff5bc87baf8be853eab93e7c97b9ca0" }, "downloads": -1, "filename": "farm-0.4.9-py3-none-any.whl", "has_sig": false, "md5_digest": "b60bd835e50ad34b3e0a01f169e886f3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 190443, "upload_time": "2020-09-21T07:55:48", "upload_time_iso_8601": "2020-09-21T07:55:48.680663Z", "url": "https://files.pythonhosted.org/packages/7b/6a/d30bc97eaca322d35979f7a9f8fd8102e53833d3eb5b3bd02add1196ac94/farm-0.4.9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7f28754ea3d8f6b55688fe55dcd6ef7d", "sha256": "ba31d06952f0bb0b5d386e7399a8563a35fed6af08864bd71522d6286b5641cb" }, "downloads": -1, "filename": "farm-0.4.9.tar.gz", "has_sig": false, "md5_digest": "7f28754ea3d8f6b55688fe55dcd6ef7d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 193503, "upload_time": "2020-09-21T07:55:51", "upload_time_iso_8601": "2020-09-21T07:55:51.157516Z", "url": "https://files.pythonhosted.org/packages/c2/af/615f7050f4776e79473ab8d47a9fc37ba3332a8c0b2c664f4803b695dcd3/farm-0.4.9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "9fef7cea041bcc77fcbb0d939960329f", "sha256": "9377b15cc24f67843a78f76ce7d559085f5e5bbc36fbbc64dc466dd8516edfb3" }, "downloads": -1, "filename": "farm-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9fef7cea041bcc77fcbb0d939960329f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 207962, "upload_time": "2020-10-30T16:14:35", "upload_time_iso_8601": "2020-10-30T16:14:35.365240Z", "url": "https://files.pythonhosted.org/packages/a3/e4/2f47c850732a1d729e74add867e967f058370f29a313da05dc871ff8465e/farm-0.5.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "75060578651adc43c0fcf9627f0dfbec", "sha256": "267553cae1a3e4242f9a66d21244ef522255039f3e4fef29d7c1de237b530a91" }, "downloads": -1, "filename": "farm-0.5.0.tar.gz", "has_sig": false, "md5_digest": "75060578651adc43c0fcf9627f0dfbec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 196934, "upload_time": "2020-10-30T16:14:37", "upload_time_iso_8601": "2020-10-30T16:14:37.413076Z", "url": "https://files.pythonhosted.org/packages/bc/6f/00fd71c85e63385d0e8c30809f7e3bf4cb199453c9007026f93d2f01a501/farm-0.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "668201b0ec37fa2a9a5b2c04450cff7a", "sha256": "9afd6db28234b4355c7420a1be00d5c6abcd02ca462acb39c564e04d76491ff6" }, "downloads": -1, "filename": "farm-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "668201b0ec37fa2a9a5b2c04450cff7a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 203127, "upload_time": "2020-12-30T08:59:30", "upload_time_iso_8601": "2020-12-30T08:59:30.775850Z", "url": "https://files.pythonhosted.org/packages/04/e8/731a5ae3dbcac4598f4d66a5eab89a036aa5e89fa87f570621d1e98a4ec7/farm-0.6.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a2629ac80dd3b00c8b7e1bdee08c4a9a", "sha256": "fde55aba6a9ecf81d78ebde687d2c332c7c0b1c349d00560b25207bc60fac65f" }, "downloads": -1, "filename": "farm-0.6.0.tar.gz", "has_sig": false, "md5_digest": "a2629ac80dd3b00c8b7e1bdee08c4a9a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 212181, "upload_time": "2020-12-30T08:59:33", "upload_time_iso_8601": "2020-12-30T08:59:33.134630Z", "url": "https://files.pythonhosted.org/packages/6f/39/2f4d25e38ca1823e99c11f0138509255069a0e2a54eb4253a7dd7c49d180/farm-0.6.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "1eadcc1e1db7ad4b16ef493552b89406", "sha256": "65d1b2c9c4bdd43e1b049d713a3d861dc8e2f0ea3e948e97feb4058d4ef20d83" }, "downloads": -1, "filename": "farm-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1eadcc1e1db7ad4b16ef493552b89406", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 207203, "upload_time": "2021-01-12T17:34:30", "upload_time_iso_8601": "2021-01-12T17:34:30.170006Z", "url": "https://files.pythonhosted.org/packages/4a/1b/24c18832fd84bd876c9cc74846c6d69e10e6c676ddb902fe0db86d306197/farm-0.6.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ac8463d9dc973614c7d7eb5126ec2cb0", "sha256": "9662f13d9f05315dee622e08747c3823e7ac28ea17159e5f1b353d8b05cd1b90" }, "downloads": -1, "filename": "farm-0.6.1.tar.gz", "has_sig": false, "md5_digest": "ac8463d9dc973614c7d7eb5126ec2cb0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 213610, "upload_time": "2021-01-12T17:34:32", "upload_time_iso_8601": "2021-01-12T17:34:32.136034Z", "url": "https://files.pythonhosted.org/packages/92/5d/011ff1db85643106d4acc836ef48ba9b67a9c51b19c5a8b4a3d3bfb5976e/farm-0.6.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "444bb9055a92b467abdd38707acee49a", "sha256": "65c7c2ab9f0a355dc140df63e5aa0ca0ab517956cd79405a531a3acd2fb96e61" }, "downloads": -1, "filename": "farm-0.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "444bb9055a92b467abdd38707acee49a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 207221, "upload_time": "2021-01-20T16:51:38", "upload_time_iso_8601": "2021-01-20T16:51:38.060533Z", "url": "https://files.pythonhosted.org/packages/5b/3d/91c184813b8205c697c13117154f3216f01709291155cc9ee88628cb63d2/farm-0.6.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a8515faf259528e1d45e2222b77c4c94", "sha256": "e7bd3a76295e96a4d417950c3a70f5c6c7a9b4182dfa0324b8ba5aae2ced1cbd" }, "downloads": -1, "filename": "farm-0.6.2.tar.gz", "has_sig": false, "md5_digest": "a8515faf259528e1d45e2222b77c4c94", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 213643, "upload_time": "2021-01-20T16:51:40", "upload_time_iso_8601": "2021-01-20T16:51:40.719239Z", "url": "https://files.pythonhosted.org/packages/7e/a6/62e3affe902475a1a515f02f41309b55208fb4dd179fdc44884800aaa851/farm-0.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "568c14115d976c24e61a62c30d813ac7", "sha256": "51d26cedf10ca21f8f2c47e6d284237afaa01068b72f4850c077de3db5e9c4e3" }, "downloads": -1, "filename": "farm-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "568c14115d976c24e61a62c30d813ac7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 206887, "upload_time": "2021-02-22T17:30:04", "upload_time_iso_8601": "2021-02-22T17:30:04.199377Z", "url": "https://files.pythonhosted.org/packages/36/04/9f626caf14eb62dfe92b829d58fc622dac9088e25846a806f3eb2bb5c013/farm-0.7.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5e86194c7f073fad8ce0998a88d202ec", "sha256": "0a34b9c912e3c4bc206b5b2623e41b2bae3b436d5376d5bb10f589755cda5080" }, "downloads": -1, "filename": "farm-0.7.0.tar.gz", "has_sig": false, "md5_digest": "5e86194c7f073fad8ce0998a88d202ec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 215119, "upload_time": "2021-02-22T17:30:06", "upload_time_iso_8601": "2021-02-22T17:30:06.652826Z", "url": "https://files.pythonhosted.org/packages/9b/6a/5c69edcdb2b3967cbfcc0e0186d20fe941ae4ba75e575c88c56ac3e73b6d/farm-0.7.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "a622161af0032e66ff805b8e604d9cfa", "sha256": "8284013767706a94d756c846e7a08ecbd963bb4a745fdd9f67e8aefcbddeacab" }, "downloads": -1, "filename": "farm-0.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a622161af0032e66ff805b8e604d9cfa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 203592, "upload_time": "2021-03-31T14:34:28", "upload_time_iso_8601": "2021-03-31T14:34:28.444540Z", "url": "https://files.pythonhosted.org/packages/88/ac/5f2fe156cddd329e28b65f002b617136016b9086256ecb0aaa4e13a69e96/farm-0.7.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "017edd760fbe666f2e2bf30fec7c2661", "sha256": "e7c7626ce80a4e532e0db3902c96630509c390e4f90a1a4f3402c496d565a79e" }, "downloads": -1, "filename": "farm-0.7.1.tar.gz", "has_sig": false, "md5_digest": "017edd760fbe666f2e2bf30fec7c2661", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 215783, "upload_time": "2021-03-31T14:34:30", "upload_time_iso_8601": "2021-03-31T14:34:30.565901Z", "url": "https://files.pythonhosted.org/packages/b6/a8/7ab7c55e45444ee70472f91509265641f31034cc139f0f8a09b59c908c08/farm-0.7.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "94906fd06a9ee2ca76a4858c59abc971", "sha256": "d4ae6b3d0cca67bc1bc805b8d349aa6a8b390b11a8796a8e05ca51fb1c62e932" }, "downloads": -1, "filename": "farm-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "94906fd06a9ee2ca76a4858c59abc971", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 204923, "upload_time": "2021-06-10T09:41:53", "upload_time_iso_8601": "2021-06-10T09:41:53.177641Z", "url": "https://files.pythonhosted.org/packages/70/c8/716e698e506b11df347529162890e29f4e1d71e90c09d1047748c8b6e77d/farm-0.8.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c9a0822f884b160a79216507cdadd32b", "sha256": "b5ca7d7061d916fe12afee49a88bb7e4766231f5d0cc242770fa7bcdcc0832f0" }, "downloads": -1, "filename": "farm-0.8.0.tar.gz", "has_sig": false, "md5_digest": "c9a0822f884b160a79216507cdadd32b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 229612, "upload_time": "2021-06-10T09:41:55", "upload_time_iso_8601": "2021-06-10T09:41:55.413366Z", "url": "https://files.pythonhosted.org/packages/f5/ab/5d0f9fb8a5bc88ce42ed8c4d0980de78e58b3aeec4ae189e38a207581913/farm-0.8.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "94906fd06a9ee2ca76a4858c59abc971", "sha256": "d4ae6b3d0cca67bc1bc805b8d349aa6a8b390b11a8796a8e05ca51fb1c62e932" }, "downloads": -1, "filename": "farm-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "94906fd06a9ee2ca76a4858c59abc971", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6.0", "size": 204923, "upload_time": "2021-06-10T09:41:53", "upload_time_iso_8601": "2021-06-10T09:41:53.177641Z", "url": "https://files.pythonhosted.org/packages/70/c8/716e698e506b11df347529162890e29f4e1d71e90c09d1047748c8b6e77d/farm-0.8.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c9a0822f884b160a79216507cdadd32b", "sha256": "b5ca7d7061d916fe12afee49a88bb7e4766231f5d0cc242770fa7bcdcc0832f0" }, "downloads": -1, "filename": "farm-0.8.0.tar.gz", "has_sig": false, "md5_digest": "c9a0822f884b160a79216507cdadd32b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 229612, "upload_time": "2021-06-10T09:41:55", "upload_time_iso_8601": "2021-06-10T09:41:55.413366Z", "url": "https://files.pythonhosted.org/packages/f5/ab/5d0f9fb8a5bc88ce42ed8c4d0980de78e58b3aeec4ae189e38a207581913/farm-0.8.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }