How to use is_not_empty method in Slash

Best Python code snippet using slash

db.py

Source:db.py Github

copy

Full Screen

1#auto update on change2from gluon.custom_import import track_changes; track_changes(True)3from gluon import *4EMAIL_SERVER='127.0.0.1:25'5EMAIL_SENDER='ckutay@cities.org.au'6EMAIL_AUTH=None7RECAPTCHA_PUBLIC_KEY='6LefJwQAAAAAAEuj02bmS2LgiZiPhGBqKP1kbn26'8RECAPTCHA_PRIVATE_KEY='6LefJwQAAAAAAPcK2G6SO_pyJDegHi58J41bEVrV'9from gluon.validators import Validator10#distiguish in dictionary or not11languageList=None12class SlugValidator(Validator):13 def __call__(self, value):14 return (value.replace(' ', '_'), None)15#set for each language16language='Dharug'17from gluon.tools import *18import uuid19# db = MySQLdb.connect(host='localhost', user='user1', passwd='user1', db='test_rma')20#db = #mysql.connector.connect(user='language_admin', password='budyari10', host='localhost', database='language')21db= DAL('mysql://language_admin:budyari10@localhost/'+language, pool_size=0,migrate=False, fake_migrate=True)22dblanguage=DAL('mysql://language_admin:budyari10@localhost/language', pool_size=0,migrate=False, fake_migrate=True)23session.connect(request, response, db=db) # and store sessions there24import sys, nltk, re, pprint # NLTK and related modules -- are these all needed?25from nltk.tokenize.punkt import PunktSentenceTokenizer26#need python-gdate in fdora 1627#from gdata.calendar import service, data28import logging29logger = logging.getLogger("web2py.app.Dharug")30logger.setLevel(logging.DEBUG)31auth = Auth(db)32mail = Mail()33mail = auth.settings.mailer34mail.settings.server = EMAIL_SERVER35mail.settings.sender = EMAIL_SENDER36mail.settings.login = EMAIL_AUTH37mail.settings.tls = False38auth.settings.mailer=mail39service = Service()40plugins = PluginManager()41## configure auth policy42auth.settings.registration_requires_verification = True43auth.settings.registration_requires_approval = True44auth.settings.reset_password_requires_verification = True45#setup versioning46## if you need to use OpenID, Facebook, MySpace, Twitter, Linkedin, etc.47## register with janrain.com, write your domain:api_key in private/janrain.key48from gluon.contrib.login_methods.janrain_account import use_janrain49use_janrain(auth, filename='private/janrain.key')50#laouter reduced after start51response.start=True52auth.settings.captcha = None53#Recaptcha(request, RECAPTCHA_PUBLIC_KEY, RECAPTCHA_PRIVATE_KEY)54auth.settings.login_url = URL(r=request, c='default', f='_user', args='login')55auth.settings.logged_url = URL(r=request, c='default', f='user', args='profile')56auth.settings.login_next=URL(r=request, c='plugin_wiki', f='index')57auth.settings.logout_next=URL(r=request, c='plugin_wiki', f='index')58auth.settings.verify_email_next = URL(r=request, c='default', f='user', args='login')59auth.settings.create_user_groups = False60auth.settings.register_onaccept=lambda form: mail.send(to=EMAIL_SENDER,subject='New Registration',61 message='Registration requires approval. New user id number is %s'%form.vars.id)62crud = Crud(globals(), db) #for CRUD helpers using auth63#crud.settings.auth = auth # (optional) enforces authorization on crud64auth.messages.verify_email = 'Click on the link:\n https://www.web2py.com' + \65 URL(r=request, c='default', f='user/verify_email') + '/%(key)s\n' + \66 'to verify your email'67who = default = auth.user.id if auth.is_logged_in() else 068now = request.now69def represent_email(id_):70 email = db.auth_user[id_]71 if not author:72 return 'Author not found'73 else:74 return '%s' % (author.email)75TOP_MESSAGE="Contact form"76VALUE=""77db.define_table('message',78 Field('your_name',requires=IS_NOT_EMPTY()),79 Field('your_email',requires=IS_EMAIL()),80 Field('your_subject','string',length=100),81 Field('your_message','text',default=VALUE),82 Field('to_group',default=False,readable=False,writable=False),83 Field('timestamp',default=now),migrate=False)84db.define_table('recipient',85 SQLField('name',requires=IS_NOT_EMPTY()),86 SQLField('email',requires=IS_EMAIL()),migrate=False)87db.define_table(auth.settings.table_user_name,88 Field('id', 'integer', default=who),89 Field('first_name', length=128, default=''),90 Field('last_name', length=128, default=''),91 Field('username', length=50),92 Field('email', length=128, default='', unique=True),93 Field('password', 'password', length=512,94 readable=False, label='Password'),95 Field('registration_key', length=512,96 readable=False, writable=False, default='pending'),97 Field('registration_id', 'integer',readable=False, writable=False),98 Field('reset_password_key', length=512,99 writable=False, readable=False, default=''),100 Field('Role_Name','string',default=''), 101 Field('Community','string', default='Dharug'),102 migrate=False)103custom_auth_table = db[auth.settings.table_user_name] # get the custom_auth_table104custom_auth_table.first_name.requires = \105 IS_NOT_EMPTY(error_message=auth.messages.is_empty)106custom_auth_table.last_name.requires = \107 IS_NOT_EMPTY(error_message=auth.messages.is_empty)108custom_auth_table.Role_Name.requires = IS_IN_SET(['student', 'teacher', 'editor'])109custom_auth_table.Community.requires = IS_IN_DB(db, 'region.id', '%(name)s')110custom_auth_table.password.requires = [CRYPT()]111custom_auth_table.email.requires = [112 IS_EMAIL(error_message=auth.messages.invalid_email),113 IS_NOT_IN_DB(db, custom_auth_table.email)]114#custom_auth_table.ALC_Name.requires=(IS_IN_DB(dblanguage,'ALCS.ALC_Name','%(ALC_Name)s') or '')115#custom_auth_table.CLW_Name.requires=(IS_IN_DB(dblanguage,'CLW.CLW','%(CLW)s') or '')116#custom_auth_table.CLW_Name.requires=IS_IN_SET([dblanguage] ,error_message=T('Please select CLW or ALC '))117def represent_author(id_):118 author = db.auth_user[id_]119 if not author:120 return 'Author not found'121 else:122 return '%s %s' % (author.first_name, author.last_name)123auth.define_tables(username=True, migrate=False) #creates all needed tables124#authorize map tables125dblanguage.auth_user=db.auth_user126db.define_table('page_index',127 Field('uuid', length=128, readable=False, writable=False,128 default=str(uuid.uuid4())),129 Field('title'),130 Field('menu', length=128, readable=False, writable=False),131 Field('public', 'boolean', default=False),132 Field('active', 'boolean', default=True),133 Field('body', 'text'),134 Field('tags', 'list:integer'),135 Field('created_by', db.auth_user, default=who, readable=False,136 writable=False),137 Field('created_on', 'datetime', default=now, readable=False,138 writable=False),139 migrate=False140)141db.page_index.title.requires = [IS_NOT_EMPTY(), SlugValidator()]142db.page_index.created_by.represent = represent_author143db.define_table('document',144 Field('slug', length=128, readable=False, writable=False),145 Field('name'),146 Field('description', 'text'),147 Field('file', 'upload'),148 Field('created_by', db.auth_user, default=who, update=who, readable=False,149 writable=False),150 Field('created_on', 'datetime', default=now, update=now, readable=False,151 writable=False),152 migrate=False153)154db.document.slug.requires = IS_IN_DB(db, 'page.slug', '%(title)s')155db.document.name.requires = IS_NOT_EMPTY()156db.document.file.requires = IS_NOT_EMPTY()157db.document.created_by.represent = represent_author158## dialect regions159db.define_table('region',160 Field('id', 'integer',writable=False,readable=False),161 Field('name','string',length=100),162 Field('dialect_id','integer',length=11,requires=IS_IN_DB(db,'dialect.id')),163)164db.region.dialect_id.requires = IS_IN_DB(db, 'dialect.id' , '%(id)s')165## slide show imafes166dblanguage.define_table('images',167 Field('id','integer',writable=False,readable=False),168 Field('name',requires=IS_NOT_EMPTY()),169 Field('title',requires=IS_NOT_EMPTY()),170 Field('filename','upload',requires=IS_NOT_EMPTY(),autodelete=True),171 Field('category','string'),172 # Field( 'Community','string',default='Dharug'),173 migrate=False)174images= dblanguage['images']175#images.Community.requires = IS_IN_DB(db, 'region.id', '%(name)s')176db.define_table('topics',177 Field ('id', 'integer'),178 Field ('page_id', 'integer'),179 Field ('English', 'string'),180 Field ('Language', 'string')181)182db.topics.page_id.requires = IS_IN_DB(db, 'page.id')183db.define_table('dialect',184 Field('id', 'integer' , requires=IS_NOT_EMPTY() ),185 Field('name'),186 Field('color'),187 Field('next'),188 migrate=False189)190db.define_table('Lesson',191 Field ('id','integer', requires=IS_NOT_EMPTY() ),192 Field ('page_id', 'integer'),193 Field('name'),194 Field('community'),195 Field('description'),196 migrate=False197)198db.define_table('Lesson_word',199 Field('lesson_id', requires=IS_IN_DB(db, 'Lesson.id', '%(id)s')),200 Field('language_id', requires=IS_IN_DB(dblanguage, 'Dharug.id', '%(id)s')),201 migrate=False202)203dblanguage.define_table (language,204 Field('id', 'integer' , readable=False, writable=False),205 Field('Category',requires=IS_NOT_EMPTY()),206 Field('uncertain',requires=IS_NOT_EMPTY()),207 Field('English',requires=IS_NOT_EMPTY()),208 Field('Search_English',requires=IS_NOT_EMPTY()),209 Field("Language_Word",requires=IS_NOT_EMPTY()),210 Field('Part_of_Speech',requires=IS_NOT_EMPTY()),211 Field('Comment',requires=IS_NOT_EMPTY()),212 Field('dialect',requires=IS_NOT_EMPTY()),213 Field('ExampleSentence'),214 Field('ExampleTranslated'),215 Field('Derived'),216 Field('RelatedWord'),217 Field('Image'),218 Field('SoundFile'),219 migrate=False220 )221dblanguage.define_table (language+"_archive",222 Field('current_record',dblanguage.Dharug), dblanguage.Dharug, format = '%(id) %(modified_on)s', migrate=False)223current.db=dblanguage224dblanguage.define_table (language+'Examples',225 Field('id', 'integer' , readable=False, writable=False),226 Field('language_id'),227 Field('Language',requires=IS_NOT_EMPTY()),228 Field('English',requires=IS_NOT_EMPTY()),229 migrate=False230 )231dblanguage.define_table('post',232 Field('image_id', 'reference image'),233 Field('author'),234 Field('email'),235 Field('body', 'text'),migrate=False)236db.define_table('comment',237 Field('slug', length=128, readable=False, writable=False),238 Field('body', 'text'),239 Field('created_by', db.auth_user, default=who, readable=False,240 writable=False),241 Field('created_on', 'datetime', default=now, readable=False,242 writable=False),243 migrate=False)244db.comment.slug.requires = IS_IN_DB(db, 'page.slug', '%(title)s')245db.comment.body.requires = IS_NOT_EMPTY()246db.comment.created_by.represent = represent_author247db.define_table('calendar_event',248 Field('id', 'integer' , readable=False, writable=False),249 Field('desc', 'text'),250 Field('date_and_time', 'datetime'),251 Field('created_by', db.auth_user, default=who, readable=False,252 writable=False),253 Field('created_on', 'datetime', default=now, readable=False,254 writable=False),255 migrate=False256)257#import altk258#from altk import *259#language_dictionary = altk.dictionary.AboriginalLanguageDictionary()260#language_stemmer = altk.stemmer.AboriginalLanguageStemmer()261users = db(db.auth_user.id > 0).select()262usernames = dict([(u.id, '%s %s' % (u.first_name, u.last_name)) for u in users])263usernames[0] = usernames[None] = 'Anonymous'264if not db(db.auth_group.role == 'developer').select():265 group_id = auth.add_group('developer')266 auth.add_membership(group_id, 1)267response.title = T('Dharug and Dharawal Resources')268response.menuTop = [269 ['Home', False, '/Dharug'],270 ['Pages', False, URL(r=request, c='plugin_wiki',f='page', args='history')],271 ['Dictionary', False, URL(r=request, c='language',f='dictionary')],272 ['Resources', False, URL(r=request, c='plugin_wiki', f='resources')],273 ['Help', False, URL(r=request,c='plugin_wiki', f='tags_by_tag', args='4')],274 ['Contact', False, URL(r=request, c='plugin_wiki', f='contact')],275 ]276response.menuAbout = [277 ['People', False, URL(r=request, c='plugin_wiki', f='page', args='people')],278 ['Traditional country', False, URL(r=request, c='plugin_wiki', f='page', args='traditional_country')],279 ['Language background', False, URL(r=request, c='plugin_wiki', f='page', args='language_background')],280 ['Outline of the language', False, URL(r=request, c='plugin_wiki', f='page', args='outline_of_the_language')],281 ['Outline of resources', False, URL(r=request, c='plugin_wiki', f='page', args='outline_of_resources')],282 ['History of the project', False, URL(r=request, c='plugin_wiki', f='page', args='history')],283]284response.menuResource=[285 ['Language Resources', False, URL(r=request, c='plugin_wiki', f='resources')],286 ['Learning the Language', False, URL(r=request, c='learning', f='page', args='learning_the_language')],287 ['Work Sheets', False, URL(r=request,c='learning',f='pages')],288 ]289response.menuUploads=[290 ['Audio Files',False,URL(r=request, c='default', f='upload', args='sounds')],291 ['Images', False, URL(r=request, c='default', f='upload', args='images')]292]293response.menuLogin=[294 ['Login', False, URL(r=request, c='default' , f='_user', args='login')],295 ]296response.menuTeaching=[297 ['Pages', False, URL(r=request, c='learning', f='pages')],298 ['Resources', False, URL(r=request, c='plugin_wiki', f='resources', args='2')],299]300response.menuProfile=[['Help Pages', False, URL(r=request,c='plugin_wiki', f='tags_by_tag', args='4')]]301if auth.is_logged_in():302 response.menuTop.insert(4,303 ['Uploads', False, URL(r=request, c='default', f='uploads')])304 response.menuTop.insert(5,305 ['Change Password', False, URL(r=request, c='default', f='user', args='change_password')])306 response.menuLogin=[307 ['Logout', False, URL(r=request, c='default', f='user', args='logout')],308 ]309 if (auth.user.Role_Name=="editor"):310 response.menuTop.insert(4,311 ['Edit Profile', False, URL(r=request, c='default', f='user', args='profile')])312 elif (auth.has_membership(auth.id_group('developer'))):313 response.menuTop.insert(4,314 ['Accept Regos', False, URL(r=request, c='appadmin', f='update', args="db.auth_user/registration_key/pending")])315def menu_rec(items):316 return [(x.title,None,URL('default', 'menu',317 args=pretty_url(x.id, x.slug)), menu_rec(x.children)) for x in items or []]318def slug(page):319 return page.slug320def email_all_user(sender,message,subject="group notice"):321 import smtplib322 fromaddr=sender323 toaddrs=[x.email for x in db().select(db.auth_user.email)]324 msg="From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s"%(fromaddr,", ".join(toaddrs),subject,message)325 server = smtplib.SMTP('localhost:25')326 server.sendmail(fromaddr, toaddrs, msg)327 server.quit()328def email_user(sender,message,subject="Web Contact"):329 import smtplib330 fromaddr=sender331 toaddrs=[EMAIL_SENDER]332 msg="From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s"%(fromaddr,", ".join(toaddrs333),subject,message)334 server = smtplib.SMTP(EMAIL_SERVER+':25')335 server.sendmail(fromaddr, toaddrs, msg)336 server.quit()337def email_user(sender,message,subject="Web Contact"):338 from gluon.tools import Mail339 fromaddr=sender340 toaddrs=[EMAIL_SENDER]341 msg="From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s"%(fromaddr,", ".join(toaddrs),subject,message)342 mail=Mail()343 mail.settings.server=EMAIL_SERVER+":25"344 mail.settings.sender=EMAIL_SENDER345 mail.send(to=EMAIL_SENDER,subject=subject, message=msg)346 347##generic functions for layout348def slideshow(links=None,table=None,stage=0,field='image',transition='fade',width=200,height=100):349 """350 ## Embeds a slideshow351 It gets the images from a table352 - ``table`` is the table name353 - ``field`` is the upload field in the table that contains images354 - ``transition`` determines the type of transition, e.g. fade, etc.355 - ``width`` is the width of the image356 - ``height`` is the height of the image357 """358 import random359 id=str(random.random())[2:]360 if table:361 rows = db(db[table].show==stage).select()362 if db[table][field].type=='upload':363 images = [IMG(_src=URL('default','download',args=[row[field],'images']), _width=width,_height=height) for row in rows]364 else:365 images = [IMG(_src=row[field]) for row in rows]366 elif links:367 images = [IMG(_src=link) for link in links.split(',')]368 else:369 images = []370 return DIV(SCRIPT("jQuery(document).ready(function() {jQuery('#slideshow%s').cycle({fx: '%s'});});" % (id,transition)),DIV(_id='slideshow'+id,_height=height,*images))371auth.enable_record_versioning(db)...

