lektor-website/content/docs/api/db/obj/contents.lr

51 lines
1.6 KiB
Markdown

title: SourceObject
---
summary: The basic interface of all source objects.
---
module: lektor.db
---
type: class
---
body:
Source objects is the common interface for all things that come out of the
database. There are two types of source objects:
* [Records :ref](../record/) which are pages and attachments from the
`contents/` folder.
* [Assets :ref](../asset/) which are files and directories from the
`assets/` folder.
Whatever object you have in hands that comes from the database, they will
at least provide a minimal useful set of API methods and properties.
Plugins can subclass source objects to come up with their own source
objects if needed. In addition to that there is a special source object
called the `VirtualSourceObject` which is more useful for plugin usage.
## Virtual Source Objects
Most plugins will not have source objects that actually originate on the
file system. This means that their "source" is entirely virtual. Because
this is a very common situation there is a base class, the
`VirtualSourceObject` which plugins can subclass. The constructor takes one
argument which is the parent source object the virtual source lives below.
```python
from lektor.sourceobj import VirtualSourceObject
class Source(VirtualSourceObject):
@property
def source_content(self):
with open(self.parent.source_filename) as f:
return f.read().decode('utf-8')
@property
def url_path(self):
return self.parent.url_path + 'source.txt'
```
For more information see [add-build-program
:ref](../../environment/add-build-program/).