Added battleship files

This commit is contained in:
2025-11-07 11:22:04 +03:00
parent a11b2df651
commit 6d98d7d446
38 changed files with 1826 additions and 0 deletions

View File

@@ -0,0 +1,186 @@
"""
arctictern.py
A little script that does a big migration
"""
import json
import os
import requests
import shutil
import subprocess
import sys
from os.path import exists
COLOURS = {"red": "\033[31m",
"blue": "\033[34m",
"green": "\033[32m",
"reset": "\033[0m",
"bold": "\033[1m"}
BASE_URL = "https://raw.githubusercontent.com/Code-Institute-Org/gitpod-full-template/main/"
CURRENT_VERSION = 1.0
THIS_VERSION = 1.0
UPGRADE_FILE_LIST = [{"filename": ".vscode/settings.json",
"url": ".vscode/settings.json"
},
{"filename": ".vscode/launch.json",
"url": ".vscode/launch.json"
},
{"filename": ".gitpod.yml",
"url": ".gitpod.yml"
},
{"filename": ".gitpod.dockerfile",
"url": ".gitpod.dockerfile"
},
{"filename": ".vscode/heroku_config.sh",
"url": ".vscode/heroku_config.sh"
},
{"filename": ".vscode/init_tasks.sh",
"url": ".vscode/init_tasks.sh"
},
{"filename": ".vscode/uptime.sh",
"url": ".vscode/uptime.sh"
},
{"filename": ".vscode/make_url.py",
"url": ".vscode/make_url.py"
},
{"filename": ".vscode/arctictern.py",
"url": ".vscode/arctictern.py"
}]
FINAL_LINES = "\nexport POST_UPGRADE_RUN=1\nsource ~/.bashrc\n"
def get_versions():
if exists(".vscode/version.txt"):
with open(".vscode/version.txt", "r") as f:
THIS_VERSION = float(f.read().strip())
else:
with open(".vscode/version.txt", "w") as f:
f.write(str(THIS_VERSION))
r = requests.get(BASE_URL + ".vscode/version.txt")
CURRENT_VERSION = float(r.content)
return {"this_version": THIS_VERSION,
"current_version": CURRENT_VERSION}
def needs_upgrade():
"""
Checks the version of the current template against
this version.
Returns True if upgrade is needed, False if not.
"""
versions = get_versions()
print(f"Upstream version: {versions['current_version']}")
print(f"Local version: {versions['this_version']}")
return versions["current_version"] > versions["this_version"]
def write_version():
versions = get_versions()
with open(".vscode/version.txt", "w") as f:
f.write(str(versions["current_version"]))
def build_post_upgrade():
r = requests.get(BASE_URL + ".vscode/upgrades.json")
upgrades = json.loads(r.content.decode("utf-8"))
content = ""
for k,v in upgrades.items():
if float(k) > THIS_VERSION:
print(f"Adding version changes for {k} to post_upgrade.sh")
content += v
if content:
content += FINAL_LINES
with open(".vscode/post_upgrade.sh", "w") as f:
f.writelines(content)
print("Built post_upgrade.sh. Restart your workspace for it to take effect.")
def process(file, suffix):
"""
Replaces and optionally backs up the files that
need to be changed.
Arguments: file - a path and filename
suffix - the suffix to the BASE_URL
"""
if file == ".gitpod.dockerfile" or file == ".gitpod.yml":
try:
shutil.copyfile(file, f"{file}.tmp")
except FileNotFoundError:
pass
with open(file, "wb") as f:
r = requests.get(BASE_URL + suffix)
f.write(r.content)
if exists(f"{file}.tmp"):
result = os.system(f"diff -q {file} {file}.tmp > /dev/null")
if result != 0:
os.remove(f"{file}.tmp")
return True
return False
def start_migration():
"""
Calls the process function and
renames the directory
"""
push_and_recreate = False
if not os.path.isdir(".vscode"):
print("Creating .vscode directory")
os.mkdir(".vscode")
for file in UPGRADE_FILE_LIST:
print(f"Processing: {file['filename']}")
result = process(file["filename"], file["url"])
if result == True:
push_and_recreate = True
if push_and_recreate:
write_version()
if needs_upgrade() and not push_and_recreate:
build_post_upgrade()
print("Changes saved.")
print("Please add, commit and push to GitHub.")
print("You may need to stop and restart your workspace for")
print("the changes to take effect.\n")
if push_and_recreate:
print(f"{COLOURS['red']}{COLOURS['bold']}*** IMPORTANT INFORMATION ***{COLOURS['reset']}")
print("The files used to create this workspace have been updated")
print("Please download any files that are in .gitignore and")
print("recreate this workspace by clicking on the Gitpod button")
print("in GitHub. Then, upload your saved files again.\n")
if __name__ == "__main__":
print(f"\n🐦 {COLOURS['blue']}{COLOURS['bold']}ArcticTern version 0.3{COLOURS['reset']}")
print("CI Template Migration Utility")
print("-----------------------------")
print("Upgrades the workspace to the latest version.\n")
if input("Start? Y/N ").lower() == "y":
start_migration()
else:
sys.exit("Migration cancelled by the user")

