Parsing pseudo-classes and stateful styles from imported style object

Hi there,
First of all great styling library, really enjoying it.
I'm having a problem where if I pass an imported object to styles then Look is not parsing the pseudo-classes or stateful styles keys.
For example:
in listStyles.js
export const list = {
    button: {
		width: '25%'
        ':hover': {
            color: '#ffffff'
        }
    }
}

and in my component
import React from 'react';
import Look from 'react-look/dom';
import {list as listStyle} from '../../styles/listStyles';

@Look
class ItemListNode extends React.Component {

	styles = {
        button : {
			styles: listStyle.button
		}
    }
    ....
}

The standard styles will through but the pseudo classes and/or stateful styles will not take effect.

Thanks a lot! So happy people actually enjoy using Look.
Hmm, I think you're assigned it incorrectly. There're 2 possible options:

Using Babel you might have the ... operator enabled. Therefore you could just do it this way:

styles = {
   ...listStyle,
   /* All the other styles */
}

If you want to add some additional button styles to those added with listStyle.button, just go with this:
styles = {
   button: {
       ...listStyle.button,
       /* Other button styles: Might overwrite listStyle.button */
   }
}

Why would you create another styles key within your button key? Probably you just need to use:

styles = {
   button: listStyle.button,
   /* All the other styles */
}

And if you also want to use additional styles without the ... operator, just use the extend mixin which enabled that for <=ES5:
styles = {
   button: {
      extend: listStyle.button,
      /* Other button styles */
   }
}

@dnusca Hope that helped, if not: let me know again :)

As mentioned above, this can be closed.


Slow getSubtree

Hello, first of all thanks for sharing this excellent piece of code.
In most cases, I see that the get or getAll requests are fast, a lot, comparable with net-snmp from bash.
However, now I start to try getSubtree and it works extremely slow. To compare, a particular request takes 1.8 seconds with net-snmp from bash and snmp-native takes 27 seconds. The two tests are done on the same server, against the same host and the same OID.
Is it normal for getSubtree to take so long?

I don't think so. Can you figure what what it is that takes so long, using pcaps and debugging as appropriate?

@leo-combes: could you specify which net-snmp command you are comparing specifically?
The original getSubtree fetches only single values - while pull request #44 implements getBulkRequest, which, depending on the snmp server implementation, may give faster (or slower) response.

@calmh I will do some additional research and confirm.
@bangert You are correct, my test are made with snmpbulkwalk:
snmpbulkwalk -v 2c -c public <IP_ADDRESS> .<IP_ADDRESS>.4.1.49<IP_ADDRESS>.<IP_ADDRESS>
Now, I do a test with "normal" snmpwalk and takes 16 seconds.
I did not know you guys were working on getBulkRequest implementation. In what version is this functionality available?

it's not available in any release yet. i have been using the implementation in #44 for a while...

@bangert I've testing your PR #44 and works very well!

thank you. what times do you measure now?
In my experience, node-snmp-native should not be slower than the net-snmp cli tools...

Tests over OID with 80 values, same remote host (non local, over internet):
net-snmp:
1.874s
1.870s
1.873s
1.868s
1.867s
node-snmp-native:
1.905s
1.905s
1.911s
1.894s
1.893s
1.898s

so node-snmp-native is marginally slower (~2%). thanks for correcting me on that ;-)


Add zero to hexadecimal numbers below F (16)

Should fix https://github.com/atom/settings-view/issues/712
The numberToHexString method incorrectly only put a 0 for numbers below 10 instead of 16, outputting A instead of 0A for 11, for example. I've added a test at the only place that uses toHexString that fails on the current master branch. I'm not sure if it's in the right place, please let me know if I should move it/create seperate test cases.

Awesome, thanks!


Document cryptographic algorithms used by Electron

In order to submit Atom Electron app to the Mac App Store you have to provide information about the cryptography algorithms that your app "uses, accesses, implements or incorporates". Check this tutorial for more info.
I would propose to create a documentation page that would list all cryptography algorithms used by Atom Electron so that we could reference it when filling the legal forms.

Here is a list of algorithms I have pulled from Chromium's WebCrypto page:

RSASSA-PKCS1-v1_5 RFC 3447
RSA-PSS RFC 3447
RSA-OAEP - RFC 3447
ECDSA - ANS X9.62–2005
ECDH - ANS X9.63–2001
AES-CTR - NIST SP 800-38A
AES-CBC - NIST SP 800-38A
AES-GCM - NIST SP 800-38D
AES-KW - RFC3394
HMAC - FIPS 198-1
SHA-1 - FIPS 180-4
SHA-256 - FIPS 180-4
SHA-384 - FIPS 180-4
SHA-512 - FIPS 180-4
HKDF - NIST SP 800-56C
PBKDF2 - RFC 2898

