Added findAndReplaceInModels (#228)
* added findAndReplaceInModels api call * added documentation for findAndReplaceInModels * added findAndReplaceInModels api call * updatd findAndReplaceInModels function * added unit test for findAndReplaceInModels in models * updated findAndReplaceInModels * added unit test for findAndReplaceInModels * removed 'all_models' in findAndReplaceInModels
This commit is contained in:
parent
aaf6b3a55b
commit
131a1c7cfc
@ -309,3 +309,33 @@
|
|||||||
"error": null
|
"error": null
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* **findAndReplaceInModels**
|
||||||
|
|
||||||
|
Find and replace string in existing model by model name. Customise to replace in front, back or css by setting to true/false.
|
||||||
|
|
||||||
|
*Sample request*:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"action": "findAndReplaceInModels",
|
||||||
|
"version": 6,
|
||||||
|
"params": {
|
||||||
|
"model": {
|
||||||
|
"modelName": "",
|
||||||
|
"findText": "text_to_replace",
|
||||||
|
"replaceText": "replace_with_text",
|
||||||
|
"front": true,
|
||||||
|
"back": true,
|
||||||
|
"css": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
*Sample result*:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result": 1,
|
||||||
|
"error": null
|
||||||
|
}
|
||||||
|
```
|
@ -934,6 +934,36 @@ class AnkiConnect:
|
|||||||
models.flush()
|
models.flush()
|
||||||
|
|
||||||
|
|
||||||
|
@util.api()
|
||||||
|
def findAndReplaceInModels(self, modelName, findText, replaceText, front=True, back=True, css=True):
|
||||||
|
if not modelName:
|
||||||
|
ankiModel = self.collection().models.allNames()
|
||||||
|
else:
|
||||||
|
model = self.collection().models.byName(modelName)
|
||||||
|
if model is None:
|
||||||
|
raise Exception('model was not found: {}'.format(modelName))
|
||||||
|
ankiModel = [model]
|
||||||
|
updatedModels = 0
|
||||||
|
for model in ankiModel:
|
||||||
|
model = self.collection().models.byName(model)
|
||||||
|
checkForText = False
|
||||||
|
if css and findText in model['css']:
|
||||||
|
checkForText = True
|
||||||
|
model['css'] = model['css'].replace(findText, replaceText)
|
||||||
|
for tmpls in model.get('tmpls'):
|
||||||
|
if front and findText in tmpls['qfmt']:
|
||||||
|
checkForText = True
|
||||||
|
tmpls['qfmt'] = tmpls['qfmt'].replace(findText, replaceText)
|
||||||
|
if back and findText in tmpls['afmt']:
|
||||||
|
checkForText = True
|
||||||
|
tmpls['afmt'] = tmpls['afmt'].replace(findText, replaceText)
|
||||||
|
self.collection().models.save(model, True)
|
||||||
|
self.collection().models.flush()
|
||||||
|
if checkForText:
|
||||||
|
updatedModels += 1
|
||||||
|
return updatedModels
|
||||||
|
|
||||||
|
|
||||||
@util.api()
|
@util.api()
|
||||||
def deckNameFromId(self, deckId):
|
def deckNameFromId(self, deckId):
|
||||||
deck = self.collection().decks.get(deckId)
|
deck = self.collection().decks.get(deckId)
|
||||||
|
@ -14,6 +14,8 @@ NEW_CSS = 'new random css'
|
|||||||
CARD_1_TEMPLATE = {'Front': 'field1', 'Back': 'field2'}
|
CARD_1_TEMPLATE = {'Front': 'field1', 'Back': 'field2'}
|
||||||
NEW_CARD_1_TEMPLATE = {'Front': 'question: field1', 'Back': 'answer: field2'}
|
NEW_CARD_1_TEMPLATE = {'Front': 'question: field1', 'Back': 'answer: field2'}
|
||||||
|
|
||||||
|
TEXT_TO_REPLACE = "new random css"
|
||||||
|
REPLACE_WITH_TEXT = "new updated css"
|
||||||
|
|
||||||
class TestModels(unittest.TestCase):
|
class TestModels(unittest.TestCase):
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
@ -55,6 +57,10 @@ class TestModels(unittest.TestCase):
|
|||||||
templates = util.invoke('modelTemplates', modelName=MODEL_1_NAME)
|
templates = util.invoke('modelTemplates', modelName=MODEL_1_NAME)
|
||||||
self.assertEqual({'Card 1': NEW_CARD_1_TEMPLATE}, templates)
|
self.assertEqual({'Card 1': NEW_CARD_1_TEMPLATE}, templates)
|
||||||
|
|
||||||
|
# findAndReplaceInModels: find and replace text in all models or model by name
|
||||||
|
util.invoke('findAndReplaceInModels', modelName=MODEL_1_NAME, findText=TEXT_TO_REPLACE, replaceText=REPLACE_WITH_TEXT, front=True, back=True, css=True)
|
||||||
|
new_css = util.invoke('modelStyling', modelName=MODEL_1_NAME)
|
||||||
|
self.assertEqual({'css': REPLACE_WITH_TEXT}, new_css)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
Loading…
Reference in New Issue
Block a user