{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "import json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "from datetime import datetime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false,
     "metadata": false,
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import nexussdk as nxs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "# Example:\n",
    "# https://nexus.domain.org/v1\n",
    "with open(\"DEPLOYMENT\", \"r\") as f:\n",
    "    DEPLOYMENT = f.readline().rstrip()\n",
    "    nxs.config.set_environment(DEPLOYMENT)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "with open(\"TOKEN\", \"r\") as f:\n",
    "    TOKEN = f.readline().rstrip()\n",
    "    nxs.config.set_token(TOKEN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "pp = nxs.tools.pretty_print"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {}
   },
   "source": [
    "# Examples setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "def utcnow() -> str:\n",
    "    return datetime.utcnow().strftime(\"%Y%m%d%H%M%S%f\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "def generate_compacted_id() -> str:\n",
    "    return \"nxv:storage{}\".format(utcnow())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "def generate_expanded_id() -> str:\n",
    "    return \"{}/storage{}\".format(\"https://knowledgegraph.domain.org\", utcnow())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {}
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "ORGANIZATION = \"myorg{}\".format(utcnow())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {}
   },
   "outputs": [],
   "source": [
    "nxs.organizations.create(ORGANIZATION)[\"@id\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {}
   },
   "outputs": [],
   "source": [
    "PROJECT = \"myproject\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {}
   },
   "outputs": [],
   "source": [
    "nxs.projects.create(ORGANIZATION, PROJECT)[\"@id\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {}
   },
   "outputs": [],
   "source": [
    "with open(\"S3_ENDPOINT\") as f:\n",
    "    S3_ENDPOINT = f.readline().rstrip()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "pycharm": {}
   },
   "outputs": [],
   "source": [
    "with open(\"S3_ACCESS_KEY\") as f:\n",
    "    S3_ACCESS_KEY = f.readline().rstrip()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(\"S3_SECRET_KEY\") as f:\n",
    "    S3_SECRET_KEY = f.readline().rstrip()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(\"EXTERNAL_DISK_ENDPOINT\") as f:\n",
    "    EXTERNAL_DISK_ENDPOINT = f.readline().rstrip()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(\"EXTERNAL_DISK_CREDENTIALS\") as f:\n",
    "    EXTERNAL_DISK_CREDENTIALS = f.readline().rstrip()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### User API"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "s3_storage_id = nxs.storages.create_s3_storage(\n",
    "    ORGANIZATION,\n",
    "    PROJECT,\n",
    "    \"sdkbucket\",\n",
    "    endpoint = S3_ENDPOINT,\n",
    "    access_key = S3_ACCESS_KEY,\n",
    "    secret_key = S3_SECRET_KEY)[\"@id\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "disk_storage_id = nxs.storages.create_disk_storage(ORGANIZATION, PROJECT, \"/tmp\")[\"@id\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "external_disk_storage_id = nxs.storages.create_external_disk_storage(\n",
    "    ORGANIZATION,\n",
    "    PROJECT,\n",
    "    EXTERNAL_DISK_ENDPOINT,\n",
    "    \"testproject\",\n",
    "    credentials=EXTERNAL_DISK_CREDENTIALS)[\"@id\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.storages.fetch(ORGANIZATION, PROJECT, s3_storage_id))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.storages.fetch(ORGANIZATION, PROJECT, disk_storage_id))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.storages.fetch(ORGANIZATION, PROJECT, external_disk_storage_id))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "pp(nxs.storages.list(ORGANIZATION, PROJECT))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.storages.list(ORGANIZATION, PROJECT, type=\"nxv:S3Storage\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.storages.tag(ORGANIZATION, PROJECT, disk_storage_id, tag=\"v1.1.1\", rev_to_tag=1, rev=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.storages.tags(ORGANIZATION, PROJECT, disk_storage_id))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Files API"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "linked_image = nxs.files.create_link(ORGANIZATION, PROJECT, \"idontalways.jpg\", \"6emgw.jpg\", \"image/jpeg\", storage_id=s3_storage_id)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(linked_image)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "pp(nxs.files.fetch(ORGANIZATION, PROJECT, linked_image[\"@id\"], out_filepath = linked_image[\"_filename\"]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![I don't always](idontalways.jpg)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.files.create(ORGANIZATION, PROJECT, \"idontalways.jpg\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.files.update_link(ORGANIZATION, PROJECT, \"idontalways.jpg\", \"6emgw.jpg\", \"image/jpeg\", 1, file_id=linked_image[\"@id\"], storage_id=s3_storage_id))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.files.list(ORGANIZATION, PROJECT))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.files.tag(ORGANIZATION, PROJECT, linked_image[\"@id\"], 1, \"original\", rev=2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.files.fetch(ORGANIZATION, PROJECT, linked_image[\"@id\"], tag=\"original\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pp(nxs.files.deprecate(ORGANIZATION, PROJECT, linked_image[\"@id\"], 3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