View File

@@ -0,0 +1,40 @@
#!/bin/bash
# Script to allow Heroku API key to be pasted
# exported as an environment variable
#
# Matt Rudge, May 2021
echo Heroku authentication configuration script
echo Code Institute, 2021
echo
echo Get your Heroku API key by going to https://dashboard.heroku.com
echo Go to Account Settings and click on Reveal to view your Heroku API key
echo
if [[ -z "${HEROKU_API_KEY}" ]]; then
echo Paste your Heroku API key here or press Enter to quit:
read apikey
if [[ -z "${apikey}" ]]; then
return 0
fi
echo export HEROKU_API_KEY=${apikey} >> ~/.bashrc
echo Added the export. Refreshing the terminal.
. ~/.bashrc > /dev/null
echo Done!
else
echo API key is already set.
echo
echo To reset the API key please input "'reset'":
read reset_trigger
if [[ ${reset_trigger} == reset ]]; then
unset HEROKU_API_KEY
unset reset_trigger
echo
echo API key removed!
else
unset reset_trigger
echo API key unchanged.
fi
echo
echo Exiting
fi

View File

@@ -0,0 +1,13 @@
#!/bin/bash
# Gives a personalised greeting
# Adds configuration options for SQLite
# Creates run aliases
# Author: Matt Rudge
echo "Setting the greeting"
sed -i "s/USER_NAME/$GITPOD_GIT_USER_NAME/g" ${GITPOD_REPO_ROOT}/README.md
echo "Creating .sqliterc file"
echo ".headers on" > ~/.sqliterc
echo ".mode column" >> ~/.sqliterc
echo "Your workspace is ready to use. Happy coding!"

View File

@@ -0,0 +1,14 @@
# Simple utility for creating the Cloudinary URL from a
# cloudinary_python.txt file
# Matt Rudge, November 2021
import re
with open("cloudinary_python.txt") as f:
content = f.readlines()
cloud_name = re.findall(r"['](.*?)[']",content[15])[0]
api_key = re.findall(r"['](.*?)[']",content[16])[0]
api_secret = re.findall(r"['](.*?)[']",content[17])[0]
print(f"cloudinary://{api_key}:{api_secret}@{cloud_name}")

View File

@@ -0,0 +1,17 @@
{
"python.pythonPath": ".venv/bin/python",
"python.formatting.provider": "black",
"python.formatting.blackArgs": ["--line-length=79" ],
"python.formatting.autopep8Args": ["--max-line-length=79" ],
"python.linting.enabled": true,
"python.linting.flake8Enabled": true,
"python.linting.pylintEnabled": true,
"python.linting.lintOnSave": true,
"python.linting.flake8Args": [
"--max-line-length=79"
],
"python.linting.pylintArgs": [
"--disable=C0111" // Disable missing docstring warnings if needed
],
"files.autoSave": "onFocusChange"
}

View File

@@ -0,0 +1,23 @@
#!/bin/bash
# Pings the webhook so that we can gather
# basic usage stats. No personally identifiable
# data is captured here, and it is impossible to
# identify an individual user from the captured data.
# Matt Rudge, April 2021
UUID=$(cat /proc/sys/kernel/random/uuid)
URL=https://1xthkmzwg3.execute-api.eu-west-1.amazonaws.com/prod/lrsapi/
API_KEY=jceBCdeGZP9RDeUNCfM4jIQ39Cx0jtG51QgcwDwc
VERB="started"
clear
while true; do
DATA="{\"activity_time\":\"$(date +%Y-%m-%dT%H:%M:%S).000Z\",\"actor\":\"${UUID}\",\"verb\":\"${VERB}\",\"activity_object\":\"Gitpod Workspace\",\"extra_data\":\"{}\"}"
curl -s -X POST -H "x-api-key: ${API_KEY}" -d "${DATA}" ${URL} 1> /dev/null
VERB="running"
sleep 300
done