diff --git a/.github/.DS_Store b/.github/.DS_Store new file mode 100644 index 0000000..ebce8de Binary files /dev/null and b/.github/.DS_Store differ diff --git a/.github/workflows/nodemon.yml b/.github/workflows/nodemon.yml new file mode 100644 index 0000000..8ea54b3 --- /dev/null +++ b/.github/workflows/nodemon.yml @@ -0,0 +1,23 @@ +- name: Setup Node.js environment + uses: actions/setup-node@v3.6.0 + with: + # Set always-auth in npmrc. + always-auth: # optional, default is false + # Version Spec of the version to use. Examples: 12.x, 10.15.1, >=10.15.0. + node-version: # optional + # File containing the version Spec of the version to use. Examples: .nvmrc, .node-version, .tool-versions. + node-version-file: # optional + # Target architecture for Node to use. Examples: x86, x64. Will use system architecture by default. + architecture: # optional + # Set this option if you want the action to check for the latest available version that satisfies the version spec. + check-latest: # optional + # Optional registry to set up for auth. Will set the registry in a project level .npmrc and .yarnrc file, and set up auth to read in from env.NODE_AUTH_TOKEN. + registry-url: # optional + # Optional scope for authenticating against scoped registries. Will fall back to the repository owner when using the GitHub Packages registry (https://npm.pkg.github.com/). + scope: # optional + # Used to pull node distributions from node-versions. Since there's a default, this is typically not supplied by the user. When running this action on github.com, the default value is sufficient. When running on GHES, you can pass a personal access token for github.com if you are experiencing rate limiting. + token: # optional, default is ${{ github.server_url == 'https://github.com' && github.token || '' }} + # Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm. + cache: # optional + # Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc. Supports wildcards or a list of file names for caching multiple dependencies. + cache-dependency-path: # optional \ No newline at end of file diff --git a/.github/workflows/python-pipeline.yml b/.github/workflows/python-pipeline.yml new file mode 100644 index 0000000..b46a1e4 --- /dev/null +++ b/.github/workflows/python-pipeline.yml @@ -0,0 +1,36 @@ +name: Python Container for Text Extraction + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +permissions: + contents: read + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python 3.10 + uses: actions/setup-python@v3 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 pytest + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test with pytest + run: | + pytest diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7709bc6 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "jira-plugin.workingProject": "" +} \ No newline at end of file diff --git a/Ansible/classify.ipynb b/Ansible/classify.ipynb new file mode 100644 index 0000000..0742828 --- /dev/null +++ b/Ansible/classify.ipynb @@ -0,0 +1,102 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "{\n", + " \"cells\": [\n", + " {\n", + " \"cell_type\": \"code\",\n", + " \"execution_count\": null,\n", + " \"metadata\": {},\n", + " \"outputs\": [],\n", + " \"source\": [\n", + " \"from flask import Blueprint, request\\n\",\n", + " \"\\n\",\n", + " \"lightkurve_handler = Blueprint('lightkurve_handler', __name__)\"\n", + " ]\n", + " },\n", + " {\n", + " \"cell_type\": \"code\",\n", + " \"execution_count\": null,\n", + " \"metadata\": {},\n", + " \"outputs\": [],\n", + " \"source\": [\n", + " \"@lightkurve__handler.route('/test')\\n\",\n", + " \"def test():\\n\",\n", + " \" return \\\"Hello World\\\"\"\n", + " ]\n", + " },\n", + " {\n", + " \"cell_type\": \"code\",\n", + " \"execution_count\": 3,\n", + " \"metadata\": {},\n", + " \"outputs\": [\n", + " {\n", + " \"data\": {\n", + " \"image/png\": \"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\",\n", + " \"text/plain\": [\n", + " \"
\"\n", + " ]\n", + " },\n", + " \"metadata\": {},\n", + " \"output_type\": \"display_data\"\n", + " }\n", + " ],\n", + " \"source\": [\n", + " \"%matplotlib inline\\n\",\n", + " \"import lightkurve as lk\\n\",\n", + " \"TIC = 'TIC 470710327'\\n\",\n", + " \"sector_data = lk.search_lightcurve(TIC, author = 'SPOC', sector = 18)\\n\",\n", + " \"lc = sector_data.download()\\n\",\n", + " \"lc.plot()\\n\",\n", + " \"lc.to_fits(path='lightcurve.fits')\\n\",\n", + " \"#lc = lk.search_lightcurve(TIC, author='SPOC', sector=18).download()\\n\",\n", + " \"#lc = lc.remove_nans().remove_outliers()\\n\",\n", + " \"#lc.to_fits(path='lightcurve.fits')\"\n", + " ]\n", + " }\n", + " ],\n", + " \"metadata\": {\n", + " \"kernelspec\": {\n", + " \"display_name\": \"Server-p1OW-ivt\",\n", + " \"language\": \"python\",\n", + " \"name\": \"python3\"\n", + " },\n", + " \"language_info\": {\n", + " \"codemirror_mode\": {\n", + " \"name\": \"ipython\",\n", + " \"version\": 3\n", + " },\n", + " \"file_extension\": \".py\",\n", + " \"mimetype\": \"text/x-python\",\n", + " \"name\": \"python\",\n", + " \"nbconvert_exporter\": \"python\",\n", + " \"pygments_lexer\": \"ipython3\",\n", + " \"version\": \"3.10.4\"\n", + " },\n", + " \"orig_nbformat\": 4,\n", + " \"vscode\": {\n", + " \"interpreter\": {\n", + " \"hash\": \"06513b25462062bbc84ac1da243dc55d5ebbc05bf6cd09ebad51bfb8bbfce743\"\n", + " }\n", + " }\n", + " },\n", + " \"nbformat\": 4,\n", + " \"nbformat_minor\": 2\n", + "}" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Ansible/habanero.py b/Ansible/habanero.py new file mode 100644 index 0000000..c9ebaa0 --- /dev/null +++ b/Ansible/habanero.py @@ -0,0 +1,44 @@ +""" +Script for extracting machine readable text from a web publication/paper which +needs to be downloaded +Adapted from the process described by Wang et. al. 2022 10.1038/s41524-021-00687-2 + +Crossref API info: https://api.crossref.org/swagger-ui/index.html + +habanero package info: https://pypi.org/project/habanero/ +""" +import time # for using time.sleep() if needing to pause data requests +from habanero import Crossref +from habanero import cn + + +cr = Crossref() + +# Setting info for mailto for contact email and user-agent for description of use case +# For attempts to get into the 'polite pool' for paper requests through the API +cr.mailto = 'haloh@mix.wvu.edu' +cr.ua_string = 'Python script for retrieving paper info from query for research.' + +# query section, request results based on a search +# cursor='*' alloy 'deep paging' (according to function documentation in crossref.py) +# cursor_max sets the max number of records to retrieve, by default it's 20 I think +# seems to do max results returned from deep paging in sets of 20, e.g. a request of 15 still gives 20 +n = 2 # multiple of 20 for deep paging +request = cr.works(query = "Automated pipeline for superalloy data by text mining", cursor='*', cursor_max=n*20, progress_bar=True) # test query searching for papers based on a string + +allowed_types = ['proceedings-article', 'book-chapter', 'dissertation', 'journal-article'] # specifying document types of parse +# print the title and the type of item from the results +for i in range(n): + for j in range(len(request[i]['message']['items'])): + if request[i]['message']['items'][j]['type'] not in allowed_types: # skipping if not a type wanted + continue + title = request[i]['message']['items'][j]['title'][0] + type = request[i]['message']['items'][j]['type'] + print(f'{title}, {type}') # print the title and type of each results + time.sleep(0.25) # sleep between prints so it's not too fast + + +request_doi = cr.works(ids = '10.1038/s41524-021-00687-2') # search for a specific paper using a DOI number +print(request_doi['message']['title'][0]) +citation = cn.content_negotiation(ids = '10.1038/s41524-021-00687-2', format = 'text') # get citation for the DOI +print(citation) diff --git a/Publication Text Extraction - Henry/main.py b/Ansible/main.py similarity index 100% rename from Publication Text Extraction - Henry/main.py rename to Ansible/main.py diff --git a/DOCKERFILE b/DOCKERFILE new file mode 100644 index 0000000..a9cbfd3 --- /dev/null +++ b/DOCKERFILE @@ -0,0 +1,21 @@ +FROM python:3.9.16-bullseye + +ENV PROJECT_DIR /app + +WORKDIR /app +RUN pip install pipenv + +# COPY requirements.txt requirements.txt +# RUN pip install -r requirements.txt + +WORKDIR ${PROJECT_DIR} +COPY Pipfile . +# COPY Pipfile.lock . + +RUN pipenv install +# RUN pipenv install --system +# RUN pipenv install --system --deploy +COPY . . + +# CMD ["python", "-m", "flask", "run", "--host=0.0.0.0"] +CMD ["pipenv", "run", "flask", "run", "--host=0.0.0.0"] \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7e09781 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +# Convenient shortcuts for local development + +build: + docker build --tag sytizen-server . + +# Default port 5000 is in use on Ventura Macs +# 7355 chosen for TESS +run: + docker compose up --build --detach + +logs: + docker compose logs --follow + +stop: + docker compose down \ No newline at end of file diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..ef28dee --- /dev/null +++ b/Pipfile @@ -0,0 +1,20 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +moralis = "*" +flask = "*" +flask_cors = "*" +python-dotenv = "*" +matplotlib = "*" +lightkurve = "*" +nbformat = "*" +gunicorn = "*" +sqlalchemy = "*" +psycopg2-binary = "*" +flask-sqlalchemy = "*" +thirdweb-sdk = "*" + +[dev-packages] \ No newline at end of file diff --git a/Publication Text Extraction - Henry/Elsevier Provisions for Text and Data Mining.txt b/Posts/Publication Text Extraction - Henry/Elsevier Provisions for Text and Data Mining.txt similarity index 100% rename from Publication Text Extraction - Henry/Elsevier Provisions for Text and Data Mining.txt rename to Posts/Publication Text Extraction - Henry/Elsevier Provisions for Text and Data Mining.txt diff --git a/Publication Text Extraction - Henry/TDM-registration-form.pdf b/Posts/Publication Text Extraction - Henry/TDM-registration-form.pdf similarity index 100% rename from Publication Text Extraction - Henry/TDM-registration-form.pdf rename to Posts/Publication Text Extraction - Henry/TDM-registration-form.pdf diff --git a/README.md b/README.md index 35cb4c4..d9ac0c7 100644 --- a/README.md +++ b/README.md @@ -29,4 +29,48 @@ pip install habanero ``` # Web Interface/Client -Current progress is being tracked by [signal-k/client](http://github.com/Signal-K/client/pull/19) and will be added as a git submodule once our generator & metadata smart contracts are completed \ No newline at end of file +Current progress is being tracked by [signal-k/client](http://github.com/Signal-K/client/pull/19) and will be added as a git submodule once our generator & metadata smart contracts are completed + +## Generative API +### Containerisation for local development + +In root dir, `Dockerfile` runs the Flask Server in a container. + +The `docker-compose.yml` defines a cluster with the Server and a local PostgreSQL container + +For convenience, a Makefile supports the following simple operations: + +* `make build` builds an image from the current working copy +* `make run` starts the cluster, rebuilding if necessary +* `make logs` tails the logs for both containers +* `make stop` stops and deletes the clusters + +For rapid iteration, I use: +`make stop run logs` + +#### Prerequisites + +You will need to have a Docker environment available... Docker Desktop or an equivalent + +#### Previous Issues + +##### ThirdWeb + +The build step (`make build`) fails whilst running `pipenv install` during the build of the Docker image. + +`thirdweb-sdk` caused errors on `pipenv install`. The output was long and ugly; but a resolution has been found. +The problem was the use of the `slim-` base image. Switching from `p`ython:3.9.9-slim-bullseye` to `python:3.9.9-bullseye` avoided the problem. + +##### Ventura - Flask default port 5000 + +Flask runs by default on port 5000. However, on macos Ventura, there is a system service "Airplay Receiver" listening on this port. + +In this case, `localhost:5000` does not reach the Flask app, although `127.0.0.1:5000` does. + +The easiest solution is to turn off the Airplay Receiver service; an alternative is to run Flask on a different port... perhaps 7355 for TESS? + +#### Current Issue + +The server responds to `http://localhost:5000` with a classic "Hello World" + +Several of the blueprints in `app.py` are commented out since they have dependencies on ThirdWeb \ No newline at end of file diff --git a/Server/.flaskenv b/Server/.flaskenv new file mode 100644 index 0000000..c80b622 --- /dev/null +++ b/Server/.flaskenv @@ -0,0 +1,2 @@ +FLASK_APP=app.py +FLASK_DEBUG=1 \ No newline at end of file diff --git a/Server/app.py b/Server/app.py new file mode 100644 index 0000000..f6967a2 --- /dev/null +++ b/Server/app.py @@ -0,0 +1,28 @@ +from flask import Flask, request, make_response, jsonify, Blueprint +from datetime import datetime, timedelta + +"""# Jupyter interaction +import io, os, sys, types # https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Importing%20Notebooks.html +from IPython import get_ipython +from nbformat import read +from IPython.core.interactiveshell import Interactiveshell""" + +# Flask blueprints/routes +from auth.moralisHandler import moralis_handler +from contracts.planetDrop import planet_drop +from database.connection import database_connection +# from database.unity-integration import unity_database_connection +# from ansible.tic_classify import tic_classify +# from ansible.classify import lightkurve_handler + +app = Flask(__name__) +app.register_blueprint(moralis_handler, url_prefix='/moralis-auth') +app.register_blueprint(planet_drop, url_prefix='/planets') +app.register_blueprint(database_connection, url_prefix='/database') +# app.register_blueprint(unity-database_connection, url_prefix='/database-unity') +# app.register_blueprint(tic_classify, url_prefix='/lightkurve') +# app.register_blueprint(lightkurve__handler, url_prefix='/lightkurve-handle') + +@app.route('/') +def index(): + return "Hello World" \ No newline at end of file diff --git a/Server/database/connection.py b/Server/database/connection.py new file mode 100644 index 0000000..17512d7 --- /dev/null +++ b/Server/database/connection.py @@ -0,0 +1,38 @@ +from flask import Blueprint, request +from dotenv import load_dotenv +import psycopg2 +import os + +database_connection = Blueprint('database_connection', __name__) + +load_dotenv() +url = os.getenv("DATABASE_URL") +print("DATABASE",url) +connection = psycopg2.connect(dsn=url, user='postgres') + +# PostgreSQL queries +CREATE_USERS_TABLE = ( + 'CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, address TEXT);' +) +CREATE_PLANETS_TABLE = ( + """CREATE TABLE IF NOT EXISTS planets (user_id INTEGER, temperature REAL, date TIMESTAMP, FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE);""" +) +INSERT_USER_RETURN_ID = 'INSERT INTO users (address) VALUES (%s) RETURNING id;' +INSERT_PLANET = ( + 'INSERT INTO planets (user_id, temperature, date) VALUES (%s, %s, %s);' +) + +# User Management +@database_connection.post('/api/user') +def addUser(): + data = request.get_json() + address = data['address'] + + # Connect to the database + with connection: + with connection.cursor() as cursor: + cursor.execute(CREATE_USERS_TABLE) + cursor.execute(INSERT_USER_RETURN_ID, (address,)) + user_id = cursor.fetchone()[0] + + return {'id': user_id, 'message': f"User {address} created"}, 201 \ No newline at end of file diff --git a/Server/database/retrieveData.cs b/Server/database/retrieveData.cs new file mode 100644 index 0000000..2284daa --- /dev/null +++ b/Server/database/retrieveData.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Networking; + +public class GetMe : MonoBehaviour { + + public void GetData() + { + StartCoroutine(GetRequest("http://127.0.0.1:5000/unity-database_connection/list")); + } + + IEnumerator GetRequest(string uri) + { + UnityWebRequest uwr = UnityWebRequest.Get(uri); + yield return uwr.SendWebRequest(); + + if (uwr.isNetworkError) + { + Debug.Log("Error While Sending: " + uwr.error); + } + else + { + Debug.Log("Received: " + uwr.downloadHandler.text); + } + } +} \ No newline at end of file diff --git a/contracts/serverDropConnection.py b/contracts/serverDropConnection.py new file mode 100644 index 0000000..27c80bd --- /dev/null +++ b/contracts/serverDropConnection.py @@ -0,0 +1,69 @@ +from flask import Blueprint, request +from thirdweb import ThirdwebSDK + +planet_drop = Blueprint('planet_drop', __name__) + +# Get NFT balance for Planet Edition Drop (https://thirdweb.com/goerli/0xdf35Bb26d9AAD05EeC5183c6288f13c0136A7b43/code) +@planet_drop.route('/balance') +def get_balance(): + # Planet Edition Drop Contract + network = "goerli" + sdk = ThirdwebSDK(network) + contract = sdk.get_edition_drop("0xdf35Bb26d9AAD05EeC5183c6288f13c0136A7b43") + + address = "0xCdc5929e1158F7f0B320e3B942528E6998D8b25c" + token_id = 0 + balance = contract.balance_of(address, token_id) + + return str(balance) + +@planet_drop.route('/get_planet') +def get_planet(): + network = 'goerli' + sdk = ThirdwebSDK(network) + + # Getting Planet (candidate nfts) + contract = sdk.get_contract("0x766215a318E2AD1EbdC4D92cF2A3b70CBedeac31") + tic55525572 = contract.call("uri", 0) # For token id 0, tic id 55525572 + return str(tic55525572) + +@planet_drop.route('/mint_planet', methods=["GET", "POST"]) +def create_planet(): + #Output from IPFS gateway: #{"name":"TIC 55525572","description":"Exoplanet candidate discovered by TIC ID. \n\nReferences: https://exoplanets.nasa.gov/exoplanet-catalog/7557/toi-813-b/\nhttps://exofop.ipac.caltech.edu/tess/target.php?id=55525572\n\nDeepnote Analysis: https://deepnote.com/workspace/star-sailors-49d2efda-376f-4329-9618-7f871ba16007/project/Star-Sailors-Light-Curve-Plot-b4c251b4-c11a-481e-8206-c29934eb75da/%2FMultisector%20Analysis.ipynb","image":"ipfs://Qma2q8RgX1X2ZVcfnJ7b9RJeKHzoTXahs2ezzqQP4f5yvT/0.png","external_url":"","background_color":"","attributes":[{"trait_type":"tic","value":"55525572"},{"trait_type":"mass_earth","value":"36.4"},{"trait_type":"type","value":"neptune-like"},{"trait_type":"orbital_period","value":"83.9"},{"trait_type":"eccentricity","value":"0.0"},{"trait_type":"detection_method","value":"transit"},{"trait_type":"orbital_radius","value":"0.423"},{"trait_type":"radius_jupiter","value":"0.599"},{"trait_type":"distance_earth","value":"858"}]} + # Multiple instances for the same ID will be created (as long as the traits are the same), one for each person, as each planet instance appeared differently and will be manipulated differently by users + # Creating a planet nft based on discovery + network = 'goerli' + sdk = ThirdwebSDK(network) + contract = sdk.get_contract("0x766215a318E2AD1EbdC4D92cF2A3b70CBedeac31") + #data = contract.call("lazyMint", _amount, _baseURIForTokens, _data) (POST data) + # Interaction flow -> https://www.notion.so/skinetics/Sample-Planets-Contract-4c3bdcbca4b9450382f9cc4e72e081f7 + +""" +# Flask/api routes +@app.route('/planet') +def planet(): + return jsonify({'planet' : 'planet'}) +@app.post('/select_planet') +def select_planet(): + data = request.get_json() + planetId = data['planetId'] + planetName = data['planetName'] + planetTic = data['planetTic'] + sector_data = lk.search_lightcurve(planetTic, author = 'SPOC', sector = 23) + #lc = sector_data.download() + #lc.plot() + return sector_data +# Show planet data on frontend +@app.post('/show_planet') # Can we do some calculation for nft revealing using this (i.e. mint nft after classification) +def show_tic(): + lc = sector_data.plot() + return lc +@app.post('/mint-planet') +def mint_planet(): + data = request.get_json() + _receiver = data['profileAddress'] + _tokenId = data['tokenId'] + _quantity = 1 + data = contract.call("claim", _receiver, _tokenId, _quantity) +app.run(host='0.0.0.0', port=8080) +""" \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f814a2c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ + +name: sytizen + +services: + server: + build: + context: . + dockerfile: Dockerfile + environment: + - DATABASE_URL=postgresql://database:5432/ + ports: + - "5000:5000" + expose: + - "5000" + depends_on: + - database + networks: + - back-tier + database: + image: postgres:latest + user: postgres + environment: + - POSTGRES_HOST_AUTH_METHOD=trust + - PGUSER=postgres + - POSTGRES_PASSWORD=postgres + ports: + - "5432:5432" + expose: + - "5432" + networks: + - back-tier + +networks: + # front-tier: {} + back-tier: {} \ No newline at end of file