Full Screen

Full Screen

personal.py

Source:personal.py Github

copy

Full Screen

1#------------------------------------------------Modulo de Personal-----------------------------------------------------------------------------------------------------------------------------------------------------------2# Tablas para formularios adicionales3#####################################################################4# #5# Competencias #6# #7#####################################################################8db.define_table(9 't_Competencias',10 # Atributos11 Field('f_nombre', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Competencia')),12 Field('f_observaciones', 'string', length=150, label=T('Observaciones')),13 Field('f_categorias', 'list:string', default='', label=T('Categorías')),14 Field('f_numero', 'integer', default=1,label=T('Numero')),15 Field('f_Competencia_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None) ),16 migrate=True17 )18db.t_Competencias._plural = 'Competencias'19db.t_Competencias._singular = 'Competencia'20#####################################################################21# #22# Historial Laboral #23# #24#####################################################################25db.define_table(26 27 #Nombre de la entidad28 't_Historial_trabajo', 29 30 #Atributos;31 Field('f_fecha_inicio_1', 'date', label=T('Desde')),32 Field('f_fecha_final_1', 'date', label=T('Hasta')),33 Field('f_dependencia_hist_1', 'string', label=T('Dependencia')),34 Field('f_organizacion_1', 'string', label=T('Organización')),35 Field('f_cargo_hist_1', 'string', label=T('Cargo')),36 Field('f_rol_hist_1', 'string', label=T('Rol')),37 Field('f_fecha_inicio_2', 'date', label=T('Desde')),38 Field('f_fecha_final_2', 'date', label=T('Hasta')),39 Field('f_dependencia_hist_2', 'string', label=T('Dependencia')),40 Field('f_organizacion_2', 'string',label=T('Organización')),41 Field('f_cargo_hist_2', 'string', label=T('Cargo')),42 Field('f_rol_hist_2', 'string', label=T('Rol')),43 Field('f_fecha_inicio_3', 'date', label=T('Desde')),44 Field('f_fecha_final_3', 'date', label=T('Hasta')),45 Field('f_dependencia_hist_3', 'string', label=T('Dependencia')),46 Field('f_organizacion_3', 'string', label=T('Organización')),47 Field('f_cargo_hist_3', 'string', label=T('Cargo')),48 Field('f_rol_hist_3', 'string', label=T('Rol')),49 Field('f_fecha_inicio_4', 'date', label=T('Desde')),50 Field('f_fecha_final_4', 'date', label=T('Hasta')),51 Field('f_dependencia_hist_4', 'string', label=T('Dependencia')),52 Field('f_organizacion_4', 'string', label=T('Organización')),53 Field('f_cargo_hist_4', 'string', label=T('Cargo')),54 Field('f_rol_hist_4', 'string', label=T('Rol')),55 Field('f_fecha_inicio_5', 'date', label=T('Desde')),56 Field('f_fecha_final_5', 'date', label=T('Hasta')),57 Field('f_dependencia_hist_5', 'string', label=T('Dependencia')),58 Field('f_organizacion_5', 'string', label=T('Organización')),59 Field('f_cargo_hist_5', 'string', label=T('Cargo')),60 Field('f_rol_hist_5', 'string',label=T('Rol')),61 #Referencia (Revisar si el label es asistio o organizo)62 Field('f_Historial_trabajo_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None), label=T('Posee')),63 )64db.t_Historial_trabajo._plural = 'Historial de trabajo'65db.t_Historial_trabajo._singular = 'Historial de trabajo'66#####################################################################67# #68# Actividades Administrativas #69# #70#####################################################################71db.define_table(72 't_Actividades_Administrativas',73 # Atributos74 Field('f_fecha_inicio', 'date', label=T('Fecha de inicio'), requires=IS_NOT_EMPTY()),75 Field('f_fecha_final', 'date', label=T('Fecha de fin'), requires=IS_NOT_EMPTY()),76 Field('f_cargo', 'string', length=150,label=T('Cargo'), requires=IS_NOT_EMPTY()),77 Field('f_institucion', 'string', length=150, label=T('Institución'), requires=IS_NOT_EMPTY()),78 Field('f_numero', 'integer'),79 Field('f_Administrativas_Personal', 'reference t_Personal',80 requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None) ),81 migrate=True82 )83db.t_Actividades_Administrativas._plural = 'Actividades administrativas'84db.t_Actividades_Administrativas._singular = 'Actividad administrativa'85#####################################################################86# #87# Extension #88# #89#####################################################################90db.define_table(91 't_Extension',92 # Atributos93 Field('f_categoria', 'list:string', default='', label=T('Categorías')),94 Field('f_fecha_inicio', 'date', label=T('Fecha de inicio'), requires=IS_NOT_EMPTY()),95 Field('f_fecha_final', 'date', label=T('Fecha de fin'), requires=IS_NOT_EMPTY()),96 Field('f_nombre', 'string', label=T('Nombre'), requires=IS_NOT_EMPTY()),97 Field('f_descripcion', 'string', label=T('Descripción'), requires=IS_NOT_EMPTY()),98 Field('f_institucion', 'string', label=T('Institución'), requires=IS_NOT_EMPTY()),99 Field('f_numero', 'integer'),100 Field('f_Extension_Personal', 'reference t_Personal',101 requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None) ),102 migrate=True103 )104db.t_Extension._plural = 'Actividades de extensión'105db.t_Extension._singular = 'Actividad de extensión'106#####################################################################107# #108# Proyectos de Investigacion #109# #110#####################################################################111db.define_table(112 #Nombre de la entidad113 't_Proyecto', 114 #Atributos;115 Field('f_categoria', 'list:string', default='', label=T('Categoría')),116 Field('f_fecha_inicio', 'date',label=T('Desde')),117 Field('f_fecha_fin', 'date',label=T('Hasta')),118 Field('f_titulo', 'string', label=T('Título')),119 Field('f_responsabilidad', 'string', label=T('Responsabilidad')),120 Field('f_resultados', 'string', label=T('Resultados')),121 Field('f_institucion', 'string', label=T('Institución')),122 Field('f_numero', 'integer'),123 #Referencia124 Field('f_proyecto_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None), label=T('Participante')),125 )126db.t_Proyecto._plural = 'Proyectos'127db.t_Proyecto._singular = 'Proyecto'128#####################################################################129# #130# Trabajos Dirigidos #131# #132#####################################################################133#t_Personal: Tabla de Trabajos dirigidos134db.define_table(135 #Nombre de la entidad136 't_Trabajos_dirigidos', 137 #Atributos;138 Field('f_anio', 'integer', requires=IS_INT_IN_RANGE(minimum=1900,maximum=2100, error_message='Introduzca un año válido'), notnull=True, label=T('Año')),139 Field('f_estudiantes', 'string', default='', label=T('Estudiantes')),140 Field('f_titulo_trabajo', 'string', label=T('Titulo')),141 Field('f_nivel', 'list:string', default='', label=T('Nivel')),142 Field('f_institucion', 'string', label=T('Institución')),143 Field('f_numero', 'integer', default=1,label=T('Numero')),144 Field('f_Trabajo_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None) ),145 migrate=True146 )147db.t_Trabajos_dirigidos._plural = 'Trabajos'148db.t_Trabajos_dirigidos._singular = 'Trabajo'149#####################################################################150# #151# Cursos #152# #153#####################################################################154db.define_table(155 #Nombre de la entidad156 't_Cursos', 157 #Atributos;158 Field('f_anio', 'integer', requires=IS_INT_IN_RANGE(minimum=1900,maximum=2100, error_message='Introduzca un año válido'), notnull=True, label=T('Año')),159 Field('f_horas', 'integer', requires=IS_INT_IN_RANGE(minimum=1, error_message='Las horas no pueden ser negativas'), notnull=True, label=T('Horas')),160 Field('f_categorias', 'list:string', default='', label=T('Categorías')),161 Field('f_formacion', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Formacion')),162 Field('f_dictadoPor', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('DictadoPor')),163 Field('f_numero', 'integer', default=1,label=T('Numero')),164 Field('f_Cursos_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None) ),165 migrate=True 166 )167db.t_Cursos._plural = 'Cursos'168db.t_Cursos._singular = 'Curso'169#####################################################################170# #171# Materias #172# #173#####################################################################174#t_Personal: Tabla de Materias.175db.define_table(176 #Nombre de la entidad177 't_Materia', 178 #Atributos;179 Field('f_area', 'list:string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Área')),180 Field('f_codigo','string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Código')),181 Field('f_nombre_materia', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Materia')),182 Field('f_fecha_inicio_materia', 'date', label=T('Desde')),183 Field('f_fecha_final_materia', 'date', label=T('Hasta')),184 Field('f_numero', 'integer', default=1,label=T('Numero')),185 Field('f_Materia_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None), label=T('Dirigió')),186 migrate=True187 )188db.t_Materia._plural = 'Materias'189db.t_Materia._singular = 'Materia'190#####################################################################191# #192# Estudios Formales #193# #194#####################################################################195#t_Personal: Tabla de Materias.196db.define_table(197 #Nombre de la entidad198 't_Estudios',199 Field('f_numero', 'integer', default=1,label=T('Numero')),200 Field('f_anio', 'integer', requires=IS_INT_IN_RANGE(minimum=1900,maximum=2100, error_message='Introduzca un año válido'), notnull=True, label=T('Año')),201 Field('f_nivel', 'list:string', default='', label=T('Nivel')),202 Field('f_titulo', 'string', label=T('Titulo')),203 Field('f_area', 'string', label=T('Area de Especializacion')),204 Field('f_institucion', 'string', label=T('Institución')),205 Field('f_ubicacion', 'string', default='', label=T('Estudiantes')),206 Field('f_categorias', 'list:string', default='', label=T('Categorías')),207 Field('f_Estudios_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None) ),208 migrate=True209 )210'''211TABLAS PARA FORMULARIOS NO IMPLEMENTADOS (REVISAR)212#t_Personal: Tabla de publicaciones.213db.define_table(214 #Nombre de la entidad215 't_Publicacion', 216 #Atributos;217 Field('f_anio', 'integer', requires=IS_INT_IN_RANGE(minimum=1900,maximum=2100, error_message='Introduzca un año válido'), notnull=True, label=T('Año de Publicación')),218 Field('f_arbitrada', 'boolean', requires=IS_NOT_EMPTY(), notnull=True, label=T('Arbitrada')),219 Field('f_titulo', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Título')),220 Field('f_autores', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Autores')),221 Field('f_referencia', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Referencia')),222 #Referencia223 Field('f_publicacion_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None), label=T('Autor')),224 )225db.t_Publicacion._plural = 'Publicaciones'226db.t_Publicacion._singular = 'Publicacion'227#t_Personal: Tabla de eventos.228db.define_table(229 #Nombre de la entidad230 't_Evento', 231 #Atributos;232 Field('f_anio', 'integer', requires=IS_INT_IN_RANGE(minimum=1900,maximum=2100, error_message='Introduzca un año válido'), notnull=True, label=T('Año')),233 Field('f_lugar', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Lugar')),234 Field('f_titulo', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Título')),235 Field('f_coactores', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Coactores')),236 Field('f_nombre', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Nombre')),237 #Referencia (Revisar si el label es asistio o organizo)238 Field('f_evento_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None), label=T('Asistió')),239 )240db.t_Evento._plural = 'Eventos'241db.t_Evento._singular = 'Evento'242#t_Personal: Tabla de Reconocimientos.243db.define_table(244 #Nombre de la entidad245 't_Reconocimiento', 246 #Atributos;247 Field('f_anio', 'integer', requires=IS_INT_IN_RANGE(minimum=1900,maximum=2100, error_message='Introduzca un año válido'), notnull=True, label=T('Año')),248 Field('f_referencia', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Referencia')),249 Field('f_otorgado_por', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Otorgado por')),250 #Referencia (Revisar si el label es asistio o organizo)251 Field('f_Reconocimiento_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None), label=T('Obtuvo')),252 )253db.t_Reconocimiento._plural = 'Reconocimientos'254db.t_Reconocimiento._singular = 'Reconocimiento'255#t_Personal: Tabla de Comisiones.256db.define_table(257 #Nombre de la entidad258 't_Comision', 259 #Atributos;260 Field('f_fecha', 'string', requires=IS_DATE(format=T('%d/%m/%Y'), error_message='Debe tener el siguiente formato: dd/mm/yyyy'), notnull=True, label=T('Fecha')),261 Field('f_rol', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Rol')),262 Field('f_nombre', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Nombre')),263 #Referencia (Revisar si el label es asistio o organizo)264 Field('f_Comision_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None), label=T('Participó')),265 )266db.t_Comision._plural = 'Comisiones'267db.t_Comision._singular = 'Comision'268#t_Personal: Tabla de Tesis.269db.define_table(270 #Nombre de la entidad271 't_Tesis', 272 #Atributos;273 Field('f_anio', 'integer', requires=IS_INT_IN_RANGE(minimum=1900,maximum=2100, error_message='Introduzca un año válido'), notnull=True, label=T('Año')),274 Field('f_nivel', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Nivel')),275 Field('f_trabajo', 'string', requires=IS_NOT_EMPTY(), notnull=True, label=T('Trabajo')),276 #Referencia (Revisar si el label es asistio o organizo)277 Field('f_Tesis_Personal', 'reference t_Personal', requires=IS_IN_DB(db, db.t_Personal.id, '%(f_Personal)s', zero=None), label=T('Publicó')),278 )279db.t_Tesis._plural = 'Tesis'280db.t_Tesis._singular = 'Tesis'...

