Initial commit.

This commit is contained in:
2025-06-21 17:51:07 +01:00
commit 6fd3a23aa7
296 changed files with 29154 additions and 0 deletions

View 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,
1 Bath BATH Activities
2 Cuddle CUDDLE Activities
3 Dreaming DREAMING Activities
4 Exercise EXERCISE Activities
5 Go on then (go explore on walk) GO_ON_THEN_(GO_EXPLORE_ON_WALK) Activities Swing arm forwards towards the horizon
6 Good night (bedtime) GOOD_NIGHT_(BEDTIME) Activities
7 Panting PANTING Activities
8 Patrol PATROL Activities
9 Protect PROTECT Activities
10 Resting RESTING Activities
11 Rotate ROTATE Activities Point or push/pull to desired direction
12 Scratch SCRATCH Activities
13 Sleeping SLEEPING Activities
14 Stretching STRETCHING Activities
15 Take (it) TAKE_(IT) Activities
16 Tug TUG Activities
17 Wake up WAKE_UP Activities
18 Walk WALK Activities Walking legs with fingers or multiple firm, fast pats to the chest TRUE
19 Yawning YAWNING Activities
20 Come COME Basic Obedience Palm forwards, arm down and 20 degrees from torso
21 Down DOWN Basic Obedience Point to ground
22 Go GO Basic Obedience Point in direction
23 Okay OKAY Basic Obedience
24 Sit SIT Basic Obedience Bring closed fist to chin with elbow tucked against torso
25 Stay STAY Basic Obedience Push hand towards dog with only index finger extended and pointing upwards
26 Easy EASY Behaviour Modification
27 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
28 Noisy NOISY Behaviour Modification
29 Pull PULL Behaviour Modification
30 Push PUSH Behaviour Modification
31 Quiet QUIET Behaviour Modification Index finger to lips
32 Settle SETTLE Behaviour Modification
33 Back BACK Body parts
34 Belly BELLY Body parts
35 Ear EAR Body parts
36 Mouth MOUTH Body parts
37 Neck NECK Body parts
38 Nose NOSE Body parts
39 Paw PAW Body parts Present hand close to your body with palm facing upwards
40 Tail TAIL Body parts
41 Teeth TEETH Body parts
42 Harness HARNESS Clothing and equipment
43 Better BETTER Comparison
44 Is IS Comparison
45 Like LIKE Comparison
46 Too TOO Comparison
47 Worse WORSE Comparison
48 Baby BABY Compliments and insults (adjectives)
49 Bad BAD Compliments and insults (adjectives)
50 Beautiful BEAUTIFUL Compliments and insults (adjectives)
51 Big BIG Compliments and insults (adjectives)
52 Clever CLEVER Compliments and insults (adjectives)
53 Cute CUTE Compliments and insults (adjectives)
54 Dirty DIRTY Compliments and insults (adjectives)
55 Fat FAT Compliments and insults (adjectives)
56 Food FOOD Compliments and insults (adjectives)
57 Good GOOD Compliments and insults (adjectives)
58 Gorgeous GORGEOUS Compliments and insults (adjectives)
59 Hairy HAIRY Compliments and insults (adjectives)
60 Idea IDEA Compliments and insults (adjectives)
61 Little LITTLE Compliments and insults (adjectives)
62 Naughty NAUGHTY Compliments and insults (adjectives)
63 Old OLD Compliments and insults (adjectives)
64 Pretty PRETTY Compliments and insults (adjectives)
65 Stinky STINKY Compliments and insults (adjectives)
66 Young YOUNG Compliments and insults (adjectives)
67 Choose ... or ... CHOOSE_..._OR_... Emotional state
68 Comfy COMFY Emotional state
69 Energetic ENERGETIC Emotional state
70 Excited EXCITED Emotional state
71 Favourite FAVOURITE Emotional state
72 Gross GROSS Emotional state
73 Happy HAPPY Emotional state
74 Help HELP Emotional state
75 Hungry HUNGRY Emotional state
76 Hurt / that hurts HURT_/_THAT_HURTS Emotional state
77 Itch ITCH Emotional state
78 Like LIKE Emotional state
79 Limping LIMPING Emotional state
80 Love LOVE Emotional state
81 Ouch OUCH Emotional state
82 Poorly POORLY Emotional state
83 Sad SAD Emotional state
84 Smell(s) SMELL(S) Emotional state Wofting in front of nose with hand (stinky) action
85 Tasty TASTY Emotional state
86 Thirsty THIRSTY Emotional state
87 Tired TIRED Emotional state
88 Want WANT Emotional state
89 Bright BRIGHT Environment
90 Cold COLD Environment
91 Crowded CROWDED Environment
92 Danger DANGER Environment
93 Dark DARK Environment
94 Empty EMPTY Environment
95 Hot HOT Environment
96 Lightning LIGHTNING Environment
97 Rainy RAINY Environment
98 Safe SAFE Environment
99 Shade SHADE Environment
100 Snow SNOW Environment
101 Storm STORM Environment
102 Sunshine SUNSHINE Environment
103 Thunder THUNDER Environment
104 Weather WEATHER Environment
105 Wet WET Environment
106 Be quick BE_QUICK Essential needs Pointing
107 Brush BRUSH Essential needs Show her the brush
108 Kisses KISSES Essential needs Blow kiss
109 Medicine MEDICINE Essential needs
110 Gently GENTLY Impulse Control
111 Leave (it) LEAVE_(IT) Impulse Control Palm up towards dog
112 Bed BED Location Pointing
113 Bedroom BEDROOM Location
114 Car CAR Location
115 Downstairs DOWNSTAIRS Location Pointing
116 Go far away GO_FAR_AWAY Location Pointing
117 Go over there GO_OVER_THERE Location Pointing
118 Grass GRASS Location
119 Hedge HEDGE Location
120 Here / There HERE_/_THERE Location Pointing
121 Home HOME Location Hands above head into home symbol
122 Kitchen KITCHEN Location
123 Lounge LOUNGE Location
124 Off OFF Location Swiping motion of arm from pointing at dog to area they should move to
125 Office OFFICE Location
126 On ON Location
127 Outside OUTSIDE Location Pointing TRUE
128 Park PARK Location
129 Pointing directions POINTING_DIRECTIONS Location Pointing
130 River RIVER Location
131 Road ROAD Location
132 Room ROOM Location
133 This way / that way THIS_WAY_/_THAT_WAY Location Pointing
134 Toilet TOILET Location
135 Tree TREE Location
136 Upstairs UPSTAIRS Location Pointing
137 Vets VETS Location
138 Excuse me EXCUSE_ME Manners Point to where you want to go
139 Son of a bitch SON_OF_A_BITCH Manners
140 Sorry SORRY Manners
141 Thank you THANK_YOU Manners
142 Carrot CARROT Mealtime
143 Cheese CHEESE Mealtime
144 Dinner, breakfast? DINNER,_BREAKFAST? Mealtime
145 Eat (it) EAT_(IT) Mealtime Pointing
146 Full (of food) FULL_(OF_FOOD) Mealtime
147 Meat MEAT Mealtime
148 Nutrients NUTRIENTS Mealtime
149 Treat TREAT Mealtime TRUE
150 Water WATER Mealtime
151 Centre CENTRE Party Trick Separate legs wider than shoulders and point to clung
152 Crawl CRAWL Party Trick
153 Meerkat MEERKAT Party Trick
154 Roll Over ROLL_OVER Party Trick
155 Round ROUND Party Trick
156 Touch TOUCH Party Trick
157 Twirl TWIRL Party Trick
158 Athena ATHENA People
159 Dog DOG People
160 Egg EGG People
161 Friend FRIEND People
162 Girl GIRL People
163 Hannah HANNAH People
164 Human HUMAN People
165 Molly / whistle MOLLY_/_WHISTLE People
166 Stranger STRANGER People
167 Teddy TEDDY People
168 Drop (it) DROP_(IT) Play
169 Fetch FETCH Play Pointing
170 Found FOUND Play
171 Give (it) GIVE_(IT) Play Present hand close to your body with palm facing upwards
172 Lost LOST Play
173 Pillow PILLOW Play
174 Play PLAY Play
175 Squeaky (toy) SQUEAKY_(TOY) Play
176 Stick STICK Play
177 Toy TOY Play
178 Back up / off BACK_UP_/_OFF Position Hand facing down with alternating between fingers pointing to floor then fingers flat with hand
179 Backwards BACKWARDS Position
180 Fast FAST Position
181 Forwards FORWARDS Position
182 Go in(side) GO_IN(SIDE) Position Pointing
183 Go lie down over there GO_LIE_DOWN_OVER_THERE Position Pointing
184 In IN Position Pointing
185 Jump JUMP Position Point finger upwards
186 Left LEFT Position
187 Move MOVE Position
188 Out OUT Position
189 Right RIGHT Position
190 Slow SLOW Position
191 Up UP Position Raise hand upwards with palm facing upwards
192 How HOW Questions
193 No NO Questions
194 What WHAT Questions
195 When WHEN Questions
196 Where WHERE Questions
197 Who WHO Questions
198 Why WHY Questions
199 Yes YES Questions
200 Attack ATTACK Service
201 After AFTER Time and scheduling
202 Before BEFORE Time and scheduling
203 Before BEFORE Time and scheduling
204 First FIRST Time and scheduling
205 Last LAST Time and scheduling
206 Later LATER Time and scheduling
207 Next NEXT Time and scheduling
208 Now NOW Time and scheduling
209 Ready READY Time and scheduling
210 Soon SOON Time and scheduling
211 Then THEN Time and scheduling
212 All Done ALL_DONE Utility
213 Collar COLLAR Utility
214 Dry you off DRY_YOU_OFF Utility
215 Number 0 NUMBER_0 Utility
216 Number 1 NUMBER_1 Utility
217 Number 2 NUMBER_2 Utility
218 Number 3 NUMBER_3 Utility
219 Piece PIECE Utility
220 Press PRESS Utility Point to button
221 Shake SHAKE Utility Mimic dog shaking action
222 Speak SPEAK Utility Dog barking action with hand

Binary file not shown.

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

Binary file not shown.

View 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}")

View 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
View 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)

View 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
View File

@@ -0,0 +1 @@
print(not None)

File diff suppressed because one or more lines are too long

View File

@@ -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>