本文整理汇总了Python中pyLibrary.queries.jx.sort函数的典型用法代码示例。如果您正苦于以下问题:Python sort函数的具体用法?Python sort怎么用?Python sort使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了sort函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: get_columns
def get_columns(self, table_name, column_name=None, force=False):
"""
RETURN METADATA COLUMNS
"""
try:
# LAST TIME WE GOT INFO FOR THIS TABLE
short_name = join_field(split_field(table_name)[0:1])
table = self.get_table(short_name)[0]
if not table:
table = Table(
name=short_name,
url=None,
query_path=None,
timestamp=Date.now()
)
with self.meta.tables.locker:
self.meta.tables.add(table)
self._get_columns(table=short_name)
elif force or table.timestamp == None or table.timestamp < Date.now() - MAX_COLUMN_METADATA_AGE:
table.timestamp = Date.now()
self._get_columns(table=short_name)
with self.meta.columns.locker:
columns = self.meta.columns.find(table_name, column_name)
if columns:
columns = jx.sort(columns, "name")
# AT LEAST WAIT FOR THE COLUMNS TO UPDATE
while len(self.todo) and not all(columns.get("last_updated")):
Log.note("waiting for columns to update {{columns|json}}", columns=[c.table+"."+c.es_column for c in columns if not c.last_updated])
Thread.sleep(seconds=1)
return columns
except Exception, e:
Log.error("Not expected", cause=e)
开发者ID:klahnakoski,项目名称:TestFailures,代码行数:34,代码来源:meta.py
示例2: insert_list
def insert_list(self, table_name, records):
if not records:
return
columns = set()
for r in records:
columns |= set(r.keys())
columns = jx.sort(columns)
try:
self.execute(
"DELETE FROM " + self.quote_column(table_name) + " WHERE _id IN {{ids}}",
{"ids": self.quote_column([r["_id"] for r in records])}
)
command = \
"INSERT INTO " + self.quote_column(table_name) + "(" + \
",".join([self.quote_column(k) for k in columns]) + \
") VALUES " + ",\n".join([
"(" + ",".join([self.quote_value(r.get(k, None)) for k in columns]) + ")"
for r in records
])
self.execute(command)
except Exception, e:
Log.error("problem with insert", e)
开发者ID:klahnakoski,项目名称:MoDataSubmission,代码行数:25,代码来源:redshift.py
示例3: _get_columns
def _get_columns(self, table=None, metadata=None):
# TODO: HANDLE MORE THEN ONE ES, MAP TABLE SHORT_NAME TO ES INSTANCE
if not metadata:
metadata = self.default_es.get_metadata(force=True)
def parse_all(please_stop):
for abs_index, meta in jx.sort(metadata.indices.items(), {"value": 0, "sort": -1}):
if meta.index != abs_index:
continue
for _, properties in meta.mappings.items():
if please_stop:
return
self._parse_properties(abs_index, properties, meta)
if table:
for abs_index, meta in jx.sort(metadata.indices.items(), {"value": 0, "sort": -1}):
if table == meta.index:
for _, properties in meta.mappings.items():
self._parse_properties(abs_index, properties, meta)
return
if table == abs_index:
self._get_columns(table=meta.index, metadata=metadata)
return
else:
self.parser = Thread.run("parse properties", parse_all)
开发者ID:klahnakoski,项目名称:esReplicate,代码行数:26,代码来源:meta.py
示例4: parse_all
def parse_all(please_stop):
for abs_index, meta in jx.sort(metadata.indices.items(), {"value": 0, "sort": -1}):
if meta.index != abs_index:
continue
for _, properties in meta.mappings.items():
if please_stop:
return
self._parse_properties(abs_index, properties, meta)
开发者ID:klahnakoski,项目名称:esReplicate,代码行数:9,代码来源:meta.py
示例5: groupby
def groupby(data, keys=None, size=None, min_size=None, max_size=None, contiguous=False):
"""
:param data:
:param keys:
:param size:
:param min_size:
:param max_size:
:param contiguous: MAINTAIN THE ORDER OF THE DATA, STARTING THE NEW GROUP WHEN THE SELECTOR CHANGES
:return: return list of (keys, values) PAIRS, WHERE
keys IS IN LEAF FORM (FOR USE WITH {"eq": terms} OPERATOR
values IS GENERATOR OF ALL VALUE THAT MATCH keys
contiguous -
"""
if isinstance(data, Container):
return data.groupby(keys)
if size != None or min_size != None or max_size != None:
if size != None:
max_size = size
return groupby_min_max_size(data, min_size=min_size, max_size=max_size)
try:
keys = listwrap(keys)
if not contiguous:
from pyLibrary.queries import jx
data = jx.sort(data, keys)
if not data:
return Null
if any(isinstance(k, Expression) for k in keys):
Log.error("can not handle expressions")
else:
accessor = jx_expression_to_function(jx_expression({"tuple": keys})) # CAN RETURN Null, WHICH DOES NOT PLAY WELL WITH __cmp__
def _output():
start = 0
prev = accessor(data[0])
for i, d in enumerate(data):
curr = accessor(d)
if curr != prev:
group = {}
for k, gg in zip(keys, prev):
group[k] = gg
yield Data(group), data[start:i:]
start = i
prev = curr
group = {}
for k, gg in zip(keys, prev):
group[k] = gg
yield Data(group), data[start::]
return _output()
except Exception as e:
Log.error("Problem grouping", cause=e)
开发者ID:klahnakoski,项目名称:SpotManager,代码行数:55,代码来源:group_by.py
示例6: _get_best
def _get_best(self, settings):
from pyLibrary.queries import jx
aliases = self.get_aliases()
indexes = jx.sort([
a
for a in aliases
if (a.alias == settings.index and settings.alias == None) or
(re.match(re.escape(settings.index) + r'\d{8}_\d{6}', a.index) and settings.alias == None) or
(a.index == settings.index and (a.alias == None or a.alias == settings.alias))
], "index")
return indexes.last()
开发者ID:klahnakoski,项目名称:MoDataSubmission,代码行数:11,代码来源:elasticsearch.py
示例7: _es_terms2
def _es_terms2(es, mvel, query):
"""
WE ASSUME THERE ARE JUST TWO EDGES, AND EACH HAS A SIMPLE value
"""
# REQUEST VALUES IN FIRST DIMENSION
q1 = query.copy()
q1.edges = query.edges[0:1:]
values1 = es_terms(es, mvel, q1).edges[0].domain.partitions.value
select = listwrap(query.select)
FromES = build_es_query(query)
for s in select:
for i, v in enumerate(values1):
FromES.facets[s.name + "," + str(i)] = {
"terms": {
"field": query.edges[1].value,
"size": coalesce(query.limit, 200000)
},
"facet_filter": simplify_esfilter({"and": [
query.where,
{"term": {query.edges[0].value: v}}
]})
}
data = es09.util.post(es, FromES, query.limit)
# UNION ALL TERMS FROM SECOND DIMENSION
values2 = set()
for k, f in data.facets.items():
values2.update(f.terms.term)
values2 = jx.sort(values2)
term2index = {v: i for i, v in enumerate(values2)}
query.edges[1].domain.partitions = DictList([{"name": v, "value": v} for v in values2])
# MAKE CUBE
output = {}
dims = [len(values1), len(values2)]
for s in select:
output[s.name] = Matrix(*dims)
# FILL CUBE
# EXPECTING ONLY SELECT CLAUSE FACETS
for facetName, facet in data.facets.items():
coord = facetName.split(",")
s = [s for s in select if s.name == coord[0]][0]
i1 = int(coord[1])
for term in facet.terms:
i2 = term2index[term.term]
output[s.name][(i1, i2)] = term[aggregates[s.aggregate]]
cube = Cube(query.select, query.edges, output)
cube.query = query
return cube
开发者ID:klahnakoski,项目名称:MoDataSubmission,代码行数:54,代码来源:terms.py
示例8: running_instances
def running_instances(self):
# FIND THE BIGGEST, MOST EXPENSIVE REQUESTS
instances = self._get_managed_instances()
for r in instances:
try:
r.markup = self.price_lookup[r.instance_type, r.placement]
except Exception as e:
r.markup = self.price_lookup[r.instance_type, r.placement]
Log.error("No pricing!!!", e)
instances = jx.sort(instances, [
{"value": "markup.type.utility", "sort": -1},
{"value": "markup.estimated_value", "sort": 1}
])
return instances
开发者ID:klahnakoski,项目名称:SpotManager,代码行数:14,代码来源:spot_manager.py
示例9: __init__
def __init__(
self,
alias, # NAME OF THE ALIAS
type=None, # SCHEMA NAME, WILL HUNT FOR ONE IF None
explore_metadata=True, # IF PROBING THE CLUSTER FOR METADATA IS ALLOWED
debug=False,
timeout=None, # NUMBER OF SECONDS TO WAIT FOR RESPONSE, OR SECONDS TO WAIT FOR DOWNLOAD (PASSED TO requests)
kwargs=None
):
self.debug = debug
if self.debug:
Log.alert("Elasticsearch debugging on {{index|quote}} is on", index= kwargs.index)
if alias == None:
Log.error("Alias can not be None")
self.settings = kwargs
self.cluster = Cluster(kwargs)
if type == None:
if not explore_metadata:
Log.error("Alias() was given no `type` (aka schema) and not allowed to explore metadata. Do not know what to do now.")
if not self.settings.alias or self.settings.alias==self.settings.index:
alias_list = self.cluster.get("/_alias")
candidates = (
[(name, i) for name, i in alias_list.items() if self.settings.index in i.aliases.keys()] +
[(name, Null) for name, i in alias_list.items() if self.settings.index==name]
)
full_name = jx.sort(candidates, 0).last()[0]
if not full_name:
Log.error("No index by name of {{name}}", name=self.settings.index)
mappings = self.cluster.get("/" + full_name + "/_mapping")[full_name]
else:
mappings = self.cluster.get("/"+self.settings.index+"/_mapping")[self.settings.index]
# FIND MAPPING WITH MOST PROPERTIES (AND ASSUME THAT IS THE CANONICAL TYPE)
max_prop = -1
for _type, mapping in mappings.mappings.items():
if _type == "_default_":
continue
num_prop = len(mapping.properties.keys())
if max_prop < num_prop:
max_prop = num_prop
self.settings.type = _type
type = _type
if type == None:
Log.error("Can not find schema type for index {{index}}", index=coalesce(self.settings.alias, self.settings.index))
self.path = "/" + alias + "/" + type
开发者ID:klahnakoski,项目名称:SpotManager,代码行数:49,代码来源:elasticsearch.py
示例10: json_schema_to_markdown
def json_schema_to_markdown(schema):
from pyLibrary.queries import jx
def _md_code(code):
return "`"+code+"`"
def _md_italic(value):
return "*"+value+"*"
def _inner(schema, parent_name, indent):
more_lines = []
for k,v in schema.items():
full_name = join_field(split_field(parent_name)+[k])
details = indent+"* "+_md_code(full_name)
if v.type:
details += " - "+_md_italic(v.type)
else:
Log.error("{{full_name}} is missing type", full_name=full_name)
if v.description:
details += " " + v.description
more_lines.append(details)
if v.type in ["object", "array", "nested"]:
more_lines.extend(_inner(v.properties, full_name, indent+" "))
return more_lines
lines = []
if schema.title:
lines.append("#"+schema.title)
lines.append(schema.description)
lines.append("")
for k, v in jx.sort(schema.properties.items(), 0):
full_name = k
if v.type in ["object", "array", "nested"]:
lines.append("##"+_md_code(full_name)+" Property")
if v.description:
lines.append(v.description)
lines.append("")
if v.type in ["object", "array", "nested"]:
lines.extend(_inner(v.properties, full_name, " "))
else:
lines.append("##"+_md_code(full_name)+" ("+v.type+")")
if v.description:
lines.append(v.description)
return "\n".join(lines)
开发者ID:klahnakoski,项目名称:TestFailures,代码行数:49,代码来源:convert.py
示例11: get_markup
def get_markup(self, branch, revision, task_id=None, buildername=None, timestamp=None):
# TRY CACHE
if not branch or not revision:
Log.error("expecting branch and revision")
if self.settings.use_cache:
if task_id:
_filter = {"term": {"task.id": task_id}}
else:
_filter = {"term": {"ref_data_name": buildername}}
query = {
"query": {"filtered": {
"query": {"match_all": {}},
"filter": {"and": [
_filter,
{"term": {"repo.branch": branch}},
{"prefix": {"repo.revision": revision}},
{"or": [
{"range": {"etl.timestamp": {"gte": (Date.now() - HOUR).unix}}},
{"range": {"job.timing.last_modified": {"lt": (Date.now() - DAY).unix}}}
]}
]}
}},
"size": 10000
}
try:
docs = self.cache.search(query, timeout=120).hits.hits
except Exception, e:
docs = None
Log.warning("Bad ES call, fall back to TH", cause=e)
if not docs:
pass
elif len(docs) == 1:
if DEBUG:
Log.note("Used ES cache to get TH details on {{value|quote}}", value=coalesce(task_id, buildername))
return docs[0]._source
elif timestamp == None:
Log.error("timestamp required to find best match")
else:
# MISSING docs._source.job.timing.end WHEN A PLACEHOLDER WAS ADDED
# TODO: SHOULD DELETE OVERAPPING PLACEHOLDER RECORDS
timestamp = Date(timestamp).unix
best_index = jx.sort([(i, abs(coalesce(e, 0) - timestamp)) for i, e in enumerate(docs._source.job.timing.end)], 1)[0][0]
return docs[best_index]._source
开发者ID:klahnakoski,项目名称:MoTreeherder,代码行数:47,代码来源:treeherder.py
示例12: get_columns
def get_columns(self, table_name, column_name=None, force=False):
"""
RETURN METADATA COLUMNS
"""
table_path = split_field(table_name)
es_index_name = table_path[0]
query_path = join_field(table_path[1:])
table = self.get_table(es_index_name)[0]
abs_column_name = None if column_name == None else concat_field(query_path, column_name)
try:
# LAST TIME WE GOT INFO FOR THIS TABLE
if not table:
table = Table(
name=es_index_name,
url=None,
query_path=None,
timestamp=Date.now()
)
with self.meta.tables.locker:
self.meta.tables.add(table)
self._get_columns(table=es_index_name)
elif force or table.timestamp == None or table.timestamp < Date.now() - MAX_COLUMN_METADATA_AGE:
table.timestamp = Date.now()
self._get_columns(table=es_index_name)
with self.meta.columns.locker:
columns = self.meta.columns.find(es_index_name, column_name)
if columns:
columns = jx.sort(columns, "names.\.")
# AT LEAST WAIT FOR THE COLUMNS TO UPDATE
while len(self.todo) and not all(columns.get("last_updated")):
if DEBUG:
Log.note("waiting for columns to update {{columns|json}}", columns=[c.es_index+"."+c.es_column for c in columns if not c.last_updated])
Till(seconds=1).wait()
return columns
except Exception as e:
Log.error("Not expected", cause=e)
if abs_column_name:
Log.error("no columns matching {{table}}.{{column}}", table=table_name, column=abs_column_name)
else:
self._get_columns(table=table_name) # TO TEST WHAT HAPPENED
Log.error("no columns for {{table}}?!", table=table_name)
开发者ID:klahnakoski,项目名称:SpotManager,代码行数:44,代码来源:meta.py
示例13: get_columns
def get_columns(self, table_name, column_name=None, fail_when_not_found=False):
"""
RETURN METADATA COLUMNS
"""
try:
with self.meta.columns.locker:
columns = [c for c in self.meta.columns.data if c.table == table_name and (column_name is None or c.name==column_name)]
if columns:
columns = jx.sort(columns, "name")
if fail_when_not_found:
# AT LEAST WAIT FOR THE COLUMNS TO UPDATE
while len(self.todo) and not all(columns.get("last_updated")):
Log.note("waiting for columns to update {{columns|json}}", columns=[c.table+"."+c.es_column for c in columns if not c.last_updated])
Thread.sleep(seconds=1)
return columns
elif all(columns.get("last_updated")):
return columns
except Exception, e:
Log.error("Not expected", cause=e)
开发者ID:klahnakoski,项目名称:esReplicate,代码行数:19,代码来源:meta.py
示例14: _figure_out_start_point
def _figure_out_start_point(self):
# RECOVER FROM THE QUEUE
acc = []
while True:
d = self.temp_queue.pop(timeout=ZERO)
if d:
acc.append(d)
else:
break
self.temp_queue.rollback()
if acc:
# WAS IN THE MIDDLE OF A BATCH, FIND count
data = acc[-1]
today_ = data[UID_PATH].split(".")[0]
todays_batch_count = int(data[UID_PATH].split(".")[1])
count = todays_batch_count * BATCH_SIZE + data.etl.id + 1
if DEBUG:
Log.note(
"Next uid from queue is {{uid}}.{{count}}",
count=count % BATCH_SIZE,
uid=today_ + "." + unicode(todays_batch_count)
)
self.uid = UID(count)
return
# FIND LAST WHOLE BATCH FROM TODAY
today_ = unicode(today())
todays_keys = self.bucket.keys(prefix=unicode(today_))
if not todays_keys:
if DEBUG:
Log.note("Next uid is {{uid}}.{{count}}", count=0, uid=today_+".0")
self.uid = UID()
return
todays_batch_count = jx.sort(int(k.split(".")[1]) for k in todays_keys).last() + 1
max_key = today_ + "." + unicode(todays_batch_count)
if DEBUG:
Log.note("Next uid is {{uid}}", uid=max_key)
count = todays_batch_count * BATCH_SIZE
self.uid = UID(count)
开发者ID:klahnakoski,项目名称:MoDataSubmission,代码行数:42,代码来源:storage.py
示例15: get_metadata
def get_metadata(self, force=False):
if not self.settings.explore_metadata:
Log.error("Metadata exploration has been disabled")
if not self._metadata or force:
response = self.get("/_cluster/state", retry={"times": 5}, timeout=3)
with self.metadata_locker:
self._metadata = wrap(response.metadata)
# REPLICATE MAPPING OVER ALL ALIASES
indices = self._metadata.indices
for i, m in jx.sort(indices.items(), {"value": {"offset": 0}, "sort": -1}):
m.index = i
for a in m.aliases:
if not indices[a]:
indices[a] = {"index": i}
self.cluster_state = wrap(self.get("/"))
self.version = self.cluster_state.version.number
return self._metadata
return self._metadata
开发者ID:klahnakoski,项目名称:esReplicate,代码行数:20,代码来源:elasticsearch.py
示例16: insert_list
def insert_list(self, table_name, records):
if not records:
return
keys = set()
for r in records:
keys |= set(r.keys())
keys = jx.sort(keys)
try:
command = \
"INSERT INTO " + self.quote_column(table_name) + "(" + \
",".join([self.quote_column(k) for k in keys]) + \
") VALUES " + ",\n".join([
"(" + ",".join([self.quote_value(r[k]) for k in keys]) + ")"
for r in records
])
self.execute(command)
except Exception, e:
Log.error("problem with record: {{record}}", record= records, cause=e)
开发者ID:klahnakoski,项目名称:MoTreeherder,代码行数:20,代码来源:mysql.py
示例17: get_index
def get_index(self, alias):
"""
RETURN THE INDEX USED BY THIS alias
"""
alias_list = self.cluster.get_aliases()
output = jx.sort(set([
a.index
for a in alias_list
if a.alias == alias or
a.index == alias or
(re.match(re.escape(alias) + "\\d{8}_\\d{6}", a.index) and a.index != alias)
]))
if len(output) > 1:
Log.error("only one index with given alias==\"{{alias}}\" expected", alias= alias)
if not output:
return Null
return output.last()
开发者ID:klahnakoski,项目名称:MoDataSubmission,代码行数:20,代码来源:elasticsearch.py
示例18: get_schema
def get_schema(self, retry=True):
if self.settings.explore_metadata:
indices = self.cluster.get_metadata().indices
if not self.settings.alias or self.settings.alias==self.settings.index:
#PARTIALLY DEFINED settings
candidates = [(name, i) for name, i in indices.items() if self.settings.index in i.aliases]
# TODO: MERGE THE mappings OF ALL candidates, DO NOT JUST PICK THE LAST ONE
index = "dummy value"
schema = wrap({"_routing": {}, "properties": {}})
for _, ind in jx.sort(candidates, {"value": 0, "sort": -1}):
mapping = ind.mappings[self.settings.type]
set_default(schema._routing, mapping._routing)
schema.properties = _merge_mapping(schema.properties, mapping.properties)
else:
#FULLY DEFINED settings
index = indices[self.settings.index]
schema = index.mappings[self.settings.type]
if index == None and retry:
#TRY AGAIN, JUST IN CASE
self.cluster.cluster_state = None
return self.get_schema(retry=False)
#TODO: REMOVE THIS BUG CORRECTION
if not schema and self.settings.type == "test_result":
schema = index.mappings["test_results"]
# DONE BUG CORRECTION
if not schema:
Log.error(
"ElasticSearch index ({{index}}) does not have type ({{type}})",
index=self.settings.index,
type=self.settings.type
)
return schema
else:
mapping = self.cluster.get(self.path + "/_mapping")
if not mapping[self.settings.type]:
Log.error("{{index}} does not have type {{type}}", self.settings)
return wrap({"mappings": mapping[self.settings.type]})
开发者ID:klahnakoski,项目名称:MoDataSubmission,代码行数:41,代码来源:elasticsearch.py
示例19: save_money
def save_money(self, remaining_budget, net_new_utility):
remove_spot_requests = wrap([])
# FIRST CANCEL THE PENDING REQUESTS
if remaining_budget < 0:
requests = self._get_managed_spot_requests()
for r in requests:
if r.status.code in PENDING_STATUS_CODES | PROBABLY_NOT_FOR_A_WHILE | MIGHT_HAPPEN:
remove_spot_requests.append(r.id)
net_new_utility += self.settings.utility[r.launch_specification.instance_type].utility
remaining_budget += r.price
instances = jx.sort(self.running_instances(), "markup.estimated_value")
remove_list = wrap([])
for s in instances:
if remaining_budget >= 0:
break
remove_list.append(s)
net_new_utility += coalesce(s.markup.type.utility, 0)
remaining_budget += coalesce(s.request.bid_price, s.markup.price_80, s.markup.current_price)
if not remove_list:
return remaining_budget, net_new_utility
# SEND SHUTDOWN TO EACH INSTANCE
Log.warning("Shutdown {{instances}} to save money!", instances=remove_list.id)
for i in remove_list:
try:
self.instance_manager.teardown(i)
except Exception as e:
Log.warning("Teardown of {{id}} failed", id=i.id, cause=e)
remove_spot_requests.extend(remove_list.spot_instance_request_id)
# TERMINATE INSTANCES
self.ec2_conn.terminate_instances(instance_ids=remove_list.id)
# TERMINATE SPOT REQUESTS
self.ec2_conn.cancel_spot_instance_requests(request_ids=remove_spot_requests)
return remaining_budget, net_new_utility
开发者ID:klahnakoski,项目名称:SpotManager,代码行数:41,代码来源:spot_manager.py
示例20: loop_all_days
def loop_all_days(destination, please_stop):
try:
today = Date.today()
# WHICH DAYS DO WE NEED TO CALCULATE
# ALL BUILD DATES WITH WITH ETL TIMESTAMP OF A WEEK AGO
# ALL BUILD DATES THAT HAVE NOT BEEN PROCESSED YET
build_dates = http.post_json(config.source.url, json={
"from": "unittest",
"edges": [
{
"name": "date",
"value": "build.date",
"allowNulls": False,
"domain": {
"type": "time",
"min": "today-week",
"max": "eod",
"interval": "day"
}
}
],
"where": {"gte": {"etl.timestamp": (today - WEEK).unix}},
"sort": {"value": "build.date", "sort": -1},
"limit": 14,
"format": "list"
})
build_dates.data = jx.sort(build_dates.data, {"value": "date", "sort": -1})
for d in build_dates.data:
if please_stop:
return
agg(Date(d.date), destination, please_stop=please_stop)
finally:
please_stop.go()
开发者ID:klahnakoski,项目名称:TestFailures,代码行数:36,代码来源:app.py
注:本文中的pyLibrary.queries.jx.sort函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论