Full Screen

Full Screen

servicios.py

Source:servicios.py Github

copy

Full Screen

1##############################################################################2# Tablas de Servicios, involucran cada uno de las entidades que manejan la 3# creacion y edicion de las fichas de servicio4#5##############################################################################6##############################################################################7# TABLA: TIPOS DE SERVICIOS8#9# Tabla que engloba todos los tipos posibles de servicios 10#11##############################################################################12db.define_table(13 'tipos_servicios',14 Field('nombre', 'string', unique=True, notnull=True, label=T('Nombre')),15)16db.tipos_servicios._plural = 'Tipos'17db.tipos_servicios._singular = 'Tipo'18##############################################################################19# TABLA: CATEGORIAS DE SERVICIOS20#21#22##############################################################################23db.define_table(24 'categorias_servicios',25 Field('nombre', 'string', unique=True, notnull=True, label=T('Nombre')),26)27db.categorias_servicios._plural = 'Categorías',28db.categorias_servicios._singular = 'Categoría'29##############################################################################30# TABLA: SERVICIOS31#32#33##############################################################################34db.define_table(35 'servicios',36 # Atributos; Datos puntuales, Nombre, Objetivo, etc37 Field('nombre', 'string', notnull=True, label=T('Nombre')),38 Field('objetivo', 'string', notnull=True, label=T('Objetivo')),39 Field('alcance', 'string', notnull=True, label=T('Alcance')),40 Field('metodo', 'string', notnull=True, label=T('Método')),41 Field('rango', 'string', label=T('Rango')),42 Field('incertidumbre', 'string', label=T('Incertidumbre')),43 Field('item_ensayar', 'string', notnull=True, label=T('Item a Ensayar')),44 Field('requisitos', 'text', notnull=True, label=T('Requisitos')),45 46 # Fecha de Agregacion.47 Field('fecha_de_agregacion', 'datetime', requires=IS_DATETIME(), default=request.now),48 # Tipo y Categoria49 Field('tipo', 'reference tipos_servicios',50 requires=IS_IN_DB(db, db.tipos_servicios, '%(nombre)s'), label=T('Tipo')),51 Field('categoria', 'reference categorias_servicios',52 requires=IS_IN_DB(db, db.categorias_servicios, '%(nombre)s'), label=T('Categoría')),53 # Funciones54 Field('docencia', 'boolean', default=False, label=T('Docencia')),55 Field('investigacion', 'boolean', default=False, label=T('Investigación')),56 Field('gestion', 'boolean', default=False, label=T('Gestión')),57 Field('extension', 'boolean', default=False, label=T('Extensión')),58 Field('visibilidad', 'boolean', default=True, label=T('Visible')),59 # Prof Encargado60 Field('responsable', 'reference t_Personal',61 requires=IS_IN_DB(db, db.t_Personal.id, '%(f_nombre)s'), 62 label=T('Encargado')),63 # Dependencia64 Field('dependencia', 'reference dependencias',65 requires=IS_IN_DB(db, db.dependencias.id, '%(nombre)s'), 66 label=T('Dependencias')),67 # Ubicacion Fisica68 Field('ubicacion', 'reference espacios_fisicos',69 requires=IS_IN_DB(db, db.espacios_fisicos.id, '%(codigo)s'), 70 label=T('Ubicación Física')),71 72 # Checklist de Producto. Este campo anteriormente se llamaba Resultado73 # y era un campo de texto largo.74 Field('entregaResultados', 'boolean', default=False, 75 label=T('Entrega de Resultados')),76 Field('ensayoCalibracion', 'boolean', default=False, 77 label=T('Informe de ensayo o calibración')),78 Field('certificadoConformidadProducto', 'boolean', default=False, 79 label=T('Certificado de conformidad del producto (ensayado o calibrado)')),80 Field('certificadoCalibracion', 'boolean', default=False,81 label=T('Certificado de calibración')),82 Field('otro','boolean', default=False, label=T('Otro')),83 # Ámbito de aplicación de un servicio. Checklist.84 Field('ambito_in_situ', 'boolean', default=False, label=T('Ámbito: In Situ')),85 Field('ambito_en_campo', 'boolean', default=False, label=T('Ámbito: En Campo')),86 Field('ambito_otro', 'boolean', default=False, label=T('Ámbito: Otro')),87 Field('ambito_otro_detalle', 'string', label=T('Ámbito es otro, especifique:')),88 # Personal que presta el Servicio89 Field('per_tecnico', 'boolean', default=False, label=T('Técnico')),90 Field('cant_per_tecnico', 'boolean', default=False, label=T('Cantidad Técnico')),91 Field('per_supervisor', 'boolean', default=False, label=T('Supervisor')),92 Field('cant_per_supervisor', 'boolean', default=False, label=T('Cantidad Supervisor')),93 Field('per_tesista', 'boolean', default=False, label=T('Tesista')),94 Field('cant_per_tesista', 'boolean', default=False, label=T('Cantidad Tesista')),95 Field('per_pasante', 'boolean', default=False, label=T('Pasante')),96 Field('cant_per_pasante', 'boolean', default=False, label=T('Cantidad Pasante')),97 Field('per_preparador', 'boolean', label=T('Preparador')),98 Field('cant_per_preparador', 'boolean', label=T('Cantidad Preparador')),99 Field('per_obrero', 'boolean', default=False, label=T('Obrero')),100 Field('cant_per_obrero', 'boolean', default=False, label=T('Cantidad Obrero')),101 Field('per_otro', 'boolean', default=False, label=T('Otro')),102 Field('per_otro_detalle', 'string', label=T('Otro, especifique')),103 # Equipo que presta el Servicio104 Field('equipo_presta_servicio', 'string', notnull=True, label=T('Equipo Presta Servicio')),105 # Espacio Fisico donde se desarrolla el servicio106 Field('esp_fis_servicio', 'reference espacios_fisicos', requires=IS_IN_DB(db, db.espacios_fisicos.id, '%(codigo)s'), 107 label=T('Espacio Físico')),108 # Insumos (requerimientos del servicio)109 Field('insumos_servicio', 'string', notnull=True, label=T('Insumos del Servicio')),110 # Ambiente para la ejecucion del servicio111 Field('condicion_ambiental', 'boolean', default=False, label=T('Requiere?')),112 Field('condicion_ambiental_detalle', 'string', label=T('Si requiere, especifique:'))113)114db.servicios._plural = 'Servicios'115db.servicios._singular = 'Servicio'116#############################################################################117# TABLA: PROPOSITOS118#119#120#121##############################################################################122db.define_table(123 'propositos',124 Field('tipo', 'string', requires=IS_NOT_EMPTY())125)126#############################################################################127# TABLA: SOLICITUDES DE SERVICIOS128#129# Esta tabla es el primer lugar en donde se encuentra un servicio al 130# llenarse el formulario de solicitudes de servicios.131#132##############################################################################133db.define_table(134 'solicitudes', 135 Field('registro', 'string', requires=IS_NOT_EMPTY(), 136 label=T('Número de Registro')),137 Field('responsable', 'reference t_Personal', 138 requires=IS_IN_DB(db, db.t_Personal.id, '%(f_nombre)s | %(f_email)s'), 139 label=T('Responsable de la Solicitud')),140 Field('fecha', 'date',141 requires=IS_DATE(format=('%d-%m-%Y')), 142 default=request.now, notnull=True, label=T('Fecha de Solicitud')),143 Field('id_servicio_solicitud', 'reference servicios', 144 requires=IS_IN_DB(db, db.servicios.id, '%(nombre)s'), 145 label=T('Servicio Solicitado')),146 Field('proposito', 'reference propositos', 147 requires=IS_IN_DB(db, db.propositos.id, '%(tipo)s'), 148 label=T('Propósito del servicio solicitado')),149 Field('proposito_descripcion', 'string', 150 requires=IS_NOT_EMPTY(), label=T('Descripción del propósito')),151 # Si el propósito es extensión, este campo se llena con el cliente final.152 Field('proposito_cliente_final', 'string', label=T('Cliente final del propósito')),153 Field('descripcion', 'string', label=T('Descripción de la Solicitud')),154 155 Field('observaciones', 'string', label=T('Observaciones de la Solicitud')),156 # Estado = -1 :Denegado157 # Estado = 0 :Por aprobación158 # Estado = 1 :pendiente por ejecutar159 # Estado = 2 :pendiente por certificar160 # Estado = 3 :certificado161 Field('estado','integer', default=0, label=T('Estado de Solicitud')),162 Field('aprobada_por', 'string', label=T('Solicitud Aprobada Por')),163 Field('fecha_aprobacion', 'date', label=T('Fecha de Aprobacion de Solicitud')),164 Field('elaborada_por', 'string', label=T('Solicitud Elaborada Por')),165 Field('fecha_elaboracion', 'date', label=T('Fecha de Elaboracion de Solicitud')),166)167##############################################################################168# TABLA: HISTORIAL DE SERVICIOS169#170# Tabla de servicios solicitados ya ejecutados y certificados. 171# Tabla final para una solicitud de servicio (Solicitud estado 3).172#173##############################################################################174db.define_table(175 "historial_solicitudes",176 Field('registro_solicitud', 'string', requires=IS_NOT_EMPTY(), 177 label=T('Número de Registro de la Solicitud')),178 Field('nombre_servicio', 'string', requires=IS_NOT_EMPTY(), 179 label=T('Nombre del Servicio')),180 Field('tipo_servicio', 'string', requires=IS_NOT_EMPTY(),181 label=T('Tipo del Servicio')),182 Field('categoria_servicio', 'string', requires=IS_NOT_EMPTY(), 183 label=T('Categoría del Servicio')),184 Field('proposito_solicitud', 'string', requires=IS_NOT_EMPTY(), 185 label=T('Propósito del Servicio Solicitado')),186 Field('proposito_solicitud_descripcion', 'string', 187 requires=IS_NOT_EMPTY(), 188 label=T('Descripción del Propósito del Servicio Solicitado')),189 Field('descripcion_solicitud', 'string', 190 label=T('Descripción de la Solicitud')),191 Field('observaciones_solicitud', 'string', 192 label=T('Observaciones de la Solicitud')),193 Field('responsable_solicitud', 'string', requires=IS_NOT_EMPTY(), 194 label=T('Responsable de la Solicitud')),195 Field('ci_responsable_solicitud', 'string', requires=IS_NOT_EMPTY(), 196 label=T('Cédula del Responsable de la Solicitud')),197 Field('email_responsable_solicitud', 'string', requires=IS_NOT_EMPTY(), 198 label=T('Correo del Responsable de la Solicitud')),199 Field('telefono_responsable_solicitud', 'string', requires=IS_NOT_EMPTY(), 200 label=T('Teléfono del Responsable de la Solicitud')),201 Field('cargo_responsable_solicitud', 'string', requires=IS_NOT_EMPTY(), 202 label=T('Cargo del Responsable de la Solicitud')),203 Field('nombre_dependencia_solicitante', 'string', requires=IS_NOT_EMPTY(), 204 label=T('Nombre de la Dependencia Solicitante')),205 Field('nombre_jefe_dependencia_solicitante', 'string', requires=IS_NOT_EMPTY(), 206 label=T('Nombre del Jefe de la Dependencia Solicitante')),207 Field('adscripcion_dependencia_solicitante', 'string', requires=IS_NOT_EMPTY(), 208 label=T('Unidad de Adscripción de la Dependencia Solicitante')),209 Field('fecha_solicitud', 'date', 210 requires=IS_DATE(format=('%d-%m-%Y')), 211 label=T('Fecha de Solicitud')),212 Field('nombre_dependencia_ejecutora', 'string', requires=IS_NOT_EMPTY(), 213 label=T('Nombre de la Dependencia Ejecutora')),214 Field('nombre_jefe_dependencia_ejecutora', 'string', requires=IS_NOT_EMPTY(), 215 label=T('Nombre del Jefe de la Dependencia Ejecutora')),216 Field('adscripcion_dependencia_ejecutora', 'string', requires=IS_NOT_EMPTY(), 217 label=T('Unidad de Adscripción de la Dependencia Ejecutora')),218 Field('lugar_ejecucion_servicio', 'string', requires=IS_NOT_EMPTY(), 219 label=T('Lugar de Ejecución del Servicio')),220 Field('solicitud_aprobada_por', 'string', requires=IS_NOT_EMPTY(), 221 label=T('Solicitud Aprobada Por')),222 Field('fecha_aprobacion_solicitud', 'date', 223 requires=IS_DATE(format=('%d-%m-%Y')), 224 label=T('Fecha de Aprobación de la Solicitud')),225 Field('fecha_elaboracion_solicitud', 'date', 226 requires=IS_DATE(format=('%d-%m-%Y')), 227 label=T('Fecha de Elaboración de la Solicitud')),228 Field('solicitud_elaborada_por', 'string', requires=IS_NOT_EMPTY(), 229 label=T('Solicitud Elaborada por')),230 Field('fecha_certificacion', 'date', requires=IS_DATE(format=('%d-%m-%Y')), 231 label=T('Fecha de Certificación de la Solicitud')),232 Field('numero_de_proyecto', 'string', requires=IS_NOT_EMPTY(), 233 label=T('Número de Proyecto'))...

