Вот что я придумал для того, чтобы иметь дело с условным Descending. Вы можете комбинировать это с другими методами генерации динамической функции keySelector
.
public static IOrderedQueryable<TSource> OrderBy<TSource, TKey>(this IQueryable<TSource> source,
System.Linq.Expressions.Expression<Func<TSource, TKey>> keySelector,
System.ComponentModel.ListSortDirection sortOrder
)
{
if (sortOrder == System.ComponentModel.ListSortDirection.Ascending)
return source.OrderBy(keySelector);
else
return source.OrderByDescending(keySelector);
}
Использование:
//imagine this is some parameter
var direction = System.ComponentModel.ListSortDirection.Ascending;
query = query.OrderBy(ec => ec.MyColumnName, direction);
Обратите внимание, что это позволяет вам связать это расширение .OrderBy
с новый параметр на любой IQueryable.
// perhaps passed in as a request of user to change sort order
// var direction = System.ComponentModel.ListSortDirection.Ascending;
query = context.Orders
.Where(o => o.Status == OrderStatus.Paid)
.OrderBy(ec => ec.OrderPaidUtc, direction);
Автонос является подобным автоинструменту тестирования для Python, пользуясь превосходной nosetest библиотекой.
изменения файловой системы автоиспытательных площадок и автоматически повторно выполненный любые измененные тесты или зависимости каждый раз, когда файл добавляется, удалили или обновили. Файл рассчитывает, как изменено, если он имеет iself, измененный, или если какой-либо файл он
import
с изменился....
Автонос в настоящее время имеет собственный GUI для OSX и GTK. Если ни один из тех не доступен Вам, можно вместо этого выполнить консольную версию (с - консольная опция).
Возможно, buildbot был бы полезен http://buildbot.net/trac
Для Вашего третьего вопроса возможно, trace
модуль - то, в чем Вы нуждаетесь:
>>> def y(a): return a*a
>>> def x(a): return y(a)
>>> import trace
>>> tracer = trace.Trace(countfuncs = 1)
>>> tracer.runfunc(x, 2)
4
>>> res = tracer.results()
>>> res.calledfuncs
{('<stdin>', '<stdin>', 'y'): 1, ('<stdin>', '<stdin>', 'x'): 1}
res.calledfuncs
содержит функции, которые были вызваны. Если Вы определяете countcallers = 1
при создании трассировщика, можно получить отношения вызывающей стороны/вызываемого. Посмотрите документы trace
модуль для получения дополнительной информации.
можно также попытаться получить вызовы через статический анализ, но это может быть опасно из-за динамического характера Python.
Сервер разработки Django имеет монитор изменения файла, который наблюдает за модификациями и автоматически перезагружает себя. Вы могли снова использовать этот код для запуска модульных тестов на модификации файла.
Возможно, Нос http://somethingaboutorange.com/mrl/projects/nose/ имеет плагин http://somethingaboutorange.com/mrl/projects/nose/doc/writing_plugins.html
Найденный этим: http://jeffwinkler.net/2006/04/27/keeping-your-nose-green/
Я только что нашел это: http://www.metareal.org/p/modipyd/
В настоящее время я использую thumb.py, но в качестве переходов в моем текущем проекте от небольшого проекта до среднего, я искал что-то, что могло бы сделать немного более тщательный анализ зависимостей, и с несколькими настройками я довольно быстро начал и начал работать с modipyd.