10 March 2015

ElfPy - a Tasty Little Script for Downloading Event Log Files on Multiple Platforms



We launched Event Monitoring with Event Log Files last November. Since then, we've had a lot of customers sign up to download their log files.

But recently, one of those customers reached out with a problem. He was a Salesforce administrator on a Windows machine. That meant he had to write code or use one of my stock Bash shell scripts. Most administrators aren't used to writing code and Windows as a platform doesn't support Bash shell scripts without a lot of elbow grease, duct tape, and spit.

To fix this, I created a Python script that runs on multiple platforms including Windows, Linux, and Mac OSX. You can download the script from my Github repo.  You will need to install Python version 2.7.9 on your machine first; however, that's far easier than trying to get a Bash shell script working with Cygwin.

Why python? Because it's easy to learn, it's easy to read, it has incredible library support, and most importantly, it supports multiple platforms including some I haven't even heard of!

To run the script, open a terminal (or cmd on Windows) and type:

python elf.py

or if you have multiple versions of Python, including 2.7.9, installed already:

python2.7 elf.py

The script is very simple and takes four prompts:
  1. Username
  2. Password (hidden)
  3. Date range
  4. Download directory
Beyond that, it's as easy as running the script from a terminal or command prompt and you're ready to start downloading Event Log Files on Mac, Linux, or Windows.

133 comments:

  1. Hi Adam -- I don't see any other comments -- how can this be possible?!

    Thanks so much for this -- I'm having some difficulties in my first attempt to run, but will do some more diagnosis before bothering you further. It can't be because I downloaded the default, Python 2.7.10 instead of your cited 2.7.9, can it? Can the dot version be that different?

    If I've piqued your curiosity, here's the output I'm getting:

    C:\Users\David\Downloads>python elf.py
    Username:
    dbrenn23@optonline.net.legacy1
    Password:

    Using user inputed username: dbrenn23@optonline.net.legacy1
    Traceback (most recent call last):
    File "elf.py", line 236, in
    download_elf()
    File "elf.py", line 112, in download_elf
    access_token, instance_url = login()
    File "elf.py", line 94, in login
    res = urllib2.urlopen(req)
    File "C:\Python27\lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
    File "C:\Python27\lib\urllib2.py", line 437, in open
    response = meth(req, response)
    File "C:\Python27\lib\urllib2.py", line 550, in http_response
    'http', request, response, code, msg, hdrs)
    File "C:\Python27\lib\urllib2.py", line 475, in error
    return self._call_chain(*args)
    File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
    result = func(*args)
    File "C:\Python27\lib\urllib2.py", line 558, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    urllib2.HTTPError: HTTP Error 400: Bad Request

    C:\Users\David\Downloads>

    ReplyDelete
    Replies
    1. I plead Sunday-Morning-Before-9-itis. Log indicates that I didn't put in my API Token. . Tried appending token to password - first attempt a no-go, but may still be user/typo error. If not, good opp for me to learn more about Python by building a separate Token prompt into your script. I'll be back...

      Delete
  2. This comment has been removed by the author.

    ReplyDelete
  3. Hi Adam,

    Tried to download the logs using your script with Python 279. It will not log me into Salesforce neither do I see a rejection in the SF login history with my user. The error python throws is:

    Traceback (most recent call last):
    File "elf.py", line 236, in
    download_elf()
    File "elf.py", line 112, in download_elf
    access_token, instance_url = login()
    File "elf.py", line 94, in login
    res = urllib2.urlopen(req)
    File "C:\Localdata\Programma's\Python279\lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
    File "C:\Localdata\Programma's\Python279\lib\urllib2.py", line 431, in open
    response = self._open(req, data)
    File "C:\Localdata\Programma's\Python279\lib\urllib2.py", line 449, in _open
    '_open', req)
    File "C:\Localdata\Programma's\Python279\lib\urllib2.py", line 409, in _call_chain
    result = func(*args)
    File "C:\Localdata\Programma's\Python279\lib\urllib2.py", line 1240, in https_open
    context=self._context)
    File "C:\Localdata\Programma's\Python279\lib\urllib2.py", line 1197, in do_open
    raise URLError(err)
    urllib2.URLError:

    Regards,
    Jos

    ReplyDelete
    Replies
    1. Hi Jos,

      Sorry you're encountering this error. I didn't put enough error handling in the original script. Couple of suggestions:
      1. Even though you're not getting a login history failure row, try logging in as an API user with a profile that has ip restrictions: 0.0.0.0 - 255.255.255.255. I wouldn't keep this setting permanent but it will tell us if it's a security token issue.
      2. Add print res and print req statements into the login block
      3. Implement try catch in login block

      If that doesn't work, we can set up some time to talk via goto or google hangout to review what's happening. Thanks!

      AT

      Delete
  4. Thanks for the post. No issues for me after I updated my PATH environment variable on my Windows machine. Can you offer any suggestions on how to automate running this script in windows? How can we store the password securely?

    ReplyDelete
  5. I don't know of any good job schedulers on Windows unfortunately. I have a sample script for Linux to hide a password but not sure how on Windows unfortunately. Hope someone in the community who knows Windows better might have a good answer.

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
    2. This comment has been removed by the author.

      Delete
    3. Thanks for your reply to that. I am "Unknown" .. I may switch gears then to Linux. Can you provide that script? And I guess i could schedule the script via cron, right?

      Delete
    4. I usually use crontab on Linux. It's pretty easy to find tutorials online for it. And it's easier than Launchd on Mac for scheduled jobs imho...

      Delete
    5. I scheduled it to run using the Task Scheduler. This link might help anyone who hasn't figured it out : http://desktop.arcgis.com/en/arcmap/10.3/analyze/executing-tools/scheduling-a-python-script-to-run-at-prescribed-times.htm

      Delete
  6. This comment has been removed by the author.

    ReplyDelete
  7. Thanks for writing this script. I notice that it downloads the login and logout activities for all users. Does it also download other activities like "Exported Reports"?

    ReplyDelete
    Replies
    1. It does but only in Developer Edition orgs or if you have purchased the full Event Monitoring product offering for your production org where we support 32 event types.

      Delete
  8. Hi Adam,

    Thanks for the script, it's perfect!
    But sometimes it downloads just first four event types and nothing more.
    That's what it downloaded yesterday when I selected last 4 days:

    2016-03-17-ApexCallout.csv
    2016-03-17-ApexExecution.csv
    2016-03-17-ApexSoap.csv
    2016-03-17-API.csv
    2016-03-17-AsyncReportRun.csv
    2016-03-18-ApexCallout.csv
    2016-03-18-ApexExecution.csv
    2016-03-18-ApexSoap.csv
    2016-03-18-API.csv
    2016-03-18-AsyncReportRun.csv
    2016-03-19-ApexCallout.csv
    2016-03-19-ApexExecution.csv
    2016-03-19-ApexSoap.csv
    2016-03-19-API.csv
    2016-03-19-AsyncReportRun.csv
    2016-03-20-ApexCallout.csv
    2016-03-20-ApexExecution.csv
    2016-03-20-ApexSoap.csv
    2016-03-20-API.csv
    2016-03-20-AsyncReportRun.csv

    Could you please point on the possible solution?
    Thank you!

    ReplyDelete
    Replies
    1. we only generate files for event types where there's activity. For instance, if you didn't run any reports for a day, we wouldn't generate a report file.

      Is it possible, you haven't done anything via the UI in the org for several days?

      Delete
    2. Hi Adam,

      Thanks for your reply. The main thing is that there were other event types, I'm sure because I've checked them through heroku event log browser.
      I absolutely have no clue why it happens :(

      Delete
  9. Hi Adam,
    I'm having trouble Finding my Client id and Client secret in SFDC. Also, for password, I' putting in password and token. Is that right ? I'm getting a 400 error.
    Thank in advance fro your reply.
    Regards,
    Bill

    ReplyDelete
  10. Hi Adam,
    I've got the client id and secret set up but am still getting this error:
    Traceback (most recent call last):
    File "D:\SFDCMonitor\elf.py", line 232, in
    download_elf()
    File "D:\SFDCMonitor\elf.py", line 124, in download_elf
    res = urllib2.urlopen(req)
    File "C:\Python27\lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
    File "C:\Python27\lib\urllib2.py", line 437, in open
    response = meth(req, response)
    File "C:\Python27\lib\urllib2.py", line 550, in http_response
    'http', request, response, code, msg, hdrs)
    File "C:\Python27\lib\urllib2.py", line 475, in error
    return self._call_chain(*args)
    File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
    result = func(*args)
    File "C:\Python27\lib\urllib2.py", line 558, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    HTTPError: HTTP Error 400: Bad Request

    ReplyDelete
    Replies
    1. Hi Bill,

      Thanks for posting. Did you resolve this? One potential reason may be because of the Security Token? Did you try adding that into the password flow for the user? Thanks!

      AT

      Delete
  11. Hi Adam,
    I am not able to download data for Event Login.
    When i have inserted username & password, it is giving me below error.
    Using user inputed username: acutedge@cssny.org
    check point
    Traceback (most recent call last):
    File "elf.py", line 239, in
    download_elf()
    File "elf.py", line 115, in download_elf
    access_token, instance_url = login()
    File "elf.py", line 97, in login
    res = urllib2.urlopen(req)
    File "C:\Python27\lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
    File "C:\Python27\lib\urllib2.py", line 435, in open
    response = meth(req, response)
    File "C:\Python27\lib\urllib2.py", line 548, in http_response
    'http', request, response, code, msg, hdrs)
    File "C:\Python27\lib\urllib2.py", line 473, in error
    return self._call_chain(*args)
    File "C:\Python27\lib\urllib2.py", line 407, in _call_chain
    result = func(*args)
    File "C:\Python27\lib\urllib2.py", line 556, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    urllib2.HTTPError: HTTP Error 400: Bad Request


    Please give any solution.

    ReplyDelete
    Replies
    1. Hi Arvind - may need som emore information. From the traceback, all I know is that the login failed, not why. If you can't get this to work, you can also try the elf browser (https://trailhead.salesforce.com/modules/event_monitoring/units/event_monitoring_download) which bootstrap creates a bash file for the same purposes. thanks!

      Delete
    2. Any luck on solving for this? I'm getting the same error. when trying to download data.

      Delete
  12. Hey Adam, Don't the log files change with each release? Is there a good way to parse the file to insert into Postgre? If the log files are constantly changing, then the Postgre schema would be broken with every release. Any suggestions on getting the log file data to Wave?

    ReplyDelete
  13. There are two fields on event log file object that provide field name and data type. We created them so that you could introspect the schema in sandbox prior to a major release to check for changes.

    ReplyDelete
  14. Adam,

    I do not know scripting but trying to use this and getting error:
    Traceback (most recent call last):
    File "C:\Users\esssrv\elf.py", line 239, in
    download_elf()
    File "C:\Users\esssrv\elf.py", line 115, in download_elf
    access_token, instance_url = login()
    File "C:\Users\esssrv\elf.py", line 97, in login
    res = urllib2.urlopen(req)
    File "C:\Python27\lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
    File "C:\Python27\lib\urllib2.py", line 435, in open
    response = meth(req, response)
    File "C:\Python27\lib\urllib2.py", line 548, in http_response
    'http', request, response, code, msg, hdrs)
    File "C:\Python27\lib\urllib2.py", line 473, in error
    return self._call_chain(*args)
    File "C:\Python27\lib\urllib2.py", line 407, in _call_chain
    result = func(*args)
    File "C:\Python27\lib\urllib2.py", line 556, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    urllib2.HTTPError: HTTP Error 400: Bad Request

    C:\Users\esssrv>



    ReplyDelete
    Replies
    1. Adam or anyone, is there a way we can select just select event types?

      Attempted to update the script, but had no luck only pulling 2 events types that my company would like to retain. Currently running into a memory error when pulling APEX Triggers that I am not able to get around.

      At the start of July the script was pulling multiple days worth of values before I would run into this error.

      Delete
  15. Hi Mike,

    I adjusted the script in a way that might help you.

    With these lines you can select timing and event type at prompt:

    if len(day) < 1:
    day = 'Last_n_Days:2'
    print 'Using default date range: ' + day + '\n'
    else:
    print 'Using user inputed date range: ' + day + '\n'

    et = raw_input('\nType: \n')
    # query Ids from Event Log File
    url = instance_url+'/services/data/v33.0/query?q=SELECT+Id+,+EventType+,+Logdate+From+EventLogFile+Where+LogDate+='+ day +'+and+EventType+='+ et

    Hope that helps.
    Jos

    ReplyDelete
  16. Hi Adam,

    I am also facing same issue

    File "elf.py", line 236, in
    download_elf()
    File "elf.py", line 112, in download_elf
    access_token, instance_url = login()
    File "elf.py", line 94, in login
    res = urllib2.urlopen(req)
    File "C:\Python27\lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
    File "C:\Python27\lib\urllib2.py", line 437, in open
    response = meth(req, response)
    File "C:\Python27\lib\urllib2.py", line 550, in http_response
    'http', request, response, code, msg, hdrs)
    File "C:\Python27\lib\urllib2.py", line 475, in error
    return self._call_chain(*args)
    File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
    result = func(*args)
    File "C:\Python27\lib\urllib2.py", line 558, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    urllib2.HTTPError: HTTP Error 400: Bad Request

    What i noticied is it's taking user name in my case & password even if i try to type it is taking blank

    ReplyDelete
    Replies
    1. I had problems with v 2.7 and the TLS upgrade in orgs. Have you tried upgrading to v 3.4 of python? It may help and only require minor refactor.

      Delete
  17. Hello Adam,

    I'm also getting the "HTTPError: HTTP Error 400: Bad Request" error. I have Python 2.7.9 installed.

    I tried attaching my two factor code to my password since my API logins require two factor, but it wasn't working. Perhaps I'm misunderstanding how the API logins work. Any ideas?

    Thanks for your help!

    ReplyDelete
    Replies
    1. Hi Adam,

      You have to create a Connected App under Setup->Apps and copy the Consumer key and Consumer secret in lines 41 and 42 of the python script. You should then be able t run it fine

      Delete
  18. This comment has been removed by the author.

    ReplyDelete
  19. Hi

    You have to create a Connected App under Setup->Apps and copy the Consumer key and Consumer secret in lines 41 and 42 of the python script. You should then be able t run it fine

    ReplyDelete
  20. I'm facing SSL error as below -

    Traceback (most recent call last):
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1317, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1229, in request
    self._send_request(method, url, body, headers, encode_chunked)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1275, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1224, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1016, in _send_output
    self.send(msg)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 956, in send
    self.connect()
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1392, in connect
    server_hostname=server_hostname)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/ssl.py", line 412, in wrap_socket
    session=session
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/ssl.py", line 853, in _create
    self.do_handshake()
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/ssl.py", line 1117, in do_handshake
    self._sslobj.do_handshake()
    ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "elf.py", line 239, in
    download_elf()
    File "elf.py", line 130, in download_elf
    res = urllib.request.urlopen(req)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 525, in open
    response = self._open(req, data)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 543, in _open
    '_open', req)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1360, in https_open
    context=self._context, check_hostname=self._check_hostname)
    File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1319, in do_open
    raise URLError(err)
    urllib.error.URLError:

    ReplyDelete
  21. Hi I am getting this error
    How to resolve it,
    I very new to python.
    thanks

    Date range (e.g. Last_n_Days:2, Today, Tomorrow):2
    Using user inputed date range: 2

    Traceback (most recent call last):
    File "c:/Users/vkondapalli/Desktop/elfPy-master/elf.py", line 235, in
    download_elf()
    File "c:/Users/vkondapalli/Desktop/elfPy-master/elf.py", line 126, in download_elf
    res = urllib.request.urlopen(req)
    File "C:\Users\vkondapalli\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
    File "C:\Users\vkondapalli\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 531, in open
    response = meth(req, response)
    File "C:\Users\vkondapalli\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 640, in http_response
    response = self.parent.error(
    File "C:\Users\vkondapalli\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 569, in error
    return self._call_chain(*args)
    File "C:\Users\vkondapalli\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 502, in _call_chain
    result = func(*args)
    File "C:\Users\vkondapalli\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py", line 649, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
    urllib.error.HTTPError: HTTP Error 400: Bad Request

    ReplyDelete
  22. Thanks for sharing this quality information with us. I really enjoyed reading. Will surely going to share this URL with my friends. RV campgrounds Lake Buchanan

    ReplyDelete
  23. It's very difficult to stumble upon the right essay service for your college needs. That's why reddit lovers prefer
    https://www.reddit.com/r/HomeworkCentral/comments/f1s0yq/how_to_choose_the_right_essay_writing_service_on/

    ReplyDelete
  24. It is imperative that we read blog post very carefully. I am already done it and find that this post is really amazing. buy instagram video views paypal

    ReplyDelete
  25. Hi there, I discovered your blog per Google bit searching for such kinda educational advise moreover your inform beholds very remarkable for me.here

    ReplyDelete
  26. NorthShield Windows and Doors offers a wide selection of high-quality windows and doors. Among other features, our products offer the latest in security, durability, and design. We are homeowners too, that’s why we work within your style preferences to find exactly what you need and provide you with durable products that will keep your home safe.Windows replacement

    ReplyDelete

  27. Great article with excellent content found very useful thank you waiting for next blog update.
    Data Analytics Course Online

    ReplyDelete
  28. Awesome article with top quality information and I appreciate the writer's choice for choosing this excellent topic found valuable thank you.
    Data Science Training in Hyderabad

    ReplyDelete
  29. I will very much appreciate the writer's choice for choosing this excellent article suitable for my topic. Here is a detailed description of the topic of the article that helped me the most. PMP Training in Hyderabad

    ReplyDelete
  30. Hi Adam,

    My python version is "Python 2.7.16", I am using elf2.py script but when running this script.

    I am getting the below mentioned error message.

    Traceback (most recent call last):
    File "elf2.py", line 240, in
    download_elf()
    File "elf2.py", line 116, in download_elf
    access_token, instance_url = login()
    File "elf2.py", line 98, in login
    res = urllib2.urlopen(req)
    File "/usr/lib64/python2.7/urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
    File "/usr/lib64/python2.7/urllib2.py", line 435, in open
    response = meth(req, response)
    File "/usr/lib64/python2.7/urllib2.py", line 548, in http_response
    'http', request, response, code, msg, hdrs)
    File "/usr/lib64/python2.7/urllib2.py", line 473, in error
    return self._call_chain(*args)
    File "/usr/lib64/python2.7/urllib2.py", line 407, in _call_chain
    result = func(*args)
    File "/usr/lib64/python2.7/urllib2.py", line 556, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    urllib2.HTTPError: HTTP Error 400: Bad Request

    Could you please help?

    Regards,
    Manish Singh

    ReplyDelete
    Replies
    1. Hi Manish,

      I created a simple python3 script for querying ELF within a specified start and end date. https://github.com/barhuken/python-salesforce-elf

      Best,
      Barhuken

      Delete
  31. Great article with valuable information found valuable and enjoyed reading it waiting for next blog updated thanks for sharing.
    typeerror nonetype object is not subscriptable

    ReplyDelete
  32. Nice Information Your first-class knowledge of this great job can become a suitable foundation for these people. I did some research on the subject and found that almost everyone will agree with your blog.
    Cyber Security Course in Bangalore

    ReplyDelete
  33. Writing in style and getting good compliments on the article is hard enough, to be honest, but you did it so calmly and with such a great feeling and got the job done. This item is owned with style and I give it a nice compliment. Better!
    Cyber Security Training in Bangalore

    ReplyDelete
  34. They are produced by high level developers who will stand out for the creation of their polo dress. You will find Ron Lauren polo shirts in an exclusive range which includes private lessons for men and women.

    Business Analytics Course in Bangalore

    ReplyDelete
  35. It's like you understand the topic well, but forgot to include your readers. Maybe you should think about it from several angles.

    Data Analytics Course in Bangalore

    ReplyDelete
  36. Actually I read it yesterday but I had some ideas about it and today I wanted to read it again because it is so well written.

    Data Science Course

    ReplyDelete
  37. I will very much appreciate the writer's choice for choosing this excellent article suitable for my topic. Here is a detailed description of the topic of the article that helped me the most.
    unindent does not match any outer indentation level

    ReplyDelete
  38. I'm glad I found this blog! Occasionally, students want to know the keys to writing productive literary essays. Your first-class knowledge of this great job can become a suitable foundation for these people. Good
    unindent does not match any outer indentation level python

    ReplyDelete
  39. Great Post. You have shared a very informative post with all of us. I also want to share some information about us: We, Delco Windows and Doors is one of the top rated window and doors company in Toronto, serving since 1989. Get in touch with us for doors and windows.

    ReplyDelete
  40. Very good message. I stumbled across your blog and wanted to say that I really enjoyed reading your articles. Anyway, I will subscribe to your feed and hope you post again soon.

    Business Analytics Course

    ReplyDelete
  41. Attend The Data Analyst Course From ExcelR. Practical Data Analyst Course Sessions With Assured Placement Support From Experienced Faculty. ExcelR Offers The Data Analyst Course.
    Data Analyst Course

    ReplyDelete
  42. I have to search sites with relevant information ,This is a
    wonderful blog,These type of blog keeps the users interest in
    the website, i am impressed. thank you.
    Data Science Training in Bangalore

    ReplyDelete

  43. I finally found a great article here with valuable information and just added your blog to my bookmarking sites thank you.
    Data Science Course in Bangalore

    ReplyDelete
  44. Your content is very unique and understandable useful for the readers keep update more article like this.
    data science course noida

    ReplyDelete
  45. I have to search sites with relevant information ,This is a
    wonderful blog,These type of blog keeps the users interest in
    the website, i am impressed. thank you.
    Data Science Training in Bangalore

    ReplyDelete
  46. Fantastic Site with useful and unique content looking forward to the next update thank you.
    Data Science Training in Hyderabad

    ReplyDelete
  47. Excellent site with great content and very informative. I would like to thank you for the efforts you have made in writing.
    Data Science Training in Bangalore

    ReplyDelete
  48. I am sure it will help many people. Keep up the good work. It's very compelling and I enjoyed browsing the entire blog.
    Data Analytics Courses in Bangalore

    ReplyDelete
  49. I always search online for articles that can help me. Obviously, there is a lot to know about this. I think you made a few good points about the features as well. Keep up the good work!
    Data Science In Bangalore

    ReplyDelete
  50. The regular visits listed here are the easiest way to appreciate its energy, which is why I go to the website every day for new and interesting information. Thank you so much!

    Data Science Institute in Bangalore

    ReplyDelete
  51. Really, this article is truly one of the best in article history. I am a collector of old "items" and sometimes read new items if I find them interesting. And this one that I found quite fascinating and should be part of my collection. Very good work!

    Data Science Institute in Bangalore

    ReplyDelete
  52. i am glad to discover this page : i have to thank you for the time i spent on this especially great reading !! i really liked each part and also bookmarked you for new information on your site.
    data science training in bangalore

    ReplyDelete
  53. Data Science Training in Bangalore Offered by myTectra is the most powerful Data Science Training ever offered with Top Quality Trainers, Best Price, Certification, and 24/7 Customer Care.

    https://www.mytectra.com/data-science-training-in-bangalore.html

    ReplyDelete
  54. The site is looking piece garish and it gets the guests eyes. Outline is really basic and a decent easy to use interface.
    I truly welcome the sort of points you post here. A debt of gratitude is in order for sharing us an incredible data that is really useful. Great day.
    Ac repair in Dallas

    ReplyDelete
  55. It is late to find this act. At least one should be familiar with the fact that such events exist. I agree with your blog and will come back to inspect it further in the future, so keep your performance going.
    Business Analytics Course

    ReplyDelete
  56. I think this is an informative and very useful and knowledgeable article. therefore, I would like to thank you for your effort in writing this article.

    Best Data Science Courses in Bangalore

    ReplyDelete
  57. Excellent Blog! I would like to thank for the efforts you have made in writing this post. I am hoping the same best work from you in the future as well. I wanted to thank you for this websites! Thanks for sharing. Great websites!
    Data Science Training in Bangalore

    ReplyDelete
  58. I was very happy to find this site. I wanted to thank you for this excellent reading !! I really enjoy every part and have bookmarked you to see the new things you post.

    Digital Marketing Course in Bangalore

    ReplyDelete
  59. Her blog has given us valuable information to work on. Every tip in your post is amazing. Thank you so much for sharing. Keep blogging.

    Data Analytics Course in Bangalore

    ReplyDelete
  60. I Want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging endeavors.
    data science certification in banagalore

    ReplyDelete
  61. I Want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging endeavors.
    data science course in bangalore with placement

    ReplyDelete
  62. Awesome article. I enjoyed reading your articles. this can be really a good scan for me. wanting forward to reading new articles. maintain the nice work!
    Data Science Courses in Bangalore

    ReplyDelete
  63. I am a new user of this site, so here I saw several articles and posts published on this site, I am more interested in some of them, hope you will provide more information on these topics in your next articles.
    data analytics training in bangalore

    ReplyDelete
  64. What an incredible message this is. Truly one of the best posts I have ever seen in my life. Wow, keep it up.
    AI Courses in Bangalore

    ReplyDelete
  65. I want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging enedevors.
    data analytics courses in bangalore

    ReplyDelete
  66. I am sure it will help many people. Keep up the good work. It's very compelling and I enjoyed browsing the entire blog.
    Business Analytics Course in Bangalore

    ReplyDelete
  67. I just got to this amazing site not long ago. I was actually captured with the piece of resources you have got here. Big thumbs up for making such wonderful blog page!
    data analytics course in bangalore

    ReplyDelete
  68. I want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging enedevors.
    data science in bangalore

    ReplyDelete
  69. Great post i must say and thanks for the information. Education is definitely a sticky subject. However, is still among the leading topics of our time. I appreciate your post and look forward to more.
    Data Science Course in Bangalore

    ReplyDelete
  70. i am glad to discover this page : i have to thank you for the time i spent on this especially great reading !! i really liked each part and also bookmarked you for new information on your site.
    data scientist course in bangalore

    ReplyDelete
  71. I want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging endeavours.
    data science course in bangalore with placement

    ReplyDelete
  72. Thanks for posting the best information and the blog is very helpful.data science institutes in hyderabad

    ReplyDelete
  73. Great post i must say and thanks for the information. Education is definitely a sticky subject. However, is still among the leading topics of our time. I appreciate your post and look forward to more.
    Data Science Course in Bangalore

    ReplyDelete
  74. i am glad to discover this page : i have to thank you for the time i spent on this especially great reading !! i really liked each part and also bookmarked you for new information on your site.
    cyber security training in bangalore

    ReplyDelete
  75. I am glad to discover this page. I have to thank you for the time I spent on this especially great reading !! I really liked each part and also bookmarked you for new information on your site.
    Data Science Training in Chennai

    ReplyDelete
  76. i am glad to discover this page : i have to thank you for the time i spent on this especially great reading !! i really liked each part and also bookmarked you for new information on your site.
    cyber security training in bangalore

    ReplyDelete
  77. I just got to this amazing site not long ago. I was actually captured with the piece of resources you have got here. Big thumbs up for making such wonderful blog page!
    data analytics course in bangalore

    ReplyDelete
  78. I want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging enedevors.
    data analytics courses in bangalore

    ReplyDelete
  79. i am glad to discover this page : i have to thank you for the time i spent on this especially great reading !! i really liked each part and also bookmarked you for new information on your site.
    tableau training in bangalore

    ReplyDelete
  80. Thanks for posting the best information and the blog is very important.artificial intelligence course in hyderabad

    ReplyDelete
  81. I want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging enedevors.
    data science course fees in bangalore

    ReplyDelete
  82. I am glad to discover this page. I have to thank you for the time I spent on this especially great reading !! I really liked each part and also bookmarked you for new information on your site.
    Data Science Training in Chennai

    ReplyDelete
  83. I am a new user of this site, so here I saw several articles and posts published on this site, I am more interested in some of them, hope you will provide more information on these topics in your next articles.
    data analytics training in bangalore

    ReplyDelete
  84. You have completed certain reliable points there. I did some research on the subject and found that almost everyone will agree with your blog.

    Data Science Training in Bangalore

    ReplyDelete
  85. Wonderful blog found to be very impressive to come across such an awesome blog. I should really appreciate the blogger for the efforts they have put in to develop such amazing content for all the curious readers who are very keen on being updated across every corner. Ultimately, this is an awesome experience for the readers. Anyways, thanks a lot and keep sharing the content in the future too.

    Digital Marketing Training in Bangalore

    ReplyDelete
  86. I wanted to leave a little comment to support you and wish you the best of luck. We wish you the best of luck in all of your blogging endeavors.

    Artificial Intelligence Training in Bangalore

    ReplyDelete
  87. Truly incredible blog found to be very impressive due to which the learners who go through it will try to explore themselves with the content to develop the skills to an extreme level. Eventually, thanking the blogger to come up with such phenomenal content. Hope you arrive with similar content in the future as well.

    Machine Learning Course in Bangalore

    ReplyDelete
  88. Thanks for posting the best information and the blog is very important.data science institutes in hyderabad

    ReplyDelete
  89. Truly mind blowing blog went amazed with the subject they have developed the content. These kind of posts really helpful to gain the knowledge of unknown things which surely triggers to motivate and learn the new innovative contents. Hope you deliver the similar successive contents forthcoming as well.

    Data Science in Bangalore

    ReplyDelete
  90. I am glad to discover this page. I have to thank you for the time I spent on this especially great reading !! I really liked each part and also bookmarked you for new information on your site.
    Data Science Course Syllabus

    ReplyDelete
  91. It is extremely nice to see the greatest details presented in an easy and understanding manner.
    best data science institute in hyderabad



    ReplyDelete
  92. Fantastic article I ought to say and thanks to the info. Instruction is absolutely a sticky topic. But remains one of the top issues of the time. I love your article and look forward to more.
    Data Science Course in Bangalore

    ReplyDelete
  93. I am glad to discover this page. I have to thank you for the time I spent on this especially great reading !! I really liked each part and also bookmarked you for new information on your site.
    Data Science Course Syllabus

    ReplyDelete
  94. Hey fellow SF admins/developers. Here is a python3 script for querying ELF within a specified start and end date. https://github.com/barhuken/python-salesforce-elf

    ReplyDelete
  95. i am glad to discover this page : i have to thank you for the time i spent on this especially great reading !! i really liked each part and also bookmarked you for new information on your site.
    artificial intelligence training in chennai

    ReplyDelete
  96. Thank you quite much for discussing this type of helpful informative article. Will certainly stored and reevaluate your Website.
    Data Analytics Course in Bangalore

    ReplyDelete
  97. Stupendous blog huge applause to the blogger and hoping you to come up with such an extraordinary content in future. Surely, this post will inspire many aspirants who are very keen in gaining the knowledge. Expecting many more contents with lot more curiosity further.

    data science course in faridabad

    ReplyDelete
  98. Very wonderful informative article. I appreciated looking at your article. Very wonderful reveal. I would like to twit this on my followers. Many thanks! .
    Data Analytics training in Bangalore

    ReplyDelete
  99. Nice to be seeing your site once again, it's been weeks for me. This article which ive been waited for so long. I need this guide to complete my mission inside the school, and it's same issue together along with your essay. Thanks, pleasant share.
    Data Science training in Bangalore

    ReplyDelete
  100. Nice Post. Very informative Message and found a great post. Thank you...

    AWS Training in Hyderabad

    ReplyDelete
  101. This is my first time visiting here. I found a lot of funny things on your blog, especially your discussion. From the tons of comments on your posts, I guess I'm not the only one who has all the free time here. Keep up the good work. I was planning to write something like this on my website and you gave me an idea.
    Business Analytics Course

    ReplyDelete
  102. i am glad to discover this page : i have to thank you for the time i spent on this especially great reading !! i really liked each part and also bookmarked you for new information on your site.
    artificial intelligence training in chennai

    ReplyDelete
  103. I want to leave a little comment to support and wish you the best of luck.we wish you the best of luck in all your blogging enedevors.
    data science training in chennai

    ReplyDelete
  104. I will very much appreciate the writer's choice for choosing this excellent article suitable for my topic. Here is a detailed description of the topic of the article that helped me the most.
    Data Analytics Course in Bangalore

    ReplyDelete
  105. I have voiced some of the posts on your website now, and I really like your blogging style. I added it to my list of favorite blogging sites and will be back soon ...
    Digital Marketing Course in Bangalore

    ReplyDelete
  106. Thanks for posting the best information and the blog is very important.data science course in Lucknow

    ReplyDelete
  107. Terrific post thoroughly enjoyed reading the blog and more over found to be the tremendous one. In fact, educating the participants with it's amazing content. Hope you share the similar content consecutively.

    data science course in varanasi

    ReplyDelete