Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Common functionality for interacting with dynamodb easier. Most of the functionality is based on PynamoDB ORM library.
A python library that makes it easier to interact with AWS DynamoDB tables.
This library extends functionality of pynamodb
, boto3
, json
, etc. modules
to make it easier to interact with AWS DynamoDB tables. It contains various
useful functionalities:
Biomapas aims to modernise life-science industry by sharing its IT knowledge with other companies and the community. This is an open source library intended to be used by anyone. Improvements and pull requests are welcome.
This project assumes you know about DynamoDB service, and you prefer using PynamoDB ORM to interact with DynamoDB tables.
Before installing this library, ensure you have these tools setup:
To install this project from source run:
pip install .
Or you can install it from a PyPi repository:
pip install b-dynamodb-common
This section shows various examples on how to use this library.
Attributes module. Contains various custom PynamoDB ORM attribtues.
Custom PynamoDB attribute that encrypts data in the database. Using Fernet algorithm
class User(Model):
SECRET_ENCRYPTION_KEY = b'123456'
first_name = FernetAttribute(SECRET_ENCRYPTION_KEY)
last_name = FernetAttribute(SECRET_ENCRYPTION_KEY)
Custom PynamoDB attribute that encrypts data in the database. Using AWS KMS key to encrypt/decrypt data.
boto_client = boto3.client('kms')
kms_key_arn = 'arn:of:the:custom:kms:key'
class User(Model):
first_name = KmsAttribute(boto_client, kms_key_arn)
last_name = KmsAttribute(boto_client, kms_key_arn)
Encoders module. Contains various encoding functionality.
Custom JSON encoder to handle DynamoDB data types.
data = {
'key1': 'RandomData',
'key2': OrderedSet([1, 2, 3]),
'key3': Decimal(1.1)
}
json.dumps(data, cls=DynamoDbEncoder)
Custom JSON encoder to handle PynamoDB ORM and DynamoDB data types.
data = {
'key1': MapAttribute(map_key_1='RandomData'),
'key2': OrderedSet([1, 2, 3]),
'key3': Decimal(1.1)
}
json.dumps(data, cls=PynamoDbEncoder)
Models module. Contains various PynamoDB-based custom models.
Model that contains permissions attribute.
entity = PermissionsModel()
entity.pk = 'PK'
entity.permissions = ['list', 'of', 'permissions']
entity.save()
# Add more permissions and save.
entity.add_permission('permission')
entity.save()
Allows to use the same pynamodb Model against multiple databases.
from pynamodb.models import Model
# Create your own model. Example, User model.
class User(Model): pass
# Specify table 1 against which an example user will be saved.
user_model_table_1 = ModelTypeFactory(User).create('user_table_1', 'eu-west-1')
user_model_table_1(hash_key='hash', range_key='range').save()
# Specify another table and save user in different table.
user_model_table_2 = ModelTypeFactory(User).create('user_table_2', 'eu-east-1')
user_model_table_2(hash_key='hash', range_key='range').save()
Currently this module is empty.
Utilities module. Contains lots of cool functions.
Wraps PynamoDB query
and scan
functions for better management.
list_function: PynamoDBListFunction[DummyEntity] = PynamoDBListFunction(DummyEntity.query, 'PK')
items = list(list_function())
# You can also specify a transformer function to transform results before returning.
list_function: PynamoDBListFunction[DummyEntity] = PynamoDBListFunction(
# PynamoDB list function (query).
DummyEntity.query,
# Positional arguments.
'PK',
# Transformer function.
transformer=lambda item: item.pk
)
# Will contain only pks.
ids = list(list_function())
Wraps PynamoDB query
and scan
functions to handle recursive last_evaluated_key
tokens.
list_function: PynamoDBListFunction[DummyEntity] = PynamoDBListFunction(
DummyEntity.scan,
limit=10,
filter_condition=DummyEntity.pk.is_in([...])
)
result = PynamoDBListResult(list_function)
# Fetch one time.
result.fetch(recursive=False)
# Check whether all results have been fetched.
result.finished
# If not, feel free to call it one more time and not worry about last_evaluated_key.
result.fetch(recursive=False)
# If you want to retrieve absolutely all results in one call:
result.fetch(recursive=True) # Simple!
This package has integration tests based on pytest. To run tests simply run:
pytest b_dynamodb_common_test/integration/tests
Found a bug? Want to add or suggest a new feature? Contributions of any kind are gladly welcome. You may contact us directly, create a pull-request or an issue in github platform. Lets modernize the world together.
pynamodb_list_result
class.Indexes
(global or local). Previously if you had e.g. GSI in your model,
you would get a "Missing Meta" error.validate_permissions
method.table_name
and region
specification.pynamodb_list_result
class.FAQs
Common functionality for interacting with dynamodb easier. Most of the functionality is based on PynamoDB ORM library.
We found that b-dynamodb-common demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.