Страницы

Поиск по вопросам

суббота, 15 февраля 2020 г.

Как лайкнуть репозиторий на github через requests.post?

#python #python_3x #github #requests




Или может есть библиотека с такой возможностью ?
    


Ответы

Ответ 1



Звёздочку репозиторию можно поставить с помощью 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.

Phpstorm как в файле изменить отступы?

#phpstorm


Смотрите, есть настройки для каждого типа файлов, допустим, 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)

WPF: Самый простой способ вызывать метод сочетанием клавиш

#c_sharp #wpf #xaml


Я просмотрел много вопросов и ответов на англоязычном Stack Overflow, но так и не
нашел ответа на вопрос: как вызывать какой-либо метод с помощью сочетания клавиш в
WPF-приложениях? В Windows Forms Application это делалось довольно просто, но похоже
в более развитом WPF это гораздо сложнее.

Ниже представлен классический пример. Нигде, где я смотел, толком не объяснено, что
именно мы привязываем. Но это явно не метод. Что это вообще за ApplicationCommands? 


  



В другом вопросе было сказано: "XAML - это язык разметки, а потому мы не можем так
просто вызвать метод оттуда". Хорошо, почему мы тогда с лёгкостью можем привязать метод
к кнопке?


Ответы

Ответ 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

Что означает ~$ в терминале bash (в начале строки)?

#ubuntu #bash


Что означает ~$ в терминале 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 файла в c#

#c_sharp #xml


вот есть у меня список в xml файле, я по нему прохожусь и вывожу в textbox, но что
если нужно добавить/удалить элемент в xml файле? как через код это можно сделать?



  item1
  item2
  item3



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");

WPF&MVVM: Библиотека System.Windows.Interactivity больше не доступна?

#c_sharp #wpf #xaml #mvvm


В рамках урока по паттерну 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 значения

#java #c_sharp #null


Существуют ли в 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 передаются по ссылке, а не по значению.