Write Code for Batch Jobs
Overview
Previously, developers required LeadSquared administrator access to create and test Batch Jobs. The values of confidential variables (e.g., access keys, secret keys, FTP credentials, SQL server credentials, etc.) and critical operations like unpublishing and deleting Lapps were made available through administrator access.
The Batch Jobs SDK now helps mitigate security risks by enabling developers to create, test, and publish Batch Jobs (on their local machines), without administrator access to your LeadSquared account. It grants developers limited access to Batch Jobs functionality through distinct access levels (Administrator, Developer – Configurator, Developer) and token-based authorization.
The Batch Jobs SDK package facilitates quick and easy offline development. This guide documents the features available in the SDK, and how they work. For more information, see lsbatch Software Development Kit.
Developer Access Levels
The following access levels and permissions are available –
Create Batch Job | Upload Code | Add Variable | Publish | *Schedule | |
Admin | Yes | Yes | Yes | Yes | No |
Developer – Configurator | Yes | Yes | Yes | No | No |
Developer | Yes | Yes | No | No | No |
* Batch Jobs must be scheduled from the UI, for more details, see How to Schedule a Batch Job.
The LeadSquared admin user must generate the token for each access level from the Manage Batch Jobs page on the LeadSquared application –
- Login to your LeadSquared account.
- On the main menu, navigate to Apps>Manage Batch Jobs.
- On the panel on the right, under Global, click SDK Developer Token.
- Select the Access Level, and enter a user name (max 100 characters, only permitted special characters dot “.”,comma “,” and hyphen”-“).
- Click the Generate SDK Token alongside each access level. Click the icon to view the token and click to copy the token.
Note: The generated token is valid for only 30 days. Once expired, the admin must generate a new token.
Installation
Open a command prompt and run the following command to install the lsbatch library –
pip install lsbatch
Note: You must have Python 3.7 and virtualenv installed.
Initialize a New Batch Job Project
To create a new Batch Job in your local machine, navigate to your project folder and execute the following command in cmd or shell:
lsbatch init
Now enter your Batch Job name (e.g., first-batchjob) –
> Your Batch Job Name:
A new folder with the provided name will be created in the current directory. This folder contains all the libraries required for Batch Jobs local development. You will find custom virtualenv in the batch-virtualenv
folder with the following default packages installed –
- boto3==1.14.33
- mysql-connector-python==8.0.21
- pysftp==0.2.9
- sendgrid==6.4.4
- pandas==1.1.0
- pyyaml==5.3.1
- openpyxl==3.0.4
- requests==2.24.0
- tabulate==0.8.7
- numpy==1.19.1
Note: After initiating batch with lsbatch init
, make sure all the following commands are executed at the project folder level –
cd {batch_job_folder_name}
General Rules for Writing Batch Jobs
- Your Batch Job folder should have a folder named
src
that will be used to write your actual code. This folder is automatically created during theinit
process. - You should keep Batch Job files in the
src
folder only. src
folder should havemain.py
file that is the starting point of your application. By default, this file is created with sample code during theinit
process- Your
src
folder may contain a requirements.txt file which can be used to provide any custom packages which you may require.
Using This Library
Batch Job provides various functions for common tasks like logging, sending notification emails, or making DB queries. lsbatch
packs and mocks these functions –
- Write Logs
- Use Variables
- Send Notification Emails
- Connect to Database
- Execute a Batch Job
- Install LeadSquared Batch Job Dependencies in the Current Folder
- Install Custom Packages
- Pack Your Project for Deployment
- Configure Tenant Profile
- Create and Upload a Batch Job Code For Deployment
- Deploy or Publish a Batch Job
- Uninstall Package
Write Logs
Examples for writing logs are also included as comments in the sample code.
Writing a simple log –
LS.log.info('Hello')
Passing an additional JSON object (e.g., support email address) to a log –
LS.log.info('Hello', {"Support Email": "support@leadsquared.com"}
Accessing a variable value – LS.settings.<KeyName>
(Key-Pair eg. Key = mykey) –
LS.log.info(LS.settings.mykey)
Writing a debug log –
LS.log.debug('Debug Log Example')
Errors and exceptions –
LS.log.error(type(err).__name__, traceback.format_exc())
LS.log.fatal(type(err).__name__, traceback.format_exc())
Use Variables
Used to store key-value pair with sensitive/private data. For example API key for some third-party service or your SFTP password. It can be retrieved using the following key –
LS.settings.<key_name>
Send Notification Emails
Automated notification emails with the default template can be configured directly from the UI, see the settings section of Create a Batch Job.
To create your own custom email content, use –
LS.email.send_email_notification(<EmailType>, <Subject>, <EmailBody>, isHTML =<True/False>, attachments =<ListofAttachments>)
Where
EmailType
one of “Success” or “Failure” which corresponds to success or failure of execution statusSubject
can be maximum 255 character, above which it will be trimmedEmailBody
is plain text or HTML contentisHTML
is an optional parameter with default value as Trueattachments
is a list of attachments that can be passed as file names. These files are expected to be present in the user folder of Batch Jobs executions.
Note: This function can only be called max 3 times in one Batch Job execution.
Connect to Database
With Batch Jobs, you can directly communicate with the LeadSquared database or the LeadSquared ETL database for your account. You can use this feature to create your own customized reports.
Note: Connecting to Database is by default disabled in Batch Jobs. If you require it, please connect us at support@leadsquared.com. If it’s disabled, “Test Queries” (shown below) won’t be visible.
Use the following function to query your account database or ETL database-
LS.db.execute_DB_query(<query>, multi=False)
LS.db.execute_ETL_query(<query>, multi=False)
By default, the function considers the query as a single statement. For multiline query, pass multi
parameter as True
To test the database connection and queries, under Tools, click Test Queries.
Select the database as either Tenant DB or Tenant ETL DB. Enter a query, then click Run Query. The results will display a sample of only 10 rows.
Mocking DB query result
To mock the DB result use the file query.json
which is provided in the root project folder. It contains JSON where
- key is the DB query(exact – case sensitive)
- value is the csv file name that contains the result.
You will also find a sample_query_result.csv
in project’s root folder which is mapped as a sample response in query.json
.
You can create a CSV file by any name. Please note that this is purely for mocking purposes and does not evaluate the query, syntax, or result in any way. Use the admin panel in your LeadSquared account to validate the same.
Execute a Batch Job
To run a batch job, enter the following command –
lsbatch run
This will execute the code in context of virtual environment that has already been setup.
Install LeadSquared Batch Job Dependencies in the Current Folder
The root folder already contains a .gitignore
file that will commit only necessary files to your source code repository. Feel free to update the file as per your need. If you clone the repository, run the lsbatch install
command inside the project directory to set up the Batch Job environment again.
lsbatch install
This command can also be used in existing projects to reset the Batch Jobs environment at any time.
Note: To run this command successfully, the current directory should have src
that contains your code.
Install Custom Packages
lsbatch install {package_name}
This installs your custom package to batch-virtualenv
folder. Also it creates/updates a requirements.txt
file inside src
folder. requirements.txt
file will be used to identify dependencies at the time of actual execution of the Batch Job.
Pack Your Project for Deployment
Batch Jobs accepts the deliverables as a zip file. To zip the project, execute the following command –
lsbatch pack
This will create a code.zip
file in the directory named deliverables
. Remember to add this directory to the .gitignore
file in order to reduce the size of the repository.
Configure Tenant Profile
You can create multiple tenant profiles with various access levels using the configure command –
lsbatch configure
You will be prompted to enter
Profile Name
– Define the profile name. We suggest you enter a profile name in the following convention so it is easy to remember and re-use – <orgcode>+<developer access level> (e.g., 1234Admin)Orgcode
– LeadSquared organization code (e.g., 1234). To find your orgcode, see How to Find My LeadSquared Orgcode.Region
– You may pass 1, 11, 21, 31, or 51. Alternatively, you can pass SGP, US, MUM, IR, AU or ID. 1 denotes Singapore | 11 denotes U.S.A | 21 denotes India | 31 denotes Ireland | 51 denotes Jakarta.Token
– Pass the token generated from the Batch Jobs UI.
You can also simply run lsbatch
, it will prompt all available commands –
lsbatch
Create and Upload a Batch Job Code for Deployment
To learn how to upload the batch job code directly from the LeadSquared UI, see Create a Batch Job.
Pass the command line parameters --orgcode
--region
--token
. You may also pass these parameters as -o
, -r
and -t
.
E.g., lsbatch save --orgcode 1234 --region 1 --token asdfghijkl1234
Alternatively, if you’ve configured a profile use --profile
or -p
.
E.g., lsbatch save --profile mytenant1234
Note:
- If the Batch Job Id doesn’t exist in the
batch_details.json
file, the command creates a Batch Job and uploads the code. - If the Batch Job Id exists in
batch_detals.json
, it packs and uploads the code to the Batch Job.
To save the settings, pass command line parameter --settings
, or -s
.
E.g., lsbatch save --profile mytenant1234 --settings
Note: Only Admins and Developer – Configurator can save the settings.
Deploy or Publish a Batch Job
The following command publishes a Batch Job.
Pass the command line parameters --orgcode
--region
--token
. You may also pass these parameters as -o
, -r
and -t
.
E.g., lsbatch publish --orgcode 1234 --region 1 --token asdfghijkl1234
Alternatively, if you’ve configured a profile use --profile
or -p
.
E.g., lsbatch publish --profile mytenant1234
Note: Only Admins can publish a Batch Job.
Uninstall Package
To uninstall a custom package, execute the following command
lsbatch uninstall {package_name}
This will also remove the package name from requirements.txt
file.
Next Steps
Learn how to Create and Schedule a Batch Job.