Skip to main content

High-level classes and functions for interacting with a Fedora repository

Project description

plastron-repo

Fedora repository resources and operations

Repository

There are several class methods on the Repository class available as shortcuts to quickly create a Repository object.

# simple repo, no authentication
from plastron.repo import Repository

repo = Repository.from_url('http://localhost:8080/fcrepo/rest')
# repo with HTTP Basic authentication
from plastron.repo import Repository
from requests.auth import HTTPBasicAuth

repo = Repository.from_url(
    url='http://localhost:8080/fcrepo/rest',
    # any class that implements requests.auth.AuthBase will work here
    auth=HTTPBasicAuth('username', 'password'),
)
# repo with settings from a configuration dictionary
from plastron.repo import Repository

repo = Repository.from_config({
    'REST_ENDPOINT': 'http://localhost:8080/fcrepo/rest',
    'RELPATH': '/',
    'REPO_EXTERNAL_URL': 'http://fcrepo-local/fcrepo/rest',
    'SERVER_CERT': 'path/to/cert.pem',
    # authentication section
    'FEDORA_USER': 'username',
    'FEDORA_PASSWORD': 'password',
})
# repo with settings from a configuration YAML file;
# the structure of the YAML file is the same as the
# configuration dictionary
from plastron.repo import Repository

repo = Repository.from_config_file('config.yml')

You can always use the full constructor as well.

from requests.auth import HTTPBasicAuth

from plastron.client import Client, Endpoint
from plastron.repo import Repository

repo = Repository(
    client=Client(
        endpoint=Endpoint(
            url='http://localhost:8080/fcrepo/rest',
            default_path='/',
            external_url='http://fcrepo-local/fcrepo/rest',
        ),
        auth=HTTPBasicAuth('username', 'password'),
        server_cert='path/to/cert.pem',
        ua_string='my-client/3.14',
        on_behalf_of='user',
    )
)

Repository Resources

The repository resource classes represent a single URL-addressable HTTP resource that is stored in a repository. The most basic of these is RepositoryResource.

from plastron.repo import Repository, RepositoryResource

repo = Repository.from_url('http://localhost:8080/fcrepo/rest')

# Repository object support indexing with a path
resource = repo['/foo']
assert resource.url == 'http://localhost:8080/fcrepo/rest/foo'
assert isinstance(resource, RepositoryResource)

# this is merely syntactic sugar for the get_resource() method
resource = repo.get_resource('/foo')
assert resource.url == 'http://localhost:8080/fcrepo/rest/foo'
assert isinstance(resource, RepositoryResource)

When getting a resource from a Repository, you can provide a class to instantiate (it defaults to RepositoryResource). So to get an LDP container representation of a resource, use ContainerResource instead.

from plastron.repo import Repository, ContainerResource

repo = Repository.from_url('http://localhost:8080/fcrepo/rest')

container = repo.get_resource('/bar', ContainerResource)
assert container.url == 'http://localhost:8080/fcrepo/rest/bar'
assert isinstance(container, ContainerResource)

# you can also use slice notation to provide the class
container = repo['/bar':ContainerResource]
assert container.url == 'http://localhost:8080/fcrepo/rest/bar'
assert isinstance(container, ContainerResource)

Retrieving Data

None of the methods above actually send any HTTP requests. To connect to the repository and retrieve data, use the read() method on a resource.

RDF Descriptions

Repository resources can be described using RDF resource classes defined using the plastron-rdf library. A resource description is an RDF resource class that shares its underlying RDFLib Graph object with a repository resource. Thus changes to the resource description object will be reflected in the repository resource's graph and will be saved when the repository resource is written back to the repository.

Here is an (extremely simplified) example of retrieving a resource, updating some properties, and writing it back to the repository.

from rdflib import Literal, URIRef

from plastron.rdfmapping.resources import RDFResource
from plastron.repo import Repository, ContainerResource

repo = Repository.from_url('http://localhost:8080/fcrepo/rest')
resource = repo['/obj/123':ContainerResource]
resource.read()

# RDFResource is a very simple RDF description class
# it maps rdf:type to rdf_type and rdfs:label to label
obj = resource.describe(RDFResource)
obj.label = Literal('Digital Object 123')
obj.rdf_type.add(URIRef('http://pcdm.org/models#Object'))

assert obj.has_changes

# sends a PATCH request to the repository with a SPARQL
# update query built from the differences between the
# graph read from the repo and the current graph
resource.update()

Binaries

Project details


Download files

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

Source Distribution

plastron_repo-4.6.2.tar.gz (18.5 kB view details)

Uploaded Source

Built Distribution

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

plastron_repo-4.6.2-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

File details

Details for the file plastron_repo-4.6.2.tar.gz.

File metadata

  • Download URL: plastron_repo-4.6.2.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for plastron_repo-4.6.2.tar.gz
Algorithm Hash digest
SHA256 f99f06aa09f57d6a47a6e137e31f3adfb03e80ec909be4b695e4e50a4878d5ec
MD5 ecd3aedfe6337a2874d28b7c02353fe1
BLAKE2b-256 1b850942d2267d066eacdef9a0fa05e155db0a1ba0d2472264988501857f9d14

See more details on using hashes here.

File details

Details for the file plastron_repo-4.6.2-py3-none-any.whl.

File metadata

  • Download URL: plastron_repo-4.6.2-py3-none-any.whl
  • Upload date:
  • Size: 18.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for plastron_repo-4.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ff20dd774453f9288f5a72d52f718501a19934e5b113f0a6873292e052fa58ee
MD5 38e10b9dfbe4cec09c63270da89ef7a3
BLAKE2b-256 c6c21f97c9825447327f5b6377a9b02fe7c8e13f55dd1fd03e7ea1f572ac1c3b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page