Full Screen

Full Screen

reservoir_flow_and_surface.py

Source:reservoir_flow_and_surface.py Github

copy

Full Screen

...52 self._surface_YY = parsed.get('group_8_YY')53 self._surface_GG = parsed.get('group_8_GG')54 @property55 def month(self):56 if is_not_empty(self._MM):57 return valid_month(self._MM)58 else:59 return None60 @property61 def stage(self):62 if is_not_empty(self._stage):63 return get_stage(self._stage)64 else:65 return None66 @property67 def flow(self):68 if is_not_empty(self._flow):69 return get_flow(self._flow)70 else:71 return None72 @property73 def area(self):74 if is_not_empty(self._area):75 return get_flow(self._area)76 else:77 return None78 @property79 def depth(self):80 if is_not_empty(self._depth):81 return int(self._depth)82 else:83 return None84 @property85 def flow_measure_day(self):86 if is_not_empty(self._flow_YY):87 return valid_date(self._flow_YY)88 else:89 return None90 @property91 def flow_measure_time(self):92 if is_not_empty(self._flow_GG):93 return valid_time(self._flow_GG)94 else:95 return None96 @property97 def wind_direction(self, verbose=True):98 if is_not_empty(self._wind_direction):99 return get_scale(self._wind_direction, WIND_DIRECTION_SCALE, verbose=verbose)100 else:101 return None102 @property103 def wind_speed(self):104 if is_not_empty(self._wind_speed):105 return int(self._wind_speed)106 else:107 return None108 @property109 def wave_direction(self, verbose=True):110 if is_not_empty(self._wave_direction):111 return get_scale(self._wave_direction, WAVE_DIRECTION_SCALE, verbose=verbose)112 else:113 return None114 @property115 def wave_depth(self):116 if is_not_empty(self._wave_depth):117 return int(self._wave_depth)118 else:119 return None120 @property121 def surface_condition(self, verbose=False):122 if is_not_empty(self._surface_condition):123 return get_scale(self._wave_direction, WATER_SURFACE_SCALE, verbose=verbose)124 else:125 return None126 @property127 def surface_obser_day(self):128 if is_not_empty(self._surface_YY):129 return valid_date(self._surface_YY)130 else:131 return None132 @property133 def surface_obser_time(self):134 if is_not_empty(self._surface_GG):135 return valid_time(self._surface_GG)136 else:137 return None138 def decode_flow(self):139 output = {}140 if self.month is not None:141 output['measure_month'] = self.month142 if self.stage is not None:143 output['stage'] = self.stage144 if self.flow is not None:145 output['discharge'] = self.flow146 if self.area is not None:147 output['cross_sectional_area'] = self.area148 if self.depth is not None:...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Slash automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful