Many fixes and docstrings
This commit is contained in:
parent
eb93be38ea
commit
dd67eafd0d
5 changed files with 118 additions and 10 deletions
|
|
@ -10,7 +10,7 @@ class IntegerField(PhangoField):
|
||||||
Args:
|
Args:
|
||||||
name (str): The name of new field
|
name (str): The name of new field
|
||||||
size (int): The size of the new field in database. By default 11.
|
size (int): The size of the new field in database. By default 11.
|
||||||
required (bool): Boolean for define if
|
required (bool): Boolean for define if field is required or not
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
@ -124,24 +124,41 @@ class FloatField(PhangoField):
|
||||||
return 'FLOAT NOT NULL DEFAULT "0"'
|
return 'FLOAT NOT NULL DEFAULT "0"'
|
||||||
|
|
||||||
class DecimalField(FloatField):
|
class DecimalField(FloatField):
|
||||||
|
"""PhangoField field for Decimals fields."""
|
||||||
|
|
||||||
def get_type_sql(self):
|
def get_type_sql(self):
|
||||||
|
|
||||||
return 'DECIMAL(20, 2) NOT NULL DEFAULT "0"'
|
return 'DECIMAL(20, 2) NOT NULL DEFAULT "0"'
|
||||||
|
|
||||||
class DoubleField(FloatField):
|
class DoubleField(FloatField):
|
||||||
|
"""PhangoField field for Double fields."""
|
||||||
|
|
||||||
def get_type_sql(self):
|
def get_type_sql(self):
|
||||||
|
|
||||||
return 'DOUBLE NOT NULL DEFAULT "0"'
|
return 'DOUBLE NOT NULL DEFAULT "0"'
|
||||||
|
|
||||||
class CharField(PhangoField):
|
class CharField(PhangoField):
|
||||||
|
"""Simple alias for PhangoField for clarify that """
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class TextField(PhangoField):
|
class TextField(PhangoField):
|
||||||
|
"""Class used for text fields
|
||||||
|
|
||||||
|
Class used for text fields, use TEXT sql type for the this field.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, name, required=False):
|
def __init__(self, name, required=False):
|
||||||
|
"""Init TextField class different to standard PhangoField
|
||||||
|
|
||||||
|
Args:
|
||||||
|
name (str): The name of new field
|
||||||
|
required (bool): Boolean for define if field is required or not
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
set_default (str): Set if the value es NOT NULL or not
|
||||||
|
"""
|
||||||
|
|
||||||
super().__init__(name, 11, required)
|
super().__init__(name, 11, required)
|
||||||
|
|
||||||
self.set_default='NOT NULL'
|
self.set_default='NOT NULL'
|
||||||
|
|
@ -155,12 +172,30 @@ class TextField(PhangoField):
|
||||||
return 'TEXT '+self.set_default
|
return 'TEXT '+self.set_default
|
||||||
|
|
||||||
class HTMLField(TextField):
|
class HTMLField(TextField):
|
||||||
|
"""Class used for html fields
|
||||||
|
|
||||||
|
Class used for html fields, use TEXT sql type for the this field because is children of TextField.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, name, required=False):
|
def __init__(self, name, required=False):
|
||||||
|
"""Init HTMLField class different to standard PhangoField
|
||||||
|
|
||||||
|
Args:
|
||||||
|
name (str): The name of new field
|
||||||
|
required (bool): Boolean for define if field is required or not
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
trusted_tags (list): A list with safe tags.
|
||||||
|
"""
|
||||||
|
|
||||||
super().__init__(name, required)
|
super().__init__(name, required)
|
||||||
self.trusted_tags=[]
|
self.trusted_tags=[]
|
||||||
|
|
||||||
def check(self, value):
|
def check(self, value):
|
||||||
|
"""Check method for html values
|
||||||
|
|
||||||
|
This check method use beautifulsoap for clean and format html code
|
||||||
|
"""
|
||||||
|
|
||||||
soup=BeautifulSoup(value, features='html.parser')
|
soup=BeautifulSoup(value, features='html.parser')
|
||||||
|
|
||||||
|
|
@ -172,8 +207,17 @@ class HTMLField(TextField):
|
||||||
|
|
||||||
|
|
||||||
class ForeignKeyField(IntegerField):
|
class ForeignKeyField(IntegerField):
|
||||||
|
"""Subclass of IntegerField for create Foreign keys
|
||||||
|
|
||||||
|
A subclass of IntegerField used for create foreign keys in related tables.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self, name, related_table, size=11, required=False, identifier_field='id', named_field="id", select_fields=[]):
|
def __init__(self, name, related_table, size=11, required=False, identifier_field='id', named_field="id", select_fields=[]):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
name (str): Name of field
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
super(ForeignKeyField, self).__init__(name, size, required)
|
super(ForeignKeyField, self).__init__(name, size, required)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,14 @@ import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from paramecio2.libraries.db.corefields import CharField
|
from paramecio2.libraries.db.corefields import CharField
|
||||||
from paramecio2.libraries.db.extraforms.fileform import FileForm
|
from paramecio2.libraries.db.extraforms.fileform import FileForm
|
||||||
from paramecio.citoplasma import httputils
|
#from paramecio.citoplasma import httputils
|
||||||
from paramecio.citoplasma.keyutils import create_key
|
from paramecio2.libraries.keyutils import create_key
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from bottle import request
|
#from bottle import request
|
||||||
|
from flask import request
|
||||||
|
from werkzeug.utils import secure_filename
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
@ -44,7 +47,7 @@ class FileField(CharField):
|
||||||
def check(self, value):
|
def check(self, value):
|
||||||
|
|
||||||
files_uploaded=request.files
|
files_uploaded=request.files
|
||||||
|
print(request.files.keys())
|
||||||
field_file=self.name+'_file'
|
field_file=self.name+'_file'
|
||||||
|
|
||||||
#if not change
|
#if not change
|
||||||
|
|
@ -90,9 +93,9 @@ class FileField(CharField):
|
||||||
|
|
||||||
# Load image file
|
# Load image file
|
||||||
|
|
||||||
file_bytecode=files_uploaded[field_file].file
|
#file_bytecode=files_uploaded[field_file].file
|
||||||
|
|
||||||
filename=files_uploaded[field_file].filename
|
filename=secure_filename(files_uploaded[field_file].filename)
|
||||||
|
|
||||||
realfilename, ext = os.path.splitext(filename)
|
realfilename, ext = os.path.splitext(filename)
|
||||||
|
|
||||||
|
|
@ -158,6 +161,9 @@ class FileField(CharField):
|
||||||
|
|
||||||
self.model.yes_reset_conditions=old_reset
|
self.model.yes_reset_conditions=old_reset
|
||||||
|
|
||||||
|
# Save file
|
||||||
|
|
||||||
|
files_uploaded[field_file].save(save_file)
|
||||||
|
|
||||||
#self.model.conditions=old_conditions
|
#self.model.conditions=old_conditions
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,17 @@ login_name='login'
|
||||||
login_url='.login'
|
login_url='.login'
|
||||||
|
|
||||||
def db(f):
|
def db(f):
|
||||||
|
"""Wrapper function for add db connection to your flask function
|
||||||
|
|
||||||
|
Wrapper function for add db connection to your flask function. Also close the connection if error or function exection is finished.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*args : The args of function
|
||||||
|
**kwds : Standard python extra arguments of function
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
wrapper (function): Return the wrapper.
|
||||||
|
"""
|
||||||
|
|
||||||
@wraps(f)
|
@wraps(f)
|
||||||
|
|
||||||
|
|
@ -30,6 +41,17 @@ def db(f):
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
def login_site(f):
|
def login_site(f):
|
||||||
|
"""Wrapper function for check login in your flask function
|
||||||
|
|
||||||
|
Wrapper function for check a login session in your flask function. If
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*args : The args of function
|
||||||
|
**kwds : Standard python extra arguments of function
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
wrapper (function): Return the wrapper.
|
||||||
|
"""
|
||||||
|
|
||||||
@wraps(f)
|
@wraps(f)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@ import ssl as ssl_module
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
class SendMail:
|
class SendMail:
|
||||||
|
"""Class for send email
|
||||||
|
"""
|
||||||
|
|
||||||
port=587
|
port=587
|
||||||
|
|
||||||
|
|
@ -25,6 +27,20 @@ class SendMail:
|
||||||
#ssl=True
|
#ssl=True
|
||||||
|
|
||||||
def __init__(self, ssl=True):
|
def __init__(self, ssl=True):
|
||||||
|
"""Class for send email
|
||||||
|
|
||||||
|
Class for send email using standard python library
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
port (int): The port used for send email, by default 587
|
||||||
|
host (str): The hostname of mail server used for send the email
|
||||||
|
username (str): The username for login in mail server
|
||||||
|
password (str): The password for login in mail server
|
||||||
|
smtp (smtplib.SMTP): The python SMTP object used for send emails
|
||||||
|
txt_error: (str): If error, is saved in this attribute
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
self.smtp=None #smtplib.SMTP(host=self.host, port=self.port)
|
self.smtp=None #smtplib.SMTP(host=self.host, port=self.port)
|
||||||
self.txt_error=''
|
self.txt_error=''
|
||||||
|
|
@ -94,6 +110,18 @@ class SendMail:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def send(self, from_address, to_address: list, subject, message, content_type='plain', attachments=[]):
|
def send(self, from_address, to_address: list, subject, message, content_type='plain', attachments=[]):
|
||||||
|
""" Method that send email
|
||||||
|
|
||||||
|
With this method you can send email to multiple address, html, and add attachments to email
|
||||||
|
|
||||||
|
Args:
|
||||||
|
from_adress (str): The adress used for send the email
|
||||||
|
to_address (list): A list of emails where the email will be sended.
|
||||||
|
subject (str): The subject of the email
|
||||||
|
message (str): The content of the message
|
||||||
|
content_type (str): The type of mail content, can be plain or html.
|
||||||
|
attatchments (list): A list with a serie of file paths for attach to the email.
|
||||||
|
"""
|
||||||
|
|
||||||
if self.smtp==None:
|
if self.smtp==None:
|
||||||
if not self.connect():
|
if not self.connect():
|
||||||
|
|
@ -174,12 +202,14 @@ class SendMail:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def quit(self):
|
def quit(self):
|
||||||
|
"""Function used when you need quit connection for any reason"""
|
||||||
|
|
||||||
if self.smtp!=None:
|
if self.smtp!=None:
|
||||||
self.smtp.quit()
|
self.smtp.quit()
|
||||||
self.smtp=None
|
self.smtp=None
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
|
"""Method for clean the connection when the object is closed"""
|
||||||
|
|
||||||
if self.smtp!=None:
|
if self.smtp!=None:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,11 @@
|
||||||
from slugify import slugify as slugify_func
|
from slugify import slugify as slugify_func
|
||||||
|
|
||||||
def slugify(slug, *args, **wargs):
|
def slugify(slug, *args, **wargs):
|
||||||
|
"""Simple wrapper for slugify module https://github.com/un33k/python-slugify
|
||||||
|
|
||||||
|
Args:
|
||||||
|
slug (str): The string to be slugified
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
return slugify_func(slug, *args, **wargs)
|
return slugify_func(slug, *args, **wargs)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue