Metadata-Version: 2.4
Name: plone.exportimport
Version: 1.2.0
Summary: Plone content export / import support
Home-page: https://plone.org
Author: Plone Foundation
Author-email: releasemanager@plone.org
License: GPL version 2
Project-URL: Homepage, https://plone.org
Project-URL: Documentation, https://6.docs.plone.org
Project-URL: Source, https://github.com/plone/plone.exportimport
Project-URL: Issues, https://github.com/plone/plone.exportimport/issues
Keywords: Plone CMF Python Zope CMS
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Web Environment
Classifier: Framework :: Plone
Classifier: Framework :: Plone :: 6.0
Classifier: Framework :: Plone :: Core
Classifier: Framework :: Zope :: 5
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: python-dateutil
Requires-Dist: plone.api
Requires-Dist: plone.app.contenttypes
Requires-Dist: plone.app.dexterity
Requires-Dist: plone.app.redirector
Requires-Dist: plone.app.textfield
Requires-Dist: plone.app.users
Requires-Dist: plone.base
Requires-Dist: plone.dexterity
Requires-Dist: plone.namedfile
Requires-Dist: plone.restapi
Requires-Dist: plone.uuid
Requires-Dist: Products.CMFEditions
Requires-Dist: Products.CMFPlone
Requires-Dist: Products.DCWorkflow
Requires-Dist: Products.PlonePAS
Requires-Dist: Products.PortalTransforms
Requires-Dist: setuptools
Requires-Dist: z3c.relationfield
Requires-Dist: zc.relation
Requires-Dist: Zope
Provides-Extra: test
Requires-Dist: zest.releaser[recommended]; extra == "test"
Requires-Dist: zestreleaser.towncrier; extra == "test"
Requires-Dist: plone.app.discussion; extra == "test"
Requires-Dist: plone.app.iterate; extra == "test"
Requires-Dist: plone.app.multilingual; extra == "test"
Requires-Dist: plone.app.testing; extra == "test"
Requires-Dist: plone.app.upgrade; extra == "test"
Requires-Dist: plone.restapi[test]; extra == "test"
Requires-Dist: plone.volto[test]; extra == "test"
Requires-Dist: plone.testing; extra == "test"
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Requires-Dist: pytest-plone>=0.5.0; extra == "test"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: project-url
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary


<p align="center">
    <img alt="Plone Logo" width="200px" src="https://raw.githubusercontent.com/plone/.github/main/plone-logo.png">
</p>

<h1 align="center">
  Plone Content Export and Import
</h1>

Package supporting the export and import of content, principals, relations, translations, discussions, and redirects from and to a Plone site.

## Introduction

This package is a slimmer version of the awesome [collective.exportimport](https://github.com/collective/collective.exportimport).

While `collective.exportimport` supports older Plone versions and Python 2, and also takes care of data conversion from Archetypes to Dexterity, this package focuses only on latest Plone and Python.


## Documentation

[`plone.exportimport` documentation](https://6.docs.plone.org/admin-guide/export-import.html)



## Installation

> [!IMPORTANT]
> This package supports sites running Plone version 6.0 and above.

> [!IMPORTANT]
> This package is now included with Plone 6.1 and above by default.

If `plone.exportimport` is not yet available in your Plone installation, add it using `pip`.

```shell
pip install plone.exportimport
```


## Contributing

See [Contributing to Plone](https://6.docs.plone.org/contributing/index.html) and [Contribute to Plone 6 core](Contribute to Plone 6 core) for general contributing policies and guidance.

The following sections specifically describe how to develop and contribute to `plone.exportimport`.


### Setup

You need a working Python environment version 3.8 or later.

Install the dependencies and a development instance using the following command.

```shell
make install
```


### Local environment Plone server

Start Plone, on port 8080, with the following command.

```shell
make start
```


### Format code base

Format the code base with the following command.

```shell
make format
```


### Run tests

Testing of this package is done with [`pytest`](https://docs.pytest.org/en/stable/) and [`tox`](https://tox.wiki/en/stable/).

Run all tests with the following command.

```shell
make test
```

Run all tests, but stop on the first error and open a `pdb` session.

```shell
./bin/tox -e test -- -x --pdb
```

Run tests named `TestUtilsDiscussions`.

```shell
./bin/tox -e test -- -k TestUtilsDiscussions
```


## License

The project is licensed under the GPLv2.


# Changelog

<!--
   You should *NOT* be adding new change log entries to this file.
   You should create a file in the news directory instead.
   For helpful instructions, please see:
   https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst
-->

<!-- towncrier release notes start -->

## 1.2.0 (2025-08-14)


### New features:

- Support non-root PloneSite import/export [ewohnlich] #67


### Bug fixes:

- Export all paths in Posix format to support export-import across platforms [ewohnlich] #66

## 1.1.1 (2025-06-26)


### Bug fixes:

- Fix error getting parent object on Windows. @ewohnlich #64

## 1.1.0 (2025-03-11)


### New features:

- Report object creation during import using the plone-importer cli. Use --quiet to disable it. @ericof #54
- Do not stop the import if an object parent is missing @ericof #56


### Bug fixes:

- Set site during plone-importer transaction commit. @ericof #52
- Sort `relations.json` and `translations.json` so their contents are stable.  @mauritsvanrees #57

## 1.0.0 (2025-01-31)


### Bug fixes:

- Export the raw value of rich text fields, instead of the transformed output.
  This fixes internal links in Classic UI based distributions.
  @mauritsvanrees #48
- Fix traceback when translation group does not have the default language.
  @mauritsvanrees #50


### Documentation:

- Migrate documentation to README.md and https://6.docs.plone.org/admin-guide/export-import.html. @stevepiercy #46

## 1.0.0b1 (2025-01-23)


### New features:

- Include revisions only when passing `--include-revisions`.  @mauritsvanrees #39


### Bug fixes:

- Export principals: sort groups, roles, and members.  @mauritsvanrees #39
- Import: update modification dates again at the end. The original modification dates may have changed.  @mauritsvanrees #39
- Do not export parent info.
  This information is no longer needed: during import, parents are now always found by path and not by UID.
  From now on, the import ignores any parent info that is set.
  @mauritsvanrees #39

## 1.0.0a8 (2024-10-11)


### Bug fixes:

- Use plone.app.discussion and plone.app.multilingual as optional dependencies.
  @davisagli #18
- Include 'isReferencing' relations in import. @ksuess #32
- Set constraints after setting local permissions on content [@ericof] #33
- Export adds a newline at the end of all files.
  This matches the `.editorconfig` settings that we have in most Plone packages.
  [maurits] #35
- Do not export or import translations when `plone.app.multilingual` is not available.
  [maurits] #35
- Disallowlisted portlets were not imported when there was no accompanying change in the actual portlet list.
  [maurits] #35
- Add a fixer for the `allow_discussion` key: this should only contain True or False when this is explicitly set on the object.
  [maurits] #35
- Do not export or import discussions/comments when `plone.app.discussion` is not available.
  [maurits] #35
- Renamed `blacklisted_status` key to `blocked_status` to be sensitive.
  We still read the old key for backwards compatibility.
  [maurits] #35

## 1.0.0a7 (2024-06-13)


### New features:

- Export / Import local permissions for each content [@ericof] #15


### Bug fixes:

- Fix `plone.exportimport.utils.principals.members._run_as_manager` function [@ericof] #29

## 1.0.0a6 (2024-06-10)


### Bug fixes:

- Allow granting roles other than Manager and Member to principals [@ericof] #25
- Fix export of language for content [@sneridagh] #26

## 1.0.0a5 (2024-05-16)


### Internal:

- Fix list of test dependencies [@ericof] 

## 1.0.0a4 (2024-05-15)


### New features:

- Add pre_deserialize_hooks to content import [@pbauer] #22


### Bug fixes:

- Reindex members of relations in case that they contain preview_image_links
  [sneridagh] #13
- Avoid duplicating portlets registration during import [@ericof] #16


### Internal:

- Update plone/meta [@ericof] #20


## 1.0.0a3 (2024-05-02)


### Bug fixes:

- Fix importer by issuing a transaction commit
  [sneridagh] #9
- Account for use case language is empty string
  [sneridagh] #10


## 1.0.0a2 (2024-04-18)


### New features:

- Support export/import of portlets if plone.app.portlets is installed. @davisagli #8


## 1.0.0a1 (2024-04-17)


### New features:

- Implement exporter and importer for content [@ericof] #1
- Implement exporter and importer for members and groups [@ericof] #2
- Implement exporter and importer for redirects [@ericof] #3
- Implement exporter and importer for relations [@ericof] #4
- Implement exporter and importer for translations [@ericof] #5
- Implement exporter and importer for discussions [@ericof] #6


