Skip to content

Instantly share code, notes, and snippets.

@cryocaustik
Created September 10, 2021 00:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cryocaustik/ae13743c14d6c565e0782c22e7b752ab to your computer and use it in GitHub Desktop.
Save cryocaustik/ae13743c14d6c565e0782c22e7b752ab to your computer and use it in GitHub Desktop.
Custom mimesis provider example
from mimesis.providers import BaseProvider
from random import choice, sample
import json
import requests
import os
class ProcCodeCMS(BaseProvider):
class Meta:
name = 'proc_code_cms'
def __init__(self):
self.temp_path = os.path.join(os.environ.get('TEMP'), 'fake_proc_codes_cms')
self.mem_cache_size = 10000
self.mem_choices = []
self.proc_load()
def proc_load(self, cached=True):
if not os.path.isfile(self.temp_path) or not cached:
url = 'https://gist.githubusercontent.com/cryocaustik/2cb5b22e6f0c2072ecfdc576a6e05b66/raw/88fa3bc5b3bd15f1dcf5bd1e5bc0738d0c1815d7/proc_codes.json'
response = requests.get(url)
if response != 200:
response.raise_for_status()
results = response.json()
if not results:
raise ValueError('no results')
if len(results) < self.mem_cache_size:
self.mem_cache_size = len(results)
self.mem_choices = sample(results, self.mem_cache_size)
self.proc_set()
with open(self.temp_path, 'w') as _f:
json.dump(results, _f)
_f.close()
else:
self.proc_set()
def proc_set(self):
if not self.mem_choices:
with open(self.temp_path, 'r') as _f:
_data = json.load(_f)
if len(_data) < self.mem_cache_size:
self.mem_cache_size = len(_data)
self.mem_choices = sample(_data, self.mem_cache_size)
_f.close()
self.proc_choice = self.mem_choices.pop(choice([i for i in range(len(self.mem_choices))]))
else:
self.proc_choice = self.mem_choices.pop(choice([i for i in range(len(self.mem_choices))]))
def proc_code(self, cached=False):
if not cached:
self.proc_set()
return self.proc_choice.get('code')
def proc_name(self, cached=False):
if not cached:
self.proc_set()
return self.proc_choice.get('name')
def proc_type(self, cached=False):
if not cached:
self.proc_set()
return self.proc_choice.get('type')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment