removed unneeded ref to font-awesome, added compression, ttl for static files, several small cleanups on labels, etc. for lighthouse improvements
This commit is contained in:
4
README
4
README
@@ -46,10 +46,6 @@ upstream packages...
|
||||
wget https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.contextMenu.min.js.map
|
||||
wget https://cdnjs.cloudflare.com/ajax/libs/jquery-contextmenu/2.9.2/jquery.ui.position.min.js
|
||||
|
||||
# font-awesome
|
||||
### browse to https://fontawesome.com/download, grab zip, unzip it into static/upstream
|
||||
# in fa-stack hand change width:2.5em to width:2em
|
||||
|
||||
### I tried to update via pip3, with this:
|
||||
sudo apt-get install libcairo2-dev libjpeg-dev libgif-dev libgirepository1.0-dev libcups2-dev
|
||||
pip3 list | tail -n +3 | grep -v mysqlclient | grep -v duplicity | grep -v gpg | awk ' { print $1 } ' | xargs pip3 install --upgrade
|
||||
|
||||
11
TODO
11
TODO
@@ -1,5 +1,11 @@
|
||||
## GENERAL
|
||||
* face locations -- START FORM SCRATCH for prod so all images have face_locn data
|
||||
* get build process to create a random string for secret for PROD, otherwise use builtin for dev
|
||||
|
||||
* lighthouse -> leverage this for cache control for static...
|
||||
https://www.kite.com/python/docs/flask.Flask.get_send_file_max_age
|
||||
|
||||
* comment your code
|
||||
* html files?
|
||||
|
||||
* per file you could select an unknown face and add it as a ref img to an existing person, or make a new person and attach?
|
||||
* from menu, we could try to get smart/fancy... say find face with largest size, check it vs. other faces, if it matches more than say 10? we offer it up as a required ref img, then cut that face (with margin) out and use it is a new ref image / person
|
||||
@@ -7,8 +13,6 @@
|
||||
https://www.pyimagesearch.com/2018/07/09/face-clustering-with-python/
|
||||
|
||||
* fix up logging in general
|
||||
* comment your code
|
||||
* html files?
|
||||
## DB
|
||||
* Dir can have date in the DB, so we can do Oldest/Newest dirs in Folder view
|
||||
|
||||
@@ -29,6 +33,7 @@
|
||||
Admin
|
||||
-> delete old jobs / auto delete jobs older than ???
|
||||
-> do I want to have admin roles/users?
|
||||
-> purge deleted files (and associated DB data)
|
||||
|
||||
### AI
|
||||
* faces per file (need a threshold for too many? OR
|
||||
|
||||
4
main.py
4
main.py
@@ -1,4 +1,5 @@
|
||||
from flask import Flask, render_template, request, redirect, jsonify, url_for, render_template_string
|
||||
from flask_compress import Compress
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
from flask_marshmallow import Marshmallow
|
||||
@@ -29,6 +30,7 @@ app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
|
||||
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
||||
app.config['ENV'] = os.environ['FLASK_ENV']
|
||||
app.config['SECRET_KEY'] = b'my_insecure_PA_token_with_random_2134876adsfjhlkasdf87'
|
||||
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 31536000
|
||||
|
||||
# ldap config vars: (the last one is required, or python ldap freaks out)
|
||||
app.config['LDAP_HOST'] = 'mara.ddp.net'
|
||||
@@ -48,6 +50,8 @@ login_manager = LoginManager(app) # Setup a Flask-Login Manager
|
||||
ldap_manager = LDAP3LoginManager(app) # Setup a LDAP3 Login Manager.
|
||||
login_manager.login_view = "login" # default login route, failed with url_for, so hard-coded
|
||||
|
||||
Compress(app)
|
||||
|
||||
################################# Now, import separated class files ###################################
|
||||
from ai import aistats
|
||||
from settings import Settings
|
||||
|
||||
@@ -16,3 +16,4 @@ pytz
|
||||
dlib
|
||||
face_recognition
|
||||
Werkzeug
|
||||
flask-compress
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
{% if not InDBox %}
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Photo Assistant</title>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
<!-- font awesome -->
|
||||
<link rel="stylesheet" href="{{ url_for( 'internal', filename='upstream/fontawesome-free-5.15.3-web/css/all.min.css' ) }}">
|
||||
<meta name="description" content="Photo Assistant">
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link rel="stylesheet" href="{{ url_for( 'internal', filename='upstream/bootstrap-5.0.2-dist/css/bootstrap.min.css' ) }}">
|
||||
|
||||
@@ -55,15 +55,16 @@
|
||||
<thead>
|
||||
<tr class="table-primary"><th>Active Jobs</th><th>Job Started</th><th>Progress</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<script>
|
||||
for(el in active_rows)
|
||||
document.write(active_rows[el])
|
||||
document.write( '<tr class="table-primary"><th>Completed Jobs</th><th>Job Started</th><th>Job Completed</th></tr>' )
|
||||
for(el in completed_rows)
|
||||
document.write(completed_rows[el])
|
||||
</script>
|
||||
<tbody id="job_tbl_body">
|
||||
</tbody>
|
||||
</table>
|
||||
</div class="container-fluid">
|
||||
|
||||
<script>
|
||||
for(el in active_rows)
|
||||
$('#job_tbl_body').append(active_rows[el])
|
||||
$('#job_tbl_body').append( '<tr class="table-primary"><th>Completed Jobs</th><th>Job Started</th><th>Job Completed</th></tr>' )
|
||||
for(el in completed_rows)
|
||||
$('#job_tbl_body').append(completed_rows[el])
|
||||
</script>
|
||||
{% endblock main_content %}
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
<html>
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Photo Assistant Login</title>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="Photo Assistant">
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link rel="stylesheet" href="{{ url_for( 'internal', filename='upstream/bootstrap-5.0.2-dist/css/bootstrap.min.css' ) }}">
|
||||
@@ -46,12 +50,12 @@
|
||||
<svg width="64" height="64" fill="currentColor"><use xlink:href="internal/icons.svg#pa_logo" /></svg> Photo Assistant Login</h3>
|
||||
<form class="" method="POST">
|
||||
<div class="input-group">
|
||||
<label labelfor="username" class="text-right input-group-text col-4 text-info">Username:</label>
|
||||
<input class="form-control" type="text" name="username"></input>
|
||||
<label for="username" class="text-right input-group-text col-4 text-info">Username:</label>
|
||||
<input class="form-control" type="text" id="username" name="username"></input>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<label labelfor="password" class="text-right input-group-text col-4 text-info">Password:</label>
|
||||
<input class="form-control col-8" type="password" name="password"></input>
|
||||
<label for="password" class="text-right input-group-text col-4 text-info">Password:</label>
|
||||
<input class="form-control col-8" type="password" id="password" name="password"></input>
|
||||
</div>
|
||||
|
||||
<div class="col-12 my-2 text-center">
|
||||
|
||||
Reference in New Issue
Block a user