# publish.feature\_from\_source()

### Parameters

**`data_source_id`***`:int:`*`ID of a Rasgo DataSource`

**`features`***`:List[str]: (Optional)`*``A list of column names in the DataSource table that should be registered as Features. If no value is passed, all columns in the source that are not listed in the `dimensions` parameter will be registered as features.``

**`dimensions`***`:List[str]:`*`A list of column names in the DataSource table that should be registered as Dimensions`

**`granularity`***`:List[str]:`*`A list of strings that describes the grain of the dimensions`

**`feature_set_name`***`:str: (Optional)`*`Name for this set of Features`

**`sandbox`***`:bool: (Optional)`*`True = mark these features are Sandbox (not Production-ready) | False = mark these features are Production-ready (default is True)`

**`if_exists`***`:str: (Optional)`* `fail - returns an error message if a featureset already exists against this table | return - returns the featureset without operating on it | edit - edits the existing featureset | new - creates a new featureset`

### Return Object

[Rasgo FeatureSet](https://github.com/rasgointelligence/RasgoDocs/blob/main/pyrasgo/features/broken-reference/README.md)

### Sample Usage

Create features from an existing source

```python
dimensions = ['DATE']
features = ['WEEKFROMTODAY', 'TEMPINCELCIUS']

featureset = rasgo.publish_features_from_source(
               data_source_id = 100,
               dimensions= dimensions,
               features=features,
               granularity=['day'],
               name='My Sandbox Features',
               sandbox=True
               )
print('FeatureSet:', featureset)
```

{% hint style="info" %}
Columns in your DataSource table that are not referenced in either the "dimensions" or "features" list will be ignored
{% endhint %}

### Best Practices / Tips

{% hint style="warning" %}
TIP: Feature name warning message

If you receive the error: "APIError: Failed to create Feature {\_\_\_}. This name is already in use in your organization. Feature names must be unique." this is a sign that a feature already exists with this name.

Options to remedy are:

* If the existing feature is named correctly and the feature you are trying to upload needs a new name: use the [publish.features()](/rasgo-docs/rasgo-0.1/pyrasgo-0.3/features/publish.features.md) method to upload the feature with a different name.
* If the existing feature is simply an earlier run of this feature, instruct the function to overwrite it by passing in the param *if\_exists='edit'*
* If the existing feature is named incorrectly, navigate to the WebApp to change that feature's name, then re-upload
  {% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.rasgoml.com/rasgo-docs/rasgo-0.1/pyrasgo-0.3/features/publish.feature_from_source.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
