{ "info": { "author": "iRODS Consortium", "author_email": "support@irods.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: BSD License", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.5" ], "description": "# iRODS Automated Ingest Framework\n\nThe automated ingest framework gives iRODS an enterprise solution that solves two major use cases: getting existing data under management and ingesting incoming data hitting a landing zone.\n\nBased on the Python iRODS Client and Celery, this framework can scale up to match the demands of data coming off instruments, satellites, or parallel filesystems.\n\nThe example diagrams below show a filesystem scanner and a landing zone.\n\n![Automated Ingest: Filesystem Scanner Diagram](capability_automated_ingest_filesystem_scanner.jpg)\n\n![Automated Ingest: Landing Zone Diagram](capability_automated_ingest_landing_zone.jpg)\n\n## Usage options\n\n### Redis options\n| option | effect | default |\n| ---- | ----- | ----- |\n| redis_host | Domain or IP address of Redis host | localhost |\n| redis_port | Port number for Redis | 6379 |\n| redis_db | Redis DB number to use for ingest | 0 |\n\n### S3 options\nTo scan S3 bucket, minimally requires `--s3_keypair` and source path of the form `/bucket_name/path/to/root/folder`.\n\n| option | effect | default |\n| ---- | ----- | ----- |\n| s3_keypair | path to S3 keypair file | None |\n| s3_endpoint_domain | S3 endpoint domain | s3.amazonaws.com |\n| s3_region_name | S3 region name | us-east-1 |\n| s3_proxy_url | URL to proxy for S3 access | None |\n\n### Logging/Profiling options\n| option | effect | default |\n| ---- | ----- | ----- |\n| log_filename | Path to output file for logs | None |\n| log_level | Minimum level of message to log | None |\n| log_interval | Time interval with which to rollover ingest log file | None |\n| log_when | Type/units of log_interval (see TimedRotatingFileHandler) | None |\n\n`--profile` allows you to use vis to visualize a profile of Celery workers over time of ingest job.\n\n| option | effect | default |\n| ---- | ----- | ----- |\n| profile_filename | Specify name of profile filename (JSON output) | None |\n| profile_level | Minimum level of message to log for profiling | None |\n| profile_interval | Time interval with which to rollover ingest profile file | None |\n| profile_when | Type/units of profile_interval (see TimedRotatingFileHandler) | None |\n\n### Ingest start options\nThese options are used at the \"start\" of an ingest job.\n\n| option | effect | default |\n| ---- | ----- | ----- |\n| job_name | Reference name for ingest job | a generated uuid |\n| interval | Restart interval (in seconds). If absent, will only sync once. | None |\n| file_queue | Name for the file queue. | file |\n| path_queue | Name for the path queue. | path |\n| restart_queue | Name for the restart queue. | restart |\n| event_handler | Path to event handler file | None (see \"event_handler methods\" below) |\n| synchronous | Block until sync job is completed | False |\n| progress | Show progress bar and task counts (must have --synchronous flag) | False |\n| ignore_cache | Ignore last sync time in cache - like starting a new sync | False |\n\n### Optimization options\n| option | effect | default |\n| ---- | ----- | ----- |\n| exclude_file_type | types of files to exclude: regular, directory, character, block, socket, pipe, link | None |\n| exclude_file_name | a list of space-separated python regular expressions defining the file names to exclude such as \"(\\S+)exclude\" \"(\\S+)\\.hidden\" | None |\n| exclude_directory_name | a list of space-separated python regular expressions defining the directory names to exclude such as \"(\\S+)exclude\" \"(\\S+)\\.hidden\" | None |\n| files_per_task | Number of paths to process in a given task on the queue | 50 |\n| initial_ingest | Use this flag on initial ingest to avoid check for data object paths already in iRODS | False |\n| irods_idle_disconnect_seconds | Seconds to hold open iRODS connection while idle | 60 |\n\n## available `--event_handler` methods\n\n| method | effect | default |\n| ---- | ----- | ----- |\n| pre_data_obj_create | user-defined python | none |\n| post_data_obj_create | user-defined python | none |\n| pre_data_obj_modify | user-defined python | none |\n| post_data_obj_modify | user-defined python | none |\n| pre_coll_create | user-defined python | none |\n| post_coll_create | user-defined python | none |\n| pre_coll_modify | user-defined python | none |\n| post_coll_modify | user-defined python | none |\n| as_user | takes action as this iRODS user | authenticated user |\n| target_path | set mount path on the irods server which can be different from client mount path | client mount path |\n| to_resource | defines target resource request of operation | as provided by client environment |\n| operation | defines the mode of operation | `Operation.REGISTER_SYNC` |\n| max_retries | defines max number of retries on failure | 0 |\n| timeout | defines seconds until job times out | 3600 |\n| delay | defines seconds between retries | 0 |\n\nEvent handlers can use `logger` to write logs. See `structlog` for available logging methods and signatures.\n\n### operation mode ###\n\n| operation | new files | updated files |\n| ---- | ----- | ----- |\n| `Operation.REGISTER_SYNC` (default) | registers in catalog | updates size in catalog |\n| `Operation.REGISTER_AS_REPLICA_SYNC` | registers first or additional replica | updates size in catalog |\n| `Operation.PUT` | copies file to target vault, and registers in catalog | no action |\n| `Operation.PUT_SYNC` | copies file to target vault, and registers in catalog | copies entire file again, and updates catalog |\n| `Operation.PUT_APPEND` | copies file to target vault, and registers in catalog | copies only appended part of file, and updates catalog |\n| `Operation.NO_OP` | no action | no action\n\n`--event_handler` usage examples can be found [in the examples directory](irods_capability_automated_ingest/examples).\n\n## Deployment\n\n### Basic: manual redis, Celery, pip\n\nRunning the sync job and Celery workers requires a valid iRODS environment file for an authenticated iRODS user on each node.\n\n#### Starting Redis Server\nInstall redis-server:\n```\nsudo yum install redis-server\n```\n```\nsudo apt-get install redis-server\n```\nOr, build it yourself: https://redis.io/topics/quickstart\n\nStart redis:\n```\nredis-server\n```\nOr, dameonized:\n```\nsudo service redis-server start\n```\n```\nsudo systemctl start redis\n```\n\nThe [Redis documentation](https://redis.io/topics/admin) also recommends an additional step:\n> Make sure to set the Linux kernel overcommit memory setting to 1. Add vm.overcommit_memory = 1 to /etc/sysctl.conf and then reboot or run the command sysctl vm.overcommit_memory=1 for this to take effect immediately.\n\nThis allows the Linux kernel to overcommit virtual memory even if this exceeds the physical memory on the host machine. See [kernel.org documentation](https://www.kernel.org/doc/Documentation/vm/overcommit-accounting) for more information.\n\n**Note:** If running in a distributed environment, make sure Redis server accepts connections by editing the `bind` line in /etc/redis/redis.conf or /etc/redis.conf.\n\n#### Setting up virtual environment\nYou may need to upgrade pip:\n```\npip install --upgrade pip\n```\n\nInstall virtualenv:\n```\npip install virtualenv\n```\n\nCreate a virtualenv with python3:\n```\nvirtualenv -p python3 rodssync\n```\n\nActivate virtual environment:\n```\nsource rodssync/bin/activate\n```\n\n#### Install this package\n```\npip install irods_capability_automated_ingest\n```\n\nSet up environment for Celery:\n```\nexport CELERY_BROKER_URL=redis://:/ # e.g. redis://127.0.0.1:6379/0\nexport PYTHONPATH=`pwd`\n```\n\nStart celery worker(s):\n```\ncelery -A irods_capability_automated_ingest.sync_task worker -l error -Q restart,path,file -c \n```\n**Note:** Make sure queue names match those of the ingest job (default queue names shown here).\n\n#### Run tests\n**Note:** The test suite requires Python version >=3.5.\n**Note:** The tests should be run without running Celery workers.\n```\npython -m irods_capability_automated_ingest.test.test_irods_sync\n```\n\n#### Start sync job\n```\npython -m irods_capability_automated_ingest.irods_sync start \n```\n\n#### List jobs\n```\npython -m irods_capability_automated_ingest.irods_sync list\n```\n\n#### Stop jobs\n```\npython -m irods_capability_automated_ingest.irods_sync stop \n```\n\n#### Watch jobs (same as using `--progress`)\n```\npython -m irods_capability_automated_ingest.irods_sync watch \n```\n\n### Intermediate: dockerize, manually config (needs to be updated for Celery)\n\n`/tmp/event_handler.py`\n\n```\nfrom irods_capability_automated_ingest.core import Core\nfrom irods_capability_automated_ingest.utils import Operation\n\nclass event_handler(Core):\n\n @staticmethod\n def target_path(session, meta, **options):\n return \"/tmp/host\" + path\n\n```\n\n`icommands.env`\n```\nIRODS_PORT=1247\nIRODS_HOST=172.17.0.1\nIRODS_USER_NAME=rods\nIRODS_ZONE_NAME=tempZone\nIRODS_PASSWORD=rods\n```\n\n```\ndocker run --rm --name some-redis -d redis:4.0.8\n```\n\n```\ndocker run --rm --link some-redis:redis irods_rq-scheduler:0.1.0 worker -u redis://redis:6379/0 restart path file\n```\n\n```\ndocker run --rm --link some-redis:redis -v /tmp/host/event_handler.py:/event_handler.py irods_capability_automated_ingest:0.1.0 start /data /tempZone/home/rods/data --redis_host=redis --event_handler=event_handler\n```\n\n```\ndocker run --rm --link some-redis:redis --env-file icommands.env -v /tmp/host/data:/data -v /tmp/host/event_handler.py:/event_handler.py irods_rq:0.1.0 worker -u redis://redis:6379/0 restart path file\n```\n### Advanced: kubernetes (needs to be updated for Celery)\n\nThis does not assume that your iRODS installation is in kubernetes.\n\n#### `kubeadm`\n\nsetup `Glusterfs` and `Heketi`\n\ncreate storage class\n\ncreate a persistent volume claim `data`\n\n#### install minikube and helm\n\nset memory to at least 8g and cpu to at least 4\n\n```\nminikube start --memory 8192 --cpus 4\n```\n\n#### enable ingress on minikube\n\n```\nminikube addons enable ingress\n```\n\n#### mount host dirs\n\nThis is where you data and event handler. In this setup, we assume that your event handler is under `/tmp/host/event_handler` and you data is under `/tmp/host/data`. We will mount `/tmp/host/data` into `/host/data` in minikube which will mount `/host/data` into `/data` in containers,\n\n`/tmp/host/data` -> minikube `/host/data` -> container `/data`.\n\nand similarly,\n\n`/tmp/host/event_handler` -> minikube `/host/event_handler` -> container `/event_handler`. Your setup may differ.\n\n```\nmkdir /tmp/host/event_handler\nmkdir /tmp/host/data\n```\n\n`/tmp/host/event_handler/event_handler.py`\n```python\nfrom irods_capability_automated_ingest.core import Core\nfrom irods_capability_automated_ingest.utils import Operation\n\nclass event_handler(Core):\n\n @staticmethod\n def target_path(session, meta, **options):\n return path\n\n```\n\n```\nminikube mount /tmp/host:/host --gid 998 --uid 998 --9p-version=9p2000.L\n```\n\n#### enable incubator\n\n```\nhelm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/\n```\n\n#### build local docker images (optional)\nIf you want to use local docker images, you can build the docker images into minikube as follows:\n\n`fish`\n```\neval (minikube docker-env)\n```\n\n`bash`\n```\neval $(minikube docker-env)\n```\n\n```\ncd /docker/irods-postgresql\ndocker build . -t irods-provider-postgresql:4.2.2\n```\n\n```\ncd /docker/irods-cockroachdb\ndocker build . -t irods-provider-cockroachdb:4.3.0\n```\n\n```\ncd /docker\ndocker build . -t irods_capability_automated_ingest:0.1.0\n```\n\n```\ncd /docker/rq\ndocker build . -t irods_rq:0.1.0\n```\n\n```\ncd /docker/rq-scheduler\ndocker build . -t irods_rq-scheduler:0.1.0\n```\n\n#### install irods\n\n##### `postgresql`\n```\ncd /kubernetes/irods-provider-postgresql\nhelm dependency update\n```\n\n```\ncd /kubernetes\nhelm install ./irods-provider-postgresql --name irods\n```\n\n##### `cockroachdb`\n```\ncd /kubernetes/irods-provider-cockroachdb\nhelm dependency update\n```\n\n```\ncd /kubernetes\nhelm install ./irods-provider-cockroachdb --name irods\n```\n\nwhen reinstalling, run\n\n```\nkubectl delete --all pv\nkubectl delete --all pvc \n```\n\n#### update irods configurations\n\nSet configurations in `/kubernetes/chart/values.yaml` or `--set` command line argument.\n\n#### install chart\n\n```\ncd /kubernetes/chart\n```\n\nWe call our release `icai`.\n```\ncd /kubernetes\nhelm install ./chart --name icai\n```\n\n#### scale rq workers\n```\nkubectl scale deployment.apps/icai-rq-deployment --replicas=\n```\n\n#### access by REST API (recommended)\n\n##### submit job\n`submit.yaml`\n```yaml\nroot: /data\ntarget: /tempZone/home/rods/data\ninterval: \nappend_json: \ntimeout: \nall: \nevent_handler: \nevent_handler_data: |\n from irods_capability_automated_ingest.core import Core\n from irods_capability_automated_ingest.utils import Operation\n\n class event_handler(Core):\n\n @staticmethod\n def target_path(session, meta, **options):\n return path\n\n```\n\n`fish`\n```\ncurl -XPUT \"http://\"(minikube ip)\"/job/ -H \"Content-Type: application/x-yaml\" --data-binary=`submit.yaml`\n```\n\n`bash`\n```\ncurl -XPUT \"http://$(minikube ip)/job/\" -H \"Content-Type: application/x-yaml\" --data-binary \"@submit.yaml\"\n```\n\n`fish`\n```\ncurl -XPUT \"http://\"(minikube ip)\"/job\" -H \"Content-Type: application/x-yaml\" --data-binary \"@submit.yaml\"\n```\n\n`bash`\n```\ncurl -XPUT \"http://$(minikube ip)/job\" -H \"Content-Type: application/x-yaml\" --data-binary \"@submit.yaml\"\n```\n\n##### list job\n`fish`\n```\ncurl -XGET \"http://\"(minikube ip)\"/job\"\n```\n\n`bash`\n```\ncurl -XGET \"http://$(minikube ip)/job\"\n```\n\n##### delete job\n`fish`\n```\ncurl -XDELETE \"http://\"(minikube ip)\"/job/\"\n```\n\n`bash`\n```\ncurl -XDELETE \"http://$(minikube ip)/job/\"\n```\n\n#### access by command line (not recommended)\n\n##### submit job\n```\nkubectl run --rm -i icai --image=irods_capability_automated_ingest:0.1.0 --restart=Never -- start /data /tempZone/home/rods/data -i --event_handler=event_handler --job_name= --redis_host icai-redis-master\n```\n\n##### list job\n```\nkubectl run --rm -i icai --image=irods_capability_automated_ingest:0.1.0 --restart=Never -- list --redis_host icai-redis-master\n```\n\n##### delete job\n```\nkubectl run --rm -i icai --image=irods_capability_automated_ingest:0.1.0 --restart=Never -- stop --redis_host icai-redis-master\n```\n\n#### install logging tool\n\nInstall chart with set `log_level` to `INFO`.\n```\nhelm del --purge icai\n```\n\n```\ncd /kubernetes\nhelm install ./chart --set log_level=INFO --name icai\n```\n\nset parameters for elasticsearch\n\n```\nminikube ssh 'echo \"sysctl -w vm.max_map_count=262144\" | sudo tee -a /var/lib/boot2docker/bootlocal.sh'\nminikube stop\nminikube start\n```\n\n```\ncd /kubernetes\nhelm install ./elk --name icai-elk\n```\n\n\n##### Grafana\n\nlook for service port\n```\nkubectl get svc icai-elk-grafana\n```\n\nforward port\n```\nkubectl port-forward svc/icai-elk-grafana 8000:80\n```\n\nIf `--set grafana.adminPassword=\"\"` system generates a random password, lookup admin password\n```\nkubectl get secret --namespace default icai-elk-grafana -o jsonpath=\"{.data.admin-password}\" | base64 --decode ; echo\n```\n\nopen browser url `localhost:8000`\n\nlogin with username `admin` and password `admin`\nclick on `icai dashboard`\n\n\n##### Kibana\n\nUncomment kibana sections in the yaml files under the `/kubernetes/elk` directory\n\nlook for service port\n```\nkubectl get svc icai-elk-kibana\n```\n\nforward port\n```\nkubectl port-forward svc/icai-elk-kibana 8000:443\n```\n\nopen browser url `localhost:8000`\n\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/irods/irods_capability_automated_ingest", "keywords": "irods automated ingest landingzone filesystem", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "irods-capability-automated-ingest", "package_url": "https://pypi.org/project/irods-capability-automated-ingest/", "platform": "", "project_url": "https://pypi.org/project/irods-capability-automated-ingest/", "project_urls": { "Bug Reports": "https://github.com/irods/irods_capability_automated_ingest/issues", "Homepage": "https://github.com/irods/irods_capability_automated_ingest", "Source": "https://github.com/irods/irods_capability_automated_ingest" }, "release_url": "https://pypi.org/project/irods-capability-automated-ingest/0.3.7/", "requires_dist": [ "minio", "flask", "flask-restful", "python-irodsclient (>=0.8.0)", "python-redis-lock (>=3.2.0)", "redis (<3.0.0,>=2.10.6)", "celery[redis] (<4.3.0,>=4.2.1)", "scandir", "structlog (>=18.1.0)", "progressbar2", "billiard (<3.6.0,>=3.5.0.2)" ], "requires_python": "", "summary": "Implement filesystem scanners and landing zones", "version": "0.3.7" }, "last_serial": 5740155, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "89a9e5455981cb5a8fc23c1fac43ce51", "sha256": "23fa1140e83ca31d84d6ff36bf3554a638f1d9fddf2921aa43345d5f5109ba7f" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "89a9e5455981cb5a8fc23c1fac43ce51", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 27139, "upload_time": "2018-05-12T03:37:16", "url": "https://files.pythonhosted.org/packages/e7/97/c8adfd49c00094450caf4eadc5c1bfb721daa6961603f69027dbba826d41/irods_capability_automated_ingest-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08fc33dc8d69fb4d2776cb92d2549e23", "sha256": "b6ac06f9288620a3adab09b987ba622739950d88027f47f4bd254ce6d8c2d198" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.1.0.tar.gz", "has_sig": false, "md5_digest": "08fc33dc8d69fb4d2776cb92d2549e23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20769, "upload_time": "2018-05-12T03:37:17", "url": "https://files.pythonhosted.org/packages/82/50/e88161c6be7adad746b609fbde403184871c96e25df21e94e8e2ed68addd/irods-capability-automated-ingest-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "d929194a982bf98fffb5f315bdcaa49e", "sha256": "3c39eb3858a75062742e0fd040ad788f1420197d4df6cea97a1e5a50266d6e5d" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d929194a982bf98fffb5f315bdcaa49e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 41730, "upload_time": "2018-09-04T02:59:40", "url": "https://files.pythonhosted.org/packages/4d/92/3cdc3657dce0a079047a7923ef7fc09ea46a2f12b7dd9c34650205909358/irods_capability_automated_ingest-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3c68b41d273eb9f008317d058676d482", "sha256": "89cd3e355046739bdec8d92fbd424b948c1636d1f6cd2ad87050b066798039b5" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3c68b41d273eb9f008317d058676d482", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34380, "upload_time": "2018-09-04T02:59:41", "url": "https://files.pythonhosted.org/packages/5c/e2/2d94feaefbc83e5e33162844e7eab722929840d044cd8ba65f124e10e8a0/irods-capability-automated-ingest-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "fc7e5741e56f54f4aaebb01c2862515e", "sha256": "d5f3d84e68d6eb4ec44efa05d54df164f19626e997560b6f94e928b3cc03eceb" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fc7e5741e56f54f4aaebb01c2862515e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 41806, "upload_time": "2018-09-06T03:03:32", "url": "https://files.pythonhosted.org/packages/b6/92/2fca0efebe2b467f8c105e4854763a40198581b2fac6347cc4130f5b0c2f/irods_capability_automated_ingest-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a2bb64ccc1597459140aaabe35d729f", "sha256": "010b883a8107fbb756e72072932e71d9e34f84386dd9ea121d54cf318aa7a88a" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.2.1.tar.gz", "has_sig": false, "md5_digest": "3a2bb64ccc1597459140aaabe35d729f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34564, "upload_time": "2018-09-06T03:03:34", "url": "https://files.pythonhosted.org/packages/c1/32/7d5ff6c79e6baf418b2b8eecc1080c59c682b49c95fcf98c0d755041899f/irods-capability-automated-ingest-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "601dfd13edb43fe1d4a8d4ae1a9fc9c7", "sha256": "d6a18e39f005ce92bfb61a2d373575002a18bf8de5dce3b864e15dfc07d7a8db" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "601dfd13edb43fe1d4a8d4ae1a9fc9c7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42748, "upload_time": "2018-09-10T17:40:11", "url": "https://files.pythonhosted.org/packages/35/76/bc4ad6b384892216a740b34546e2f3006fcf5b5e3bccc293d3a3c8e054bc/irods_capability_automated_ingest-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7ddbd162b5b732a32502f6e9cd7983e8", "sha256": "fd1bbcc5853cbbbe328ad79628d726eb11c7d560b0628cd9aa8361303ce9e678" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.2.2.tar.gz", "has_sig": false, "md5_digest": "7ddbd162b5b732a32502f6e9cd7983e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35001, "upload_time": "2018-09-10T17:40:13", "url": "https://files.pythonhosted.org/packages/15/62/c864409dd354e98a2d65bc14cdfc7c504ac26cd1fd92c95ba21970c184ff/irods-capability-automated-ingest-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "6469bd6015e9cee209c85f464f2d534d", "sha256": "e4586d9e84f77d98e070c4ddc0a4524537a4746145c7404a9fd5691681a37427" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6469bd6015e9cee209c85f464f2d534d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 43387, "upload_time": "2018-09-19T18:17:45", "url": "https://files.pythonhosted.org/packages/26/75/c4832a369fe912f6f52feb4e6dbd28f236ef744208ea338498ebe152ff57/irods_capability_automated_ingest-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7540bd3dd1017119ec11e8cd852448d", "sha256": "04b23db915b41bf41ca662941f875231f0cc46cfbd91755a1042a39c313fdf1f" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.3.0.tar.gz", "has_sig": false, "md5_digest": "d7540bd3dd1017119ec11e8cd852448d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35339, "upload_time": "2018-09-19T18:17:46", "url": "https://files.pythonhosted.org/packages/9f/c6/2488eed8050142eb51e07a9d7bfa8e3a9de383ea2e492a457016b5c0eda4/irods-capability-automated-ingest-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "9f46cd104b84b5dbcdcfd77d04d3c2c2", "sha256": "05f7252e0994d0900e24d78ddb8346b3f3319c28fc0d59a0d55eabce273b4ab7" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9f46cd104b84b5dbcdcfd77d04d3c2c2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 43498, "upload_time": "2018-09-20T18:21:52", "url": "https://files.pythonhosted.org/packages/d2/75/3ab59c87ac640ef3e634e7b5c409437d0c86de248578df5a3bced4f1ab04/irods_capability_automated_ingest-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c7683736e19f8cbed78b22c16986a8c", "sha256": "9069de2afb1d7c32d6f43ebd9561b8042d74ea645b64d51b6e772e42bff0f53c" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.3.1.tar.gz", "has_sig": false, "md5_digest": "9c7683736e19f8cbed78b22c16986a8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35487, "upload_time": "2018-09-20T18:21:54", "url": "https://files.pythonhosted.org/packages/4e/84/931ff1fd6a356a55670865a426c6970a995c393bbe0519d010f57ab52a88/irods-capability-automated-ingest-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "708ea5c4280b29e73a55775820937c11", "sha256": "27b62f7fa66088f36e0a03009a1e44098b38803726423f3cc17d1fc131a526af" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "708ea5c4280b29e73a55775820937c11", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 43504, "upload_time": "2018-09-25T17:25:43", "url": "https://files.pythonhosted.org/packages/34/09/76324756c2bc7c422e4a0eda9896e4028f8e419f76dabedaa43753637510/irods_capability_automated_ingest-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "668893f39984aa37ca593f0923af4612", "sha256": "7b22ec4f837f1ca2f37646b48f6681faf507f80f632d5a0de262956a0427dd78" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.3.2.tar.gz", "has_sig": false, "md5_digest": "668893f39984aa37ca593f0923af4612", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35513, "upload_time": "2018-09-25T17:25:46", "url": "https://files.pythonhosted.org/packages/ec/ad/37f546cc3430e0332097c60804ce684f6c508a162731fdfd5b0ed55001ac/irods-capability-automated-ingest-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "aec8b8a5d25591ba13df1392d027f7e5", "sha256": "ebf581e10d817c33a712331f97f3d09ec1f305f7b9fc21af76a3f9240a39eb51" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "aec8b8a5d25591ba13df1392d027f7e5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 43605, "upload_time": "2018-10-27T01:06:12", "url": "https://files.pythonhosted.org/packages/ae/96/3ca04c2916c7dabefbf8e7e56ec15c15b4fd8bde4eb2aa379428c9846565/irods_capability_automated_ingest-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f162b1d168221c41ef77e488c2f46fea", "sha256": "091e85cca8179d6385b4c11ac0b489eba5be2e373fb7efb8145a73c718ec47a9" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.3.3.tar.gz", "has_sig": false, "md5_digest": "f162b1d168221c41ef77e488c2f46fea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35722, "upload_time": "2018-10-27T01:06:14", "url": "https://files.pythonhosted.org/packages/02/61/da195296d991ac68d1d6f9ec6d6b307ecad84f292ed810eb1249bc89e994/irods-capability-automated-ingest-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "e7ce95192f2155f39b0bc11ba432c4c2", "sha256": "485d04055d8e979b877ebc067e319bfd54ff9cf9d3d910aa68de23e409aa5af0" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "e7ce95192f2155f39b0bc11ba432c4c2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 43612, "upload_time": "2018-11-15T19:20:52", "url": "https://files.pythonhosted.org/packages/1d/bf/1ec8d3ec2c11175fb5e396082bf3795e22dd72ef9a50b5a5fe05cd5e538e/irods_capability_automated_ingest-0.3.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "52341481c29e5e177da62adb06f38165", "sha256": "17beabd85ef39c453afbbdfe7fce36e2e1954c01a764a0e8fa6aba197a9acf7a" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.3.4.tar.gz", "has_sig": false, "md5_digest": "52341481c29e5e177da62adb06f38165", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35753, "upload_time": "2018-11-15T19:20:54", "url": "https://files.pythonhosted.org/packages/a7/eb/1d1dc02153059f868786ac596ad2268056b198e7d0b75c7235e28c67060a/irods-capability-automated-ingest-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "2a4ed0b1194d09320c6a216567108356", "sha256": "b9f4dcd4abd2f61d762d0f68396a84f813c3e0e14a792682469dbe60422bcdae" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "2a4ed0b1194d09320c6a216567108356", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 48177, "upload_time": "2019-04-10T14:31:13", "url": "https://files.pythonhosted.org/packages/b7/e0/fcf10b372ce6571c080955e184cdf60b35861e2b0e70d141b67bbb822971/irods_capability_automated_ingest-0.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3e323c2da020665678782b427592fce3", "sha256": "ef2789dd4a93b32617dcd52b540886588f1f90198706bef116dee03e013b7b7d" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.3.5.tar.gz", "has_sig": false, "md5_digest": "3e323c2da020665678782b427592fce3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36977, "upload_time": "2019-04-10T14:31:15", "url": "https://files.pythonhosted.org/packages/df/5d/0828c644aaa0a20cb219a8827370ab22aeba44e71fd415f78197cc5a8f7b/irods-capability-automated-ingest-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "848a79e024463a07c437a0ff8f40fc69", "sha256": "95513e53bf1a1992ff5885a59f053abe0ac899990f2ecaa1d16b0e623d6956a6" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.3.6-py3-none-any.whl", "has_sig": false, "md5_digest": "848a79e024463a07c437a0ff8f40fc69", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 48190, "upload_time": "2019-08-15T02:04:14", "url": "https://files.pythonhosted.org/packages/fa/ab/af18808fd45fa658721de49a0c938a582601c2951417d3ef16550f61b6bb/irods_capability_automated_ingest-0.3.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e683ddb2144986bc4644b06ccfc67c89", "sha256": "f5caa78a9560d19582ed2904e120cc4fb9816462ca743eca0c59efc3873add89" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.3.6.tar.gz", "has_sig": false, "md5_digest": "e683ddb2144986bc4644b06ccfc67c89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37109, "upload_time": "2019-08-15T02:04:15", "url": "https://files.pythonhosted.org/packages/be/8c/cd3fd0dbcc8d782b0893da38d99dce6d54e8e1137577514ae0f95f711d4a/irods-capability-automated-ingest-0.3.6.tar.gz" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "b7e821f77030fc8741e87b369147fc66", "sha256": "76ff580470a1598a09708b4cdcddd2200f7e8641f572d70c3a27418e5f95182d" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.3.7-py3-none-any.whl", "has_sig": false, "md5_digest": "b7e821f77030fc8741e87b369147fc66", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 48194, "upload_time": "2019-08-28T01:22:41", "url": "https://files.pythonhosted.org/packages/af/23/7f7a3e0756c672523dce925abcd46ac6b9d28114c07bdb59b4d339d7f2e0/irods_capability_automated_ingest-0.3.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c7bec8356606ec2df17b2ef9a8f4c23a", "sha256": "50cba74a7cfc222f199a8176b3a88f085ec6a8664c1501e1c1233b7576a47f8a" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.3.7.tar.gz", "has_sig": false, "md5_digest": "c7bec8356606ec2df17b2ef9a8f4c23a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37152, "upload_time": "2019-08-28T01:22:43", "url": "https://files.pythonhosted.org/packages/69/df/47f33996111da7efd4bcc6c55339af87c5da02dfc3d88a67331c888c8192/irods-capability-automated-ingest-0.3.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b7e821f77030fc8741e87b369147fc66", "sha256": "76ff580470a1598a09708b4cdcddd2200f7e8641f572d70c3a27418e5f95182d" }, "downloads": -1, "filename": "irods_capability_automated_ingest-0.3.7-py3-none-any.whl", "has_sig": false, "md5_digest": "b7e821f77030fc8741e87b369147fc66", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 48194, "upload_time": "2019-08-28T01:22:41", "url": "https://files.pythonhosted.org/packages/af/23/7f7a3e0756c672523dce925abcd46ac6b9d28114c07bdb59b4d339d7f2e0/irods_capability_automated_ingest-0.3.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c7bec8356606ec2df17b2ef9a8f4c23a", "sha256": "50cba74a7cfc222f199a8176b3a88f085ec6a8664c1501e1c1233b7576a47f8a" }, "downloads": -1, "filename": "irods-capability-automated-ingest-0.3.7.tar.gz", "has_sig": false, "md5_digest": "c7bec8356606ec2df17b2ef9a8f4c23a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37152, "upload_time": "2019-08-28T01:22:43", "url": "https://files.pythonhosted.org/packages/69/df/47f33996111da7efd4bcc6c55339af87c5da02dfc3d88a67331c888c8192/irods-capability-automated-ingest-0.3.7.tar.gz" } ] }