Skip to main content
# EFILTER Query Language

EFILTER is a general purpose query language designed to be embedded in Python applications and libraries. It supports SQL-like syntax to filter your application's data and provides a convenient way to directly search through the objects your applications manages.

A second use case for EFILTER is to translate queries from one query language to another, such as from SQL to OpenIOC and so on. A basic SQL-like syntax and a POC lisp implementation are included with the language, and others are relatively simple to add.

## Projects using EFILTER:

- [Rekall](https://github.com/google/rekall)


## Quick examples of integration.

from efilter import api
api.apply("5 + 5") # => 10

# Returns [{"name": "Alice"}, {"name": "Eve"}]
api.apply("SELECT name FROM users WHERE age > 10",
vars={"users": ({"age": 10, "name": "Bob"},
{"age": 20, "name": "Alice"},
{"age": 30, "name": "Eve"}))


### You can also filter custom objects:

# Step 1: have a custom class.

class MyUser(object):
...

# Step 2: Implement a protocol (like an interface).

from efilter.protocols import structured
structured.IStructured.implement(
for_type=MyUser,
implementations: {
structured.resolve: lambda user, key: getattr(user, key)
}
)

# Step 3: EFILTER can now use my class!
from efilter import api
api.apply("SELECT name FROM users WHERE age > 10 ORDER BY age",
vars={"users": [MyUser(...), MyUser(...)]})


### Don't have SQL injections.

EFILTER supports query templates, which can interpolate unescaped strings safely.

# Replacements are applied before the query is compiled.
search_term = dangerous_user_input["name"]
api.apply("SELECT * FROM users WHERE name = ?",
vars={"users": [...]},
replacements=[search_term])

# We also support keyword replacements.
api.apply("SELECT * FROM users WHERE name = {name}",
vars={"users": [...]},
replacements={"name": search_term})


### Basic IO is supported, including CSV data sets.

# Builtin IO functions need to be explicitly enabled.
api.apply("SELECT * FROM csv(users.csv) WHERE name = 'Bob'", allow_io=True)


## Language Reference

Work in progress.


## Protocol documentation

Work in progress.


## Example projects

Several sample projects are provided.

- examples/star_catalog: filters a large CSV file with nearby star systems
- examples/tagging: use a custom query format


## License and Copyright

Copyright 2015 Google Inc. All Rights Reserved

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0).

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

## Contributors

[Adam Sindelar](https://github.com/the80srobot)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

efilter-1!1.3.tar.gz (71.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

efilter-1!1.3-py2-none-any.whl (105.8 kB view details)

Uploaded Python 2

File details

Details for the file efilter-1!1.3.tar.gz.

File metadata

  • Download URL: efilter-1!1.3.tar.gz
  • Upload date:
  • Size: 71.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for efilter-1!1.3.tar.gz
Algorithm Hash digest
SHA256 9cd225bc1ddd2f08249ce9b8e5d31d9d497e10c402fc13d7128265ca0b929965
MD5 4c9a069347e9a7ffc6f4ae04936a54fb
BLAKE2b-256 2cded1740a7c17f08d5ccddd4811eb4f089d4f4ea7a26645908c49cdad679805

See more details on using hashes here.

File details

Details for the file efilter-1!1.3-py2-none-any.whl.

File metadata

File hashes

Hashes for efilter-1!1.3-py2-none-any.whl
Algorithm Hash digest
SHA256 f45dc38b8f61e42b4126cf7a2246e8aec2dc00c95ea810d848a64ba118a887d5
MD5 aaa22e3f5b2488b4de4586e9e3ba2e1e
BLAKE2b-256 b0e270de27d289869013e2ae50381f6ba8fb2c07c3a4c955c48853604bde6770

See more details on using hashes here.

Release history Release notifications | RSS feed

1!1.5.1

1 file

1!1.5

2 files

1!1.4

2 files

This release

1!1.3 This release

2 files

1!1.2.post1

1 file

1!1.2

2 files

1!1.1

1 file

1!1.0

2 files

1453815385

1 file

1450268920

1 file

1449139184

1 file

1449128552

1 file

1446301913

1 file

1445943458

1 file

1445495565

1 file

1445494810

1440489265

2 files

1438631774

1438631350

1 file

1438554658

5 files

1.2.post1

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page