Method overriding in custom structs

Hello,
I am developing a project in need of function overriding. I already developed some on my fork, but I was wondering if you would be interested in merging my commits to the master branch.
Let me show you some examples so you can have a better idea of what I am trying to do:
Having:
type C interface {
  Set(interface{})
  Get(k string) interface{}
}

type A struct {
  v int64
}

func (a *A) Get(k string) interface{} {
...
}

func (a *A) Set(v interface{}) {
 ...
}

I want to call A from the script in a transparent way by using:
# asume `obj` is `A` type
v = obj["key"]
v = 20

That should call:
v = obj.Get("key")
v.Set(20)

That's already implemented in my fork, and you can try it out with your custom structures.
I'll wait for your comments and suggestions.
Thanks.

Thanks for sharing this with us. Great that you are working with Anko.
Currently Anko can call functions that on in structs but struct type definitions are not really there. My idea is to add/improve struct type definitions to Anko. Once that is done, Anko should be able work like Go for making structs and using there functions.
How is that different then what you are working on?

Hello,
The difference is that my implementation performs those calls transparently. I think I didn't explain my example well.
In my fork when you call v = obj["key"] the vm calls obj.Get transparently. It's like doing the following in C++:
void* A::operator[](std::string key) {
...
}

In C++ the compiler will call the operator overload function every time there's a call like obj["key"]. (assume obj's type is A). I implemented that in anko.

Thanks for the link to the repo. I personally think that overloading is beyond the scope of Anko, mainly because there is no overloading in Go.

Side note, often I see overloading more of a syntax shortcut then really needed. Was curious what is your use case where it is required where another option could not be used?

I am using anko to transform CSV rows. I already have an efficient parser and I wanted to add the transformation feature. I want to be easy to use by non-programmer users. So doing something like
v, ok = obj["key"]
if ok {
  v = 20
}

requires obj to be a map. Anyway, the v value is not modified if the script doesn't contain obj["key"] = v. To accomplish that I have to:

Change the parser to use a map. (Reduces performance).
Give the user control over the function calls (in this case Get and Set).
I want to keep a balance between performance and easiness of use, and of course, I don't want to modify the parser. So what I did is implementing in the Row struct functions like Get which returns the struct Column which implements Set. So, when I do v, ok = obj["key"], being obj a Row and the returned object a Column, I can easily use the script above without modifying my code, and also, avoiding the user getting in complex language stuff.
I know Golang doesn't have any overriding, but an interpreted language can. And yes, it is a syntax shortcut.

Not sure if I follow exactly but have you looked at using https://godoc.org/github.com/mattn/anko/env#Env.SetExternalLookup

I think it isn't the same, because my functions doesn't have only the Get.
Try this example:
package main

import (
	"fmt"

	"github.com/dgrr/anko/env"
	"github.com/dgrr/anko/vm"
)

type Row struct {
	h []string
	c []Column
}

func (r *Row) Get(k string) Column {
	for i, h := range r.h {
		if h == k {
			return r.c[i]
		}
	}
	return nil
}

type Column interface {
	Set(v interface{})
}

type ColumnInt struct {
	v int64
}

func (c *ColumnInt) String() string {
	return fmt.Sprintf("%d", c.v)
}

func (c *ColumnInt) Set(v interface{}) {
	c.v = v.(int64)
}

type ColumnString struct {
	v string
}

func (c *ColumnString) Set(v interface{}) {
	c.v = v.(string)
}

func (c *ColumnString) String() string {
	return c.v
}

func main() {
	r := Row{
		h: []string{"a", "b"},
		c: []Column{
			&ColumnInt{1},
			&ColumnString{"first"},
		},
	}

	e := env.NewEnv()
	e.Define("row", &r)
	e.Define("println", fmt.Println)

	vm.Execute(e, nil, script)

	fmt.Println("\nAfter exec")
	for _, c := range r.c {
		switch col := c.(type) {
		case *ColumnInt:
			fmt.Println("a:", col.v)
		case *ColumnString:
			fmt.Println("b:", col.v)
		}
	}
}

var script = `
v, ok = row["a"]
if ok {
  println("a:", v)
  v = 20
}

v, ok = row["b"]
if ok {
  println("b:", v)
  v = "hello"
}`

Right, I am saying if you remove the syntax shortcuts (overloading), the external lookup would work fine.
If it is really important that you have the syntax shortcuts instead of the method calls, then yes, overloading would need to be implement.
Personally I think having method calls can make it easier for people.

Yes.
Said that, would you accept a PR applying those shortcuts?

Like I mentioned, I personally believe overloading is beyond the scope of Anko. Matt has the final say of accepting PRs.

In that case, I will keep that in my fork.
Thanks.


Tapo P125M not working on TC 2.12.0

Current HA Core ： 2023.11.3
Current Firmware：1.0.7 Build 230801 Rel.091142
I have attempted to remove and add the P125M device, and have also reinstalled TC 2.12.0.
TC version: v.2.11.0 ：work fine, I can control the switch on/off.

TC version: v.2.12.0 ：I can't control it, and the current power, monthly energy, and daily energy readings are not working.

I lost all my light bulbs too and cant readd them. it just fails

I am having the exact same problem. I have 3 P125M. After upgrading to TC 2.12.0 the switches stopped working. I decided to delete one device and add it again. After that, I noticed it came up with only 7 entities instead of 9 and the ON/OFF control was not there anymore.

Ok. I just restored HA Core to 2023.11.2 and my P125M are back working. Actually, each device has 4 entities being one of them the Control.


v1.6.0: 404 Not Found<EMAIL_ADDRESS>

Versions
node --version
v8.9.1

npm --version
5.5.1

Repro steps

Step 1
npm install @angular/cli -g

Observed behavior
npm ERR! code E404
npm ERR! 404 Not Found<EMAIL_ADDRESS>
Desired behavior
Resolving all the required dependencies.
Additional Info
We are using Artifactory which mirrors the NPM Registry. The newest angular/cli artifact is correctly downloaded from the NPM Registry. Some artifacts in @angular-devkit are not. In this case schematics.

Thanks to whoever fixed the issue so fast.


Kosmos needs to synchronize the label information of the namespace to the sub-cluster

What happened:
What you expected to happen:
How to reproduce it (as minimally and precisely as possible):
Anything else we need to know?:
Environment:

Kosmos version:
Others:

/assign @yuleichun-striving


[BUG] Reindexing only valid with uniquely valued Index objects

Using the new v1.1.1 version I get the following error when passing a list of symbols of approximately 50 different tickers. The issue doesnt happen when I try other tickers, so I assume that it is because 1 ticker is causing a problem here:
companies = Toolkit(symbols, api_key="XXX")

df_total = companies.ratios.collect_all_ratios()

df_total.to_excel(dir_path + "\\df_total.xlsx")

