- More delete file handling improvements
- Add delete file endpoint
- More PG handling improvements
- Fix IPatchField field_converter
- Python 3.10
- Adding interfaces to use for standardizing cloud vacuum support
- Minor fixture teardown handling
- Fix transaction context manager doesn't abort the txn when a exception is raised
- More work on fixing annotation bugs.
- One more annotation cache fix.
- Fix transaction.get_annotation().
- More annotation cache updates + test fixes.
- More connection re-use.
- Use txn conn for getting/setting TID sequence since it's not affected by transaction.
- Prevent using cache if the type field is missing.
- More updates to prevent in-memory caching of registry objects.
- Keep reference to modified object's serial after commit.
- Add state_reader method to ensure cache includes the correct/populated state value.
- More cache sync updates.
- Ensure 'of' is cached for annotation data.
- Make content serialization and deserialization methods asynchronous to support reading state objects from other object storage.
- Perform each migration in a separate transaction
- Allow annotations and resource types to not be stored in memory
- Fix CI/tests
- Allow initialize_tid to be called multiple times.
- Update brotli compression quality to improve performance.
- Enable brotli (de)compression on pickle dump fields.
- Remove db transaction strategy support
- Remove CockroachDB support
- Try not to reserve connection when possible [vangheem]
- No longer have dedicated read connection and do not use any prepared statements [vangheem]
- Improve memcached metrics probe [lferran]
- Fix: prevent caching large objects on fill_cache [lferran]
- Fix emcache client settings pass-through [lferran]
- Bump emcache version and provide support for new metrics and new intialization parameters [pfreixes]
- Check deleted list in Transaction.contains [qiwn]
- Change commit order (delete before add) in Transaction.tpc_commit [qiwn]
- Fix recording root hit/miss metrics [vangheem]
- Do nothing when memcache delete_all opeartion receives an empty list. Observe size of the len of keys [pfreixes]
- Increase pg operation long tail bucket size [vangheem]
- Fix db metrics to isolate acquiring connection [vangheem]
- Safer keys for memcached driver [lferran]
- Add metric for object cache records size [lferran]
- Fix metrics context manager when prometheus not installed [lferran]
- Fix BasicCache.fill_cache: do not exclude parent_id key for root object [lferran]
- Add memcached support as cache driver [lferran]
- increase precision of lock metrics reporting [vangheem]
- Add metrics for in-memory cache [vangheem]
- Move to github actions [lferran]
- Add id checker for move [qiwn]
- Record metrics on cache hit/misses [vangheem]
- Record metrics on time waiting for pg locks [vangheem]
- Record redis cache misses [vangheem]
- Add metrics to pg and redis operations [vangheem]
- Add IFileNameGenerator adapter [qiwn]
- Include bugfix version for aiohttp in setup.py [lferran]
- Fix registry update, when type provided mismatch with the one specified by the schema return an error HTTP status code instead of throwing an exception. [pfreixes]
- Fix: Be able to define optional requestBody [lferran]
- Be able to define optional requestBody [lferran]
- Optimize json schema ref resolution to not make so copies of all json schema definition for every validator instance [vangheem]
- Fix json schema ref resolution for nested objects [vangheem]
- Allow arbitrary path parameter within the path parameters [dmanchon]
- Fix import [vangheem]
- swagger tags fixes [ableeb]
- Register aiohttp server object with app that it is serving(._server) [vangheem]
- Handle ConnectionResetError when downloading files [vangheem]
- Bug fix: handle raw strings in json payload [lferran]
- swagger tags fixes
- Provide patch operations for json field [vangheem]
- Optimize extend operation for bucket list field [vangheem]
- . and .. should be blocked as valid ids. The browser will auto translate them to what current dir and parent dir respectively which gives unexpected results. [vangheem]
- Change log level for conflict errors to warning and fix locating tid of conflict error [vangheem]
- Use bigint for statement replacement values [vangheem]
- Error handling: ValueDeserializationError editing registry value [vangheem]
- Handle db transaction closed while acquiring transaction lock [vangheem]
- Handle db transaction closed while acquiring lock [vangheem]
- Handle connection errors on file head requests [vangheem]
- Fix integer query param validation [lferran]
- Be able to have async schema invariants [vangheem]
- Provide better validation for json schema field [vangheem]
- Handle error when "None" value provided for behavior data [vangheem]
- Handle connection reset errors when downloading files [vangheem]
- Add max_ops property to PatchField, BucketListField and BucketDictField [vangheem]
- Add clear action to list, dict and annotation patch fields [vangheem]
- Improve performance of bucket dict field [vangheem]
- Fix storages integration with some asyncpg pool settings [vangheem]
- Fix release [vangheem]
- Be able to configure max_inactive_connection_lifetime and max_queries of pg pool. [vangheem]
- Do not have timeout when closing pg connection. [vangheem]
- Fix asyncpg integration with connection leaks on timeout [vangheem]
- Validate POST @sharing payload too [lferran]
- Be able to customize pg db in test fixtures [vangheem]
- fix release [vangheem]
- add IAnnotations.async_del type annotation [vangheem]
- Add pg db constraint for annotation data [vangheem]
- more IRequest type hints [vangheem]
- Add json to IRequest for mypy [vangheem]
- Fix DummyCache type signature to be the same as base class [vangheem]
- Correctly bubble http errors for file downloads [vangheem]
- Add title/description to json schema field serialization [vangheem]
- Better error handling on redis connection issues [vangheem]
- JSON Schema and open api serialization fixes [vangheem]
- Fix validating array params in query parameters [lferran]
- Add open api tests and fix ones that do not pass tests [vangheem]
- Fix automatic type conversion on nested fields [vangheem]
- Fix automatic type conversion on nested fields. Fixes #832 [vangheem]
- Be able to start database transaction before transaction has started it without causing errors [vangheem]
- Fix optimized lookup to work with fields that do not have _type [vangheem]
- Fix query param validation [vangheem]
- Optimize json deserialization [vangheem]
- Update Dockerfile [svx]
- Be able to disable supporting range headers in IFileManager.download [vangheem]
- Make Field.required an optional property. To change default required behavior, you can monkey patch IField['required'].default = False [vangheem]
- Save old file attrs before content is cleaned [vangheem]
- Add Range header support [vangheem]
- Fix validating None values in required fields [vangheem]
- Fix error with requeued async queue tasks [vangheem]
- Added IIDChecker adapter [vangheem]
- Added valid_id_characters app setting [vangheem]
- Bubble cancelled errors in resolver [vangheem]
- Fix duplicate behaviors interfaces in get_all_behavior_interfaces() [qiwn]
- Better CancelledError handling in resolving a request [vangheem]
- Fix adding duplicate behaviors [qiwn]
- PatchField: added operation "multi" [masipcat]
- @duplicate: added option to reset acl [inakip]
- Make pytest.mark.app_settings work in older pytest versions too [lferran]
- @move: destination id conflict should return 409 error, not 412 [inaki]
- Fix security bug in @move and @duplicate [lferran]
- Allow to iterate keys, values and items of a BucketDictValue [lferran]
- Fix security bug: anonymous users were being granted guillotina.Authenticated [lferran]
- Update default zope.interface to 4.7.1 [bloodbare]
- Be able to provide DEBUG_SUBSCRIBERS env variable to get details about event timings being run. [vangheem]
- Make sure to reset registry task var when setting up new container [vangheem]
- Fix potential deadlock issues when storage read conn handling [vangheem]
- Allow uid as destination in @duplicate and @move [qiwn]
- Fix correctly saving patch field [vangheem]
- Fix patch field validation [vangheem]
- Prevent JSONField name clash with field validator decorator [vangheem]
- Remove task call back to run execute_futures automatically. aiohttp reuses task object for keepalive implementation and the _callbacks were never run [vangheem]
- Lazy create thread pool executor so we can properly use thread pool setting [vangheem]
- Be able to customize number of thread pool workers [vangheem]
- Add custom settings into test server [qiwn]
- bump
- Make sure to use txn.lock when using pg connection [vangheem]
- reduce the load dbvacuum can cause [vangheem]
- Fix required param not specified in service parameters configuration [vangheem]
- Fix test util: add db in task vars too [lferran] [lferran]
- Added "pickle_protocol" to app_settings [masipcat]
- Add extra_headers parameter into FileManager.prepare_download() [qiwn]
New:
- More mypy support and better type checking [vangheem]
- Added deserializer for IUnionField [masipcat]
- Provide new @field.validator to validate field values against bound fields [vangheem]
Fixes:
- Fix @invariant validation. Any usage of it previously would cause exceptions. [vangheem]
- Handle empty G_ environment variable values [vangheem]
- more mypy definitions on ITransactionManager
- Move guillotina_dbusers to guillotina.contrib.dbusers [jordic, lferran]
- Missed debug information. [bloodbare]
- Cache debug information should be debug level [bloodbare]
- Do not fallback to setattr with unhandled errors on fields [vangheem]
- Documentation and training fixes [vangheem]
- Documentation and training fixes [vangheem]
- Fix compatiblity issues with Python 3.8 [masipcat]
- Add BucketDictValue.clear() [qiwn]
- Fix error closing cache with some objects [vangheem]
- Cache improvements:
- Store changes in cache immediately after transaction has finished instead of in task
- Clear txn cache fill data after using it
- Properly cache annotation lookup misses
- Fix push invalidation data type [vangheem]
- add_behavior should only write to database if behavior is new for object [vangheem]
- Improve cache hit performance by setting cache keys on objects loaded directly by uid and by looking up children object [vangheem]
- Add event when database tables created for postgres [vangheem]
- Bucket dict field does not always split index properly [vangheem]
- Fix connection leaks in edge-cases [masipcat]
- Pinned asyncpg to 0.19.0 [masipcat]
- Transaction manager type hints [vangheem]
- Handle deserialization errors on bucket fields. Otherwise, dict values were getting incorrectly saved [vangheem]
- Provide workaround for asyncio contextvars ipython bug in shell [vangheem]
- Throw an TransactionObjectRegistrationMismatchException exception if you attempt to register an object with a transaction that is a different than existing registration for that object. [vangheem]
- Case insensitive environ G_ variable lookup [svx]
- Improve reST syntax of README [svx]
- Fix typo in CHANGELOG [svx]
- Fix shut down for redis pubsub driver [vangheem]
- Swagger url support for X-Forwarded-Proto and X-Forwarded-Schema [bloodbare]
- Fix patch field delete to handle when value is None [vangheem]
- Adjust Sphinx to build in parallel [svx]
- Be able to use guillotina's types in 3rd party apps [vangheem]
- Handle errors vacuuming [vangheem]
- pypi package desc fix
- Explicitly reset task vars on every request [vangheem]
- Fix futures execute error when no futures are defined for type [vangheem]
- Fix execute.clear_futures() [vangheem]
- Adding Helm Charts [karannaoh]
- Upgrade mypy [vangheem]
- Fix not setting cache values for updated object when push is not enabled [vangheem]
- Fix conflict error handling with registry objects [vangheem]
- Sorted imports in all files and added isort in .travis to keep the format [masipcat]
- BaseObject.__txn__ now weakref to prevent reference cycles [vangheem]
- Change default service registration to work without inline defined klass methods [vangheem]
- Fix doc builds for new open api 3 [vangheem]
- Fix getting cache value from redis [vangheem]
- Fix calculating in-memory cache size [vangheem]
- Update Makefile [svx]
- Remove buildout bits [svx]
- Fix json schema validation [vangheem]
- Fix memory cache to be able to calc size properly [vangheem]
- Better redis pubsub error handling [vangheem]
- Be not log verbose when pubsub utility task is cancelled [vangheem]
- Be able to configure cache to not push pickles with invalidation data [vangheem]
- Fix transaction handling to always get current active transaction, throw exception when transaction is closed and be able to refresh objects. [vangheem]
- More normalization of execute module with task_vars/request objects [vangheem]
- Allow committing objects that were created with different transaction [vangheem]
- Fix async utils to work correctly with transactions and context vars [vangheem]
- Be able to have None default field values [vangheem]
- Throw exception when saving object to closed transaction [vangheem]
- Fix cache key for SQLStatements cache. This was causing vacuuming on multi-db environments to not work since the vacuuming object was shared between dbs on guillotina_dynamictablestorage. [vangheem]
- Refractor and bug fix in validation of parameter
- Implement more optimized way to vacuum objects which dramatically improves handling of deleting very large object trees [vangheem]
- Fix LightweightConnection pg class to close active cursors when connection done [vangheem]
- Swagger doc for search endpoint [karannaoh]
- Fix modification_date not indexed when an object is patched [masipcat]
- Move to black code formatter [vangheem]
- Fix field.validate() crashes when providing invalid schema (for field of type Object) [masipcat]
- Upgrade to Swagger 3/Open API 3 [karannaoh]
- Implement json schema validation [karannaoh]
- Dict schema serialization needs properties to be valid JSON Schema [bloodbare]
- Fix potential bug when working with multiple databases/transaction managers [vangheem]
- New guillotina.fields.BucketDictField [vangheem]
- New @fieldvalue/{field name or dotted behavior + field name} endpoint [vangheem]
- Leaking txn on reindex on pg [bloodbare]
- Run default factory on attributes on behaviors [bloodbare]
- Allow to get full object serialization on GET operation [bloodbare]
- Only register object for writing if base object changed. Otherwise, changes to behavior data was also causing writes to the object it was associated with [vangheem]
- Add x-virtualhost-path header support for url generation [vangheem]
- Make Tuple type work with patch field [vangheem]
- Make IDublinCore.tags a patch field [vangheem]
- Add appendunique and extendunique to patch field operations [vangheem]
- Fix exhausted retries conflict error response [vangheem]
- Make sure field name of patch field is set before using [vangheem]
- Improve request memory usage [vangheem]
- Fix: just skip indexing attributes from schemas that object does not adapt to [lferran]
- Allow to receive a fullobject serialization on search [bloodbare]
- Allow to reindex on PG catalog implementation [bloodbare]
- Read only txn can be reused without changing read only param [bloodbare]
- Merge CORS headers [qiwn]
- Fix redis pubsub potential cpu bound deadlock [vangheem]
- Make sure that channel is configured on cache pubsub [bloodbare]
- Handle cancelled error on cleanup [vangheem]
- Define TTL on cache set [bloodbare]
- Logging async util exception [bloodbare]
- Documentation improvements [vangheem]
- Cache JSONField schema validator object [vangheem]
- JSONField works with dict instead of requiring str(which is then converted to dict anyways) [vangheem]
- Adding store_json property on db configuration so we can disable json storage for each db. [bloodbare]
- Move guillotina_mailer to guillotina.contrib.mailer [bloodbare]
- Be able to customize the object reader function with the object_reader setting [vangheem]
- Fix indexing data potentially missing updated content when fields for accessor is not specified [vangheem]
- Executioner:
- providing pagination support in navigation (1.2.0)
- supporting token authentication from login form (1.3.0)
- using @search endpoint to navigate in container items
- A few more python antipattern fixes [lferran]
- Aggregations in PG JSONb [bloodbare]
- Change guillotina.files.utils.generate_key to not accept a request parameter. It was used to get the container id which is now a context var. [vangheem]
- Add IExternalFileStorageManager interface to be able to designate a file storage that store a file into an external database. This enables you to automatically leverage the redis data manager.
- Add cloud_datamanager setting. Allows you to select between db`(default) and `redis`(if `guillotina.contrib.redis is used) to not write to db to maintain state. The redis option is only usable for gcloud and s3 adapters.
- Cache password checked decisions to fix basic auth support [vangheem]
- Make sure you can import contrib packages without automatically activating them [vangheem]
- Adding rediscache and pubsub logic. Now you can have memory cache, network cache with invalidation and pubsub service. guillotina_rediscache is not necessary any more. [bloodbare]
- deprecate __local__properties__. ContextProperty works on it's own now [vangheem]
- Add argon2 pw hashing [vangheem]
- Completely remove support for utilities configuration. Use load_utilities. [vangheem]
- Fix path__startswith query [vangheem]
- Add guillotina.contrib.swagger
- Missing mypy requirement
- Fix catalog interface
- Fix catalog not working with db schemas
- Update intro docs
- Fix events antipattern [lferran]
- Rename utils.get_object_by_oid to utils.get_object_by_uid
- Emit events for registry configuration changes
- Default catalog interface removes the following methods: get_by_uuid, get_by_type, get_by_path, get_folder_contents. Keep interfaces simple, use search/query.
- Allow modifying app settings from pytest marks [lferran]
- No longer setup fake request with login for base command
- Moved ISecurityPolicy.cached_principals to module level function guillotina.security.policy.cached_principals
- Moved ISecurityPolicy.cached_roles to module level function guillotina.security.policy.cached_roles
- utils.get_authenticated_user_id no longer accepts request param
- utils.get_authenticated_user no longer accepts request param
- Removed guillotina.exceptions.NoInteraction
- Removed guillotina.interfaces.IInteraction
- auth_user_identifiers no longer accept IRequest in the constructor. Use utils.get_current_request
- auth_user_identifiers no longer accept IRequest in constructor. Use utils.get_current_request
- Remove IInteraction. Use guillotina.utils.get_security_policy()
- Remove Request._db_write_enabled, Transaction now has read_only property
- Remove Request._db_id, Use guillotina.task_vars.db.get().id
- Remove Request.container_settings, Use guillotina.utils.get_registry
- Remove Request._container_id, use guillotina.task_vars.container.get().id
- Remove Request.container, Use guillotina.task_vars.container.get()
- Remove Request.add_future. Use guillotina.utils.execute.add_future
- Add guillotina.utils.get_current_container
- Rename request_indexer setting to indexer
- Rename guillotina.catalog.index.RequestIndexer to guillotina.catalog.index.Indexer
- Rename IWriter.parent_id to IWriter.parent_uid
- Rename guillotina.db.oid to guillotina.db.uid
- Rename oid_generate setting to uid_generator
- Rename BaseObject._p_register -> BaseObject.register
- Rename BaseObject._p_serial -> BaseObject.__serial__
- Rename BaseObject._p_oid -> BaseObject.__uuid__
- Rename BaseObject._p_jar -> BaseObject.__txn__
- separate transaction from request object
- rename guillotina.transactions.managed_transaction to guillotina.transactions.transaction