Initial commit.
This commit is contained in:
222
static/docs/Dog Training(Sheet1).csv
Normal file
222
static/docs/Dog Training(Sheet1).csv
Normal file
@@ -0,0 +1,222 @@
|
||||
Bath,BATH,Activities,,
|
||||
Cuddle,CUDDLE,Activities,,
|
||||
Dreaming,DREAMING,Activities,,
|
||||
Exercise,EXERCISE,Activities,,
|
||||
Go on then (go explore on walk),GO_ON_THEN_(GO_EXPLORE_ON_WALK),Activities,Swing arm forwards towards the horizon,
|
||||
Good night (bedtime),GOOD_NIGHT_(BEDTIME),Activities,,
|
||||
Panting,PANTING,Activities,,
|
||||
Patrol,PATROL,Activities,,
|
||||
Protect,PROTECT,Activities,,
|
||||
Resting,RESTING,Activities,,
|
||||
Rotate,ROTATE,Activities,Point or push/pull to desired direction,
|
||||
Scratch,SCRATCH,Activities,,
|
||||
Sleeping,SLEEPING,Activities,,
|
||||
Stretching,STRETCHING,Activities,,
|
||||
Take (it),TAKE_(IT),Activities,,
|
||||
Tug,TUG,Activities,,
|
||||
Wake up,WAKE_UP,Activities,,
|
||||
Walk,WALK,Activities,"Walking legs with fingers or multiple firm, fast pats to the chest",TRUE
|
||||
Yawning,YAWNING,Activities,,
|
||||
Come,COME,Basic Obedience,"Palm forwards, arm down and 20 degrees from torso",
|
||||
Down ,DOWN,Basic Obedience,Point to ground,
|
||||
Go,GO,Basic Obedience,Point in direction ,
|
||||
Okay,OKAY,Basic Obedience,,
|
||||
Sit,SIT,Basic Obedience,Bring closed fist to chin with elbow tucked against torso,
|
||||
Stay,STAY,Basic Obedience,Push hand towards dog with only index finger extended and pointing upwards,
|
||||
Easy,EASY,Behaviour Modification,,
|
||||
Heel,HEEL,Behaviour Modification,Point down with index finger to floor next to foot using same side finger and foot that you wish dog to heel to,
|
||||
Noisy,NOISY,Behaviour Modification,,
|
||||
Pull,PULL,Behaviour Modification,,
|
||||
Push,PUSH,Behaviour Modification,,
|
||||
Quiet,QUIET,Behaviour Modification,Index finger to lips,
|
||||
Settle,SETTLE,Behaviour Modification,,
|
||||
Back,BACK,Body parts,,
|
||||
Belly,BELLY,Body parts,,
|
||||
Ear,EAR,Body parts,,
|
||||
Mouth,MOUTH,Body parts,,
|
||||
Neck,NECK,Body parts,,
|
||||
Nose,NOSE,Body parts,,
|
||||
Paw,PAW,Body parts,Present hand close to your body with palm facing upwards,
|
||||
Tail,TAIL,Body parts,,
|
||||
Teeth,TEETH,Body parts,,
|
||||
Harness,HARNESS,Clothing and equipment,,
|
||||
Better,BETTER,Comparison,,
|
||||
Is,IS,Comparison,,
|
||||
Like,LIKE,Comparison,,
|
||||
Too,TOO,Comparison,,
|
||||
Worse,WORSE,Comparison,,
|
||||
Baby,BABY,Compliments and insults (adjectives),,
|
||||
Bad,BAD,Compliments and insults (adjectives),,
|
||||
Beautiful ,BEAUTIFUL,Compliments and insults (adjectives),,
|
||||
Big,BIG,Compliments and insults (adjectives),,
|
||||
Clever,CLEVER,Compliments and insults (adjectives),,
|
||||
Cute,CUTE,Compliments and insults (adjectives),,
|
||||
Dirty,DIRTY,Compliments and insults (adjectives),,
|
||||
Fat,FAT,Compliments and insults (adjectives),,
|
||||
Food,FOOD,Compliments and insults (adjectives),,
|
||||
Good,GOOD,Compliments and insults (adjectives),,
|
||||
Gorgeous ,GORGEOUS,Compliments and insults (adjectives),,
|
||||
Hairy,HAIRY,Compliments and insults (adjectives),,
|
||||
Idea,IDEA,Compliments and insults (adjectives),,
|
||||
Little,LITTLE,Compliments and insults (adjectives),,
|
||||
Naughty,NAUGHTY,Compliments and insults (adjectives),,
|
||||
Old,OLD,Compliments and insults (adjectives),,
|
||||
Pretty,PRETTY,Compliments and insults (adjectives),,
|
||||
Stinky,STINKY,Compliments and insults (adjectives),,
|
||||
Young,YOUNG,Compliments and insults (adjectives),,
|
||||
Choose ... or ...,CHOOSE_..._OR_...,Emotional state,,
|
||||
Comfy,COMFY,Emotional state,,
|
||||
Energetic,ENERGETIC,Emotional state,,
|
||||
Excited,EXCITED,Emotional state,,
|
||||
Favourite,FAVOURITE,Emotional state,,
|
||||
Gross,GROSS,Emotional state,,
|
||||
Happy,HAPPY,Emotional state,,
|
||||
Help,HELP,Emotional state,,
|
||||
Hungry,HUNGRY,Emotional state,,
|
||||
Hurt / that hurts,HURT_/_THAT_HURTS,Emotional state,,
|
||||
Itch,ITCH,Emotional state,,
|
||||
Like,LIKE,Emotional state,,
|
||||
Limping,LIMPING,Emotional state,,
|
||||
Love,LOVE,Emotional state,,
|
||||
Ouch,OUCH,Emotional state,,
|
||||
Poorly,POORLY,Emotional state,,
|
||||
Sad,SAD,Emotional state,,
|
||||
Smell(s),SMELL(S),Emotional state,Wofting in front of nose with hand (stinky) action,
|
||||
Tasty,TASTY,Emotional state,,
|
||||
Thirsty,THIRSTY,Emotional state,,
|
||||
Tired,TIRED,Emotional state,,
|
||||
Want,WANT,Emotional state,,
|
||||
Bright,BRIGHT,Environment,,
|
||||
Cold,COLD,Environment,,
|
||||
Crowded,CROWDED,Environment,,
|
||||
Danger,DANGER,Environment,,
|
||||
Dark,DARK,Environment,,
|
||||
Empty,EMPTY,Environment,,
|
||||
Hot,HOT,Environment,,
|
||||
Lightning,LIGHTNING,Environment,,
|
||||
Rainy,RAINY,Environment,,
|
||||
Safe,SAFE,Environment,,
|
||||
Shade,SHADE,Environment,,
|
||||
Snow,SNOW,Environment,,
|
||||
Storm,STORM,Environment,,
|
||||
Sunshine,SUNSHINE,Environment,,
|
||||
Thunder,THUNDER,Environment,,
|
||||
Weather,WEATHER,Environment,,
|
||||
Wet,WET,Environment,,
|
||||
Be quick,BE_QUICK,Essential needs,Pointing,
|
||||
Brush,BRUSH,Essential needs,Show her the brush,
|
||||
Kisses,KISSES,Essential needs,Blow kiss,
|
||||
Medicine,MEDICINE,Essential needs,,
|
||||
Gently,GENTLY,Impulse Control,,
|
||||
Leave (it),LEAVE_(IT),Impulse Control,Palm up towards dog,
|
||||
Bed,BED,Location,Pointing,
|
||||
Bedroom,BEDROOM,Location,,
|
||||
Car,CAR,Location,,
|
||||
Downstairs ,DOWNSTAIRS,Location,Pointing,
|
||||
Go far away,GO_FAR_AWAY,Location,Pointing,
|
||||
Go over there,GO_OVER_THERE,Location,Pointing,
|
||||
Grass,GRASS,Location,,
|
||||
Hedge,HEDGE,Location,,
|
||||
Here / There,HERE_/_THERE,Location,Pointing,
|
||||
Home,HOME,Location,Hands above head into home symbol,
|
||||
Kitchen,KITCHEN,Location,,
|
||||
Lounge,LOUNGE,Location,,
|
||||
Off,OFF,Location,Swiping motion of arm from pointing at dog to area they should move to ,
|
||||
Office,OFFICE,Location,,
|
||||
On,ON,Location,,
|
||||
Outside,OUTSIDE,Location,Pointing,TRUE
|
||||
Park,PARK,Location,,
|
||||
Pointing directions,POINTING_DIRECTIONS,Location,Pointing,
|
||||
River,RIVER,Location,,
|
||||
Road,ROAD,Location,,
|
||||
Room,ROOM,Location,,
|
||||
This way / that way,THIS_WAY_/_THAT_WAY,Location,Pointing,
|
||||
Toilet,TOILET,Location,,
|
||||
Tree,TREE,Location,,
|
||||
Upstairs ,UPSTAIRS,Location,Pointing,
|
||||
Vets,VETS,Location,,
|
||||
Excuse me,EXCUSE_ME,Manners,Point to where you want to go,
|
||||
Son of a bitch,SON_OF_A_BITCH,Manners,,
|
||||
Sorry,SORRY,Manners,,
|
||||
Thank you,THANK_YOU,Manners,,
|
||||
Carrot,CARROT,Mealtime,,
|
||||
Cheese,CHEESE,Mealtime,,
|
||||
"Dinner, breakfast?","DINNER,_BREAKFAST?",Mealtime,,
|
||||
Eat (it),EAT_(IT),Mealtime,Pointing,
|
||||
Full (of food),FULL_(OF_FOOD),Mealtime,,
|
||||
Meat,MEAT,Mealtime,,
|
||||
Nutrients,NUTRIENTS,Mealtime,,
|
||||
Treat,TREAT,Mealtime,,TRUE
|
||||
Water,WATER,Mealtime,,
|
||||
Centre ,CENTRE,Party Trick,Separate legs wider than shoulders and point to clung,
|
||||
Crawl ,CRAWL,Party Trick,,
|
||||
Meerkat,MEERKAT,Party Trick,,
|
||||
Roll Over ,ROLL_OVER,Party Trick,,
|
||||
Round,ROUND,Party Trick,,
|
||||
Touch ,TOUCH,Party Trick,,
|
||||
Twirl,TWIRL,Party Trick,,
|
||||
Athena,ATHENA,People,,
|
||||
Dog,DOG,People,,
|
||||
Egg,EGG,People,,
|
||||
Friend,FRIEND,People,,
|
||||
Girl,GIRL,People,,
|
||||
Hannah,HANNAH,People,,
|
||||
Human,HUMAN,People,,
|
||||
Molly / whistle,MOLLY_/_WHISTLE,People,,
|
||||
Stranger,STRANGER,People,,
|
||||
Teddy,TEDDY,People,,
|
||||
Drop (it),DROP_(IT),Play,,
|
||||
Fetch,FETCH,Play,Pointing,
|
||||
Found,FOUND,Play,,
|
||||
Give (it),GIVE_(IT),Play,Present hand close to your body with palm facing upwards,
|
||||
Lost,LOST,Play,,
|
||||
Pillow,PILLOW,Play,,
|
||||
Play,PLAY,Play,,
|
||||
Squeaky (toy),SQUEAKY_(TOY),Play,,
|
||||
Stick,STICK,Play,,
|
||||
Toy,TOY,Play,,
|
||||
Back up / off,BACK_UP_/_OFF,Position,Hand facing down with alternating between fingers pointing to floor then fingers flat with hand,
|
||||
Backwards,BACKWARDS,Position,,
|
||||
Fast,FAST,Position,,
|
||||
Forwards,FORWARDS,Position,,
|
||||
Go in(side),GO_IN(SIDE),Position,Pointing,
|
||||
Go lie down over there,GO_LIE_DOWN_OVER_THERE,Position,Pointing,
|
||||
In,IN,Position,Pointing,
|
||||
Jump,JUMP,Position,Point finger upwards,
|
||||
Left,LEFT,Position,,
|
||||
Move,MOVE,Position,,
|
||||
Out,OUT,Position,,
|
||||
Right,RIGHT,Position,,
|
||||
Slow,SLOW,Position,,
|
||||
Up,UP,Position,Raise hand upwards with palm facing upwards,
|
||||
How,HOW,Questions,,
|
||||
No,NO,Questions,,
|
||||
What,WHAT,Questions,,
|
||||
When,WHEN,Questions,,
|
||||
Where,WHERE,Questions,,
|
||||
Who,WHO,Questions,,
|
||||
Why,WHY,Questions,,
|
||||
Yes,YES,Questions,,
|
||||
Attack,ATTACK,Service,,
|
||||
After,AFTER,Time and scheduling,,
|
||||
Before,BEFORE,Time and scheduling,,
|
||||
Before,BEFORE,Time and scheduling,,
|
||||
First,FIRST,Time and scheduling,,
|
||||
Last,LAST,Time and scheduling,,
|
||||
Later,LATER,Time and scheduling,,
|
||||
Next,NEXT,Time and scheduling,,
|
||||
Now,NOW,Time and scheduling,,
|
||||
Ready,READY,Time and scheduling,,
|
||||
Soon,SOON,Time and scheduling,,
|
||||
Then,THEN,Time and scheduling,,
|
||||
All Done ,ALL_DONE,Utility,,
|
||||
Collar,COLLAR,Utility,,
|
||||
Dry you off,DRY_YOU_OFF,Utility,,
|
||||
Number 0,NUMBER_0,Utility,,
|
||||
Number 1,NUMBER_1,Utility,,
|
||||
Number 2,NUMBER_2,Utility,,
|
||||
Number 3,NUMBER_3,Utility,,
|
||||
Piece,PIECE,Utility,,
|
||||
Press,PRESS,Utility,Point to button,
|
||||
Shake,SHAKE,Utility,Mimic dog shaking action,
|
||||
Speak,SPEAK,Utility,Dog barking action with hand,
|
||||
|
BIN
static/docs/Kitchen Stock Take.xlsx
Normal file
BIN
static/docs/Kitchen Stock Take.xlsx
Normal file
Binary file not shown.
BIN
static/docs/Logo.png
Normal file
BIN
static/docs/Logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
static/docs/PARTS ERP.xlsx
Normal file
BIN
static/docs/PARTS ERP.xlsx
Normal file
Binary file not shown.
88
static/docs/example abstract base class.py
Normal file
88
static/docs/example abstract base class.py
Normal file
@@ -0,0 +1,88 @@
|
||||
from abc import abstractmethod
|
||||
import types
|
||||
|
||||
class AbstractBaseClass:
|
||||
def __init_subclass__(cls, **kwargs):
|
||||
super().__init_subclass__(**kwargs)
|
||||
for name, value in vars(AbstractBaseClass).items():
|
||||
if getattr(value, "__isabstractmethod__", False):
|
||||
if name not in cls.__dict__:
|
||||
raise TypeError(f"Can't instantiate class {cls.__name__} "
|
||||
f"without implementation of abstract method {name}")
|
||||
subclass_value = cls.__dict__[name]
|
||||
if (isinstance(value, (staticmethod, classmethod)) and
|
||||
not isinstance(subclass_value, type(value))):
|
||||
raise TypeError(f"Abstract {type(value).__name__} {name} in {cls.__name__} "
|
||||
f"must be implemented as a {type(value).__name__}")
|
||||
|
||||
def __new__(cls, *args, **kwargs):
|
||||
if cls is AbstractBaseClass:
|
||||
raise TypeError("Can't instantiate abstract class AbstractBaseClass directly")
|
||||
return super().__new__(cls)
|
||||
|
||||
@abstractmethod
|
||||
def instance_method(self):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
@abstractmethod
|
||||
def class_method(cls):
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
@abstractmethod
|
||||
def static_method():
|
||||
pass
|
||||
|
||||
class ConcreteClass(AbstractBaseClass):
|
||||
def instance_method(self):
|
||||
return "Implemented instance method"
|
||||
|
||||
@classmethod
|
||||
def class_method(cls):
|
||||
return "Implemented class method"
|
||||
|
||||
@staticmethod
|
||||
def static_method():
|
||||
return "Implemented static method"
|
||||
|
||||
class IncompleteClass(AbstractBaseClass):
|
||||
def instance_method(self):
|
||||
return "Only implemented instance method"
|
||||
# class_method and static_method are not implemented
|
||||
|
||||
class IncorrectImplementationClass(AbstractBaseClass):
|
||||
def instance_method(self):
|
||||
return "Implemented instance method"
|
||||
|
||||
@classmethod
|
||||
def class_method(cls):
|
||||
return "Implemented class method"
|
||||
|
||||
def static_method(self): # This should be a static method, not an instance method
|
||||
return "Incorrectly implemented static method"
|
||||
|
||||
# Usage
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
concrete = ConcreteClass()
|
||||
print(concrete.instance_method())
|
||||
print(ConcreteClass.class_method())
|
||||
print(ConcreteClass.static_method())
|
||||
except TypeError as e:
|
||||
print(f"Error with ConcreteClass: {e}")
|
||||
|
||||
try:
|
||||
IncompleteClass()
|
||||
except TypeError as e:
|
||||
print(f"Error with IncompleteClass: {e}")
|
||||
|
||||
try:
|
||||
IncorrectImplementationClass()
|
||||
except TypeError as e:
|
||||
print(f"Error with IncorrectImplementationClass: {e}")
|
||||
|
||||
try:
|
||||
AbstractBaseClass()
|
||||
except TypeError as e:
|
||||
print(f"Error with AbstractBaseClass: {e}")
|
||||
BIN
static/docs/generated-privacy-notice-general-business.docx
Normal file
BIN
static/docs/generated-privacy-notice-general-business.docx
Normal file
Binary file not shown.
BIN
static/docs/generated-privacy-notice-general-business.odt
Normal file
BIN
static/docs/generated-privacy-notice-general-business.odt
Normal file
Binary file not shown.
119
static/docs/naming conventions.txt
Normal file
119
static/docs/naming conventions.txt
Normal file
@@ -0,0 +1,119 @@
|
||||
Precision and Research Technology Systems Limited
|
||||
Naming Conventions
|
||||
|
||||
|
||||
Language: CSS
|
||||
File naming convention:
|
||||
kebab-case
|
||||
lowercase
|
||||
|
||||
|
||||
Language: HTML
|
||||
File naming convention:
|
||||
prefix with underscore for templates
|
||||
snake_case
|
||||
lowercase
|
||||
|
||||
|
||||
Language: JavaScript
|
||||
Variable naming convention:
|
||||
prefix with underscore for private variables
|
||||
camelCase for mutable variables
|
||||
uppercase with underscore spacing for constants
|
||||
top-down heirarchy of objects flows left to right
|
||||
suffix with type for type hinting
|
||||
Function naming convention:
|
||||
camelCase
|
||||
verb is first word
|
||||
top-down heirarchy of objects flows left to right
|
||||
suffix with type for type hinting
|
||||
Class naming convention:
|
||||
PascalCase (UpperCamelCase)
|
||||
singular noun or noun phrase
|
||||
File naming convention:
|
||||
kebab-case
|
||||
lowercase
|
||||
suffix with type for type hinting
|
||||
Folder naming convention:
|
||||
kebab-case
|
||||
lowercase
|
||||
|
||||
|
||||
Language: MySQL
|
||||
Database naming convention:
|
||||
snake_case
|
||||
lowercase
|
||||
Variable naming convention:
|
||||
lowercase and prefix with 'v_' for mutable variables
|
||||
uppercase and prefix with 'C_' for constants
|
||||
snake_case
|
||||
top-down heirarchy of objects flows left to right
|
||||
suffix with type for type hinting
|
||||
Function, Store Procedure, Trigger, and View naming convention:
|
||||
prefix with 'fn_' for functions
|
||||
prefix with 'vw_' for views
|
||||
prefix with 'p_' for stored procedures
|
||||
prefix with 'tri_' for triggers
|
||||
suffix with action then event timing for triggers
|
||||
lowercase
|
||||
snake_case
|
||||
verb is first word
|
||||
top-down heirarchy of objects flows left to right
|
||||
suffix with type for type hinting
|
||||
Table naming convention:
|
||||
prefix with project
|
||||
prefix with 'tmp' for temporary tables
|
||||
singular noun or noun phrase
|
||||
Upper_Snake_Case
|
||||
Column naming convention:
|
||||
prefix with project
|
||||
prefix with 'idx_' for indices
|
||||
singular noun or noun phrase
|
||||
snake_case
|
||||
lowercase
|
||||
Constraint naming convention:
|
||||
prefix with 'pk_' for primary keys
|
||||
prefix with 'fk_' for foreign keys
|
||||
prefix with 'chk_' for check
|
||||
singular noun or noun phrase
|
||||
snake_case
|
||||
lowercase
|
||||
File naming convention:
|
||||
snake_case
|
||||
lowercase
|
||||
suffix with type for type hinting
|
||||
Folder naming convention:
|
||||
kebab-case
|
||||
lowercase
|
||||
|
||||
|
||||
Language: Python
|
||||
Variable naming convention:
|
||||
prefix with underscore for private variables
|
||||
prefix with double underscore for private variables that are not inherited
|
||||
lowercase for mutable variables
|
||||
uppercase for constants
|
||||
snake_case
|
||||
top-down heirarchy of objects flows left to right
|
||||
suffix with type for type hinting
|
||||
Function naming convention:
|
||||
lowercase
|
||||
snake_case
|
||||
verb is first word
|
||||
top-down heirarchy of objects flows left to right
|
||||
suffix with type for type hinting
|
||||
Class naming convention:
|
||||
suffix with 'Base' for base classes
|
||||
prefix with 'Abstract' for abstract classes
|
||||
prefix with 'Abstract' for abstract classes
|
||||
PascalCase (UpperCamelCase)
|
||||
singular noun or noun phrase
|
||||
File naming convention:
|
||||
snake_case
|
||||
lowercase
|
||||
suffix with type for type hinting
|
||||
Folder naming convention:
|
||||
snake_case
|
||||
lowercase
|
||||
|
||||
|
||||
124
static/docs/server.py
Normal file
124
static/docs/server.py
Normal file
@@ -0,0 +1,124 @@
|
||||
#! /usr/bin/env python3.6
|
||||
|
||||
"""
|
||||
server.py
|
||||
Stripe Sample.
|
||||
Python 3.6 or newer required.
|
||||
"""
|
||||
|
||||
import stripe
|
||||
import json
|
||||
import os
|
||||
|
||||
from flask import Flask, render_template, jsonify, request, send_from_directory, redirect
|
||||
from dotenv import load_dotenv, find_dotenv
|
||||
|
||||
# Setup Stripe python client library.
|
||||
load_dotenv(find_dotenv())
|
||||
|
||||
# Ensure environment variables are set.
|
||||
price = os.getenv('PRICE')
|
||||
if price is None or price == 'price_12345' or price == '':
|
||||
print('You must set a Price ID in .env. Please see the README.')
|
||||
exit(0)
|
||||
|
||||
# For sample support and debugging, not required for production:
|
||||
stripe.set_app_info(
|
||||
'stripe-samples/checkout-one-time-payments',
|
||||
version='0.0.1',
|
||||
url='https://github.com/stripe-samples/checkout-one-time-payments')
|
||||
|
||||
stripe.api_version = '2020-08-27'
|
||||
stripe.api_key = os.getenv('STRIPE_KEY_SECRET')
|
||||
|
||||
static_dir = str(os.path.abspath(os.path.join(
|
||||
__file__, "..", os.getenv("STATIC_DIR"))))
|
||||
app = Flask(__name__, static_folder=static_dir,
|
||||
static_url_path="", template_folder=static_dir)
|
||||
|
||||
|
||||
@app.route('/', methods=['GET'])
|
||||
def get_example():
|
||||
return render_template('index.html')
|
||||
|
||||
|
||||
@app.route('/config', methods=['GET'])
|
||||
def get_publishable_key():
|
||||
price = stripe.Price.retrieve(os.getenv('PRICE'))
|
||||
return jsonify({
|
||||
'publicKey': os.getenv('STRIPE_PUBLISHABLE_KEY'),
|
||||
'unitAmount': price['unit_amount'],
|
||||
'currency': price['currency']
|
||||
})
|
||||
|
||||
# Fetch the Checkout Session to display the JSON result on the success page
|
||||
@app.route('/checkout-session', methods=['GET'])
|
||||
def get_checkout_session():
|
||||
id = request.args.get('sessionId')
|
||||
checkout_session = stripe.checkout.Session.retrieve(id)
|
||||
return jsonify(checkout_session)
|
||||
|
||||
|
||||
@app.route('/create-checkout-session', methods=['POST'])
|
||||
def create_checkout_session():
|
||||
quantity = request.form.get('quantity', 1)
|
||||
domain_url = os.getenv('DOMAIN')
|
||||
|
||||
try:
|
||||
# Create new Checkout Session for the order
|
||||
# Other optional params include:
|
||||
# [billing_address_collection] - to display billing address details on the page
|
||||
# [customer] - if you have an existing Stripe Customer ID
|
||||
# [payment_intent_data] - lets capture the payment later
|
||||
# [customer_email] - lets you prefill the email input in the form
|
||||
# [automatic_tax] - to automatically calculate sales tax, VAT and GST in the checkout page
|
||||
# For full details see https://stripe.com/docs/api/checkout/sessions/create
|
||||
|
||||
# ?session_id={CHECKOUT_SESSION_ID} means the redirect will have the session ID set as a query param
|
||||
checkout_session = stripe.checkout.Session.create(
|
||||
success_url=domain_url + '/success.html?session_id={CHECKOUT_SESSION_ID}',
|
||||
cancel_url=domain_url + '/canceled.html',
|
||||
mode='payment',
|
||||
# automatic_tax={'enabled': True},
|
||||
line_items=[{
|
||||
'price': os.getenv('PRICE'),
|
||||
'quantity': quantity,
|
||||
}]
|
||||
)
|
||||
return redirect(checkout_session.url, code=303)
|
||||
except Exception as e:
|
||||
return jsonify(error=str(e)), 403
|
||||
|
||||
|
||||
@app.route('/webhook', methods=['POST'])
|
||||
def webhook_received():
|
||||
# You can use webhooks to receive information about asynchronous payment events.
|
||||
# For more about our webhook events check out https://stripe.com/docs/webhooks.
|
||||
webhook_secret = os.getenv('STRIPE_WEBHOOK_SECRET')
|
||||
request_data = json.loads(request.data)
|
||||
|
||||
if webhook_secret:
|
||||
# Retrieve the event by verifying the signature using the raw body and secret if webhook signing is configured.
|
||||
signature = request.headers.get('stripe-signature')
|
||||
try:
|
||||
event = stripe.Webhook.construct_event(
|
||||
payload=request.data, sig_header=signature, secret=webhook_secret)
|
||||
data = event['data']
|
||||
except Exception as e:
|
||||
return e
|
||||
# Get the type of webhook event sent - used to check the status of PaymentIntents.
|
||||
event_type = event['type']
|
||||
else:
|
||||
data = request_data['data']
|
||||
event_type = request_data['type']
|
||||
data_object = data['object']
|
||||
|
||||
print('event ' + event_type)
|
||||
|
||||
if event_type == 'checkout.session.completed':
|
||||
print('🔔 Payment succeeded!')
|
||||
|
||||
return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_SUCCESS})
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(port=4242, debug=True)
|
||||
63
static/docs/template webpage.html
Normal file
63
static/docs/template webpage.html
Normal file
@@ -0,0 +1,63 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link href="../css/copiedstyles.css" rel="stylesheet" type="text/css"/>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>My Website</h1>
|
||||
<p>Resize the browser window to see the effect.</p>
|
||||
</div>
|
||||
|
||||
<div class="topnav">
|
||||
<a href="#">Link</a>
|
||||
<a href="#">Link</a>
|
||||
<a href="#">Link</a>
|
||||
<a href="#" style="float:right">Link</a>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="leftcolumn">
|
||||
<div class="card">
|
||||
<h2>TITLE HEADING</h2>
|
||||
<h5>Title description, Dec 7, 2017</h5>
|
||||
<div class="fakeimg" style="height:200px;">Image</div>
|
||||
<p>Some text..</p>
|
||||
<p>Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>TITLE HEADING</h2>
|
||||
<h5>Title description, Sep 2, 2017</h5>
|
||||
<div class="fakeimg" style="height:200px;">Image</div>
|
||||
<p>Some text..</p>
|
||||
<p>Sunt in culpa qui officia deserunt mollit anim id est laborum consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rightcolumn">
|
||||
<div class="card">
|
||||
<h2>About Me</h2>
|
||||
<div class="fakeimg" style="height:100px;">Image</div>
|
||||
<p>Some text about me in culpa qui officia deserunt mollit anim..</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Popular Post</h3>
|
||||
<div class="fakeimg"><p>Image</p></div>
|
||||
<div class="fakeimg"><p>Image</p></div>
|
||||
<div class="fakeimg"><p>Image</p></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Follow Me</h3>
|
||||
<p>Some text..</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<h2>Footer</h2>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
1
static/docs/test.py
Normal file
1
static/docs/test.py
Normal file
@@ -0,0 +1 @@
|
||||
print(not None)
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,60 @@
|
||||
<!doctype HTML><html lang="en"><head><title>public-website-of-precision-and-research-technology-systems-limited-report.html</title><meta charset="utf-8"><style>
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
table,
|
||||
td,
|
||||
th {
|
||||
border: 1px solid #3b3b3b;
|
||||
}
|
||||
td:not(:last-child),
|
||||
th {
|
||||
padding: 1em;
|
||||
vertical-align: top;
|
||||
text-align: left;
|
||||
}
|
||||
td:not([class]):last-child {
|
||||
padding: 0 1em;
|
||||
}
|
||||
</style></head><body><div><main> <h1>Report</h1> <div><h2>About the Evaluation</h2> <dl><dt>Report Creator </dt><dd>Lord Edward Middleton-Smith </dd><dt>Evaluation Commissioner </dt><dd>Lord Edward Middleton-Smith </dd><dt>Evaluation date </dt><dd>Tue Apr 30 2024</dd></dl> </div> <div><h2>Executive Summary</h2> <div><span>Not provided</span></div> </div> <div><h2>Scope of the Evaluation</h2> <dl><dt>Website name </dt><dd>Public Website of Precision And Research Technology Systems Limited </dd><dt>Scope of the website </dt><dd>'All web content of the public mobile and desktop website of Precision And Research Technology Systems Limited located at https://www.partsltd.co.uk/ </dd><dt>WCAG Version </dt><dd>2.2 </dd><dt>Conformance target </dt><dd>AA </dd><dt>Accessibility support baseline </dt><dd>Google Chrome with NVDA, FireFox with NVDA, Ecosia mobile browser with TalkBack. </dd><dt>Additional evaluation requirements </dt><dd><span>Not provided</span></dd></dl> </div> <h2>Detailed Audit Results</h2> <h3>Summary</h3> <p>Reported on 55 of 55 WCAG 2.2 AA
|
||||
Success Criteria.</p> <ul><li><span>41</span> <span>Passed</span></li><li><span>0</span> <span>Failed</span></li><li><span>0</span> <span>Cannot tell</span></li><li><span>14</span> <span>Not present</span></li><li><span>0</span> <span>Not checked</span></li></ul> <h3>All Results</h3> <h4>1 Perceivable</h4> <h5 id="guideline-11">1.1 Text Alternatives</h5> <table aria-labelledby="guideline-11"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-111">1.1.1: Non-text Content</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>All user input controls have descriptive names and v2 Google reCaptcha used with text label to identify to user that they must check the box to prove they are not a bot.</p>
|
||||
</td> </tr></tbody> </table><h5 id="guideline-12">1.2 Time-based Media</h5> <table aria-labelledby="guideline-12"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-121">1.2.1: Audio-only and Video-only (Prerecorded)</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-122">1.2.2: Captions (Prerecorded)</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-123">1.2.3: Audio Description or Media Alternative (Prerecorded)</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-124">1.2.4: Captions (Live)</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-125">1.2.5: Audio Description (Prerecorded)</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr></tbody> </table><h5 id="guideline-13">1.3 Adaptable</h5> <table aria-labelledby="guideline-13"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-131">1.3.1: Info and Relationships</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Elements change in response to zoom and viewport dimensions properly. Aria-label provided for all images.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-132">1.3.2: Meaningful Sequence</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Flow layout keeps associated sections together but allows dynamic structure depending on size of elements relative to screen.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-133">1.3.3: Sensory Characteristics</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Content reads properly as raw text in default order. Aria-label provided for all images and names for all form input components.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-134">1.3.4: Orientation</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Orientation of content is not locked.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-135">1.3.5: Identify Input Purpose</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Appropriate visible labels used alongside name attributes for form input elements.</p>
|
||||
</td> </tr></tbody> </table><h5 id="guideline-14">1.4 Distinguishable</h5> <table aria-labelledby="guideline-14"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-141">1.4.1: Use of Color</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Colour only used to convey meaning for text hyperlinks, which have alt-text attributes to identify their purpose and presence.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-142">1.4.2: Audio Control</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-143">1.4.3: Contrast (Minimum)</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Webpage text contrast assessed with tool at this website: <a href="https://accessibleweb.com/color-contrast-checker/">https://accessibleweb.com/color-contrast-checker/</a></p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-144">1.4.4: Resize text</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>All webpages can be scaled to up to 500% while maintaining structure and visible components.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-145">1.4.5: Images of Text</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-1410">1.4.10: Reflow</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Flex layout forces only vertical scrolling at required viewport dimensions.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-1411">1.4.11: Non-text Contrast</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Strong borders used for form input components.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-1412">1.4.12: Text Spacing</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Content becomes vertically scrollable as necessary.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-1413">1.4.13: Content on Hover or Focus</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Hamburger menu button for navigation overlay used. The button remains stationary with no elements above it, throughout use of navigation.</p>
|
||||
</td> </tr></tbody> </table><h4>2 Operable</h4> <h5 id="guideline-21">2.1 Keyboard Accessible</h5> <table aria-labelledby="guideline-21"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-211">2.1.1: Keyboard</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Tab indices set to enable correct transition around page by keyboard. Other keyboard shortcuts not changed.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-212">2.1.2: No Keyboard Trap</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Tab indices set to enable correct transition around page by keyboard.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-214">2.1.4: Character Key Shortcuts</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Tab indices set to enable correct transition around page by keyboard. Other keyboard shortcuts not changed, and can be set by user's device settings.</p>
|
||||
</td> </tr></tbody> </table><h5 id="guideline-22">2.2 Enough Time</h5> <table aria-labelledby="guideline-22"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-221">2.2.1: Timing Adjustable</th> <td> <p><span>Result:</span> Not present</p> </td> <td> <p>Observations:</p> <p>No session time limits imposed on user.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-222">2.2.2: Pause, Stop, Hide</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr></tbody> </table><h5 id="guideline-23">2.3 Seizures and Physical Reactions</h5> <table aria-labelledby="guideline-23"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-231">2.3.1: Three Flashes or Below Threshold</th> <td> <p><span>Result:</span> Passed</p> </td> <td> </td> </tr></tbody> </table><h5 id="guideline-24">2.4 Navigable</h5> <table aria-labelledby="guideline-24"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-241">2.4.1: Bypass Blocks</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-242">2.4.2: Page Titled</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Descriptive titles used on all webpages.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-243">2.4.3: Focus Order</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Keyboard tab indices set for logical navigation around pages.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-244">2.4.4: Link Purpose (In Context)</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Descriptive aria-label provided for all text hyperlinks.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-245">2.4.5: Multiple Ways</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Navigation on all webpages and company logo links to home page.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-246">2.4.6: Headings and Labels</th> <td> <p><span>Result:</span> Passed</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-247">2.4.7: Focus Visible</th> <td> <p><span>Result:</span> Passed</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-2411">2.4.11: Focus Not Obscured (Minimum)</th> <td> <p><span>Result:</span> Passed</p> </td> <td> </td> </tr></tbody> </table><h5 id="guideline-25">2.5 Input Modalities</h5> <table aria-labelledby="guideline-25"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-251">2.5.1: Pointer Gestures</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-252">2.5.2: Pointer Cancellation</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Up event used to trigger events across website.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-253">2.5.3: Label in Name</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Input label for attributes used to associate with input elements.
|
||||
Aria-label attributes used for text hyperlinks.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-254">2.5.4: Motion Actuation</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-257">2.5.7: Dragging Movements</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-258">2.5.8: Target Size (Minimum)</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Minimum control dimension is 27 CSS pixels.</p>
|
||||
</td> </tr></tbody> </table><h4>3 Understandable</h4> <h5 id="guideline-31">3.1 Readable</h5> <table aria-labelledby="guideline-31"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-311">3.1.1: Language of Page</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>English - Great Britain on all pages.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-312">3.1.2: Language of Parts</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>No language changes across website.</p>
|
||||
</td> </tr></tbody> </table><h5 id="guideline-32">3.2 Predictable</h5> <table aria-labelledby="guideline-32"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-321">3.2.1: On Focus</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>No change of context initiated except by button click to navigate to submit a form and/or navigate to a new page.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-322">3.2.2: On Input</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>No change of context initiated except by button click to navigate to submit a form and/or navigate to a new page.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-323">3.2.3: Consistent Navigation</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Navigation component and mechanisms shared across all pages.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-324">3.2.4: Consistent Identification</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Classes and CSS styles used to group collections of elements by purpose and functionality.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-326">3.2.6: Consistent Help</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Contact us button provided in a consistent format.</p>
|
||||
</td> </tr></tbody> </table><h5 id="guideline-33">3.3 Input Assistance</h5> <table aria-labelledby="guideline-33"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-331">3.3.1: Error Identification</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Each input element has an associated error display label which are triggered when input validation is not met.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-332">3.3.2: Labels or Instructions</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Each user input has a descriptive label.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-333">3.3.3: Error Suggestion</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Text description of incomplete required fields is provided. Description of what caused error is issued when it involves simple regular expression validation.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-334">3.3.4: Error Prevention (Legal, Financial, Data)</th> <td> <p><span>Result:</span> Not present</p> </td> <td> </td> </tr><tr><th scope="row" id="criterion-337">3.3.7: Redundant Entry</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>No redundant data entry required. User's browser cache stores form data for rapid re-entry on crash or any other occasion.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-338">3.3.8: Accessible Authentication (Minimum)</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Alternative sign in methods provided, including recovery by code by phone and email.</p>
|
||||
</td> </tr></tbody> </table><h4>4 Robust</h4> <h5 id="guideline-41">4.1 Compatible</h5> <table aria-labelledby="guideline-41"><tbody><tr><th scope="col">Success Criterion</th> <th scope="col">Result</th> <th scope="col">Observations</th> </tr> <tr><th scope="row" id="criterion-412">4.1.2: Name, Role, Value</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Aria-label attribute maintained for all images and text hyperlinks. Label for attribute used to associate input elements with descriptive labels.</p>
|
||||
</td> </tr><tr><th scope="row" id="criterion-413">4.1.3: Status Messages</th> <td> <p><span>Result:</span> Passed</p> </td> <td> <p>Observations:</p> <p>Success feedback provided on form submission, with descriptive errors on failure.</p>
|
||||
</td> </tr></tbody> </table> <h2>Sample of Audited Web Pages</h2> <ol><li><span>Home</span> - <span>https://www.partsltd.co.uk/</span> </li><li><span>Contact us</span> - <span>https://www.partsltd.co.uk/contact</span> </li><li><span>Services</span> - <span>https://www.partsltd.co.uk/services</span> </li><li><span></span> - <span></span> </li></ol> <h2>Web Technology</h2> <p>HTML,CSS,JavaScript,python Flask</p> <h2>Recording of Evaluation Specifics</h2> <p>Not provided</p> </main></div></body></html>
|
||||
Reference in New Issue
Block a user