|
|
@ -2,22 +2,74 @@ import os |
|
|
|
|
|
|
|
import magic |
|
|
|
from distribusi.mappings import CODE_TYPES, FILE_TYPES, SUB_TYPES |
|
|
|
|
|
|
|
from models.distribusi_model import Distribusis |
|
|
|
from models.distribusi_file_model import DistribusiFiles |
|
|
|
from app import create_app, get_app, db |
|
|
|
from sqlalchemy.exc import ( |
|
|
|
DatabaseError, |
|
|
|
DataError, |
|
|
|
IntegrityError, |
|
|
|
InterfaceError, |
|
|
|
InvalidRequestError, |
|
|
|
) |
|
|
|
|
|
|
|
MIME_TYPE = magic.Magic(mime=True) |
|
|
|
|
|
|
|
|
|
|
|
def distribusi_file_with_type(full_path): |
|
|
|
def _distribusi_file_with_type(distribusi, full_path): |
|
|
|
mime = MIME_TYPE.from_file(full_path) |
|
|
|
type_, subtype = mime.split("/") |
|
|
|
if type_ in FILE_TYPES: |
|
|
|
print(f"distribusi file:{full_path} type:{type_}") |
|
|
|
_add_distribusi_file_to_db(distribusi, full_path, type_) |
|
|
|
|
|
|
|
def _get_distribusi_from_path(path): |
|
|
|
distribusi = Distribusis.query.filter_by(distribusiname=path).first() |
|
|
|
return distribusi |
|
|
|
|
|
|
|
def _add_distribusi_file_to_db(distribusi, full_path, type): |
|
|
|
app = get_app() |
|
|
|
print(f"adding file to database: {full_path} type: {type}") |
|
|
|
try: |
|
|
|
new_distribusi_file = DistribusiFiles( |
|
|
|
path=full_path, |
|
|
|
type=type, |
|
|
|
distribusi=distribusi.id, |
|
|
|
) |
|
|
|
db.session.add(new_distribusi_file) |
|
|
|
db.session.commit() |
|
|
|
return |
|
|
|
except InvalidRequestError: |
|
|
|
db.session.rollback() |
|
|
|
app.logger.error("Something went wrong!") |
|
|
|
except IntegrityError: |
|
|
|
db.session.rollback() |
|
|
|
app.logger.error("file %s already exists!", full_path) |
|
|
|
except DataError: |
|
|
|
db.session.rollback() |
|
|
|
app.logger.error("%s Invalid Entry", full_path) |
|
|
|
except InterfaceError: |
|
|
|
db.session.rollback() |
|
|
|
app.logger.error( |
|
|
|
"Error connecting to the database" |
|
|
|
) |
|
|
|
except DatabaseError: |
|
|
|
db.session.rollback() |
|
|
|
app.logger.error( |
|
|
|
"Error connecting to the database" |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
def add_distribusi_files(path): |
|
|
|
app = create_app() |
|
|
|
with app.app_context(): |
|
|
|
distribusi = _get_distribusi_from_path(path) |
|
|
|
path = os.path.join("stash", path) |
|
|
|
for root, dirs, files in os.walk(path, topdown=True): |
|
|
|
files = list(filter(lambda f: not f.startswith("."), files)) |
|
|
|
files = list(filter(lambda f: not f.endswith(".html"), files)) |
|
|
|
for file in files: |
|
|
|
full_path = os.path.join(root, file) |
|
|
|
_distribusi_file_with_type(distribusi, full_path) |
|
|
|
|
|
|
|
|
|
|
|
for root, dirs, files in os.walk("stash", topdown=True): |
|
|
|
files = list(filter(lambda f: not f.startswith("."), files)) |
|
|
|
files = list(filter(lambda f: not f.endswith(".html"), files)) |
|
|
|
for file in files: |
|
|
|
full_path = os.path.join(root, file) |
|
|
|
distribusi_file_with_type(full_path) |
|
|
|
add_distribusi_files("2018-12-WttF-Mastodon-and-the-Fediverse") |
|
|
|