def batch_delete(before_datetime=None, before_months=None): before_datetime = before_datetime or datetimes.get_datetime_months_ago( before_months) params = { 'reduce': 'false', 'endkey': datetimes.to_timestamp(before_datetime) } with couch.RestDatabase() as database: results = database.get_view('analyses', 'datetime_revs', params=params) if not results: return docs = map(get_doc_delete, results.get('rows', [])) if not docs: return with couch.RestDatabase() as database: return database.post_docs(docs)
def get_view_results(design, view, params, options=None): if options: params.update(options) with couch.RestDatabase() as database: results = database.get_view(design, view, params=params) if not results: return [] return ((row['key'], row['value']) for row in results.get('rows', []) if row['value'])
def search_query(facets=None, sorts=None, **optional_params): facets = facets or {} with couch.RestDatabase() as database: return database.search('queries', 'facets', facets=facets, sorts=sorts, **optional_params)
def save(iter_analyses): analyses = [analysis for analysis in iter_analyses if analysis] if not analyses: return with couch.RestDatabase() as database: response = database.post_docs(analyses) if 'error' in response and not response.get('reason'): logging.warning( u'Bulk insert failed, switching to individual insert') map(database.post_doc, analyses)
def get_feed_throughputs(): params = { 'descending': 'true', 'stale': 'ok', 'limit': 7, 'group_level': 3, # NOTE: group on day } with couch.RestDatabase() as database: results = database.get_view('feeds', 'datetime', params=params) if not results or 'rows' not in results or not results['rows']: return for row in results['rows']: key = [i for i in row['key'] if i] if not key: continue yield key, row['value']
def get_query_count(query, date): expected_key = [query, date.year, date.month, date.day] params = { 'group_level': 4, # NOTE: group on day 'limit': 1, 'startkey': json.dumps(expected_key), } with couch.RestDatabase() as database: results = database.get_view('overview', 'datetime', params=params) try: first = results['rows'][0] if first['key'] != expected_key: return 0 return int(first['value']['count']) except (KeyError, IndexError) as error: return 0
def search_query(query, timeframe=None, facets=None, sorts=None, **optional_params): facets = facets or {} if timeframe: datetime_facet = u'[{0} TO {1}]'.format( *map(datetimes.to_timestamp, timeframe)) facets.update({'datetime': datetime_facet}) with couch.RestDatabase() as database: return database.search('queries', 'facets', query, facets=facets, sorts=sorts, **optional_params)
def get_all_docs_texts(): params = {'group_level': 0} with couch.RestDatabase() as database: results = database.get_view('aggregate', 'texts', params=params) return results['rows'][0]['value']
def get_total_doc_count(): with couch.RestDatabase() as database: return database.get_db_info().get('doc_count') or 0
def get_doc(doc_id): with couch.RestDatabase() as database: doc = database.get_doc(doc_id) doc.pop('_id') doc.pop('query') return doc
def update_doc(doc_id, **updates): with couch.RestDatabase() as database: return database.post_update('analyses', 'analysis', doc_id, params=updates)
def get_database(for_salesforce=False): db_variables = get_db_variables(for_salesforce) return couch.RestDatabase(*db_variables)