aboutsummaryrefslogtreecommitdiff
path: root/doc.go
blob: d4cb6bdf6dd2f1549dc584f7b5322a72065ed6dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/******************************************************************************
*
*  Copyright 2018 Stefan Majewsky <majewsky@gmx.net>
*
*  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
*
*  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.
*
******************************************************************************/

/*

Package schwift is a client library for OpenStack Swift
(https://github.com/openstack/swift, https://openstack.org).

It uses Gophercloud (https://github.com/gophercloud/gophercloud) for
authentication, so you usually start by obtaining a gophercloud.ServiceClient
for Swift like so:

	authOptions, err := openstack.AuthOptionsFromEnv()
	provider, err := openstack.AuthenticatedClient(authOptions)
	client, err := openstack.NewObjectStorageV1(provider, gophercloud.EndpointOpts {})

Or, if you use Swift's built-in authentication instead of Keystone:

	provider, err := openstack.NewClient("http://swift.example.com:8080")
	client, err := swauth.NewObjectStorageV1(provider, swauth.AuthOpts {
		User: "project:user",
		Key:  "password",
	})

Then, in both cases, you use schwift.AccountFromClient() to obtain a
schwift.Account instance, from which point you have access to all of schwift's
API.

Caching

When a GET or HEAD request is sent by an Account, Container or Object instance,
the metadata associated with that thing will be stored in that instance. You
can therefore access metadata attributes directly via their accessors and
everything just works, i.e. the first call to a getter will retrieve the
metadata:

	obj := account.Container("foo").Object("bar")

	t, err := obj.LastModified() //sends HTTP request "HEAD <storage-url>/foo/bar"
	assert(err == nil)
	t, err := obj.LastModified() //returns cached value immediately

If this behavior is not desired, the Invalidate() method can be used to clear
caches on any Account, Container or Object instance.

*/
package schwift