Звёздочку репозиторию можно поставить с помощью GitHub REST API v3:
PUT /user/starred/:owner/:repo
Есть много библиотек на Питоне, которые оборачивают это API. Легко свою создать:
import requests
class Github:
def __init__(self, token, api_url='https://api.github.com'):
self.token = token
self.api_url = api_url
self.headers = {
'Accept': 'application/vnd.github.v3+json',
'Authorization': 'token ' + self.token
}
def star(self, repo, owner):
requests.put(f"{self.api_url}/user/starred/{owner}/{repo}",
headers=self.headers).raise_for_status()
Пример, чтобы звёздочку cpython поставить:
import os
github = Github(os.environ['GITHUB_OAUTH_TOKEN'])
github.star(repo='cpython', owner='python')
Чтобы попробовать, можно завести личный token. Для приложений, можно автоматически
token создать.
Ответ 2
Прямые запросы к серверу GitHub через requests не помогут. Сделано это для безопасности
Вам определенно пора узнать что такое API. У гитхаб оно располагается тут. А вот не
плохой туториал
Ответ 3
GitHub REST API использует HTTP PUT (requests.put), чтобы добавить звёздочку репозиторию.
Чтобы через HTTP POST (requests.post) это реализовать, можно использовать Github GraphQL
API v4:
data = graphql(
'''mutation ($starrable_id: ID!) {
addStar(input: {starrableId: $starrable_id}) {
clientMutationId
starrable {
id
viewerHasStarred
}
}
}''',
starrable_id=repo_id)
где repo_id необходимо получить ещё одним GraphQL запросом:
data = graphql(
'''query ($repo: String!, $owner: String!) {
repository(name: $repo, owner: $owner) {
id
}
}''',
repo='cpython',
owner='python')
repo_id = data['repository']['id']
где graphql() вызывает requests.post():
import os
import requests
def graphql(query, **variables):
r = requests.post(
'https://api.github.com/graphql',
headers={
'Authorization': 'Bearer ' + os.environ['GITHUB_OAUTH_TOKEN']
},
json=dict(query=query.replace('\n', ' '), variables=variables))
r.raise_for_status()
response = r.json()
if 'errors' in response:
raise RuntimeError(response['errors'])
return response['data']
Можно использовать тот же token, что и REST API.
Смотрите, есть настройки для каждого типа файлов, допустим, html. Я указал там отступы
табуляции 2, чтоб поуже было.
Но в некоторых файлах остались отступы 4. Т.е. очень широкий код получается, а я
люблю пользоваться автоформатированием.
Вот и как в этих файлах принудительно изменить отступы? на 2. Настройки уже изменены.
Но на некоторые файлы не влияет.
Ответы
Ответ 1
Вам нужно переформатировать код Code|Reformat Code. Более детально в официальной
документации
Ответ 2
Ctrl+Alt+S (File→Settings)
Editor→Code Style→HTML (название вашего языка)
Необходимо изменить Tab size, Ident, Continuation ident — я ставлю все 2.
Если пользуетесь пробелами, а не табами необходимо снять галочку Use tab character
(я снял).
В окне редактирования файла нажать Ctrl+Alt+L (Code→Reformat Code)
Ответ 3
Если всё равно после Ctrl+Alt+L (Code→Reformat Code) ставит пробелы, попробуйте снять
галочку с Enable EditorConfig support (File→Settings→Editor→Code Style)
Я просмотрел много вопросов и ответов на англоязычном Stack Overflow, но так и не
нашел ответа на вопрос: как вызывать какой-либо метод с помощью сочетания клавиш в
WPF-приложениях? В Windows Forms Application это делалось довольно просто, но похоже
в более развитом WPF это гораздо сложнее.
Ниже представлен классический пример. Нигде, где я смотел, толком не объяснено, что
именно мы привязываем. Но это явно не метод. Что это вообще за ApplicationCommands?
В другом вопросе было сказано: "XAML - это язык разметки, а потому мы не можем так
просто вызвать метод оттуда". Хорошо, почему мы тогда с лёгкостью можем привязать метод
к кнопке?
И, собственно, пример для вопроса. Всё, что нужно сделать - это вызвыать метод OnClickBtn1
комбинацией клавиш (ну, например, Ctrl+H) наиболее простым способом. То есть, при нажатии
этой комбинации клавиш будет тот же эффект, что и при клике кнопки Btn1. Приведённого
ниже кода недостаточно для того, чтобы сочетание клавиш работало. Чего именно не хватает?
XAML:
>
C#:
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void OnClickBtn1(object sender, RoutedEventArgs e) {
System.Diagnostics.Debug.WriteLine("Была нажата кнопка Btn1 либо сочетание
клавиш Ctrl+H");
}
}
Ответы
Ответ 1
Ответ на твой вопрос:
UserCommands.cs
using System.Windows.Input;
namespace Wpf_CommandsWithBindings
{
public static class UserCommands
{
static UserCommands()
{
// Можно прописать горячие клавиши по умолчанию
InputGestureCollection inputs = new InputGestureCollection();
inputs.Add(new KeyGesture(Key.S, ModifierKeys.Control, "Ctrl+S"));
SomeCommand = new RoutedUICommand("Some", "SomeCommand", typeof(UserCommands),
inputs);
}
public static RoutedCommand SomeCommand { get; private set; }
}
}
MainWindow.xaml
MainWindow.xaml.cs
using System.Windows;
namespace Wpf_CommandsWithBindings
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ShowMessage_Executed(object sender, RoutedEventArgs e)
{
MessageBox.Show(this, "Test");
}
}
}
Что это вообще за ApplicationCommands?
В WPF есть набор заготовленных комманд, которые не содержат никакого конкретного
кода (что-то делающего полезное). Эти команды представляют общую задачу приложения,
например, открыть папку, печать документа, открытие документа и т.д. То есть просто
"задача" без конкретной реализации. Для выполнения конкретных действий командой, нужно
использовать привязку, которая будет в коде вызывать конкретное действие. Может возникнуть
вопрос, зачем нужны вообще эти заготовленные команды? Например, если сторонний разработчик
создаст элемент управления DirectoryView, то такой элемент управления может внутри
своей логики использовать команду ApplicationCommands.Open для вызова кода, открывающего
корневую папку. По идее, если у тебя уже есть привязка для этой команды, то при использовании
элемента управления уже не нужно ничего дописывать.
Пример, из которого видно, что достаточно прописать команду в элементе управления
и в зависимости от места использования этого элемента будут выполняться разные действия
(в данном примере демонстрация, что это вообще работает):
UserControlTest.xaml
MainWindow.xaml
MainWindow.xaml.cs
using System.Windows;
using System.Windows.Input;
namespace Wpf_CommandsWithBindings
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ShowMessage_Executed(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show(this, "Test");
}
}
}
Хорошо, почему мы тогда с лёгкостью можем привязать метод к кнопке?
Потому что в XAML окна прописано пространство имён
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
и класс, относящийся к этому XAML
x:Class="Wpf_CommandsWithBindings.MainWindow"
Ответ 2
Смотрите.
Есть несколько методов «подцепить» клавиатурные команды к коду. Примитивный метод
— навесить обработчик OnKeyDown/Up на ваше окно, и в code-behind проверять нужную клавишу.
Этот метод плох тем, что он недекларативен (вам нужно заглянуть в обработчик, чтобы
понять, какая именно комбинация клавиш используется), и тем, что действие происходит
в code-behind, то есть, во View-коде, а не в VM, где ему и полагается быть. Если вы
не пользуетесь MVVM и пишете всю логику в классе окна, вторая может и не представлять
проблемы.
Затем, команды. Они нужны для того, чтобы иметь повторно используемое обозначение
для действия («открыть файл», «начать воспроизведение», «закрыть документ» и т. д.).
Для некоторых действий есть стандартные команды (находящиеся в классе ApplicationCommands,
а также других, например, EditingCommands), недостающие команды вы можете легко определить
самостоятельно. Команды можно вызывать из многих мест (горячие клавиши, кнопка на тулбаре,
меню, ...). Ваш код с KeyBinding привязывает в окне горячую клавишу CTRL+R к команде
ApplicationCommands.Open.
Теперь, реакция на команды. Для того, чтобы привязать свой обработчик к одной из
стандартных команд (наподобие ApplicationCommands.Open), вы должны использовать CommandBinding.
Если обработчик находится в классе окна, можно использовать разметку наподобие
Если обработчик находится в VM, вы должны передать ваши CommandBinding'и из VM в окно.
Если же ваша команда «самописная», вам не нужно подцеплять к ней обработчик, он уже
и так там есть.
Код Command="{Binding OnClickBtn1}" работать не будет, т. к. OnClickBtn1 — это, скорее
всего, метод, а значением Command должна быть команда (то есть, объект, реализующий
интерфейс ICommand).
Что означает ~$ в терминале bash (в начале строки)?
Ответы
Ответ 1
Это стандартное приглашение командной оболочки. Оно хранится в переменной окружения
с именем PS1 и может быть в любой момент заменена на другое. По умолчанию слева от
знака доллара располагается информация о пути к текущему каталогу. Тильда означает,
что вы находитесь в домашней директории текущего пользователя. Подробнее тут
Ответ 2
Выводим значение переменной PS1 (primary prompt string):
$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
Разбираем специальные символы:
\u - The username of the current user.
\h - The hostname, up to the first ‘.’.
\w - The current working directory, with $HOME abbreviated with a tilde.
\$ - If the effective uid is 0, #, otherwise $.
В итоге ~$ означает пользователя в домашней директории.
Источник: https://www.gnu.org/software/bash/manual/bash.html
вот есть у меня список в xml файле, я по нему прохожусь и вывожу в textbox, но что
если нужно добавить/удалить элемент в xml файле? как через код это можно сделать?
item1item2item3
xml файл считываю так
XmlDocument doc = new XmlDocument();
doc.Load("list.xml");
Ответы
Ответ 1
Изменить XML файл можно так:
// Считать файл
var doc = new XmlDocument();
doc.Load("My file name");
// Получить первый элемент
var node = doc.DocumentElement.ChildNodes[0];
// удалить его
doc.DocumentElement.RemoveChild(node);
// создать новый элемент
var newNode = doc.CreateElement("list");
newNode.InnerText = "item4";
// добавить новый элемент
doc.DocumentElement.AppendChild(newNode);
// Сохранить в файл
doc.Save("my file name");
В рамках урока по паттерну MVVM для приложений WPF мне нужно было добавить библиотеку
System.Windows.Interactivity.dll через Reference Manager. Я её там не обнаружил (версия
Visual Studio - 2017). На скриншоте ниже - всё, что есть в результатах поиска, начинающееся
с System.Windows:
Я подумал, что возможно данная библиотека уже встроена в новую версию проекта WPF
(хотя в списке уже подключённых ссылок её тоже нет), и когда добавил нижеследующий
код в ApplicationViewModel.cs, никаких ошибок пока что не было отображено средой разработки:
private RelayCommand doubleCommand;
public RelayCommand DoubleCommand {
get {
return doubleCommand ??
(doubleCommand = new RelayCommand(obj => {
Phone phone = obj as Phone;
if (phone != null) {
Phone phoneCopy = new Phone {
Company = phone.Company,
Price = phone.Price,
Title = phone.Title
};
Phones.Insert(0, phoneCopy);
}
}));
}
}
Однако, когда я добавил код XAML, то среда выдала сообщение о том, что в пространстве
имён clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity
не существует Interaction, EventTrigger и InvokeCommandAction:
Не знаю, каким образом это связано с библиотекой System.Windows.Interactivity, но
как следует решить данную проблему?
Ответы
Ответ 1
Требуемая библиотека является частью Microsoft Expression Blend 4 SDK и не включена
в стандартную поставку, но вы всегда можете подключить ее из NuGet Gallery: System.Windows.Interactivity.WPF
by Microsoft
Пользователи Visual Studio 2017 могут установить Microsoft Blend SDK в систему с
помощью Visual Studio Installer, для этого на вкладке "Отдельные компоненты" ("Individual
components") в разделе "Пакеты SDK, библиотеки и платформы" ("SDKs, libraries, and
frameworks") необходимо установить галочку напротив пункта "Пакет SDK для Microsoft
Blend для Visual Studio для платформы .NET" ("Blend for Visual Studio SDK for .NET")
и нажать кнопку "Изменить".
После этого, библиотека System.Windows.Interactivity станет доступна из Reference
Manager в разделе Assemblies/Extensions
Также, Blend SDK можно загрузить и установить в систему из центра загрузок Microsoft:
3.5, 4.0
Существуют ли в Java что-то вроде типов, допускающих NULL значения? То есть с сервера
приходит, на пример, int, но вместо него может прийти NULL В C#можно это обработать,
используя типы, допускающие, NULL значения.
int? a = NULL;
Как это следует обрабатывать в Java?
Ответы
Ответ 1
В Java ссылка любого класса может принимать значение null.
Примитивы же...
Целые числа - byte, short, char, int, long
Числа с плавающей точкой (иначе дробные) - float, double
Логический - boolean
...лишены такой возможности.
Если требуется создать ссылку на один из примитивных типов данных, необходимо использовать
соответствующий класс-обертку. Также в таких классах есть некоторые полезные методы
и константы, например минимальное значение типа int можно узнать использовав константу
Integer.MIN_VALUE. Оборачивание примитива в объект называется упаковкой (boxing), а
обратный процесс распаковкой (unboxing). (источник)
Соответственно для решения вашей задачи необходимо использовать классы-обёртки примитивов:
int -> Integer, short -> Short и т.п.
Ответ 2
В java для этого используются классы обертки:
wrapper for int: Integer
wrapper for double: Double
Но будьте внимательно, типы вроде Integer передаются по ссылке, а не по значению.