Best Python code snippet using slash
db.py
Source:db.py  
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)...personal.py
Source:personal.py  
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'...servicios.py
Source:servicios.py  
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'))...reservoir_flow_and_surface.py
Source:reservoir_flow_and_surface.py  
...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:...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.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