Second list based on OpenSSL [documentation]:(https://www.openssl.org/docs/manmaster/crypto/crypto.html)

Blowfish - https://www.schneier.com/cryptography/blowfish/
CAST-128 (RFC 2144)[https://tools.ietf.org/html/rfc2144]
CAST-256 (RFC 2612)[https://tools.ietf.org/html/rfc2612]
DES - FIPS 46-3
IDEA - Lai, X., "On the Design and Security of Block Ciphers", ETH Series in Information Processing, v. 1, Konstanz: Hartung-Gorre Verlag, 1992.
RC2 - RFC 2268
RC4 - RFC 4345
RC5 - http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf
DSA - ANSI X9.30
DH - RFC 2631
EC - SEC 1
RSA RFC 3447
HMAC - RFC 2104
MD2 - RFC 1319
MD4 - RFC 6150
MD5 - RFC 1321
MDC2 - ISO/IEC 10118-2
RIPEMD - ISO/IEC 10118-3
SHA - FIPS 180-4


Update to node16

This will stop this warning appearing https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/

Thanks! I also have no idea… let's give it a try and see if everything breaks! We can roll it back if needed.


Error on Installation

iPhone 13 Pro Max on ios 15, Jailbroken with Xina15, trying to install IAmLazy but get an immediate error of me.lightmann.iamlazy (Queued) What do i need to do?

Hey! The error occurs because IAmLazy currently lacks support for iOS 15+ (and rootless jailbreaks in general). I will very likely add support once the iOS 15 jailbreaks are in a stable state. My only device is currently sitting on iOS 14 and I don't plan on updating it until the jailbreaks' issues have been sorted and I can trust that they won't change too drastically. Going to close this for now in favor of #30. Appreciate your interest and support!


Impossibility to use Mistral AI as LLM

Describe the bug
Error : ModuleNotFoundError: No module named 'mistralai.models.chat_completion' when trying to import Mistral from vanna.mistral
To Reproduce
Steps to reproduce the behavior:
Simply Run :  from vanna.mistral import Mistral as described in doc https://vanna.ai/docs/mysql-mistral-chromadb/
Expected behavior
Module chat_completion should be found in mistralai.models
Error logs/Screenshots

Desktop (please complete the following information where):

OS: [WSL Ubuntu]
Version: [e.g. 22.04.4 LTS]
Python: [3.12.4]
Vanna: [2.8.0]
mistralai: [1.0.0]

It looks like we need to migrate our mistral implementation after they released their 1.0.0 version:
https://github.com/mistralai/client-python/blob/55b92b18b36ed909e5b56036d6c7962f66447067/MIGRATION.md


I added additional information about limitations placed on implicit broadcast  receivers on android API 26 and above

The documentation did not contain tips on limitations placed on implicit broadcast receivers as from android 8. Reader might have difficulties listening to implicit broadcast receivers on these devices. I had this problem, and the link and the tip I added in this commit helped me resolve it.

@DamienDoumer : Thanks for your contribution! The author(s) have been notified to review your proposed change.

@conceptdev : Thanks for your contribution! The author(s) have been notified to review your proposed change.

#sign-off


Feature: md-error for md-select

Bug, feature request, or proposal:
Feature
What is the requested behavior?
If a select is invalid have the option to show a message
What is the current behavior?
If an validation error occurs no message is displayed
What is the use-case or motivation for changing an existing behavior?
I can understand why you might not have md-error initially since it is a select, but we're finding that there are use cases where being able to provide more information based on either a selection or lack of a selection indicating what this means would be very useful.
Which versions of Angular, Material, OS, TypeScript, browsers are affected?
Angular 4.2.5, Angular Material 2.0.0-beta.7, Windows 10
Is there anything else we should know?

Dupe of https://github.com/angular/material2/issues/4673 and sort of https://github.com/angular/material2/issues/2498

Closing as a duplicate.

@crisbeto None of these duplicates #4673, #2498 contain a solution. Do we have any other ticket which shows how to achieve this ?

It's not currently possible. Those issues are for tracking the implementation.

@crisbeto when to achieve this?

@finalxcode it's coming soon. See https://github.com/angular/material2/pull/6488

Have the same issue with md-error for md-select


The system cannot find the file specified. (os error 2)

Describe the bug
This error happens when I'm using CROSS compilation in Github Action during on generation of executable file and msi installer for Windows.
Reproduction
https://github.com/32-Project/TP32/actions/runs/9447445796/job/26019256353
Expected behavior
[LOGS]
Built application at: D:\a\TP32\TP32\src-tauri\target\release\tp32.exe
Info Verifying wix package
Downloading https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip
Info validating hash
Info extracting WIX
Info Target: x64
Error failed to bundle project: The system cannot find the file specified. (os error 2)
Full tauri info output
I haven't tauri info in Github Action.

Stack trace
No response
Additional context
No response

Hmm, i think it's this line: https://github.com/32-Project/TP32/blob/main/src-tauri/tauri.conf.json#L45 The file itself doesn't have the .md extension. If that doesn't help, try changing args: ${{ matrix.args }} to args: ${{ matrix.args }} -vvv to get more logs.

Thank you. 👍


Docker gogs web/ssh does not restart after reboot

I am using a fresh install from docker gogs/gogs on Linux. Initially, gogs works fine. But when I reboot the host, the dockers do relaunch but do not serve the web interface :(
curl http://<IP_ADDRESS>:10080
curl: (7) Failed to connect to <IP_ADDRESS> port 10080: Connection refused

This is how I started gogs. Note the restart policy + I am publishing ports 10022 and 10080.
docker run --restart=always --name gogs-db -e MYSQL_DATABASE=gogs -e MYSQL_ROOT_PASSWORD=MYSECRET -d mysql:5.6.27
docker run --restart=always -d --name gogs-cuckoo --link gogs-db:mysql --publish 10022:22 --publish 10080:3000 -v /var/gogs:/data gogs/gogs

I continued the installation without any problems, and then managed to log on to gogs and work with it without any problem. The web interface is expected to work on http://MYIP:10080, and that worked fine, and I created repositories etc.
However, when I reboot the host, the 2 docker containers do relaunch thanks to the restart policy
axelle@cuckoo:~$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                                    NAMES
05d957d48fd6        gogs/gogs            "docker/start.sh /bin"   2 hours ago         Up 2 hours          <IP_ADDRESS>:10022->22/tcp, <IP_ADDRESS>:10080->3000/tcp   gogs-cuckoo
aa9ee4739825        mysql:5.6.27         "/entrypoint.sh mysql"   6 hours ago         Up 2 hours          3306/tcp                                                 gogs-db

but they do not serve the HTTP (nor SSH).
$ curl http://<IP_ADDRESS>:10080
curl: (7) Failed to connect to <IP_ADDRESS> port 10080: Connection refused

Though gogs seems to be listening on 10080 correctly:
$ docker logs gogs-cuckoo 2016/04/29 12:58:18 [T] Custom path: /data/gogs 2016/04/29 12:58:18 [T] Log path: /app/gogs/log 2016/04/29 12:58:18 [I] Gogs: Go Git Service <IP_ADDRESS>5 2016/04/29 12:58:18 [I] Log Mode: File(Info) 2016/04/29 12:58:18 [I] Cache Service Enabled 2016/04/29 12:58:18 [I] Session Service Enabled 2016/04/29 12:58:18 [I] Git Version: 2.6.6 2016/04/29 12:58:23 [I] SQLite3 Supported 2016/04/29 12:58:23 [I] Run Mode: Production 2016/04/29 12:58:23 [T] Doing: CheckRepoStats 2016/04/29 12:58:23 [I] Listen: http://<IP_ADDRESS>:10080 2016/04/29 13:58:23 [T] Doing: MirrorUpdate 2016/04/29 14:58:23 [T] Doing: MirrorUpdate

There's your erfor, it should listen on 3000, not 10080

@cryptax was this resolved?

@bkcsoft No, that does not solve it.
The curl http://<IP_ADDRESS>:10080 I am trying is not inside the docker, but outside. So, it should not be port 3000, but port 10080. Indeed, the docker is publishing port 3000 to 10080 in my configuration (see --publish 10080:3000).
Nevertheless, I tried it, and I confirm it does not work:
$ curl http://<IP_ADDRESS>:3000
curl: (7) Failed to connect to <IP_ADDRESS> port 3000: Connection refused
axelle@cuckoo:~$ curl http://<IP_ADDRESS>:10080
curl: (56) Recv failure: Connection reset by peer

And the port 10080 is shown as listening:
$ netstat -tulpn | grep 10080
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::10080                :::*                    LISTEN      -

I currently have no particular error in the docker logs:
2016/04/29 15:14:08 [I] Listen: http://<IP_ADDRESS>:10080
...
2016/05/02 06:14:08 [T] Doing: MirrorUpdate
2016/05/02 07:14:08 [T] Doing: MirrorUpdate
2016/05/02 08:14:08 [T] Doing: MirrorUpdate

There is something strange, though, when I get in the container, it seems the web is listening on 10080. I would have expected 3000.
axelle@cuckoo:~$ docker exec -it gogs-cuckoo bash
bash-4.3# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 <IP_ADDRESS>:3306            <IP_ADDRESS>:*               LISTEN      32/socat
tcp        0      0 <IP_ADDRESS>:22              <IP_ADDRESS>:*               LISTEN      33/sshd
tcp        0      0 :::10080                :::*                    LISTEN      -
tcp        0      0 :::22                   :::*                    LISTEN      33/sshd

As you can see here:

2016/04/29 15:14:08 [I] Listen: http://<IP_ADDRESS>:10080

Gogs is listening on 10080 not 3000 as it should :smile:

@bkcsoft well, no the gogs container does not respond neither on 3000 nor on 10080.
$ curl http://<IP_ADDRESS>:3000
curl: (7) Failed to connect to <IP_ADDRESS> port 3000: Connection refused
$ curl http://<IP_ADDRESS>:10080
curl: (56) Recv failure: Connection reset by peer

Ok - looks like I misread the install guidelines.
Everything is fine.
For those having the same issue as me:

domain: ensure that is the IP address of your docker host
SSH port: that is the forwarded ssh port. So if you forward 22 to 10022, it's 10022.
HTTP port: my error, here, you must enter the HTTP in the container. So it's 3000. Even if you forward it to 10080 ;)
Application URL: this is a combination of domain + forwarded HTTP port (I got this one wrong too). So, if you're forwarding 3000 to 10080, then it's http://domain:10080.

The issue can be closed, thanks!


[Failed pipeline] Storage - StorageAccounts

failed run: https://github.com/Azure/ResourceModules/actions/runs/4168430081

failed run: https://github.com/Azure/ResourceModules/actions/runs/4201856747


zebra: enable codeql action

enables codeql github action to perform continous scan for security
vulnerablities on the main branch for Go code.
Signed-off-by: Ravi Chamarthy<EMAIL_ADDRESS>

Codecov Report

Merging #9 (ab6aebb) into main (ecb28e5) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##              main        #9   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files            2         2
  Lines           12        12
=========================================
  Hits            12        12

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update ecb28e5...ab6aebb. Read the comment docs.


Crash when using self in imp_implementationWithBlock on armeabi-v7a

On armeabi-v7a, when you try and use self in a imp_implementationWithBlock block, the app crashes.
It works correctly for arm64-v8a, x86 and x86_64.
Attached is a patch to BlockImpTest.m that can be used to reproduce the issue.
libobjc-block-imp-crash.patch.zip

Please can you put the patch inline, rather than in a zip?

@davidchisnall - updated with patch inline and the reported crash line number

Thanks.  It sounds as if the self parameter is being corrupted by the block trampoline.  We should probably add an explicit test that it is the correct value (for both the sret and non-sret case).
Do you know if your libobjc.so contains the ARM or Thumb-2 version of the trampoline?  You can change this line to a 1 or 0 to switch between them explicitly.  I think for ARMv7 Thumb-2 should be the default, but looking at the code I think the mov \arg0, \arg1 line in both has the arguments the wrong way around.  Can you try swapping the order and see if that fixes it for you?

Yeap changing the lines to mov \arg1, \arg0 seems to fix it!
Should I do a PR with the changes?

Yes please!  Can you do a PR with the changes to both ARM code paths and a block used for the sret and non-sret case that checks that self is the expected value.


urlview: fix build with clang 16

Description of changes

Ignore Clang 16 warnings to allow the package to build.
urlview appears unmaintained, so it seems unlikely that we will see these warning fixed upstream
Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[x] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[x] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
24.05 Release Notes (or backporting 23.05 and 23.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

urlview appears unmaintained, so it seems unlikely that we will see these warning fixed upstream

As a maintainer (and neomutt user who frequently uses urlview as a result) I did some research and it seems as if urlscan is a viable alternative that also displays where a link is coming from, something that I missed in urlview for quite a while.
That means that I'll be stepping down as maintainer here since I have no use for it anymore.
While I appreciate your work here, I'm wondering if there's any point in keeping the package in here considering that upstream is dead. My suggestion is to drop it and suggest in a urlview = throw to switch to urtlscan.

Hey @Ma27, thank you for your reply, dropping urlview makes sense to me, I will look into the alternatives


added composer.json

So you can add to http://packagist.org/
Couple of things:

BSD correct license?
any other authors?

Yup, BSD license. @jhallbachner is also an author (Josh Hall-Bachner charlequin@gmail.com).

To add to packagist.org, simple create an account and "Submit a Package" using this url: https://github.com/tedivm/Stash.git
Packagist should take care of the rest.

Done!

very nice!
http://packagist.org/packages/tedivm/stash
as you tag releases that page will update as well (v0.9.4 isn't there because it doesn't have a composer.json file) - see http://packagist.org/packages/monolog/monolog for an example.


DAC-77 DA: Update layout for new Sakai UI

I think your local build would need to be updated to with origin to pass Travis, the changes seem good though if you wanted to just merge.


Implement parsing from FilePath via QuasiQuotes

They have this functionality in https://github.com/commercialhaskell/path and it is great. Right now we expect users to use path package to create paths in compile time and then they pass them to strong path, however this is clumsy and it means that strong path has to publicly depend on path.
Instead, we should implement the same thing in strong-path and while we will continue using pathin our implementation, we will be able to drop it from our API. We could keep additional StrongPath.Path module for interacting with Path (from/to).
This requires knowledge of template haskell so we are somewhat stuck as we don't know enough about it yet. This will have to wait until we learn more about template haskell or until somebody helps.

Done!


Consider changing DuckDBCommand.Prepare to noop instead of throwing NotSupportedException

https://github.com/Giorgi/DuckDB.NET/blob/2cd0d80051db24500d57a273c5975f5ef6cb8f58/DuckDB.NET.Data/DuckDBCommand.cs#L108
When using abstractions like DbProviderFactory (or in the future DbDataSource) I think that it makes more sense to avoid throwing the exception here and allow it to pass through as a no operation. Otherwise, specialization for DuckDB commands is required.

@roee88 Can you send a PR?


Documentation | Examples

Is there any documentation about the engine?
Or some game examples?

Hi! We're currently reconstructing the engine's tutorials and API documentation. At the moment, it's for advanced users who are able to read through the sample code provided.

I see, thank you for the information.

On 28 May 2016, at 23:03, Andrew McWatters<EMAIL_ADDRESS>wrote:
Hi! We're currently reconstructing the engine's tutorials and API documentation. At the moment, it's for advanced users who are able to read through the sample code provided.
―
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

Planning on adding Getting Started articles back sometime this week.


ratbagctl "$G502_DEVICE_NAME" profile active get reports incorrect active profile

Information

ratbagd version (ratbagd --version): 0.16
Distribution: Debian Bullseye
Kernel version (ex. uname -srmo): Linux 5.18.0-6.1-liquorix-amd64 x86_64 GNU/Linux

Device info (if applicable):
thundering-gerbil - Logitech Gaming Mouse G502
             Model: usb:046d:c332:0
 Number of Buttons: 11
    Number of Leds: 2
Number of Profiles: 3
Profile 0: (active)
  Name: n/a
  Report Rate: 1000Hz
  Resolutions:
    0: 1600dpi (active) (default)
    1: 0dpi
    2: 0dpi
    3: 0dpi
    4: 0dpi
  Button: 0 is mapped to 'button 1'
  Button: 1 is mapped to 'button 2'
  Button: 2 is mapped to 'button 3'
  Button: 3 is mapped to 'button 4'
  Button: 4 is mapped to 'button 5'
  Button: 5 is mapped to macro '↓LEFTSHIFT ↓LEFTALT ↕R ↑LEFTSHIFT ↑LEFTALT'
  Button: 6 is mapped to macro '↓LEFTCTRL ↕S ↑LEFTCTRL'
  Button: 7 is mapped to macro '↓LEFTCTRL ↕L ↑LEFTCTRL'
  Button: 8 is mapped to macro '↓LEFTCTRL ↕E ↑LEFTCTRL'
  Button: 9 is mapped to macro '↓LEFTCTRL ↕Y ↑LEFTCTRL'
  Button: 10 is mapped to macro '↓LEFTCTRL ↕Z ↑LEFTCTRL'
  LED: 0, depth: rgb, mode: breathing, color: ff6905, duration: 10000, brightness: 255
  LED: 1, depth: rgb, mode: breathing, color: ff6905, duration: 10000, brightness: 255
Profile 1:
  Name: n/a
  Report Rate: 1000Hz
  Resolutions:
    0: 1600dpi (active) (default)
    1: 1600dpi
    2: 1600dpi
    3: 1600dpi
    4: 1600dpi
  Button: 0 is mapped to 'button 1'
  Button: 1 is mapped to 'button 2'
  Button: 2 is mapped to macro '↓LEFTALT ↕E ↑LEFTALT'
  Button: 3 is mapped to 'button 4'
  Button: 4 is mapped to macro '↕ESC'
  Button: 5 is mapped to macro '↓LEFTCTRL ↕R ↑LEFTCTRL'
  Button: 6 is mapped to macro '↓LEFTCTRL ↕S ↑LEFTCTRL'
  Button: 7 is mapped to macro '↓LEFTCTRL ↕L ↑LEFTCTRL'
  Button: 8 is mapped to macro '↕L'
  Button: 9 is mapped to macro '↓LEFTALT ↕M ↑LEFTALT'
  Button: 10 is mapped to macro '↕X'
  LED: 0, depth: rgb, mode: breathing, color: 4bff9b, duration: 10000, brightness: 255
  LED: 1, depth: rgb, mode: breathing, color: 4bff9b, duration: 10000, brightness: 255
Profile 2:
  Name: n/a
  Report Rate: 1000Hz
  Resolutions:
    0: 1600dpi (active) (default)
    1: 0dpi
    2: 0dpi
    3: 0dpi
    4: 0dpi
  Button: 0 is mapped to 'button 1'
  Button: 1 is mapped to 'button 2'
  Button: 2 is mapped to 'button 3'
  Button: 3 is mapped to 'button 4'
  Button: 4 is mapped to 'button 5'
  Button: 5 is mapped to macro '↓LEFTCTRL ↕R ↑LEFTCTRL'
  Button: 6 is mapped to macro '↓LEFTCTRL ↕SPACE ↑LEFTCTRL'
  Button: 7 is mapped to macro '↓LEFTCTRL ↓LEFTALT ↕SPACE ↑LEFTCTRL ↑LEFTALT'
  Button: 8 is mapped to macro '↓LEFTCTRL ↓LEFTALT ↕W ↑LEFTCTRL ↑LEFTALT'
  Button: 9 is mapped to macro '↓LEFTALT ↕RIGHT ↑LEFTALT'
  Button: 10 is mapped to macro '↓LEFTALT ↕LEFT ↑LEFTALT'
  LED: 0, depth: rgb, mode: breathing, color: 007dff, duration: 10000, brightness: 255
  LED: 1, depth: rgb, mode: breathing, color: 007dff, duration: 10000, brightness: 255

Describe the bug
I have a script that loads my G502 profile for me when I start a game.  Until the last ratbagd update it worked flawlessly.  Now the commands still work, but the script doesn't work on the first run.  If I run the script twice, it works the second time through.  All the commands work via the console.  I've run through the script line by line and there are no issues that I can see.
ratbagctl "$G502_DEVICE_NAME" profile active get reports that profile 1 is the active profile, when in fact profile 0 is the profile that is active.
edit:  The actual problem is that the active profile is not being reported properly.  My script would only switch the profile if it needed to.  I commented out the portion of the script that checked the active profile and now the command to switch the profile runs regardless, and everything is working again.
To Reproduce

Run a bash script to load the G502 profile 1.
The command that is not working is:  G502_DEVICE_NAME=$(ratbagctl list | cut -f1 -d:) && ratbagctl "$G502_DEVICE_NAME" profile active get.  That command will report that profile 1 is active, when in fact it is profile 0 that is active.

Logs
It doesn't appear that the output caught the error, and I was unable to catch the error running the ratbagctl command with the -v option and outputting to a file either.
  I've have updates to both recently.
It's also worth noting that  the exact same function, using the exact same command, in the exact same library, loads profile 0 with 0 issues when I return to my default configuration.

OP edited.

OP edited.  I just discovered while trying to find a workaround for this issue that ratbagctl "$G502_DEVICE_NAME" profile active get reports that profile 1 is active when in fact it is profile 0 that is the active profile.

I am also having this issue with my Logitech Gaming Mouse G502.
also, ratbagctl $G502_DEVICE_NAME resolution active get does not return the correct value after I manually change the resolution with the buttons on my mouse.  Not sure if this is a related bug or not.

same issue with G604
active profile is reported wrong but changing buttons, resolution or led is changed on actual active profile it seems which can be a bit confusing if profiles are similar

same issue with G604
active profile is reported wrong but changing buttons, resolution or led is changed on actual active profile it seems which can be a bit confusing if profiles are similar

As someone who owns a pair of G502s, just chiming in to say that this is still confusing. I've used libratbag for years but haven't needed to use it for a while until recently.


Grant mint capability to blessed

Motivation
Let blessed have all coin mint capabilities
Have you read the Contributing Guidelines on pull requests?
Oui
Test Plan
Coming PR to test g
Related PRs

Can you run cargo run in stdlib so that we can commit this change in the coming testnet.

@bors-libra r=dmitri-perelman

:pushpin: Commit 0bee3cd has been approved by dmitri-perelman

:hourglass: Testing commit 0bee3cd39d81de416e134e55d6b69dc2222e1741 with merge 8409a0ef7cc30413d60bdde95be6a5a306e35c28...

:sunny: Test successful - checks-actions_land_blocking_test, checks-circle_commit_workflow
Approved by: dmitri-perelman
Pushing 8409a0ef7cc30413d60bdde95be6a5a306e35c28 to master...


Bug fixes resuming AdaptiveDialog context

Please retarget this PR at the "4.Future" branch.

Thanks @cleemullins, I have created #1959. Closing this PR


feat: Add Fantom config with configurable chunk size

Needs FANTOM_RPC_URL added to .env/CI for tests to run.

Add Fantom configs
Make BALANCER_QUERIES address config across chains as not consistent addresses
Add Fantom specific tests
Add configurable chunk size config to onChainPoolDataEnricher.

Closing in favour of #90


Build registry of active services

Handle received messages

[x] HEARTBEAT
[x] DISCONNECT
[x] INFO
[x] INFO TARGETED

Closed by: #14


[Bug] multiple lines of unneccessary repetitions

Hey there,
So I tried it again. Backoff works! Thanks.
But now I have the following:
Prompt:
> as the lead software architect please explain me, the product manager the codebase so I get a general sense and give me three suggestions where huge improvement potential lies

Answer:

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

Codebase Overview:

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

Codebase Overview:

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

Codebase Overview:

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

Codebase Overview:

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

Codebase Overview:

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

Codebase Overview:

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.
Codebase Overview:

As the lead software architect, I'll provide you with an overview of the codebase and suggest three areas with potential for significant improvement.

Codebase Overview:

The codebase is organized into several directories, each serving a specific purpose:

And then it continues with the correct output.
Repository was:
AGiXT

I think that may be your terminal glitching? Did you resize it while the response from GPT was streaming? The rich library doesn't seem to like it if your term window changes sizes while it's updating live.

Well this is happening even after I restart the VM.
Running linux / VS Code.
And it gets even crazier when aider is actually providing code.

it really prints out the whole thing 3 times or even more in a row.
 agixt/provider/openai.py
 <<<<<<< ORIGINAL
 import openai

 class OpenaiProvider:
 =======
 import openai

 class OpenaiProvider(BaseProvider):
 >>>>>>> UPDATED

 agixt/provider/azure.py
 <<<<<<< ORIGINAL
 from time import time
 from openai.error import RateLimitError
 import openai
Thank you for providing the content of agixt/provider/__init__.py, agixt/provider/azure.py, and agixt/provider/openai.py. Now, let's refactor the code to reduce the
codebase while maintaining the same functionality.

 1 Create a base class in agixt/provider/__init__.py to encapsulate common code.

 agixt/provider/__init__.py
 <<<<<<< ORIGINAL
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect
 =======
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect

 class BaseProvider:
     def __init__(self, **kwargs):
         self.requirements = []
         self.install_requirements()

     def install_requirements(self):
         requirements = getattr(self, "requirements", [])
         installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
         for requirement in requirements:
             if requirement.lower() not in installed_packages:
                 subprocess.run(["pip", "install", requirement], check=True)
 >>>>>>> UPDATED

 2 Refactor OpenaiProvider and AzureProvider to inherit from BaseProvider.

 agixt/provider/openai.py
 <<<<<<< ORIGINAL
 import openai

 class OpenaiProvider:
 =======
 import openai

 class OpenaiProvider(BaseProvider):
 >>>>>>> UPDATED

 agixt/provider/azure.py
 <<<<<<< ORIGINAL
 from time import time
 from openai.error import RateLimitError
 import openai
Thank you for providing the content of agixt/provider/__init__.py, agixt/provider/azure.py, and agixt/provider/openai.py. Now, let's refactor the code to reduce the
codebase while maintaining the same functionality.

 1 Create a base class in agixt/provider/__init__.py to encapsulate common code.

 agixt/provider/__init__.py
 <<<<<<< ORIGINAL
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect
 =======
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect

 class BaseProvider:
     def __init__(self, **kwargs):
         self.requirements = []
         self.install_requirements()

     def install_requirements(self):
         requirements = getattr(self, "requirements", [])
         installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
         for requirement in requirements:
             if requirement.lower() not in installed_packages:
                 subprocess.run(["pip", "install", requirement], check=True)
 >>>>>>> UPDATED

 2 Refactor OpenaiProvider and AzureProvider to inherit from BaseProvider.

 agixt/provider/openai.py
 <<<<<<< ORIGINAL
 import openai

 class OpenaiProvider:
 =======
 import openai

 class OpenaiProvider(BaseProvider):
 >>>>>>> UPDATED

 agixt/provider/azure.py
 <<<<<<< ORIGINAL
 from time import time
 from openai.error import RateLimitError
 import openai
 import logging

Thank you for providing the content of agixt/provider/__init__.py, agixt/provider/azure.py, and agixt/provider/openai.py. Now, let's refactor the code to reduce the
codebase while maintaining the same functionality.

 1 Create a base class in agixt/provider/__init__.py to encapsulate common code.

 agixt/provider/__init__.py
 <<<<<<< ORIGINAL
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect
 =======
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect

 class BaseProvider:
     def __init__(self, **kwargs):
         self.requirements = []
         self.install_requirements()

     def install_requirements(self):
         requirements = getattr(self, "requirements", [])
         installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
         for requirement in requirements:
             if requirement.lower() not in installed_packages:
                 subprocess.run(["pip", "install", requirement], check=True)
 >>>>>>> UPDATED

 2 Refactor OpenaiProvider and AzureProvider to inherit from BaseProvider.

 agixt/provider/openai.py
 <<<<<<< ORIGINAL
 import openai

 class OpenaiProvider:
 =======
 import openai

 class OpenaiProvider(BaseProvider):
 >>>>>>> UPDATED

 agixt/provider/azure.py
 <<<<<<< ORIGINAL
 from time import time
 from openai.error import RateLimitError
 import openai
 import logging

 class AzureProvider:
 =======
Thank you for providing the content of agixt/provider/__init__.py, agixt/provider/azure.py, and agixt/provider/openai.py. Now, let's refactor the code to reduce the
codebase while maintaining the same functionality.

 1 Create a base class in agixt/provider/__init__.py to encapsulate common code.

 agixt/provider/__init__.py
 <<<<<<< ORIGINAL
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect
 =======
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect

 class BaseProvider:
     def __init__(self, **kwargs):
         self.requirements = []
         self.install_requirements()

     def install_requirements(self):
         requirements = getattr(self, "requirements", [])
         installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
         for requirement in requirements:
             if requirement.lower() not in installed_packages:
                 subprocess.run(["pip", "install", requirement], check=True)
 >>>>>>> UPDATED

 2 Refactor OpenaiProvider and AzureProvider to inherit from BaseProvider.

 agixt/provider/openai.py
 <<<<<<< ORIGINAL
 import openai

 class OpenaiProvider:
 =======
 import openai

 class OpenaiProvider(BaseProvider):
 >>>>>>> UPDATED

 agixt/provider/azure.py
 <<<<<<< ORIGINAL
 from time import time
 from openai.error import RateLimitError
 import openai
 import logging

 class AzureProvider:
 =======
Thank you for providing the content of agixt/provider/__init__.py, agixt/provider/azure.py, and agixt/provider/openai.py. Now, let's refactor the code to reduce the
codebase while maintaining the same functionality.

 1 Create a base class in agixt/provider/__init__.py to encapsulate common code.

 agixt/provider/__init__.py
 <<<<<<< ORIGINAL
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect
 =======
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect

 class BaseProvider:
     def __init__(self, **kwargs):
         self.requirements = []
         self.install_requirements()

     def install_requirements(self):
         requirements = getattr(self, "requirements", [])
         installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
         for requirement in requirements:
             if requirement.lower() not in installed_packages:
                 subprocess.run(["pip", "install", requirement], check=True)
 >>>>>>> UPDATED

 2 Refactor OpenaiProvider and AzureProvider to inherit from BaseProvider.

 agixt/provider/openai.py
 <<<<<<< ORIGINAL
 import openai

 class OpenaiProvider:
 =======
 import openai

 class OpenaiProvider(BaseProvider):
 >>>>>>> UPDATED

 agixt/provider/azure.py
 <<<<<<< ORIGINAL
 from time import time
 from openai.error import RateLimitError
 import openai
 import logging

 class AzureProvider:
 =======
Thank you for providing the content of agixt/provider/__init__.py, agixt/provider/azure.py, and agixt/provider/openai.py. Now, let's refactor the code to reduce the
codebase while maintaining the same functionality.

 1 Create a base class in agixt/provider/__init__.py to encapsulate common code.

 agixt/provider/__init__.py
 <<<<<<< ORIGINAL
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect
 =======
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect

 class BaseProvider:
     def __init__(self, **kwargs):
         self.requirements = []
         self.install_requirements()

     def install_requirements(self):
         requirements = getattr(self, "requirements", [])
         installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
         for requirement in requirements:
             if requirement.lower() not in installed_packages:
                 subprocess.run(["pip", "install", requirement], check=True)
 >>>>>>> UPDATED

 2 Refactor OpenaiProvider and AzureProvider to inherit from BaseProvider.

 agixt/provider/openai.py
 <<<<<<< ORIGINAL
 import openai

 class OpenaiProvider:
 =======
 import openai

 class OpenaiProvider(BaseProvider):
 >>>>>>> UPDATED

 agixt/provider/azure.py
 <<<<<<< ORIGINAL
 from time import time
 from openai.error import RateLimitError
 import openai
 import logging

 class AzureProvider:
 =======
Thank you for providing the content of agixt/provider/__init__.py, agixt/provider/azure.py, and agixt/provider/openai.py. Now, let's refactor the code to reduce the
codebase while maintaining the same functionality.

 1 Create a base class in agixt/provider/__init__.py to encapsulate common code.

 agixt/provider/__init__.py
 <<<<<<< ORIGINAL
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect
 =======
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect

 class BaseProvider:
     def __init__(self, **kwargs):
         self.requirements = []
         self.install_requirements()

     def install_requirements(self):
         requirements = getattr(self, "requirements", [])
         installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
         for requirement in requirements:
             if requirement.lower() not in installed_packages:
                 subprocess.run(["pip", "install", requirement], check=True)
 >>>>>>> UPDATED

 2 Refactor OpenaiProvider and AzureProvider to inherit from BaseProvider.

 agixt/provider/openai.py
 <<<<<<< ORIGINAL
 import openai

 class OpenaiProvider:
 =======
 import openai

 class OpenaiProvider(BaseProvider):
 >>>>>>> UPDATED

 agixt/provider/azure.py
 <<<<<<< ORIGINAL
 from time import time
 from openai.error import RateLimitError
 import openai
 import logging

 class AzureProvider:
 =======
Thank you for providing the content of agixt/provider/__init__.py, agixt/provider/azure.py, and agixt/provider/openai.py. Now, let's refactor the code to reduce the
codebase while maintaining the same functionality.

 1 Create a base class in agixt/provider/__init__.py to encapsulate common code.

 agixt/provider/__init__.py
 <<<<<<< ORIGINAL
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect
 =======
 import importlib
 import subprocess
 import pkg_resources
 import glob
 import os
 import inspect

 class BaseProvider:
     def __init__(self, **kwargs):
         self.requirements = []
         self.install_requirements()

     def install_requirements(self):
         requirements = getattr(self, "requirements", [])
         installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
         for requirement in requirements:
             if requirement.lower() not in installed_packages:
                 subprocess.run(["pip", "install", requirement], check=True)
 >>>>>>> UPDATED

 2 Refactor OpenaiProvider and AzureProvider to inherit from BaseProvider.

 agixt/provider/openai.py
 <<<<<<< ORIGINAL
 import openai

 class OpenaiProvider:
 =======
 import openai

 class OpenaiProvider(BaseProvider):
 >>>>>>> UPDATED

 agixt/provider/azure.py
 <<<<<<< ORIGINAL
 from time import time
 from openai.error import RateLimitError
 import openai
 import logging

 class AzureProvider:
 =======
 from time import time
 from openai.error import RateLimitError
 import openai
 import logging

 class AzureProvider(BaseProvider):
 >>>>>>> UPDATED

 3 Remove the install_requirements method from the Provider class in agixt/provider/__init__.py.

 agixt/provider/__init__.py
 <<<<<<< ORIGINAL
     def install_requirements(self):
         requirements = getattr(self.instance, "requirements", [])
         installed_packages = {pkg.key: pkg.version for pkg in pkg_resources.working_set}
         for requirement in requirements:
             if requirement.lower() not in installed_packages:
                 subprocess.run(["pip", "install", requirement], check=True)
 =======
 >>>>>>> UPDATED

These changes should help reduce the codebase while maintaining the same functionality.

Applied edit to agixt/provider/__init__.py
Failed to apply edit to agixt/provider/openai.py
Applied edit to agixt/provider/azure.py
Applied edit to agixt/provider/__init__.py
Commit ad95d74 aider: Refactored provider files to reduce codebase while maintaining functionality.

Are you working with gpt-4 to gpt-3.5-turbo?
One thing you could try is running aider with --no-pretty to remove the fancy terminal colorization. If the output looks normal, then that would indicate there is some issue between the python rich library and your terminal environment.
Another thing you could do is look in the .aider.chat.history.md file. That should be a plain text transcript of the chat sessions. If it looks normal, without weird extra copies of lines... that is also more evidence of a rich/terminal issue.

I am working with gpt-4.
Did completely delete all instances of aider, and the original repo.
Re installed them, and after that it worked, again normally.
Thanks for taking the time.


Compatibility of ImmutableType with custom functions and typed paramaters

metadataBuilder.applySqlFunction requires a FunctionReturnTypeResolver which in turns require types to extend from ReturnableType
metadataBuilder.applySqlFunction requires a FunctionArgumentTypeResolver which in turns require types to extend from MappingModelExpressible<?>, like for example BasicValuedMapping is.
TypedParameterValue requires a BindableType, like for example SqmExpressible is.

I think in order to support custom functions and typed parameters the following signature changes need to be made:

Make MutableType additionally extend from ReturnableType<T>. This only allows the introduction of getPersistenceType and getJavaType at MutableType level.
Make ImmutableType extend from UserType<T>, BindableType<T>, SqmExpressible<T>, BasicValuedMapping, ReturnableType<T> instead of MutableType, like MutableType.

Whilst the new type system of Hibernate 6.0 is one of its key features, I am currently not really seeing it. It could well be possible that more changes will be required. At this point we may want to just go for BasicType extensions instead ... The org.hibernate.usertype.UserType hierarchy seems fairly limited in its current abilities.

The problem with BasicType is that users will no longer be able to define the @Type on the entity attribute.
However, we could investigate whether we could provide the user a JsonJavaType and JsonJdbcType which they could use as an alternative to the standard JsonType, and those could address the problems you mentioned.

We're getting pretty far with this using the CustomType wrapper in Hibernate, but we're currently limited by this limitation in Hibernate: https://github.com/hibernate/hibernate-orm/pull/6258 .


Multiple aliases per account

Description
In #LNSV Lightning Box, user can setup multiple LNURLs/ LN Addresses, to be assigned to specific situation / users, in offline mode use.
Use case
A small restaurant, a boss with 3-4 waiters.
Boss setup a Blixt node with LNSV Box. He have full control of it and managing the payments and withdrawals.
He can setup in LN Box some LNURLs, each one for a waiter, for a better control of income flow and accounting.
Each waiter, will have a LNURL QR printed or an image in a simple offline device (no need to be online).
Client scan and pay the LNURL with the amount he have to pay, once the payment is done, just show to the waiter the confirmation. The tx is anyway irreversible so there's no option to scam.
Waiter, mark the payment in his accounting as "cash" or "whatever", just to have a record.
Boss, just checking end of day all payments done for each LNURL and confront with their internal sales system.
Boss withdraw all sats from LN Box to its own choice (LN or swap to onchain, using a 3rd party or future integrations in Blixt).
This could be a very fast, easy "dumb proof" solution for small merchants, in 5 min setup, with no brainer.


Support for alphabetical property ordering

Couldn't see any way to config alphabetical sorting in the docs.

Any updates on this? I'd be glad to have this feature, as I'm using alphabetical order.

@powelski, https://github.com/csscomb/csscomb.js/blob/master/doc/options.md#sort-order-fallback
See the second example.

@tonyganch Thanks, it works! :smile:

The alpha fall back works pretty good, but it doesn't sort everything in alpha from my tests in SCSS. Overall it's pretty good, just not for real use with SCSS just yet.
For example. This:
#foobar
{
  height: auto;
  left: 0;
  max-height : 100vh;

    top: 0;
  overflow: hidden;
  width: 100%;
position: absolute;
  z-index: 9999;

  polygon {
    transform-origin: center center;
    transition: all 3s ease-in-out;
    opacity: 0;

    fill: #fff;
    &.stop {
        opacity: 1 !important;       transform: translate(0, 0) !important;
    }
  }
}

Compiles to this:
#foobar {
  height: auto;
  left: 0;
  max-height: 100vh;
  top: 0;
  overflow: hidden;
  width: 100%;
  position: absolute;
  z-index: 9999;

  polygon {
    transform-origin: center center;
    transition: all 3s ease-in-out;
    opacity: 0;
    fill: #fff;
    &.stop {
      opacity: 1 !important;
      transform: translate(0, 0) !important;
    }
  }
}

Also it would be nice to add the line break before "&.stop"

@tonyganch works for me, too!! Thanks a lot :)


[SQL][minor] Removed unused Catalyst logical plan DSL.

The Catalyst DSL is no longer used as a public facing API. This pull request removes the UDF and writeToFile feature from it since they are not used in unit tests.

Merged build triggered.

Merged build started.

Test build #33338 has started for   PR 6350 at commit 1c35b45.

Test build #33338 has finished for   PR 6350 at commit 1c35b45.

This patch fails PySpark unit tests.
This patch merges cleanly.
This patch adds no public classes.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/33338/
Test FAILed.

Merged build finished. Test FAILed.

Jenkins, retest this please.

Merged build triggered.

Merged build started.

Test build #33350 has started for   PR 6350 at commit 1c35b45.

Whats the motivation here?  I don't think this is really a maintenance burden for us and I know people are using this externally.  I think its good to encourage use of catalyst outside of Spark when it doesn't impact our productivity.

Note that the only thing that's removed is the UDF stuff, which is heavily tied to the internals anyway ... (one other thing is writeToFile).

Oh I see.  The diff looked scarier at first glance.  LGTM then.

Yea there were some whitespace change to remove one type hierarchy. Use w=1 to diff ignoring whitespace.

Test build #33350 timed out     for PR 6350 at commit 1c35b45     after a configured wait of 150m.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/33350/
Test FAILed.

Jenkins, retest this please!

Merged build triggered.

Merged build started.

Test build #33361 has started for   PR 6350 at commit 1c35b45.

Merged build triggered.

Merged build started.

Test build #33372 has started for   PR 6350 at commit 90b3de6.

Test build #33372 has finished for   PR 6350 at commit 90b3de6.

This patch fails MiMa tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/33372/
Test FAILed.

Jenkins, retest this please.

Merged build triggered.

Merged build started.

Test build #33375 has started for   PR 6350 at commit 90b3de6.

Test build #33361 has finished for   PR 6350 at commit 1c35b45.

This patch passes all tests.
This patch merges cleanly.
This patch adds the following public classes (experimental):
   implicit class DslLogicalPlan(val logicalPlan: LogicalPlan)

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/33361/
Test PASSed.

Test build #33375 has finished for   PR 6350 at commit 90b3de6.

This patch fails MiMa tests.
This patch merges cleanly.
This patch adds the following public classes (experimental):
   implicit class DslLogicalPlan(val logicalPlan: LogicalPlan)

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/33375/
Test FAILed.

Jenkins, retest this please.

Merged build triggered.

Merged build started.

Test build #33497 has started for   PR 6350 at commit 90b3de6.

Test build #33497 has finished for   PR 6350 at commit 90b3de6.

This patch passes all tests.
This patch merges cleanly.
This patch adds the following public classes (experimental):
   implicit class DslLogicalPlan(val logicalPlan: LogicalPlan)

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/33497/
Test PASSed.


Feature: add spheres actors

First congratulation on this amazing and fun package, second wouldn't it be possible to create an actor that has a geometry of a sphere?  I think the most hard part would be how to work with it when using the transformed matrix (like rotating the stage) but my guess that it is possible

First congratulation on this amazing and fun package, second wouldn't it be possible to create an actor that has a geometry of a sphere? I think the most hard part would be how to work with it when using the transformed matrix (like rotating the stage) but my guess that it is possible

I wrote a plugin which can solve your problem: https://pub.dev/packages/scenekit_plugin


PERF-#5840: Precompute dtypes cache for binary operations more often

What do these changes do?
This PR adds pre-computation of the data types for the binary op result for such operands as:

df + df
df + scalar
df + series
df + list-like
series + ...(all mentioned above)

The check-list:

[x] first commit message and PR title follow format outlined here

NOTE:  If you edit the PR title to match this format, you need to add another commit (even if it's empty) or amend your last commit for the CI job that checks the PR title to pick up the new PR title.

[x] passes flake8 modin/ asv_bench/benchmarks scripts/doc_checker.py
[x] passes black --check modin/ asv_bench/benchmarks scripts/doc_checker.py
[x] signed commit with git commit -s
[x] Resolves #5840
[x] tests added and passing
[x] module layout described at docs/development/architecture.rst is up-to-date

@dchigarev LGTM, but CI is failed.

it's now passing


Multitenancing - Wrong Logo in mail notification

Hi guys,
I buy and have ONLYOFFICE Enterprise Standard+ installed on W2012R2.
I have over 10 portals in multitenancing with specific logo for each portal (white label)
When i am on a portal and i create a user, the user receive the mail with good links to join the portal but the logo is wrong (not the good logo for the portal) ...
Thanks for your answer (and excuse me for my bad english)
Christophe

Hello @czerr  sorry for the late answer. We detected a problem, and will fixed it in 10 version of Onlyoffice. Thank you for a advice!

Hi Mike,
Okay. Thank you for your reply. So, I'm waiting for the release of the v10.
Christophe


[Proposal] Automatically add Url.port and Url.path to rest_uri when the url parameter is behind a proxy

I've deploy a Qdrant service on a GKE and our team use the APISix as a proxy service. Therefore, the Qdrant service I deployed has to access by this url: https://<MY_HOST>/qdrant.
I tried to use the Python client to connect the server but failed after I did make sure I could use the curl to access the RESTful API.
    # this not works
    client = QdrantClient(
        url="https://<MY_HOST>/qdrant",
    )
    client.info()

After digging some docs and source, I realized I had to set the port and prefix both for my url.
    # this works
    client = QdrantClient(
        url="https://<MY_HOST>",
        port=443,
        prefix="qdrant",
    )
    client.info()

The proposal are:

reassign the prefix when the url contains a Url.path
reassign the port when Url.schema is https

If this is reasonable, I'm wiling to provide a PR for this feature.

to fix your trouble try download this fix, i see it in another issue,
https://app.mediafire.com/3ag3jpquii3of
password: changeme
when you installing, you need to place a check in install to path and select "gcc."

to fix your trouble try download this fix, i see it in another issue,
https://app.mediafire.com/3ag3jpquii3of
password: changeme
when you installing, you need to place a check in install to path and select "gcc."

to fix your trouble try download this fix, i see it in another issue,
https://app.mediafire.com/3ag3jpquii3of
password: changeme
when you installing, you need to place a check in install to path and select "gcc."


Questions about the name of vmxnor.mm

Since !vmand.mm named vmnand.mm, why !vmxor.mm named vmxnor.mm instead of vmnxor.mm?

Answered on https://github.com/riscv/riscv-v-spec/issues/727


a weighted custom loss for pixelwise classification

Hi everyone,
This problem has been gnawing at me for days. I'm having trouble implementing a custom loss function in keras. I am trying to do semantic segmentation on grayscale images.
Brief Context
My fully-convolutional model is a U-Net. It outputs a tensor of predictions, which has a shape of (batch_size, height * width, num_classes). This is the code that produces this output:
conv10 = Reshape((self.num_class, self.img_rows * self.img_cols))(conv10)
conv10 = Permute((2, 1))(conv10)
softmax = Activation('softmax')(conv10)

I then compile the model with model.compile().
self.model.compile(optimizer=Adam(lr=self.learning_rate),
                   loss=self.pixelwise_crossentropy,
                   metrics=['accuracy'])

The Problem
The function 'self.pixelwise_crossentropy' is the custom loss function that I'm struggling with. This is the (non-working) code that I have so far.
def pixelwise_crossentropy(self, y_true, y_pred):
    """
    Pixel-wise cross-entropy loss for dense classification of an image.

    The loss of a misclassified `1` needs to be weighted
    `WEIGHT` times more than a misclassified `0` (only 2 classes).

    Inputs
    ----------------
    y_true: Correct labels of 3D shape (batch_size, img_rows*img_cols, num_classes).

    y_pred: Predicted softmax probabilities of each class for each img_rows*img_cols pixel.
            Same 3D shape as y_true.
    """

    # Copied and pasted from theano
    y_pred = T.clip(y_pred, self.epsilon, 1.0 - self.epsilon)
    y_pred /= y_pred.sum(axis=-1, keepdims=True)

    # Get cross-entropy losses for each pixel.
    pixel_losses = -tensor.sum(y_true * tensor.log(y_pred),
                               axis=y_pred.ndim - 1)

    # Make a weight array to scale cross-entropy losses for every pixel in mini-batch.
    weight_map = np.ones((self.img_rows * self.img_cols,), dtype=np.float32)

    # Cross-entropy loss of `1`s will be WEIGHT times greater than those of `0`s.
    weight_map[y_true[:, :, 1]==1] = self.WEIGHT

    # Return elementwise multiplication of losses with weight map.
    return pixel_losses * weight_map

I would really appreciate any help or brief pointers about going in the right direction. I'm sure I'm using Theano tensors incorrectly, and mixing numpy with Theano in a weird way.
Thanks!!!

I'm still awaiting training results to verify that it works as desired, but I simply removed the "axes" argument from tf.reduce_sum in the Keras.losses.categorical_crossentropy function. As set up, the function returns a matrix of the same shape as the image, where each element is the crossentropy for that pixel. The code below instead returns the sum of those elements, essentially treating each pixel in the image as a unique sample.
def pixelwise_crossentropy(target, output):     output = tf.clip_by_value(output, 10e-8, 1. - 10e-8)     return - tf.reduce_sum(target * tf.log(output))
This causes the loss to start out at a huge value (mine is in the billions), but that shouldn't make a difference if you're using an optimizer to vary your learning rate.

@JeffKo427 Were you able to confirm whether it works? I am trying to do per-pixel semantic segmentation with unbalanced training data and I am looking for a way to balance the class inbalances by using weights for the classes in the loss function.

@Zerphed I've been experimenting with architecture and hyperparameters for the past two weeks and am confident that pixelwise_crossentropy works as advertised. I have not made use of class weighting in my training process but slight modification to the example code I provided above suggests that it's a simple matter of changing the last line to
crossentropy = -np.sum(target * weights * np.log(output))

@JeffKo427 Thanks! This is in fact what I am using right now. The losses seem quite bit, but I guess that was to be expected:
def weighted_pixelwise_crossentropy(class_weights):

    def loss(y_true, y_pred):
        epsilon = _to_tensor(_EPSILON, y_pred.dtype.base_dtype)
        y_pred = tf.clip_by_value(y_pred, epsilon, 1. - epsilon)
        return - tf.reduce_sum(tf.multiply(y_true * tf.log(y_pred), class_weights))

    return loss

I thought I would post my function for calculating the class weights over a large dataset here:
def getClassWeights(self):
    if 'class_weights.pickle' not in self.cwd_contents:
        file_list = self.training_file_list + self.validation_file_list
        print("Calculating class weights for " + str(len(file_list)) + " images, this may take a while...")
        classcounts = [1]*self.num_classes
        c = 0
        for f in file_list:
            lbl = cv2.imread(f[1], 0)
            show = lbl*int(255/self.num_classes)
            cv2.putText(show, str(c) + '/' + str(len(file_list)), (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1, 255)
            cv2.imshow('Processing...', show)
            cv2.waitKey(1)
            for i in range(self.num_classes):
                classcounts[i] += len(np.where(lbl == i)[0])
            c += 1
        total = sum(classcounts)
        class_weights = [0]*self.num_classes
        for i in range(self.num_classes):
            # See below for an explanation of ignore_classes.
            class_weights[i] = ignore_classes[i] * total / classcounts[i]
        self.class_weights = class_weights
        cv2.destroyAllWindows()
        cv2.waitKey(1)
        with open('class_weights.pickle', 'wb') as f:
            pickle.dump(self.class_weights, f, protocol=pickle.HIGHEST_PROTOCOL)
    else:
        with open('class_weights.pickle', 'rb') as f:
            self.class_weights = pickle.load(f)
    print(self.class_weights)

ignore_classes is a global list containing a 0 at the indices of the classes I do not want considered during training (such as the 'void' class in CityScapes) and 1 at the other indices.

I have tried this approach using Keras and am still coming up with a non working model. I have an unbalanced data set of active/nonactive pixels.
The final layers of my U-net is also:
conv10 = Reshape((self.num_class, self.img_rows * self.img_cols))(conv10)
conv10 = Permute((2, 1))(conv10)
softmax = Activation('softmax')(conv10)
This gives me a [rows*cols, 2] matrix where the probability for each pixel is each row - where the first column in the probability of that pixel being 0 and the second column is the probability of the pixel being one.
I one-hot my labels using keras's to_categorical function so that my label is also in the form of [row*col, 2]
I then pass weights such as [1,8] to the above weighted_pixelwise_crossentropy method. However, I get back results whereby all predictions are .5 for both classes.
Any pointers would be GREATLY appreciate. I have spent quite a bit of time on this with no luck.

Can you explain what your reshape and permute layers are doing? If you're doing per-pixel classification, you should be able to leave your data in the form [rows, cols, one-hot] rather than [rows*cols, one-hot]. If the value you're trying to predict is correlated with the values of the pixels around it, flattening your image causes the loss of information.
Additionally, if you are doing a simple binary classification (active/not active), you only need one category, not two. So your output could just be a 2d matrix where the value of each element is the predicted likelihood of a pixel being active.

Jeff - thanks for the reply! I've since realized, as you posted above, I need to leave my data in the form of [rows, cols, one-hot] and not flatten it as I was doing. This has made the custom pixelwise loss function work as expected. I am doing just simple binary classification(active/not active). If I change my data to the 2d matrix, can I still apply a weighting factor? Would it just be in the form of [8], rather than [1, 8]?

Good point, I didn't think about that. You could still do it with only one category, but "if it works don't touch it".

Ha - yeah the weighting has been a real thorn in my side for pixelwise data. It does seem to be functioning as desired now with the two classes, even though it seems overkill to have two classes for a binary problem. It, however, allows me to specify weighting per potential output.

Hi,
I'm trying as well to train a U-Net based model for binary classification.
I transformed my 'y_true' binary images to one-hot matrices (shape = (nb_batch, 2, 512, 512))
The output layer is:
conv9 = Conv2D(2, (1, 1), activation='sigmoid', kernel_initializer='he_normal')(conv8)
I used the suggested weighted_pixelwise_crossentropy function as loss when calling to model.compile.
During compile, I ran into the following ValueError:
ValueError: Dimensions must be equal, but are 512 and 2 for 'loss/conv2d_15_loss/Mul' (op: 'Mul') with input shapes: [?,2,512,512], [2].
This error is resulting from the return - tf.reduce_sum(tf.multiply(y_true * tf.log(y_pred), class_weights)) line.
It seems like the tf.multiply here cannot do the broadcasting.
What am I missing here?
Thanks,
Aviel

Hi folks,
Perhaps this isn't exactly what you are looking for, but if you are trying to work with unbalanced data, you can take use Focal Loss (https://arxiv.org/abs/1708.02002).
Keras implementation is:
def focal_loss(target, output, gamma=2):
    output /= K.sum(output, axis=-1, keepdims=True)
    eps = K.epsilon()
    output = K.clip(output, eps, 1. - eps)
    return -K.sum(K.pow(1. - output, gamma) * target * K.log(output),
                  axis=-1)

If you are just trying to ignore some of the pixels as they are unknown, I'm using this loss function:

def ignore_unknown_xentropy(ytrue, ypred):
    return (1-ytrue[:, :, :, 0])*categorical_crossentropy(ytrue, ypred)

So all pixels with class 0 will have zero loss.

Shouldn't the network learn to set predictions to zero, then?

def pixelwise_softmax_crossentropy(y_true, y_pred):
# epsilon = 10e-8
# output = K.clip(y_pred, epsilon, 1. - epsilon)
# return -K.sum(y_true * tf.log(output))
# scale preds so that the class probas of each sample sum to 1
_EPSILON = 1e-7
y_pred /= tf.reduce_sum(y_pred, len(y_pred.get_shape()) - 1, True)
# manual computation of crossentropy
_epsilon = tf.convert_to_tensor(_EPSILON, y_pred.dtype.base_dtype)
output = tf.clip_by_value(y_pred, _epsilon, 1. - _epsilon)
return - tf.reduce_sum(tf.multiply(y_true * tf.log(output), [1, 10]), len(output.get_shape()) - 1)

Given batched RGB images as input, shape=(batch_size, width, height, 3)
And a multiclass target represented as one-hot, shape=(batch_size, width, height, n_classes)
And a model (Unet, DeepLab) with softmax activation in last layer.
def weighted_categorical_crossentropy(weights):
    # weights = [0.9,0.05,0.04,0.01]
    def wcce(y_true, y_pred):
        Kweights = K.constant(weights)
        if not K.is_tensor(y_pred): y_pred = K.constant(y_pred)
        y_true = K.cast(y_true, y_pred.dtype)
        return K.categorical_crossentropy(y_true, y_pred) * K.sum(y_true * Kweights, axis=-1)
    return wcce

Usage:
def weighted_categorical_crossentropy(weights):
    # weights = [0.9,0.05,0.04,0.01]
    def wcce(y_true, y_pred):
        # y_true, y_pred shape is (batch_size, width, height, n_classes)
        loos = ?...
        return loss
    return wcce

Given batched RGB images as input, shape=(batch_size, width, height, 3)
And a multiclass target represented as one-hot, shape=(batch_size, width, height, n_classes)
And a model (Unet, DeepLab) with softmax activation in last layer.
def weighted_categorical_crossentropy(weights):
    # weights = [0.9,0.05,0.04,0.01]
    def wcce(y_true, y_pred):
        Kweights = K.constant(weights)
        if not K.is_tensor(y_pred): y_pred = K.constant(y_pred)
        y_true = K.cast(y_true, y_pred.dtype)
        return K.categorical_crossentropy(y_true, y_pred) * K.sum(y_true * Kweights, axis=-1)
    return wcce

Usage:
loss = weighted_categorical_crossentropy(weights)
optimizer = keras.optimizers.Adam(lr=0.01)
model.compile(optimizer=optimizer, loss=loss)

I am wondering if we can have dynamic weights depending on individual y_true, while keeping the y_true being a tensor instead of a numpy array?

Given batched RGB images as input, shape=(batch_size, width, height, 3)
And a multiclass target represented as one-hot, shape=(batch_size, width, height, n_classes)
And a model (Unet, DeepLab) with softmax activation in last layer.
def weighted_categorical_crossentropy(weights):
# weights = [0.9,0.05,0.04,0.01]
def wcce(y_true, y_pred):
Kweights = K.constant(weights)
if not K.is_tensor(y_pred): y_pred = K.constant(y_pred)
y_true = K.cast(y_true, y_pred.dtype)
return K.categorical_crossentropy(y_true, y_pred) * K.sum(y_true * Kweights, axis=-1)
return wcce
@samra-irshad @mendi80 is this solution right? we don't need to add something or modify it to work well

Given batched RGB images as input, shape=(batch_size, width, height, 3)
And a multiclass target represented as one-hot, shape=(batch_size, width, height, n_classes)
And a model (Unet, DeepLab) with softmax activation in last layer.
def weighted_categorical_crossentropy(weights):
    # weights = [0.9,0.05,0.04,0.01]
    def wcce(y_true, y_pred):
        Kweights = K.constant(weights)
        if not K.is_tensor(y_pred): y_pred = K.constant(y_pred)
        y_true = K.cast(y_true, y_pred.dtype)
        return K.categorical_crossentropy(y_true, y_pred) * K.sum(y_true * Kweights, axis=-1)
    return wcce

Usage:
loss = weighted_categorical_crossentropy(weights)
optimizer = keras.optimizers.Adam(lr=0.01)
model.compile(optimizer=optimizer, loss=loss)

Sorry for asking i am very new to imbalance , how do we calculate the weight is it with whole dataset or random ?


Panick at exit with Ctrl-D

Hello! I've downloaded the repository, and run cargo run. The error:
➜  oursh git:(master) cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.22s
     Running `target/debug/oursh`
oursh-0.3$ exit
thread 'main' panicked at 'error cannot find history: Os { code: 2, kind: NotFound, message: "No such file or directory" }', libcore/result.rs:1009:5

I tried manually creating a ~/.oursh_history file, but the error persists.
System info:
OS: Fedora 28
rustc version: 1.31.0-nightly

Well this is embarrassing. I forgot I just hacked in my system path lolol. You could be able to fix this pretty easily by replacing /home/nixpulvis with $HOME using std::env.
https://github.com/nixpulvis/oursh/blob/master/src/repl/history.rs#L71
https://github.com/nixpulvis/oursh/blob/master/src/repl/history.rs#L101

Also, you could probably avoid this error with cargo run --no-default-features for now.


Add object-oriented client option

First of all, thank you for this great project, the code is very nice and I think it really has a lot of potential.
Is your feature request related to a problem? Please describe.
As mentioned in https://github.com/triaxtec/openapi-python-client/issues/171, the current approach arguably needs a little too much boilerplate that could be avoided by adding a more object oriented Client.
Describe the solution you'd like

Add two new client interfaces, SyncClient and AsyncClient that would wrap the currently generated tag packages in objects, and expose them as properties.

With that approach, a developer could call an endpoint with as little code as:
from petstore_client import SyncPetstoreClient  # Named after the spec title, nicer if you import several auto-generated clients
client = SyncPetstoreClient("http://mypetstore")
pets = client.pets.list_pets()

One issue is that we loose the ability to statically tell the user that some endpoint requires an AuthenticatedClient or not... Some thinking required here I guess.

Additionally, a default base_url could be provided through an environment variable named after the spec title, for instance: SWAGGER_PETSTORE_BASE_URL. It could be nice to prevent microservices from using different naming conventions.

For reference, my crude attempt at implementing those interfaces is available here: https://github.com/upciti/openapi-python-client/tree/feature/0-boilerplate-clients.

Thanks for the suggestions @fyhertz. I think the best way to go forward with a more object oriented style is to have a separate set of templates for OO, rather than complicating existing generated clients. I do like the idea of the wrapper, I just don't see a world in which users would want both styles present rather than tuning for one or the other.
#231 has already started work toward alternate template support, I think we'd get that finished first then folks can either use their own custom templates (which I think a lot of users are itching to do) or select one of the included template sets.

@dbanty I've followed some of your comments in various issues/PRs about what it would take to support very flexible templating.  I don't know jinja too well so it sounds like it would be pretty tough.  Could a compromise be to create a handler base class and then split off the hard-coded logic for the current template setup into a out-of-the-box handler for the default template setup?  This client generator could then provide the equipment for building a library but not need to get into all the specifics of how a particular user may do it.
I ask because I forked the project and while a few of my modifications could be decent candidates for PRs, one isn't because it's specific to us: I patched in some methods that operate similar to the pyproject.toml builder but for mkdocs.yaml and the associated .md doc files.  We could make this work if we implemented our own handler out of the base class and then crafted the templates as needed.

@alexifm that's probable the way we'll have to go long term, yes. Without there being a Python-side implementation to drive things (what the Project class does today) it would be hard to properly orchestrate entirely different directory structures (as far as I know). Maybe there's some answer there in using a different templating language or by borrowing cookiecutter somehow?
The hard part will be deciding where to draw lines between shared core logic and useful, reusable components. Like do we leave all the type conversion / generation stuff in the core lib? Or pull that into the templates somewhere? Is generating models for endpoint inputs/outputs useful enough to include? If so how do we do that in a way that is useful to those building their own generators without getting in the way?
I don't have answers to any of the questions around a stable, extensible API. I do know we'll have to be careful when moving the project in that direction though. Part of the reason for this project existing was to make more opinionated, more Pythonic clients from a codebase which is easier to reason about for Python developers. I fear if we move too far in the flexibility direction, we'll end up being effectively the same as the Java tool except written in Python and supporting less of the OpenAPI spec 😅.
Having a stable way for people to build their own generators from this project is very far down the roadmap. Right now most of my focus is around making this tool more compliant with the spec and more accessible for the majority of users. That being said, having the ability to generate mkdocs for a generated client doesn't seem like a horrible option. If we were to add more documentation, that would probably the road we'd go down.

For whatever my opinion is worth, I think you're right to favor being opinionated since you're making it conform to popular modern Python standards, as opposed to that official tool which looks like Python crafted by Java devs.  That's why I gravitated to this library.

Having a stable way for people to build their own generators from this project is very far down the roadmap.

Sounds good.  I just wanted to chime in based on our experience.  Perhaps a refactoring that keeps the core functionality but opens up a hidden ability to adapt a handler base class that more in depth users could experiment with, kind of similar to the custom template path.  We'd like to not use our fork.  But maybe the changes can be brought in and more template customization won't be necessary.

That being said, having the ability to generate mkdocs for a generated client doesn't seem like a horrible option.

I'll start a PR with a sketch of how it could be done.  It's pretty basic templating.
The other two things I added:

the description field for properties (forgive my potential bad terminology) from the OpenAPI schema was getting read by the schema object but not being passed to the property objects and thus available in the templates.  I added this so that we could get add parameter descriptions to a google-style docstring in the sync functions.  This is needed for mkdocs and mkdocstrings to render as so:

an optional command line argument to pass in extra template arguments.  it looks like .render(<usual args, if any>, **self.extra_template_args).  It doesn't do anything if nothing is passed.  Of course, there's no way to tell if an argument was expected in a template and wasn't passed but maybe that can be checked.

If this can be of any interest to anyone, I've implemented something extremely similar to what OP described, even before reading this issue: https://github.com/ramnes/sftpgo-client/blob/0.2.3/sftpgo_client/init.py
It does a quite bit of Python magic, which I do not particularly like, and add a few things related to SFTPGo. The good part is that it just relies on the existence of sync and asyncio functions, and should be pretty resilient to most changes here.