Yields:
Traceback (most recent call last):
  File "c:\Desktop\Proj1\\data_fetch_fmp.py", line 73, in <module>
    df_total = companies.ratios.collect_all_ratios()
  File "C:\Users\Tomas\anaconda3\envs\Toolkit\lib\site-packages\financetoolkit\base\toolkit_controller.py", line 156, in ratios
    self.get_balance_sheet_statement()
  File "C:\Users\Tomas\anaconda3\envs\Toolkit\lib\site-packages\financetoolkit\base\toolkit_controller.py", line 542, in get_balance_sheet_statement
    ) = _get_financial_statements(
  File "C:\Users\Tomas\anaconda3\envs\Toolkit\lib\site-packages\financetoolkit\base\models\fundamentals_model.py", line 111, in get_financial_statements
    financial_statement_total = pd.concat(financial_statement_dict, axis=0)
  File "C:\Users\Tomas\anaconda3\envs\Toolkit\lib\site-packages\pandas\core\reshape\concat.py", line 385, in concat
    return op.get_result()
  File "C:\Users\Tomas\anaconda3\envs\Toolkit\lib\site-packages\pandas\core\reshape\concat.py", line 612, in get_result
    indexers[ax] = obj_labels.get_indexer(new_labels)
  File "C:\Users\Tomas\anaconda3\envs\Toolkit\lib\site-packages\pandas\core\indexes\base.py", line 3732, in get_indexer
    raise InvalidIndexError(self._requires_unique_msg)
pandas.errors.InvalidIndexError: Reindexing only valid with uniquely valued Index objects

Ticker list in question:
['AIR', 'AJRD', 'AVAV', 'AXON', 'BA', 'BWXT', 'CUB', 'HEI', 'HEI-A', 'HII', 'JOBY', 'LHX', 'LMT', 'MOG-A', 'MOG-B', 'MRCY', 'NOC', 'POWWP', 'RKLB', 'RTX', 'SPR', 'TDG', 'TXT', 'WWD', 'AAWW', 'CHRW', 'EXPD', 'FDX', 'FWRD', 'HUBG', 'JBHT', 'MIC', 'UPS', 'XPO', 'AAL', 'ALGT', 'ALK', 'DAL', 'JBLU', 'LUV', 'SAVE', 'SKYW', 'UAL', 'ULCC', 'ALSN', 'BWA', 'CTB', 'DAN', 'DORM', 'GNTX']

Seems to be multiple issues, in some cases the length of the financial statements (e.g. cash and balance) differ which is why "LHX" for example won't work.
PeriodIndex(['1986', '1987', '1988', '1989', '1990', '1991', '1992', '1993',
             '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001',
             '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009',
             '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017',
             '2018', '2019', '2021', '2021', '2021', '2021', '2022'],
            dtype='period[A-DEC]', name='date')

PeriodIndex(['1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996',
             '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004',
             '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012',
             '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2021',
             '2021', '2021', '2021', '2022'],
            dtype='period[A-DEC]', name='date')

This also seems to be one of the reasons you get this error. For example ['AIR', 'AJRD', 'AVAV', 'AXON', 'CUB'] works fine but ['AIR', 'AJRD', 'AVAV', 'AXON', 'CUB', "LHX"] doesn't.
In other cases there is no historical data, like in the case of "CUB". However, this is not an issue unless its the only ticker. All bugs to fix, for sure, but if you could help me out and delve a bit deeper the issue is fixed sooner!

I guess the easiest temporary fix is to remove these tickers as corrupted until a proper fix can be created. I will help for sure. But if you can push the exception fix to the repo then we can work from there

Yes I do, you can connect with me via my username "jerbouma".

Dear Both, I downloaded the package yesterday and it is shown as 1.1.2. I still get the error with a list of symbols.
I am not enough into python internals to help out, I'm sorry. Just signaling that it seems the bug is still around.
Is there a workaround? Does it depend on the function used? As a start, I would like to get the PE ratio and dividend yield.  Just starting with it.
Error traceback:
Traceback (most recent call last):
File ~\anaconda3\envs\py311\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
exec(code, globals, locals)
File c:\users\ms\mon drive\aktien und anlage, finanzen, rente\software\findatabase\getntvaluations.py:57
ratios = companies.ratios
File ~\anaconda3\envs\py311\Lib\site-packages\financetoolkit\base\toolkit_controller.py:175 in ratios
self.get_balance_sheet_statement()
File ~\anaconda3\envs\py311\Lib\site-packages\financetoolkit\base\toolkit_controller.py:570 in get_balance_sheet_statement
) = _get_financial_statements(
File ~\anaconda3\envs\py311\Lib\site-packages\financetoolkit\base\models\fundamentals_model.py:111 in get_financial_statements
financial_statement_total = pd.concat(financial_statement_dict, axis=0)
File ~\anaconda3\envs\py311\Lib\site-packages\pandas\core\reshape\concat.py:385 in concat
return op.get_result()
File ~\anaconda3\envs\py311\Lib\site-packages\pandas\core\reshape\concat.py:612 in get_result
indexers[ax] = obj_labels.get_indexer(new_labels)
File ~\anaconda3\envs\py311\Lib\site-packages\pandas\core\indexes\base.py:3732 in get_indexer
raise InvalidIndexError(self._requires_unique_msg)
InvalidIndexError: Reindexing only valid with uniquely valued Index objects
Code used including list of symbols, I erased my key:
import pandas as pd
import numpy as np
from financetoolkit import Toolkit
API_KEY = "something"
Initialize the Toolkit with company tickers
#They can be copied from the listing formula in copy sheet in NT8 export file
companies = Toolkit(
["AAP", "ADM", "ADP", "APA", "ARE", "BXP", "CE", "CF", "CHTR", "CINF", "CMCSA", "CME", "COP", "CTLT", "CVX", "DD", "DOW", "DVN", "EOG", "FANG", "FCX", "FFIV", "FITB", "GNRC", "HBAN", "HES", "HUM", "IEX", "ILMN", "IPGP", "JBHT", "JPM", "LIN", "LNC", "LYB", "MAR", "MET", "MKC", "MOS", "MPC", "MRO", "MTB", "OKE", "OXY", "PAYX", "PNC", "PNR", "POOL", "PRGO", "PRU", "PSX", "PXD", "RF", "STT", "TAP", "TSCO", "TSN", "VLO", "WAB", "WRK"],
api_key=API_KEY, start_date="2000-01-01"
)
#Including Sector:
companies.get_profile()
ratios = companies.ratios
ratios.collect_valuation_ratios()

Hi! This is an older version of the package and meant for Python versions under 3.10. Please update your Python version to get access to the latest release which has this issue fixed.


Dart Analyzer runs with 100% CPU load when directory contains circular symlinks

Summary

Problem: CPU Load of Dart Analyzer is 160%
The problem is related to a circular symlink in the code folder
If this symlink is deleted the problem has gone away

This tracker is for issues related to:

Dart executable
Analyzer
Evtl. this issues belongs to Flutter

Versions

Dart SDK 2.8.2
Mac OSX 10.15.4
Flutter 1.17.1
VSCode 1.45.1
Plugin: dart-code.flutter 3.10.2

Reproduction

Create a new flutter plugin
flutter create --template=plugin dart_issue

Open the code with VSCode
code dart_issue

Select iPhone SE Simulator as target

Open example/lib/main.dart

Press F5 to run the example

Select "Dart & Flutter"

... work with the project for a time

Open MacOSX Activity Monitor

--> Activity Monitor shows a dart process with 160% CPU load

Kill this dart process

Switch back to VSCode

VSCode tells, that Dart Analyzer has been terminated

Select "Restart Analyzer"

** Process is again at 160% CPU load

How to remove the issue

The build process created a circular sym link
dart_issue/example/ios/.symlinks/plugins -> dart_issue/example/ios/.symlinks/plugins -> dart_issue

Remove this symlink and the issue does not happen anymore

@bwilkerson @devoncarew this seems like a repeat of #36919 though I'm not sure why (the original fix still seems to be there).
I can't repro this though - as I don't have a .symlinks folder when I run the steps above, and I'm not sure why.

Thanks a lot for investigating. Tried to reproduce the issue this morning and was not able to do so.
Anyway example/ios/.symlinks is created at my MacBook.

@bwilkerson this came up again recently at https://github.com/Dart-Code/Dart-Code/issues/2624. In this case it was cnpm (a JavaScript package manager) that was creating the circular links.
Pre-LSP, we could try to filter the analysis roots to only Dart projects on the client (we didn't, but it was an option). With LSP this won't be possible at all - the client will just give us the paths of open folders which may be a mix of Dart/web/others, so I think we may need to handle this in the server.
Some possible ideas:

Implement dart.analysisExcludedFolders (this is on my list to do anyway for a few other reasons) to allow users to exclude folders from analysis. This should work, but relies on users understand the problem (from the pegged CPU of the server).
Don't follow symlinks at all. This might break some things (for ex. the packages folder that used to be symlinks - I don't know if that's still supported though).
Try to detect the circular references (for example resolve the symlinks and skip over folders that resolve to folders that have already been analyzed). There may be a perf hit here to resolve every folder as a symlink (it seems like the info isn't available in Directory and requires another call).

Any thoughts?

I'm seeing this issue from time to time on the Sentry Dart/Flutter repo when opening the Flutter project.

The Flutter project has an iOS and a macOS native integration.
Because iOS and macOS implementations are basically identical, the macOS integration is symlinked to the iOS implementation.
If you delete the iOS and macOS folders of the package, the analyzer has no problems. You can now undo the deletion of the folders and the analyzer does not use that much CPU. IIRC that fixes the problems until you run flutter clean

I can image that with stable support for desktop there are a lot of packages which are coming up with the same approach.
The audioplayers (repo) package for example uses the same approach.
I hope that helps.

@ueman I cloned that repo and looked at the symlinks. Those in the macOS folder don't seem circular (they're to files) so I wouldn't expect them to cause any problems (and I couldn't repro this issue).
Although I did notice some circular symlinks in the example folder were created (like in the original report above).
./example/linux/flutter/ephemeral/.plugin_symlinks/sentry_flutter -> /private/tmp/sentry-dart/flutter/
./example/windows/flutter/ephemeral/.plugin_symlinks/sentry_flutter -> /private/tmp/sentry-dart/flutter/

However, these also did not seem to trigger this issue for me - the analysis server seems to analyse the workspace without any issues. I tested both on Flutter's stable channel (2.2.1) and also the latest master.
Could you confirm the version of Flutter you're using, and post the output of running find . -type l -ls?

Actually, I could repro this on Flutter 2.0.6. So I think it's something that's been fixed between 2.0.6 and 2.2.
If you can confirm you're also using 2.0.6 then I suspect this has been resolved in the latest stable releases and can be closed. Thanks!

Output of find . -type l -ls:
62518248        0 lrwxr-xr-x    1 jonas            staff                  39  3 Jun 19:52 ./macos/Classes/SentryFlutterPlugin.h -> ../../ios/Classes/SentryFlutterPlugin.h
62518249        0 lrwxr-xr-x    1 jonas            staff                  39  3 Jun 19:52 ./macos/Classes/SentryFlutterPlugin.m -> ../../ios/Classes/SentryFlutterPlugin.m
62518250        0 lrwxr-xr-x    1 jonas            staff                  48  3 Jun 19:52 ./macos/Classes/SentryFlutterPluginApple.swift -> ../../ios/Classes/SentryFlutterPluginApple.swift
62518252        0 lrwxr-xr-x    1 jonas            staff                  29  3 Jun 19:52 ./macos/sentry_flutter.podspec -> ../ios/sentry_flutter.podspec
56289761        0 lrwxr-xr-x    1 jonas            staff                  15 13 Mär 17:45 ./CHANGELOG.md -> ../CHANGELOG.md
62170307        0 lrwxr-xr-x    1 jonas            staff                  52 30 Mai 11:29 ./example/macos/Flutter/ephemeral/.symlinks/plugins/sentry_flutter -> /Users/jonas/Documents/projects/sentry-dart/flutter/
62170306        0 lrwxr-xr-x    1 jonas            staff                 105 30 Mai 11:29 ./example/macos/Flutter/ephemeral/.symlinks/plugins/package_info_plus_macos -> /Users/jonas/Documents/projects/flutter/.pub-cache/hosted/pub.dartlang.org/package_info_plus_macos-1.1.1/
62704516        0 lrwxr-xr-x    1 jonas            staff                  52  4 Jun 20:44 ./example/ios/.symlinks/plugins/sentry_flutter -> /Users/jonas/Documents/projects/sentry-dart/flutter/
62704515        0 lrwxr-xr-x    1 jonas            staff                  99  4 Jun 20:44 ./example/ios/.symlinks/plugins/package_info_plus -> /Users/jonas/Documents/projects/flutter/.pub-cache/hosted/pub.dartlang.org/package_info_plus-1.0.1/
62170836        0 lrwxr-xr-x    1 jonas            staff                  31 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter/sentry_flutter.framework/sentry_flutter -> Versions/Current/sentry_flutter
62170835        0 lrwxr-xr-x    1 jonas            staff                  26 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter/sentry_flutter.framework/Resources -> Versions/Current/Resources
62170834        0 lrwxr-xr-x    1 jonas            staff                   1 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter/sentry_flutter.framework/Versions/Current -> A
62170833        0 lrwxr-xr-x    1 jonas            staff                  24 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter/sentry_flutter.framework/Headers -> Versions/Current/Headers
62170837        0 lrwxr-xr-x    1 jonas            staff                  24 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter/sentry_flutter.framework/Modules -> Versions/Current/Modules
61414740        0 lrwxr-xr-x    1 jonas            staff                  26 31 Mai 14:28 ./example/build/macos/Build/Products/Debug/FlutterMacOS.framework/Resources -> Versions/Current/Resources
61414742        0 lrwxr-xr-x    1 jonas            staff                   1 31 Mai 14:28 ./example/build/macos/Build/Products/Debug/FlutterMacOS.framework/Versions/Current -> A
61414738        0 lrwxr-xr-x    1 jonas            staff                  24 31 Mai 14:28 ./example/build/macos/Build/Products/Debug/FlutterMacOS.framework/Headers -> Versions/Current/Headers
61414739        0 lrwxr-xr-x    1 jonas            staff                  24 31 Mai 14:28 ./example/build/macos/Build/Products/Debug/FlutterMacOS.framework/Modules -> Versions/Current/Modules
62171199        0 lrwxr-xr-x    1 jonas            staff                  29 31 Mai 14:28 ./example/build/macos/Build/Products/Debug/FlutterMacOS.framework/FlutterMacOS -> Versions/Current/FlutterMacOS
62170827        0 lrwxr-xr-x    1 jonas            staff                  26 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/package_info_plus_macos/package_info_plus_macos.framework/Resources -> Versions/Current/Resources
62170828        0 lrwxr-xr-x    1 jonas            staff                  40 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/package_info_plus_macos/package_info_plus_macos.framework/package_info_plus_macos -> Versions/Current/package_info_plus_macos
62170826        0 lrwxr-xr-x    1 jonas            staff                   1 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/package_info_plus_macos/package_info_plus_macos.framework/Versions/Current -> A
62170825        0 lrwxr-xr-x    1 jonas            staff                  24 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/package_info_plus_macos/package_info_plus_macos.framework/Headers -> Versions/Current/Headers
62170829        0 lrwxr-xr-x    1 jonas            staff                  24 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/package_info_plus_macos/package_info_plus_macos.framework/Modules -> Versions/Current/Modules
61414793        0 lrwxr-xr-x    1 jonas            staff                  20 17 Mai 08:51 ./example/build/macos/Build/Products/Debug/App.framework/App -> Versions/Current/App
61414792        0 lrwxr-xr-x    1 jonas            staff                  26 17 Mai 08:51 ./example/build/macos/Build/Products/Debug/App.framework/Resources -> Versions/Current/Resources
61414791        0 lrwxr-xr-x    1 jonas            staff                   1 17 Mai 08:51 ./example/build/macos/Build/Products/Debug/App.framework/Versions/Current -> A
61415253        0 lrwxr-xr-x    1 jonas            staff                  26 31 Mai 14:28 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/FlutterMacOS.framework/Resources -> Versions/Current/Resources
61415255        0 lrwxr-xr-x    1 jonas            staff                   1 31 Mai 14:28 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/FlutterMacOS.framework/Versions/Current -> A
61415252        0 lrwxr-xr-x    1 jonas            staff                  29 31 Mai 14:28 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/FlutterMacOS.framework/FlutterMacOS -> Versions/Current/FlutterMacOS
61415277        0 lrwxr-xr-x    1 jonas            staff                  26 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/Sentry.framework/Resources -> Versions/Current/Resources
61415280        0 lrwxr-xr-x    1 jonas            staff                   1 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/Sentry.framework/Versions/Current -> A
61415278        0 lrwxr-xr-x    1 jonas            staff                  23 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/Sentry.framework/Sentry -> Versions/Current/Sentry
61415302        0 lrwxr-xr-x    1 jonas            staff                  31 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/sentry_flutter.framework/sentry_flutter -> Versions/Current/sentry_flutter
61415301        0 lrwxr-xr-x    1 jonas            staff                  26 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/sentry_flutter.framework/Resources -> Versions/Current/Resources
61415304        0 lrwxr-xr-x    1 jonas            staff                   1 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/sentry_flutter.framework/Versions/Current -> A
61415233        0 lrwxr-xr-x    1 jonas            staff                  20 17 Mai 08:51 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/App.framework/App -> Versions/Current/App
61415234        0 lrwxr-xr-x    1 jonas            staff                  26 17 Mai 08:51 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/App.framework/Resources -> Versions/Current/Resources
61415236        0 lrwxr-xr-x    1 jonas            staff                   1 17 Mai 08:51 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/App.framework/Versions/Current -> A
61415289        0 lrwxr-xr-x    1 jonas            staff                  26 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/package_info_plus_macos.framework/Resources -> Versions/Current/Resources
61415290        0 lrwxr-xr-x    1 jonas            staff                  40 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/package_info_plus_macos.framework/package_info_plus_macos -> Versions/Current/package_info_plus_macos
61415292        0 lrwxr-xr-x    1 jonas            staff                   1 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/sentry_flutter_example.app/Contents/Frameworks/package_info_plus_macos.framework/Versions/Current -> A
62170872        0 lrwxr-xr-x    1 jonas            staff                  28 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/Pods_Runner.framework/Pods_Runner -> Versions/Current/Pods_Runner
62170871        0 lrwxr-xr-x    1 jonas            staff                  26 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/Pods_Runner.framework/Resources -> Versions/Current/Resources
62170869        0 lrwxr-xr-x    1 jonas            staff                   1 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/Pods_Runner.framework/Versions/Current -> A
62170868        0 lrwxr-xr-x    1 jonas            staff                  24 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/Pods_Runner.framework/Headers -> Versions/Current/Headers
62170870        0 lrwxr-xr-x    1 jonas            staff                  24 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/Pods_Runner.framework/Modules -> Versions/Current/Modules
62170783        0 lrwxr-xr-x    1 jonas            staff                  26 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/Sentry/Sentry.framework/Resources -> Versions/Current/Resources
62170781        0 lrwxr-xr-x    1 jonas            staff                   1 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/Sentry/Sentry.framework/Versions/Current -> A
62170780        0 lrwxr-xr-x    1 jonas            staff                  24 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/Sentry/Sentry.framework/Headers -> Versions/Current/Headers
62170782        0 lrwxr-xr-x    1 jonas            staff                  23 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/Sentry/Sentry.framework/Sentry -> Versions/Current/Sentry
62170784        0 lrwxr-xr-x    1 jonas            staff                  24 30 Mai 11:30 ./example/build/macos/Build/Products/Debug/Sentry/Sentry.framework/Modules -> Versions/Current/Modules

I'm using Flutter 2.2 but haven't seen the issue for a while.
I just though it would be because of

If you delete the iOS and macOS folders of the package, the analyzer has no problems. You can now undo the deletion of the folders and the analyzer does not use that much CPU. IIRC that fixes the problems until you run flutter clean

But it could also be the Flutter upgrade. I'm fine with closing it. If I run into this issue I'll just reopen it.


How to use functions

Very helpful python package. Can you please provide some example code on how to use the functions of the package? Thanks

Hi @Alyeko, thanks for your request. I'm working on a documentation site for the package. Hopefully, it will be done in the next couple of weeks.

That's great, thanks!

@Alyeko As we are still in active development of PyLUSAT's documentation, please take a look at the current version of it on readthedocs at https://pylusat.readthedocs.io/.


refactor(ui-components): split out Shared.styles into components

First steps to asses #912

[x] remove unused Shared.styles
[x] split out used Shared.styles into components
[x] tachyons-ify hard coded values along the way
[x] replace removed/modified components in light-apps

Replace hardcoded values with tachyon scales in:

[ ] Shared.styles
[ ] components
[ ] light-apps

Disentangling Shared.styles took more than I expected. @amaurymartiny I'd like to merge this and continue on the non-tackled points in the next PR. What do you think?

Could you merge master too?

Done!

Also, overall, did any component disappear or change signficantly?

There are components that have changed and some have disappeared. @yjkimjunior  Here's a list:

Stacked, StackedHorisontal, WithSpaceAround, WrapperDiv, FramedBlock, BlackBlock, StyledLinkButton, StyledNavButton, SubHeader, DynamicSizeText, BoldText, RefreshButton are removed completely

Stacked/StackedHorisontal, FramedBlock, BlackBlock, WrapperDiv, BlackBlock etc are now Layout

NayButton, YayButton are now a VoteButton

DynamicSizeText is a Paragraph

StyledLinkButton, StyledNavButton can be expressed with NavButton

SubHeader can be a semantic Header or a Paragraph

@yjkimjunior I can help with replacing Nomidot components with existing ones or recover any of the dead ones! Just let me know!

Merged, thanks!


Added the footer

i have added the footer but i will add more and do some changes to it .
please accept the PR .

Hey @papali1305
You've done really good work on adding the footer! Keep it up, and feel free to get creative with it. Keep contributing, and great work so far!


3DS Input Only

Hey, hope you're doing well! Basically I want to use ArticBase only for the 3DS input function and not for forwarding and such, is it possible?

Hello, thanks for the suggestion, but this is outside the scope of the tool.

Sad, thanks you anyway


Enable webvr m53

This patch set first reverts "[Temp] Make |enable_webvr==false| work in GN" (see my comment in accdb96d922d789bf8204ff4ca1af87d09673c90) and later implements the same thing in the right files.
You can get rid of both the first commit and accdb96d922d789bf8204ff4ca1af87d09673c90, as only "[Temp] Only depend on deviecs/vr when enable_webvr is on" is required in M53.

@mrunal @msisov

@rakuco I have removed the commit so you don't need to revert it now but make sure to rebase your PR.

I'm no longer at work today, so I'll only be able to do that tomorrow. You can also just cherry-pick the patch if you prefer.

rebased, merging.

I'll take care of rolling DEPS.xwalk.


Probably just a dumb mistake

I'm using the docker and cant seem to get this to work. I've made sure my token is correct. I seem to be missing the folder for the credentials.json I'm really lost, thanks.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
C:\Users\Ryty>docker stop nadeko
nadeko
C:\Users\Ryty>docker start -a nadeko
Dotnet installed.
Linking Nadeko Credentials
bash: ./patch.sh: No such file or directory
Patching Nadeko Data Folder
Starting Redis-Server
Running NadekoBot with auto restart Please wait.
Using launch settings from /opt/NadekoBot/src/NadekoBot/Properties/launchSetting
s.json...
-1 06:20:41 ShardsCoordinator | Starting NadekoBot v2.22.0
Using launch settings from /opt/NadekoBot/src/NadekoBot/Properties/launchSetting
s.json...
0 06:21:06 NadekoBot | Shard 0 logging in ...
Unhandled Exception: Discord.Net.HttpException: The server responded with error
401: 401: Unauthorized
at Discord.Net.Queue.RequestBucket.d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at Discord.Net.Queue.RequestQueue.d__14.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at Discord.API.DiscordRestApiClient.d__62.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at Discord.API.DiscordRestApiClient.d__57`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at Discord.API.DiscordRestApiClient.d__144.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at Discord.WebSocket.DiscordSocketClient.d__86.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at Discord.Rest.BaseDiscordClient.d__34.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Discord.Rest.BaseDiscordClient.d__34.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at Discord.Rest.BaseDiscordClient.d__33.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at NadekoBot.NadekoBot.d__47.MoveNext() in /opt/NadekoBot/NadekoB
ot.Core/Services/NadekoBot.cs:line 238
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at NadekoBot.NadekoBot.d__50.MoveNext() in /opt/NadekoBot/NadekoBot
.Core/Services/NadekoBot.cs:line 275
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at NadekoBot.NadekoBot.d__52.MoveNext() in /opt/NadekoBot/N
adekoBot.Core/Services/NadekoBot.cs:line 331
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNot
ification(Task task)
at NadekoBot.Program.(String[] args)

I don't think you people realize that you are getting shut down. I've spoken at the windows and Discord and they do not approve so good luck keep trying actually I hope you fail

@Apollo1127 ignore them, they're just some bored retard.

@Apollo1127 make sure your token is right. One easy mistake is accidentally using the client secret. If you are sure the token is right, try generating a new bot token.
After you edit credentials.json, run
docker cp credentials.json nadeko:/root/nadeko
docker start -a nadeko

Thank you that command worked for me!


Publish types to @types/connectwise-rest-api

Could you please publish the types for this module to the new types system, https://www.npmjs.com/package/@types/connectwise-rest-api
You can check out the new change here, https://github.com/DefinitelyTyped/DefinitelyTyped since ts 2.0 the typings cli is deprecated and you are supposed to use npm @types instead.

@HugoReeves sure thing!

@HugoReeves I've closed this as best practices have chanced since the issue was created and bundling types with the module is commonplace.


Config flow could not be loaded

500 Internal Server Error Server got itself in trouble

I had the same problem with HA in a docker environment.
The problem is a missing "pyasic" package.
It can be installed from the cli with "pip install pyasic==0.60.0" (when using docker you have to exec into the container first).
Be aware there is, at least for now, a dependancy for version 0.60.0 while the latest is 0.60.8
After that restart HA or reboot the container and it should work.

There is a good chance this is related to #393, but I would need logs to verify.
Also, just pip install pyasic==0.60.8, there was no breaking changes only big fixes.

I had the same problem with HA in a docker environment.
The problem is a missing "pyasic" package. It can be installed from the cli with "pip install pyasic==0.60.0" (when using docker you have to exec into the container first).
System information
IPv4 addresses for end0:  <IP_ADDRESS>/24
IPv6 addresses for end0:  fd00::4236:cfa8:bfce:f62f/64, fe80::cf40:c269:92de:6b0f/64
IPv4 addresses for wlan0:
OS Version:               Home Assistant OS 13.1
Home Assistant Core:      2024.10.1
Home Assistant URL:       http://homeassistant.local:8123
Observer URL:             http://homeassistant.local:4357
➜  ~ pip install pyasic==0.60.0
Looking in indexes: https://pypi.org/simple, https://wheels.home-assistant.io/musllinux-index/
Collecting pyasic==0.60.0
Downloading pyasic-0.60.0-py3-none-any.whl.metadata (11 kB)
Collecting aiofiles>=23.2.1 (from pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/aiofiles-24.1.0-py3-none-any.whl (15 kB)
Collecting asyncssh>=2.14.2 (from pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/asyncssh-2.17.0-py3-none-any.whl (363 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 363.7/363.7 kB 7.6 MB/s eta 0:00:00
Collecting betterproto>=2.0.0b6 (from pyasic==0.60.0)
Downloading betterproto-2.0.0b7-py3-none-any.whl.metadata (19 kB)
Collecting httpx>=0.26.0 (from pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/httpx-0.27.2-py3-none-any.whl (76 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 76.4/76.4 kB 26.6 MB/s eta 0:00:00
Collecting passlib>=1.7.4 (from pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/passlib-1.7.4-py2.py3-none-any.whl.metadata (1.7 kB)
Collecting pyaml>=23.12.0 (from pyasic==0.60.0)
Downloading pyaml-24.9.0-py3-none-any.whl.metadata (11 kB)
Collecting tomli-w==1.0.0 (from pyasic==0.60.0)
Downloading tomli_w-1.0.0-py3-none-any.whl.metadata (4.9 kB)
Collecting cryptography>=39.0 (from asyncssh>=2.14.2->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/cryptography-43.0.1-cp39-abi3-musllinux_1_2_aarch64.whl (3.9 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.9/3.9 MB 23.0 MB/s eta 0:00:00
Collecting typing-extensions>=4.0.0 (from asyncssh>=2.14.2->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Collecting grpclib<0.5.0,>=0.4.1 (from betterproto>=2.0.0b6->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/grpclib-0.4.7-py3-none-any.whl (76 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 76.2/76.2 kB 25.3 MB/s eta 0:00:00
Collecting python-dateutil<3.0,>=2.8 (from betterproto>=2.0.0b6->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 229.9/229.9 kB 28.2 MB/s eta 0:00:00
Collecting anyio (from httpx>=0.26.0->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/anyio-4.6.0-py3-none-any.whl (89 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 89.6/89.6 kB 19.1 MB/s eta 0:00:00
Collecting certifi (from httpx>=0.26.0->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/certifi-2024.8.30-py3-none-any.whl (167 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 167.3/167.3 kB 22.0 MB/s eta 0:00:00
Collecting httpcore==1.* (from httpx>=0.26.0->pyasic==0.60.0)
Downloading httpcore-1.0.6-py3-none-any.whl.metadata (21 kB)
Collecting idna (from httpx>=0.26.0->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/idna-3.10-py3-none-any.whl (70 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 70.4/70.4 kB 23.6 MB/s eta 0:00:00
Collecting sniffio (from httpx>=0.26.0->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/sniffio-1.3.1-py3-none-any.whl (10 kB)
Collecting h11<0.15,>=0.13 (from httpcore==1.*->httpx>=0.26.0->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/h11-0.14.0-py3-none-any.whl (58 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.3/58.3 kB 19.8 MB/s eta 0:00:00
Requirement already satisfied: PyYAML in /usr/lib/python3.12/site-packages (from pyaml>=23.12.0->pyasic==0.60.0) (6.0.2)
Collecting cffi>=1.12 (from cryptography>=39.0->asyncssh>=2.14.2->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/cffi-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl (216 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 216.4/216.4 kB 25.3 MB/s eta 0:00:00
Collecting h2<5,>=3.1.0 (from grpclib<0.5.0,>=0.4.1->betterproto>=2.0.0b6->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/h2-4.1.0-py3-none-any.whl (57 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.5/57.5 kB 16.5 MB/s eta 0:00:00
Collecting multidict (from grpclib<0.5.0,>=0.4.1->betterproto>=2.0.0b6->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl (33 kB)
Collecting six>=1.5 (from python-dateutil<3.0,>=2.8->betterproto>=2.0.0b6->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting pycparser (from cffi>=1.12->cryptography>=39.0->asyncssh>=2.14.2->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/pycparser-2.22-py3-none-any.whl (117 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.6/117.6 kB 17.6 MB/s eta 0:00:00
Collecting hyperframe<7,>=6.0 (from h2<5,>=3.1.0->grpclib<0.5.0,>=0.4.1->betterproto>=2.0.0b6->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/hyperframe-6.0.1-py3-none-any.whl (12 kB)
Collecting hpack<5,>=4.0 (from h2<5,>=3.1.0->grpclib<0.5.0,>=0.4.1->betterproto>=2.0.0b6->pyasic==0.60.0)
Downloading https://wheels.home-assistant.io/musllinux-index/hpack-4.0.0-py3-none-any.whl (32 kB)
Downloading pyasic-0.60.0-py3-none-any.whl (398 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 398.6/398.6 kB 14.0 MB/s eta 0:00:00
Downloading tomli_w-1.0.0-py3-none-any.whl (6.0 kB)
Downloading betterproto-2.0.0b7-py3-none-any.whl (105 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 105.4/105.4 kB 19.7 MB/s eta 0:00:00
Downloading httpcore-1.0.6-py3-none-any.whl (78 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.0/78.0 kB 19.4 MB/s eta 0:00:00
Downloading https://wheels.home-assistant.io/musllinux-index/passlib-1.7.4-py2.py3-none-any.whl (525 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 525.6/525.6 kB 25.0 MB/s eta 0:00:00
Downloading pyaml-24.9.0-py3-none-any.whl (24 kB)
Installing collected packages: passlib, typing-extensions, tomli-w, sniffio, six, pycparser, pyaml, multidict, idna, hyperframe, hpack, h11, certifi, aiofiles, python-dateutil, httpcore, h2, cffi, anyio, httpx, grpclib, cryptography, betterproto, asyncssh, pyasic
Successfully installed aiofiles-24.1.0 anyio-4.6.0 asyncssh-2.17.0 betterproto-2.0.0b7 certifi-2024.8.30 cffi-1.17.1 cryptography-43.0.1 grpclib-0.4.7 h11-0.14.0 h2-4.1.0 hpack-4.0.0 httpcore-1.0.6 httpx-0.27.2 hyperframe-6.0.1 idna-3.10 multidict-6.1.0 passlib-1.7.4 pyaml-24.9.0 pyasic-0.60.0 pycparser-2.22 python-dateutil-2.9.0.post0 six-1.16.0 sniffio-1.3.1 tomli-w-1.0.0 typing-extensions-4.12.2
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
➜  ~ whoami
root
➜  ~
same result:
Error
Config flow could not be loaded: 500 Internal Server Error Server got itself in trouble

same error for me since last HA update in 2024.10

I had the same problem with HA in a docker environment.
The problem is a missing "pyasic" package. It can be installed from the cli with "pip install pyasic==0.60.0" (when using docker you have to exec into the container first). Be aware there is, at least for now, a dependancy for version 0.60.0 while the latest is 0.60.8 After that restart HA or reboot the container and it should work.

Can you explain how i can do this in HA?

Same problem tried downgrading pyasic and tried beta of miner but no luck 🤔

same here

auch bei mir das Problem :-(
was tun?

I had the same problem with HA in a docker environment.
The problem is a missing "pyasic" package. It can be installed from the cli with "pip install pyasic==0.60.0" (when using docker you have to exec into the container first). Be aware there is, at least for now, a dependancy for version 0.60.0 while the latest is 0.60.8 After that restart HA or reboot the container and it should work.

Downgrading back to 2024.9 works for me as well, but not preferable ofcourse.
Can you explain how i can do this in HA?

Using the web interface, access the Terminal in Add-Ons. Then paste ha core update --version 2024.9.3 to downgrade.

Downgrade only way?

yea, same problem as this: https://github.com/Schnitzel/hass-miner/issues/393#issuecomment-2438171292 see this comment for possible workarounds
closing this.


Additional fields to Detection Finding

Tagged Events if Raised
There might be some cases where an IT configures their threat detection platform to highlight specific events that are of interest to them. For example, the IT configures their platform to highlight / tag if a Finding originates from a known anomalous network. If the Product surfaces an event from this known anomalous network, then we need some way to highlight or tag the event to the IT with associated reasons. This might make sense in the Metadata field
New User
It might be of interest to note if a user has been newly added or has not authenticated in a while. Attackers can create new users or authenticate into a dormant user. This might make sense in the User field
Additional Network Connection fields
To help an incident responder, it might be helpful to highlight benign characteristics of certain network details, such as if it is a frequent network / netblock for an organization or if the IP is allow-listed. This might make sense in the Network Connection Information field

Example of this use case from Duo Trust Monitor
https://duo.com/docs/adminapi#trust-monitor

@ggacusan-at-duo do you have examples of how you would like to embed this in the objects?
This sounds to me like general enrichments and not necessarily a new attribute.
Something we just wanted to suggest as well is to have Array[Enrichment] for OCSF objects as well, and not just for event classes like today. I think this could help your use case, so for User you could have an enrichment called "is_new" with a boolean value ,etc.
WDYT?


Helm Chart Enhancement - Ability to manage "automountServiceAccountToken"

My organization is trying to adhere to Checkov rule CKV_K8S_38 to ensure that Service Account Tokens are only mounted where necessary.  There currently is not an option to manually configure the service account token by creating an optional helm value to set 'automountServiceAccountToken' to false, as well as the ability to mount the token if needed.

That policy generally makes sense but IMO doesn't apply to the controller because it requires a SA token to work. I don't see a case where manually mounting service accounts would be useful.
Or do you have a attack scenario where that would help?

I don't have a specific scenario, no.
Sorry it was an ask from our InfoSec team to open this case/issue and verify with the project maintainers that not being able to set "automountServiceAccountToken" was by design.
This can probably be closed.


Removing dartdocgen from SDK

We can remove dartdocgen from the SDK. We should probably do this fairly soon to catch any impact.

starting from 1.12 we've printed out a deprecation warning
starting in 1.12, we're shipping dartdoc tool

cc @keertip to confirm
cc @mit-mit for label triaging (not sure how to triage this)
cc @whesse for impact on SDK generation scripts

I will put out a cl to remove it from the SDK.

Done with https://codereview.chromium.org/1356943002/ and https://codereview.chromium.org/1353213002/


Added "Average Lending Rate" calculation to status line.

Added a calculation of the average lending rate for all active loans to the status line.
I can't test it with multiple currencies as I'm not lending, but I don't see a reason why it shouldn't work.

Appreciate your work, sir. Well done.

Thank you for the great script, been running on my phone now for weeks. :+1:


Allow override of the name 'general' for ungrouped routes

Ungrouped routes currently get pushed into a 'general' group. This PR allows the override of that name from within the config. This helps with things like Laravel Passport which publishes it's own routes and at present you're not able to override the group name.

Codecov Report

Merging #491 into master will not change coverage.
The diff coverage is 100%.

@@            Coverage Diff            @@
##             master     #491   +/-   ##
=========================================
  Coverage     92.47%   92.47%
- Complexity      250      251    +1
=========================================
  Files            12       12
  Lines           585      585
=========================================
  Hits            541      541
  Misses           44       44

Impacted Files
Coverage Δ
Complexity Δ

src/Tools/Generator.php
95.09% <100%> (ø)
72 <0> (+1)
:arrow_up:

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 ce75c2d...8137cbb. Read the comment docs.

Codecov Report

Merging #491 into master will not change coverage.
The diff coverage is 100%.

@@            Coverage Diff            @@
##             master     #491   +/-   ##
=========================================
  Coverage     92.47%   92.47%
- Complexity      250      251    +1
=========================================
  Files            12       12
  Lines           585      585
=========================================
  Hits            541      541
  Misses           44       44

Impacted Files
Coverage Δ
Complexity Δ

src/Tools/Generator.php
95.09% <100%> (ø)
72 <0> (+1)
:arrow_up:

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 ce75c2d...8137cbb. Read the comment docs.


Add SMT abstraction

This patch series is to address issue #533. It replaces the use of Z3 in Mythril by pySMT that provides a unified APIs for SMT-lib compatible constraint solvers (including Z3, CVC4, Yices, etc.).
In addition, a modified pySMT is used to support attaching arbitrary properties to pySMT FNode (which represents expressions, formulas and constraints akin to Z3 ExprRef), so that we can, for example, add the taint information to symbols in the future. You can refer to tests/laser/test_pysmt.py for a simple example.
All tests from all_tests.sh are passed locally when the Z3 solver is used. Other solvers have not been tested, because they may require additional adjustment, especially for configurations of constraint solving, e.g., the timeout may not be supported by every solver and may be configured in a solver-specific way which has not been unified by pySMT).
This patch series is organized as below.

Patch 01-02 fix/cleanup the existing code and are not quite relevant to this patch series.
Patch 03-11 replaces most uses of Z3 APIs by a set of wrapper functions, so that when switching to pySMT APIs, we only need to reimplement wrappers to use pySMT APIs.
Patch 12-17 reimplement above wrappers on pySMT APIs and fix several issues after the API switch.

The order of commits in this PR seems inconsistent to what are in my repo. Close and will resend later.


[Refactor] new AWS clients

Reviews
0/1

More info

Reviews
1/1

itstehkman
1

Pull request is reviewed and can be merged to master!
More info

Reviews
1/1

itstehkman
1

Pull request is reviewed and can be merged to master!
More info


Remove BackHandler with using NativeEventSubscription

I failed to remove BackHandler with using document style.
I succeeded in removing with keeping BackHandler as a value of NativeEventSubscription.
Thank you.
Reference: https://stackoverflow.com/a/52797669/3774895

Thank you approving and merging.


EIA V2 documentation

Are there any particular methods you are hoping to be included in this? And how many examples would you like included?

i think showing how to use EIA.get_dataset makes the most sense to start with. I would show example with each of the datasets that we have a handler for here: https://github.com/kmax12/gridstatus/blob/main/gridstatus/eia.py#L628.

@kmax12

hi - sorry, i havent had time to look at this. might not have time for a bit, but ill comment here once i do. really sorry

one comment - i see the docs aren't actually build. i think you need to merge in main with this fix https://github.com/kmax12/gridstatus/pull/285.

Ah sorry I didn't mean to close this. My local instance of grid status became a mess for some reason and I had corrupted files and ended up just deleting the whole thing and re-cloning. I have the EIA example file..just need to get this PR all sorted..

Is this PR closed by #327?

No, that PR was just fixing existing documentation. It would be great if we could get some more new EIA documentation notebooks.


Implement "layer" in workload account provisioning for Terraform Cloud workspace creation

Describe the issue
Our account provisioing automation should include a layer (optional?) to establish and populate a set of TF Cloud workspaces for teams as part of account creation.
Which Sprint Priority is this issue related to?
The 'Milestone' should clearly list Sprint Priorities - which one is this issue related to?
Additional context
Add any other context, attachments or screenshots
Definition of done

when an account set is created, a matching and appropriately configured set of workspaces is created in TF Cloud.

Urgency of this item increased as it was needed in order to support work on #449 and platform services request.


Tried everything phantomjs fails to run after successful build

Which version of PhantomJS are you using? Tip: run phantomjs --version.
2.2.0-development

This application failed to start because it could not find or load the Qt platform plugin "phantom"
in "".
We have tried everything.. we need this to work asap :(

How did you compile it? Current master is still doesn't work properly on Linux an macOS(?) We must land some tweaks.

Well i compiled from the hash commit of 6090f54 on my mac and it worked perfect so we now are trying to compile on a different linux box for production.. but it fails.. we can't use 2.1.1 as it doesn't contain the fixes for the page.settings.dpi portion that we really need

Make sure you linked phantom platform plugin into the final executable and build Qt with it.

OK!... now.. i apologize.. but we dont know what that means? how do we link it? Sorry

if you do a regular build by using our python script build.py you will have it linked successfully. Could you please describe step by step how did you build Linux version?

We ran the build.py as you mentioned..
Step for step
checked out master..
reset head to 6090f54 as we knew that worked for us locally..
then i ran sub module init, update
and then the python build.py command.
it finished the build successfully.. but we get that error.
This application failed to start because it could not find or load the Qt platform plugin "phantom"
in "".

keep in mind the above process works for my mac.. and runs fine.  But not on our production linux box.

@northkode Do you have any more info that could help move this forward? Which version of linux are you using?
You might just have to wait for an official release here.

@northkode @thoop the build.py script has been deprecated and the build process is being refactored for the 2.5 release.   i also don't have any luck building phantomjs from source on the master branch.
i've had to build the linux version from source to apply patches.  i ended up using the 2.1.1 release and cherry pick the patches.  then i built the release on docker.

@jesg do you have a process you can document in here? as well as the patches you applied?
I ended up going back to 2.0.0 and using a fork from someone else that had the dpi settings that we needed and got it working, but i would rather be using 2.1.1

first apply the patches you want on top of the 2.1.1 release.  i applied the dpi patch and the cookie patch in this example.
$ git checkout 2.1.1
$ git checkout -b 2.1.1-1
# apply the dpi patch
$ git cherry-pick 5232c9dff98115600d1b1491e538e01c0de2d650
# apply the cookie patch
$ git cherry-pick d0388371cfda166d97165c1b68182857b954cc83

next we follow the release instructions.
$ git clean -xfd .
$ docker run -v $PWD:/src debian:wheezy /src/deploy/docker-build.sh

the project should build everything from source in the docker container.


Fix flags for firefox and safari

Fixes 2 bugs:

#110 Full page flag in firefox
#111 No flag in safari

I was not able to run this locally, but I tested by using these overrides in my code :shrug:
Webpack wasn't able to find @mui/styles and react

@fnowacki Is there anything else I need to do for this to be merged?

Hello @mckelveygreg thank you for this fix. It indeed works well.
Seem like noone is maintaining this library anymore, and owners don't even care about it to give a merge permission for this repository to somoene from us.
So I got fed up, and since I need this to be fixed for my client project, I forked this library, fixed this bug and published it at:
https://github.com/justdvl/material-ui-phone-number-2
https://www.npmjs.com/package/material-ui-phone-number-2
I recommend everyone who needs this library but working, to make a simple switch. I will also actively maintain this version 2 library, I will make few more improvements in following days

This package (https://github.com/viclafouch/mui-tel-input) handles this problem, supports both React 17 / 18


enhancement - encrypt entire contents of json file

we would like to take a json file
.json
and encrypt entire contents
.json.enc
then decrypt it at run time with key - no need for regex patterns.
https://github.com/nareshv/secure-conf/blob/master/examples/test.js#L26
we want to use your key from environment variables to dynamically decrypt file contents
eg.
include
import encSettings "config.json.enc"
var settings = encSettings.decrypt();

Hi!
Encrypting the entire file (meaning ALL of its contents, keys & values) is not the original intention of my package @tsmx/secure-config and this supporting tool as it has some major drawbacks:

the result would not be a valid JSON anymore
the result would be completely unreadable for humans, which makes the handling extremely difficult

Since the additional gain of security is very small I defintively do not recommend to encrypt the entire file.
But: Nevertheless you can achieve your goal very easy with the provided library @tsmx/string-crypto which I also use in this project.
Encrypt an entire JSON file
const sc = require('@tsmx/string-crypto');
const fs = require('fs');
const jsonFile = require('test.json');
let encryptedJson = sc.encrypt(JSON.stringify(jsonFile));
fs.writeFileSync('test.json.enc', encryptedJson);

Decrypt the JSON back
const sc = require('@tsmx/string-crypto');
const fs = require('fs');
let decryptedJsonFile = JSON.parse(sc.decrypt(fs.readFileSync('test.json.enc').toString()));

Note: @tsmx/string-crypto by default uses the environment variable ENCRYPTION_KEY. If you need to use an environment variable with another name, simply pass the key directly...
sc.encrypt(text, { key: process.env['YOUR_VAR_NAME'] });
sc.decrypt(text, { key: process.env['YOUR_VAR_NAME'] });

Hope that helps!
Kind regards
P.S.: closing the issue as it's not relevant for this project


Post in the chat message with the current version when Nyan is updating

Because we haven't any CI indication of how successful the last deployment was, let's Nyan will say it by himself!
Smth like:
Nyan: А вот и новая версия меня! 0.7.12

The message should be deleted after a while

@C-Pro You think so? I mean, we do not know what happening when GitHub Action trigger the backdoor. Was deploy successful or not. How could we be sure?
Looks like sending a sort message exactly in bot boot time is a pretty explicit way, isn't it?
Or could you provide a more suitable way to solve it?

Backdoor can wait for deploy and return http 200/50x error code depending if deploy commend returns zero or smth else.

@C-Pro check this out, when u got a time: https://github.com/vldc-hq/backdoor/pull/3


Convert "lwaftr config" to be Python-based

For consistency with the other lwaftr subcommand tests. Part of #412.

Implemented by #768.


Disable releasing common

We need a solution that will publish this before we can let zorgbort
release it.

Never mind, I think I figured this out.


Update funding page with Q3 financial report data

Blocked by https://github.com/mimblewimble/grin-pm/pull/362

https://github.com/mimblewimble/site/pull/248


bump v5 router to beta.1

I went to test the new path-to-regexp behavior in 5.0.0-alpha.8 and realized that it relies on<EMAIL_ADDRESS>which doesn't have the new path-to-regexp behavior that's planned for v5.
Not sure if this is intentional or not, so I wanted to open this PR as a reminder.
I'm writing a blog post for work about changes in v5 and wanted folks to be able to try this part out.

I wanted to get that PR you created in the router module into the next 5 release, which is the hold up. It was all set, I though, until all those review comments came in. I pinged recently on if it was actually ready or not and it sounds like there are still some outstanding things you need to fix in the PR in order to land @jonchurch 👍

I have a local pending change that I was going to PR as soon as that was open. If you want to pursue it here, just needs the existing examples and tests updated for the new routing syntax (so CI passes) and since we also keep some of the key pieces of tests in this module as well (like body parser, serve static, and router), you'll want to also copy in the tests for the new features the router is now bringing in. I hope that helps if you want to take up helping push this PR forward 👍

Ah, ty doug. I committed wes' doc suggestions in the other PR.
I can pick this up, but might not have time until next week.

I'm behind on my notifications and need to chew through those, I'm sure there's some other things in there I'm missing like that PR.

It's cool, there is no rush :) I was more trying to understand what your plans were to coordinate. If you're not even planning to pick up for the next couple days even, I will try to push up my commits into your PR here to give you a boost when you get to it, if that's OK with you. Don't wait on me either, but I should still have that git folder from my old machine to push up 🥳

Sounds good, push away! I opened this mostly as a slightly more useful comment than opening an issue.

@dougwilson is this the last PR for https://github.com/expressjs/express/issues/4535 ? It seems @jonchurch has not been active on Github for over a year, so it is fair to say he won't be able to fix this. You have the deepest knowledge of Express and are an active coder, is there a chance you could take over and fix these last things to get 5.0 released?

It's cool, there is no rush :) I was more trying to understand what your plans were to coordinate. If you're not even planning to pick up for the next couple days even, I will try to push up my commits into your PR here to give you a boost when you get to it, if that's OK with you. Don't wait on me either, but I should still have that git folder from my old machine to push up 🥳

In reference to https://github.com/expressjs/express/issues/4535#issuecomment-872219273 I think it is fair to say that you @jonchurch gave you the go-ahead on this. But since @jonchurch is back to fix this now that is great 😃

@jonchurch is there any chance you could give it a go to finalize this 😄 It is the only outstanding issue for Express 5.0 to be released: https://github.com/expressjs/express/issues/4535#issuecomment-872219273 - the community is loving you for fixing this ❤

What's the status of this?

I went ahead and updated the tests for changed functionality and added tests for new features, so this is ready to land in 5.0

@dougwilson does this mean you could consider releasing Express 5 once https://github.com/expressjs/expressjs.com/issues/1313 is fixed? 😃

I'm confused. Once https://github.com/pillarjs/router/pull/102 is merged, a new (beta?) version of router would need to be cut and express would need to be updated again.
Also changes in https://github.com/expressjs/express/pull/4321/commits/1574925cad7fd07143f96e8667e7af41b6866eaa were already part of https://github.com/expressjs/express/pull/4752, which was put on hold and marked as "Draft" until the above takes place.


"Cannot add client, conf is null" error

Getting "Cannot add client, conf is null" error after startScan.
I am using the client_id and secret_id from the platforma, and the email I registered with as user_id.
Logs:
D/BeaconParser: Parsing beacon layout: m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25
D/BeaconSDK~BeaconService: Start scan.
D/BeaconSDK~BeaconService: Cannot add client, conf is null.
D/BeaconSDK~BeaconService: onBeaconServiceConnect
D/BeaconSDK~BeaconControlManagerImpl: Error in getToken task.
W/BeaconSDK~BeaconControlManagerImpl: Token has not been retrieved.
D/BeaconSDK~HttpCallMediator: IO_ERROR
D/BeaconSDK~BeaconServiceHelper: Error in getConfigurations task, IO_ERROR

Thanks for reporting this issue. We investigated it and introduced some changes.
Please, download updated BeaconsControlSDK-1.0.aar file and check the problem is solved now.


Web & React: Masthead L1 - On mobile landscape - Hamburger menu is not displayed

Detailed description
On iPhone, iOS 14
Issue:
On mobile landscape - Hamburger menu is not displayed. Users cant access the menu options
Additional information

@Praveen-sr @RobertaJHahn I've tested on iOS 14 (iPhone 12 and iPhone 12 Pro) and iOS 13 (iPhone SE) and cannot reproduce this issue.

@Praveen-sr @RobertaJHahn I've tested on iOS 14 (iPhone 12 and iPhone 12 Pro) and iOS 13 (iPhone SE) and cannot reproduce this issue.


Handle non notebook based runs

Summary
When a non-notebook based task is ran on the jobs_runs_submit_and_wait_for_completion method, the code expects a notebook_output key to exist on the response Dict. Unfortunately when submitting a python file to execute and not a notebook, the notebook_output field is null.
I have aldo added the run_page_url to the logs for ease of reference to the run and tak runs associated to the processing.
Relevant Issue(s)
n/a
Checklist

[x] Summarized PR's changes in CHANGELOG.md

As an aside to this, I also noticed that the method for calling back in to check the status of the origin request for each run is a prefect task. Given the amount of tasks is bounded to my subscription, it seems unfair to use a task for this on the inside as this isn't really explictly defined up front when calling jobs_runs_submit_and_wait_for_completion.
For example if I trigger a single task to run a python file on databricks, if this takes 5 minutes to run and my poll interval is 30 seconds then this would use an additional 10 tasks, is this the case or have I misunderstood.

As an aside to this, I also noticed that the method for calling back in to check the status of the origin request for each run is a prefect task. Given the amount of tasks is bounded to my subscription, it seems unfair to use a task for this on the inside as this isn't really explictly defined up front when calling jobs_runs_submit_and_wait_for_completion.
For example if I trigger a single task to run a python file on databricks, if this takes 5 minutes to run and my poll interval is 30 seconds then this would use an additional 10 tasks, is this the case or have I misunderstood.

In Prefect Cloud 2.0, you can run as many tasks and flows as you want! The pricing model changed from Prefect Cloud 1.0 to encourage smaller tasks because that has been a practice recommended by Prefect as a clean flow design pattern. Here's info on our pricing model if you're interested: https://www.prefect.io/pricing/. We like not being restricted by task runs as integrations authors because we can provide more observability and reliability in flows that we write by wrapping each API call in a task. If you have any other questions or concerns about this pattern, let us know and we can discuss more!

In Prefect Cloud 2.0, you can run as many tasks and flows as you want! The pricing model changed from Prefect Cloud 1.0 to encourage smaller tasks because that has been a practice recommended by Prefect as a clean flow design pattern. Here's info on our pricing model if you're interested: https://www.prefect.io/pricing/. We like not being restricted by task runs as integrations authors because we can provide more observability and reliability in flows that we write by wrapping each API call in a task. If you have any other questions or concerns about this pattern, let us know and we can discuss more!

Thata great news, thank you. I was under the impression we would be given a very high upper bound of 50m tasks p/m, my concern with the polling being a task was this could potentially hit the limit. Thanks for clearing this up.

Looks great to me! Left very minor comments. I was wondering though, is there an equivalent to notebook_output for python scripts?

I do think there is, no. The field notebook_output I believe is the response from dbutils.notebook.exit(... so I can be trunctaed it if it a large output, hence the 'truncted' boolean response. I dont believe their is an related field for python responses.

Added some more tests too

Thanks for doing all this, and I wanted to share that I'm OOO until next week so I may not get to review this until then!

Thanks for doing all this, and I wanted to share that I'm OOO until next week so I may not get to review this until then!

Thanks for getting back to me @ahuang11, this is actively blocking us now though from moving over to 2.0, so the sooner someone can get round to it the better. I'll mention it on our teams dedicated slack channel at my client.

Sample of the logs output now.

I have actualy hit quite a big issue with this, which I don't see a good solution for.
In our solution we have some json collections which trigger python files which are submitted to Databricks. We have a list of dependencies for each which we used to use 'set_upstream' in v1 to dynamically do this. Given in v2 the related method jobs_runs_submit_and_wait_for_completion  is now a flow, we are unable to do jobs_runs_submit_and_wait_for_completion.submit(wait_for=[...)].
Even if we make the jobs_runs_submit_and_wait_for_completion method a task, then we have issues as all the rest methods on the auto-generated REST client for Databricks are also tasks so we hit the error 'Task cannot trigger tasks'.
If I make this method a task and remove all @task attributes from the REST client I can make this work as expected it did in v1, but without it I do not see a way of dynamically setting the dependencies of a subflow.
The documentation also mentions that all subflows block the execution of the parent flow, which would be a huge performance hit on our end.
With this in mind, I uinfortunately don't see a way forward for us under v2.
The code below is an example of how this could work for us if we made jobs_runs_submit_and_wait_for_completion a task and removed the "task attributes from everything inside jobs.py.
from prefect import flow
from prefect_databricks.flows import jobs_runs_submit_and_wait_for_completion
from data_engineering_fdp.dependencies.databricks_job_builder import DatabricksJobBuilder

builder = DatabricksJobBuilder()
project_name = builder.prefect_project

SCALE_DOWN_JOB = "sql_scale_down"

non_sql_job = ["sql_scale_up"]

object_py_files = {
    "sql_scale_up": "jobs/apps_dev/azure_sql_scale.py",
    "v_action": "jobs/apps_dev/v_action.py",
    "v_agreement_header": "jobs/apps_dev/v_agreement_header.py",
    "v_agreement_line": "jobs/apps_dev/v_agreement_line.py",
    "v_agreement_line_charge": "jobs/apps_dev/v_agreement_line_charge.py",
    "v_assignment_types": "jobs/apps_dev/v_assignment_types.py",
    "v_business_hierarchy": "jobs/apps_dev/v_business_hierarchy.py",
    "v_crm_salesperson": "jobs/apps_dev/v_crm_salesperson.py",
    "v_customer_address": "jobs/apps_dev/v_customer_address.py",
    "v_customer": "jobs/apps_dev/v_customer.py",
    "v_error_symptom": "jobs/apps_dev/v_error_symptom.py",
    "v_facility_item_balance": "jobs/apps_dev/v_facility_item_balance.py",
    "v_facility": "jobs/apps_dev/v_facility.py",
    "v_fleet_utilisation": "jobs/apps_dev/v_fleet_utilisation.py",
    "v_international_rating": "jobs/apps_dev/v_international_rating.py",
    "v_inventory_hierarchy": "jobs/apps_dev/v_inventory_hierarchy.py",
    "v_organisational_hierarchy": "jobs/apps_dev/v_organisational_hierarchy.py",
    "v_product_hierarchy": "jobs/apps_dev/v_product_hierarchy.py",
    "v_salesperson": "jobs/apps_dev/v_salesperson.py",
    "v_suppliers": "jobs/apps_dev/v_suppliers.py",
    "v_us_rating": "jobs/apps_dev/v_us_rating.py",
    "v_warehouse_item": "jobs/apps_dev/v_warehouse_item.py",
    "v_industry_sector_aic": "jobs/apps_dev/v_industry_sector_aic.py",
    SCALE_DOWN_JOB: "jobs/apps_dev/azure_sql_scale.py",
}

pre_reqs = {
    "sql_scale_up": None,
}

apps_dev_views = {
    "v_action": ["sql_scale_up"]
}
# Dims

apps_dev = [pre_reqs, apps_dev_views]

orchestrator_domains = {
    "apps_dev": apps_dev
}

orchestrated_objects = []

for domain in orchestrator_domains.values():
    for dependency in domain:
        orchestrated_objects.append(dependency)

params = {
    "sql_scale_up": [builder.codeMount, builder.sql_jdbc_connection_string, builder.sql_db_name, builder.sql_tier, builder.sql_sku_scale],
    SCALE_DOWN_JOB: [builder.codeMount, builder.sql_jdbc_connection_string, builder.sql_db_name, builder.sql_tier, builder.sql_sku],
}

running_subflow_states = {}

def run_table_dependencies(table_name, table_dependencies):
    if table_name in running_subflow_states.keys():
        return

    dependencies = []
    if table_dependencies:
        for parent in table_dependencies:
            if parent in running_subflow_states:
                dependencies.append(running_subflow_states[parent])

    parameters = params.get(table_name)

    if (table_name in non_sql_job):
        task = builder.job_json(object_py_files[table_name], parameters)
    else:
        task = builder.job_sql_json(object_py_files[table_name], parameters)

    credentials = builder.get_databricks_credentials()
    result = jobs_runs_submit_and_wait_for_completion.submit(
        databricks_credentials=credentials,
        tasks=[task],
        run_name="table_name",
        wait_for=dependencies)

    running_subflow_states[table_name] = result

@flow(name="apps_dev_orchestration_flow")
def main():
    for fact in orchestrated_objects:
        for table in fact:
            dependencies = fact[table]
            run_table_dependencies(table, dependencies)

if __name__ == "__main__":
    main()

Hi! Just a minor clarification on blocking subflows:

The documentation also mentions that all subflows block the execution of the parent flow, which would be a huge performance hit on our end.

You can use async subflows and gather to run them concurrently. There are some cases where this fails that we're hoping to address soon.
We are likely to add a utility to create non-blocking runs of deployments from within a flow, allowing subflows to be created.
We are planning to eventually add a submit interface to flows allowing non-blocking calls without requiring a separate deployment

@micklaw I think you have a couple of options at your disposal. I'll try to address each of the concerns that you raise, but please let me know if I missed any.

Given in v2 the related method Databricks submit method jobs_runs_submit_and_wait_for_completion is now a flow, we are unable to do jobs_runs_submit_and_wait_for_completion.submit(wait_for=[...)].

Flows can be made to wait for task completion by passing in a future from a task to the flow. This may or may not be possible in your case, but it's a useful tool to have in your tool belt. The submit method that @madkinsz referenced would also allow for full support for task/flow dependency managment in the future.

If I make the jobs_runs_submit_and_wait_for_completion method a task and remove all @task attributes from the REST client I can make this work as it did in v1, but without it I do not see a way of dynamically setting the dependencies of a subflow.

You can use the underlying functionality of the tasks that we've created using the .fn() method. This will run the underlying function directly without any Prefect task features and can be called inside a task. You could create a custom task that uses multiple of these calls if necessary. We don't recommend that pattern because any API failure could cause all the Databricks API calls to run again and trigger multiple runs if an idempotency key isn't used.

You can use async subflows and gather to run them concurrently. There are some cases where this fails that we're hoping to address soon.

Hey, yeah this was initially my idea to collate all of the async responses and attempt to check they were all completed prior to submitting the main flow using asyncio.gather, but this did feel cubersome and almost feels like Im working against the principles of Prefect.
But I subequently ran in to an error where it stated 'cloudick could not pickle coroutines' or something along those lines. Not being a native Python developer, this was where I had to admit I needed further reading.

Flows can be made to wait for task completion by passing in a future from a task to the flow. This may or may not be possible in your case, but it's a useful tool to have in your tool belt. The submit method that @madkinsz referenced would also allow for full support for task/flow dependency management in the future.

I'm thinking thi is whats required before I'll continue down this road. One observation is that the flow used here for obs_runs_submit_and_wait_for_completion is async, but there are no examples in the official v2 documentation of using an async flow, plenty of async tasks, but no flows. I think this is where the serialising issue I mentioned above has come in to play.

I'll sort the feedback on this PR, and park our v2 upgrade until the .submit(wait_for=[]) is available on flows.
Thanks for your help on this, it is much appreciated

I've implemented the feedback on this PR, and am going to park our v2 upgrade until the .submit(wait_for=[]) is available on flows.

If you don't want to wait for .submit to be available on flows here's how you could create a trigger and wait task using the existing tasks in this collection:
import asyncio
from logging import Logger
from typing import Any, Dict, List

from prefect import task, get_run_logger

from prefect_databricks import DatabricksCredentials
from prefect_databricks.jobs import (
    jobs_runs_get,
    jobs_runs_get_output,
    jobs_runs_submit,
)
from prefect_databricks.models.jobs import (
    AccessControlRequest,
    GitSource,
    RunLifeCycleState,
    RunResultState,
    RunSubmitTaskSettings,
)

class DatabricksJobTerminated(Exception):
    """Raised when Databricks jobs runs submit terminates"""

    pass

class DatabricksJobSkipped(Exception):
    """Raised when Databricks jobs runs submit skips"""

    pass

class DatabricksJobInternalError(Exception):
    """Raised when Databricks jobs runs submit encounters internal error"""

    pass

class DatabricksJobRunTimedOut(Exception):
    """
    Raised when Databricks jobs runs does not complete in the configured max
    wait seconds
    """

    pass

@task(
    name="Submit jobs runs and wait for completion",
    description="Triggers a Databricks jobs runs and waits for the"
    "triggered runs to complete.",
)
async def jobs_runs_submit_and_wait_for_completion(
    databricks_credentials: DatabricksCredentials,
    tasks: List[RunSubmitTaskSettings] = None,
    run_name: str = None,
    max_wait_seconds: int = 900,
    poll_frequency_seconds: int = 10,
    git_source: GitSource = None,
    timeout_seconds: int = None,
    idempotency_token: str = None,
    access_control_list: List[AccessControlRequest] = None,
    **jobs_runs_submit_kwargs: Dict[str, Any],
) -> Dict:
    logger = get_run_logger()

    multi_task_jobs_runs = await jobs_runs_submit.fn(
        databricks_credentials=databricks_credentials,
        tasks=tasks,
        run_name=run_name,
        git_source=git_source,
        timeout_seconds=timeout_seconds,
        idempotency_token=idempotency_token,
        access_control_list=access_control_list
    )
    multi_task_jobs_runs_id = multi_task_jobs_runs["run_id"]

    seconds_waited_for_run_completion = 0

    job_status_info = {}
    task_status_info = {}

    while seconds_waited_for_run_completion <= max_wait_seconds:
        jobs_runs_metadata = await jobs_runs_get.fn(
            run_id=multi_task_jobs_runs_id,
            databricks_credentials=databricks_credentials
        )
        jobs_runs_run_id = jobs_runs_metadata.get("run_id", "")
        jobs_runs_run_page_url = jobs_runs_metadata.get("run_page_url", "")
        jobs_runs_state = jobs_runs_metadata["state"]

        __log_state(
            job_status_info,
            jobs_runs_run_id,
            jobs_runs_state,
            jobs_runs_run_page_url,
            logger,
            False,
        )

        jobs_runs_tasks = jobs_runs_metadata.get("tasks", [])

        for runs_task in jobs_runs_tasks:
            task_run_id = runs_task.get("run_id", "")
            task_run_page_url = runs_task.get("run_page_url", "")
            task_runs_state = runs_task.get("state", {})

            __log_state(
                task_status_info,
                task_run_id,
                task_runs_state,
                task_run_page_url,
                logger,
            )

        jobs_runs_life_cycle_state = jobs_runs_state["life_cycle_state"]
        jobs_runs_state_message = jobs_runs_state["state_message"]

        if jobs_runs_life_cycle_state == RunLifeCycleState.terminated.value:
            jobs_runs_result_state = jobs_runs_state.get("result_state", None)
            if jobs_runs_result_state == RunResultState.success.value:
                task_notebook_outputs = {}
                for task in jobs_runs_metadata["tasks"]:
                    task_key = task["task_key"]
                    task_run_id = task["run_id"]
                    task_run_output = await jobs_runs_get_output.fn(
                        run_id=task_run_id,
                        databricks_credentials=databricks_credentials
                    )
                    task_run_notebook_output = task_run_output.get(
                        "notebook_output", {}
                    )
                    task_notebook_outputs[task_key] = task_run_notebook_output
                logger.info(
                    "Databricks Jobs Runs Submit (%s ID %s) completed successfully!",
                    run_name,
                    multi_task_jobs_runs_id,
                )
                return task_notebook_outputs
            else:
                raise DatabricksJobTerminated(
                    f"Databricks Jobs Runs Submit "
                    f"({run_name} ID {multi_task_jobs_runs_id}) "
                    f"terminated with result state, {jobs_runs_result_state}: "
                    f"{jobs_runs_state_message}"
                )
        elif jobs_runs_life_cycle_state == RunLifeCycleState.skipped.value:
            raise DatabricksJobSkipped(
                f"Databricks Jobs Runs Submit ({run_name} ID "
                f"{multi_task_jobs_runs_id}) was skipped: {jobs_runs_state_message}.",
            )
        elif jobs_runs_life_cycle_state == RunLifeCycleState.internalerror.value:
            raise DatabricksJobInternalError(
                f"Databricks Jobs Runs Submit ({run_name} ID "
                f"{multi_task_jobs_runs_id}) "
                f"encountered an internal error: {jobs_runs_state_message}.",
            )
        else:
            logger.info("Waiting for %s seconds.", poll_frequency_seconds)
            await asyncio.sleep(poll_frequency_seconds)
            seconds_waited_for_run_completion += poll_frequency_seconds

    raise DatabricksJobRunTimedOut(
        f"Max wait time of {max_wait_seconds} seconds exceeded while waiting "
        f"for job run ({run_name} ID {multi_task_jobs_runs_id})"
    )

It's almost exactly the same as the flow version, but with an extra .fn() call on each of the tasks imported from prefect_databricks.jobs. It's very important to pass an idempotency_token to this task to avoid triggering multiple Databricks job runs, but I think this will fit your usecase.


Added Mozilla Firefox version 116.0.

[x] Have you signed the Contributor License Agreement?
[x] Have you checked that there aren't other open pull requests for the same manifest update/change?
[x] This PR only modifies one (1) manifest
[x] Have you validated your manifest locally with winget validate --manifest <path>?

[x] Does your manifest conform to the 1.4 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: codeflow:open?pullrequest=https://github.com/microsoft/winget-pkgs/pull/114361&drop=dogfoodAlpha

@wingetbot run

@wingetbot run

/azp run

Manual Validation:

en-US-x64-wix-machine - Pending
en-US-x64-exe-machine - Pending
en-US-x64-exe-user - Pending
en-US-x86-wix-machine - Pending
en-US-x86-exe-machine - Pending
en-US-x86-exe-user - Pending
en-US-arm64-exe-machine - Pending
en-US-arm64-exe-user - Pending
zh-CN-x64-wix-machine - Pending
zh-CN-x64-exe-machine - Pending
zh-CN-x86-wix-machine - Pending
zh-CN-x86-exe-machine - Pending
zh-CN-arm64-exe-machine - Pending
en-GB-x64-wix-machine - Pending
en-GB-x64-exe-machine - Pending
en-GB-x86-wix-machine - Pending
en-GB-x86-exe-machine - Pending
en-GB-arm64-exe-machine - Pending
ru-RU-x64-wix-machine - Pending
ru-RU-x64-exe-machine - Pending
ru-RU-x86-wix-machine - Pending
ru-RU-x86-exe-machine - Pending
ru-RU-arm64-exe-machine - Pending
de-DE-x64-wix-machine - Pending
de-DE-x64-exe-machine - Pending
de-DE-x86-wix-machine - Pending
de-DE-x86-exe-machine - Pending
de-DE-arm64-exe-machine - Pending
el-GR-x64-wix-machine - Pending
el-GR-x64-exe-machine - Pending
el-GR-x86-wix-machine - Pending
el-GR-x86-exe-machine - Pending
el-GR-arm64-exe-machine - Pending
ja-JP-x64-wix-machine - Pending
ja-JP-x64-exe-machine - Pending
ja-JP-x86-wix-machine - Pending
ja-JP-x86-exe-machine - Pending
ja-JP-arm64-exe-machine - Pending
es-ES-x64-wix-machine - Pending
es-ES-x64-exe-machine - Pending
es-ES-x86-wix-machine - Pending
es-ES-x86-exe-machine - Pending
es-ES-arm64-exe-machine - Pending
es-MX-x64-wix-machine - Pending
es-MX-x64-exe-machine - Pending
es-MX-x86-wix-machine - Pending
es-MX-x86-exe-machine - Pending
es-MX-arm64-exe-machine - Pending
nb-NO-x64-wix-machine - Pending
nb-NO-x64-exe-machine - Pending
nb-NO-x86-wix-machine - Pending
nb-NO-x86-exe-machine - Pending
nb-NO-arm64-exe-machine - Pending
Architecture: x64-msix - Pending
Architecture: x86-msix - Pending
fr-FR-x64-wix-machine - Pending
fr-FR-x64-exe-machine - Pending
fr-FR-x86-wix-machine - Pending
fr-FR-x86-exe-machine - Pending
fr-FR-arm64-exe-machine - Pending
ta-IN-x64-wix-machine - Pending
ta-IN-x64-exe-machine - Pending
ta-IN-x86-wix-machine - Pending
ta-IN-x86-exe-machine - Pending
ta-IN-arm64-exe-machine - Pending

/azp run

/azp run

/azp run

/azp run


'CryptographyDeprecationWarning' message appears while using spacectl

Messages below appears every spacectl commands
> spacectl api-resources /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/jose/backends/cryptography_backend.py:23: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead from cryptography.utils import int_from_bytes, int_to_bytes
May be some libraries need to be upgraded.

Hi. @gikang82
This problem is a package version issue of crpytography and will be solved by updating the dependencies of spacectl.


[WIP][1/N] Chunked Prefill

WIP. RFC link: https://github.com/vllm-project/vllm/issues/3130

Is the goal of this PR and #3121 not the same?

There is already an attention kernel context_attention_fwd in vLLM that covers the case of prefill with kv cache. It was originally created for Manual Prefix Caching (and will be used for Automatic Prefix Caching as well). I have not looked too much into the implementation of context_attention_fwd (so I'm not sure of the performance relative to the flash attention implementation), but just wanted to make sure you were aware

Yes! I am aware of this. I think it must be possible to use this kernel as well, but our internal benchmark shows it is pretty slow actually (I don't know much detail here though).

Thanks @rkooo567

After trying with the provided code, I think the implementation is not completely finished and it still leaves some bugs.

@zhr2001 actually this is stale. did you try https://github.com/vllm-project/vllm/pull/3884#issuecomment-2041306314?

I have tried.It's excellent, thanks for your contribution.
However, I just got result 7.09it/s for benchmark_serving, while without chunkedprefill the result was 3.44it/s within llama-13B,A40,tp2, max-num-batched-token and sonnet data-set.I wonder how to get the following result in the picture below.

@zhr2001 I am starting the benchmark from tomorrow. Btw, what does 7.09it/s for benchmark_serving mean (does it mean it is better or worse)? I am not familiar with this benchmark
For the result above, it is the result with our internal repo (the implementation is almost the same, but our repo has cuda-graph for prefill whereas OSS currently doesn't have it). The environment is basically sending a requests with similar length with a certain QPS


Duplicate NIGP codes

@shellicious @hamhands looks like there are some exactly duplicates even inside the same parent categories. This needs to be fixed.

For example: lines 9 & 10
02000	Agricultural equipment and parts	Backhoe (For Farm Tractor) | Brush and Tree Chippers | Brush Cutters and Saws, Motor Driven | Counters, Acre | Cultivating Equipment, Farm: Go-Devils, Row Type Shovel Cultivators, Tooth and Spring Harrows, etc. | Curb Edger, Heavy Duty, Tractor Mounted | Cutters and Shredders (Mowers), Heavy Duty, Flail: Tow Type and/or Center Mount Type | Cutters and Shredders (Mowers), Heavy Duty, Reel and Rotary: Tow Type and/or Center Mount Type | Dozer Blades (For Farm Tractors) | Drying Equipment, Grain | Ensilage Cutters | Farm Wagons | Feed Mills and Mixers | Feed Wagons | Fertilizer Applicators and Fittings, Liquid and Gas | Fertilizer Distributors, Dry, Commercial (See Class 515 for Lawn Type Distributors) | Garden Tractors, Cultivators, and Plows | Gang Mowers, Reel Type, Towed | Grain Bins and Tanks | Grading Machines for Seeds, Grains and Dried Vegetables | Grass Seed Strippers and Cleaners | Grass Spriggers and Seeders | Grinding Mills: Seed, Grain, Dried Vegetable | Harvesting Equipment: Bean, Corn, and Pea Pickers and Shellers, Combines, Cotton and Fruit Pickers, Headers, Sled Cutters and Threshers | Haying Equipment: Balers, Dryers, Elevators and Rakes, etc. | Herbicide, Insecticide and Fungicide Applicators and Distributors | Irrigation Equipment and Supplies, Agricultural | Land Levelers | Loaders, Tractor Mounted, Farm | Log Splitters | Manure Spreaders | Mower, Articulated Boom: Flail, Rotary, or Sickle Head | Mower (Steep Slope Type with Cutter Head on Telescoping Boom): Flail, Rotary, or Sickle Bar Cutter Heads, For Mounting on Tractors or Trucks (See Class 515 for Lawn Type Mowers) | Mower, Tractor Mounted (Steep Slope Type with Cutter Head on Telescoping Boom): Flail, Rotary, or Sickle Bar Cutter Heads (See Class 515 for Lawn Type Mowers) | Mower-Tractor Unit or Self-Propelled Mower, for Slope Mowing (See Class 515 for Lawn Type Mowers) | Mower, Center Mounted; and Tractor (See Class 515 for Lawn Type Mowers) | Pasture Renovators | Planting Equipment, Broadcasting | Planting Equipment, Drilling | Planting Equipment, Row Crop | Processing Machinery and Equipment, Agricultural | Posthole Diggers, Tractor Mounted | Protection Structures, Rollover (ROPS) | Pulverizers and Rotary Tillers, Soil | Recycled Agricultural Equipment Accessories and Supplies | Rock Pickers and Rakes | Rodent Control Equipment, Tractor Operated | Spade, Tree (Truck or Trailer Mounted, or Three-Point Hook-Up for Tractor Mounting) and other Tree Transplanting and Diggers | Sweeps and other Steel Shapes | Soil Mixers and Samplers | Terracing Equipment | Tillage Equipment, Heavy Duty, Farm: Blade Plows, Disc Harrows, Listers, Rotary Hoes, Tool Bars, etc. | Tractors, Farm, Wheel Type | Tree and Root Cutters and Stump Grinders, Tractor Mounted | Tree Girdlers and Timber Tongs | Umbrellas, Tractor | Unloaders and Elevators, Grain | Wedge, Steel, Tree Felling and Splitting	AGRICULTURAL EQUIPMENT, IMPLEMENTS, AND ACCESSORIES (SEE CLASS 022 FOR PARTS)	Business services
02000	Agricultural equipment and parts	Backhoe (For Farm Tractor) | Brush and Tree Chippers | Brush Cutters and Saws, Motor Driven | Counters, Acre | Cultivating Equipment, Farm: Go-Devils, Row Type Shovel Cultivators, Tooth and Spring Harrows, etc. | Curb Edger, Heavy Duty, Tractor Mounted | Cutters and Shredders (Mowers), Heavy Duty, Flail: Tow Type and/or Center Mount Type | Cutters and Shredders (Mowers), Heavy Duty, Reel and Rotary: Tow Type and/or Center Mount Type | Dozer Blades (For Farm Tractors) | Drying Equipment, Grain | Ensilage Cutters | Farm Wagons | Feed Mills and Mixers | Feed Wagons | Fertilizer Applicators and Fittings, Liquid and Gas | Fertilizer Distributors, Dry, Commercial (See Class 515 for Lawn Type Distributors) | Garden Tractors, Cultivators, and Plows | Gang Mowers, Reel Type, Towed | Grain Bins and Tanks | Grading Machines for Seeds, Grains and Dried Vegetables | Grass Seed Strippers and Cleaners | Grass Spriggers and Seeders | Grinding Mills: Seed, Grain, Dried Vegetable | Harvesting Equipment: Bean, Corn, and Pea Pickers and Shellers, Combines, Cotton and Fruit Pickers, Headers, Sled Cutters and Threshers | Haying Equipment: Balers, Dryers, Elevators and Rakes, etc. | Herbicide, Insecticide and Fungicide Applicators and Distributors | Irrigation Equipment and Supplies, Agricultural | Land Levelers | Loaders, Tractor Mounted, Farm | Log Splitters | Manure Spreaders | Mower, Articulated Boom: Flail, Rotary, or Sickle Head | Mower (Steep Slope Type with Cutter Head on Telescoping Boom): Flail, Rotary, or Sickle Bar Cutter Heads, For Mounting on Tractors or Trucks (See Class 515 for Lawn Type Mowers) | Mower, Tractor Mounted (Steep Slope Type with Cutter Head on Telescoping Boom): Flail, Rotary, or Sickle Bar Cutter Heads (See Class 515 for Lawn Type Mowers) | Mower-Tractor Unit or Self-Propelled Mower, for Slope Mowing (See Class 515 for Lawn Type Mowers) | Mower, Center Mounted; and Tractor (See Class 515 for Lawn Type Mowers) | Pasture Renovators | Planting Equipment, Broadcasting | Planting Equipment, Drilling | Planting Equipment, Row Crop | Processing Machinery and Equipment, Agricultural | Posthole Diggers, Tractor Mounted | Protection Structures, Rollover (ROPS) | Pulverizers and Rotary Tillers, Soil | Recycled Agricultural Equipment Accessories and Supplies | Rock Pickers and Rakes | Rodent Control Equipment, Tractor Operated | Spade, Tree (Truck or Trailer Mounted, or Three-Point Hook-Up for Tractor Mounting) and other Tree Transplanting and Diggers | Sweeps and other Steel Shapes | Soil Mixers and Samplers | Terracing Equipment | Tillage Equipment, Heavy Duty, Farm: Blade Plows, Disc Harrows, Listers, Rotary Hoes, Tool Bars, etc. | Tractors, Farm, Wheel Type | Tree and Root Cutters and Stump Grinders, Tractor Mounted | Tree Girdlers and Timber Tongs | Umbrellas, Tractor | Unloaders and Elevators, Grain | Wedge, Steel, Tree Felling and Splitting	AGRICULTURAL EQUIPMENT, IMPLEMENTS, AND ACCESSORIES (SEE CLASS 022 FOR PARTS)	Business services

@bsmithgall so those aren't business services. Something got messed up. Let me try to fix this.

@bsmithgall LGTM. Should we update the file date though?

There are still duplicate codes (Slim found medical supplies)

@bsmithgall ugh hospital and surgical supplies. Doing another scan through rn.