Source Source¶
Source subclasses are responsible for generating an integer value given an open source project’s source URL.
- class dffml.source.source.BaseSource(config: Optional[Type[BaseConfig]])[source]¶
Abstract base class for all sources. New sources must be derived from this class and implement the records method.
- class dffml.source.source.BaseSourceContext(parent: BaseSource)[source]¶
- abstract async record(key: str)[source]¶
Get a record from the source or add it if it doesn’t exist.
Examples
>>> import asyncio >>> from dffml import * >>> >>> async def main(): ... async with MemorySource(records=[Record("example", data=dict(features=dict(dead="beef")))]) as source: ... # Open, update, and close ... async with source() as ctx: ... example = await ctx.record("example") ... # Let's also try calling `record` for a record that doesnt exist. ... one = await ctx.record("one") ... await ctx.update(one) ... async for record in ctx.records(): ... print(record.export()) >>> >>> asyncio.run(main()) {'key': 'example', 'features': {'dead': 'beef'}, 'extra': {}} {'key': 'one', 'extra': {}}
- abstract async records() AsyncIterator[Record] [source]¶
Returns a list of records retrieved from self.src
Examples
>>> import asyncio >>> from dffml import * >>> >>> async def main(): ... async with MemorySource(records=[Record("example", data=dict(features=dict(dead="beef")))]) as source: ... async with source() as ctx: ... async for record in ctx.records(): ... print(record.export()) >>> >>> asyncio.run(main()) {'key': 'example', 'features': {'dead': 'beef'}, 'extra': {}}
- abstract async update(record: Record)[source]¶
Updates a record for a source
Examples
>>> import asyncio >>> from dffml import * >>> >>> async def main(): ... async with MemorySource(records=[]) as source: ... # Open, update, and close ... async with source() as ctx: ... example = Record("one", data=dict(features=dict(feed="face"))) ... # ... Update one into our records ... ... await ctx.update(example) ... # Let's check out our records after calling `record` and `update`. ... async for record in ctx.records(): ... print(record.export()) >>> >>> asyncio.run(main()) {'key': 'one', 'features': {'feed': 'face'}, 'extra': {}}
- exception dffml.source.source.NoRecordsWithMatchingFeatures[source]¶
Raised when
SourcesContext.with_features()
was called but no records were yielded.
- class dffml.source.source.NoRecordsWithMatchingFeaturesHelper[source]¶
Helper to print a diff of the features requested and the features available in unittest diff format
- failureException¶
alias of
NoRecordsWithMatchingFeatures
- class dffml.source.source.Sources(*args)[source]¶
- CONTEXT¶
alias of
SourcesContext
- SINGLETON¶
alias of
BaseSource
- class dffml.source.source.SourcesContext(parent: AsyncContextManagerList)[source]¶
- class dffml.source.source.SubsetSources(*args: BaseSource, keys: Optional[List[str]] = None)[source]¶
Restricts access to a subset of records during iteration based on their keys.
- CONTEXT¶
alias of
SubsetSourcesContext
- class dffml.source.source.SubsetSourcesContext(parent: AsyncContextManagerList)[source]¶
- class dffml.source.source.ValidationSources(validation: Callable[[Record], bool], *args: BaseSource)[source]¶
Restricts access to a subset of records during iteration based on a validation function.
- CONTEXT¶
alias of
ValidationSourcesContext