Title remains empty when 'Show Page Name in Header' option is off and header option style is fixed

Current Behavior
In Dashboard 1.0 you could set a Title text of the Dashboard on the Site Tab.
In 2.0 you can set a name in the settings, which never appears.
If you set 'Show Page Name in Header' option and use the default Header Options Style 'Default' the page name is shown but the header remains empty if the option is off.
If you use a fixed sidebar you either show redundant page names in the side bar and the header or nothing.
Expected Behavior
Ability to decide to show Dashboard name when 'Show Page Name in Header option' is off.
If you decide to use 'Header Options' style Fixed and disable 'Show Page Name in Header' option  AND you set a Dashboard name then that name should appear in the header.
Steps To Reproduce
Turn off the 'Show Page Name in Header' option and set Header Options style to Default or fixed.
Environment

Dashboard version: 1.20.0
Node-RED version: 4.0.5
Node.js version:
npm version:
Platform/OS: raspberry pi bookworm
Browser: FireFox

Have you provided an initial effort estimate for this issue?
I am not a FlowFuse team member

@MaWa53,
To be honest I have not really used those settings myself.  So perhaps my proposal below is not entirely usable.  But let's give it a try...
So currently you have an option to show the page name in the header or not:

When the page name is not displayed, you want to see the dashboard name (instead of an empty header).  From your description I 'understand' that the dashboard should determine - based on all a series of settings - whether the page name or dashboard name should be displayed in the header.  Is that correct?
But wouldn't it be more flexible if the user could tell the dashboard which content needs to be displayed inside the header.  For example by replacing the checkbox by a dropdown, like in the following mockup:

Remark for myself: if the dropdown would be sufficient to solve this issue, some migration logic should be added for existing nodes (which currently contain the checkbox option).
Bart

@joepavitt,
I don't quite understand where the pageTitle (see here) property value is being set?  I don't see it anywhere...
Thanks for illuminating me!

But wouldn't it be more flexible if the user could tell the dashboard which content needs to be displayed inside the header.

Love this. Much clearer, and fixes the UX confusion experienced here.
For pageTitle, I'm away from keyboard today, so wouldn't be able to give you a concrete answer unfortunately. @Steve-Mcl may be able to advise

@bartbutenaers
your proposal is certainly better than mine.
You can set a dashboard name (for what ever purpose it exists today) and decide whether to show it as title in the header (if you use a header) or not.
It is very improbable that the page name remains empty because of its use in the sidebar, so you don't need any automatism if you use the page name option.  Although IMHO I would enforce page names.
Well, finally you may think of a fourth option: Dashboard name + page name . This could be usefull if you use an iconized sidebar.
You can thereby always recognize what dashboard and what page is currently displayed.
I e.g. use several raspi based sensors in my house for temperature, humidity, air pressure and CO2 plus air quality (organic vapors).
So I can load one or more dashboards for easy comparison of values and their history graphs.

It is very improbable that the page name remains empty because of its use in the sidebar, so you don't need any automatism if you use the page name option. Although IMHO I would enforce page names.

We have many users that don't want to show the page names, and often it's to replace it with custom content, which you can do with a Template Node, e.g. placing company logos there for branding purposes.

You can set a dashboard name (for what ever purpose it exists today)

This is used as the Application name when you install your Dashboard as an app on iOS/Android.

@joepavitt

This is used as the Application name when you install your Dashboard as an app on iOS/Android.

Thank you for the clarification.


Combination PermanentDrawer > FullWidthTabs > SimpleTable breaks the style

I have stumbled on a weird bug when placing a SimpleTable component inside FullWidthTabs (changed from your default 500px to 100% width) inside the main content area of any kind of drawer component scenario. i have tried many combinations and it is ONLY the table inside the swipeable tabs at full width inside a drawer.

[ x] I have searched the issues of this repository and believe that this is not a duplicate.

Expected Behavior

I expect all content inside the main content area to only ever take up as much space as the screen allows.
Current Behavior

The content inside the main content area extends far past the right side of the screen. this only occurs once the tabs > table combo is placed inside the main content area of a drawer... The tabs > table combo works just fine without the drawer.
Steps to Reproduce (for bugs)

I put together a codesandbox at https://codesandbox.io/s/k94pq84n1o using nothing but your documentation demos, all I changed was the width of the tabs from 500px to 100%, upon entering you will see the working tabs > table combo

in the index.js file change the root element to  (or )
You will see the tabs and table suddenly stretch far beyond the edge of the screen, as if each tab container takes up the full width of all three containers combined
If you remove all but one tab container, you will see that a single tab container width is the proper width
If you replace  with  you will see that other full width content clearly functions properly.
also in the drawer, if you change  to  the problem goes away and the tabs function normally, illustrating that this is clearly an issue between your drawer and react-swipeable-views, but ONLY when there is a table involved, haha.

Hopefully this is thourough enough to explain my issue, I tried playing around with it in the sandbox but was not able to get that specific combo to work. in my app for now I will just settle for the non-swipeable non-animated tabs, but it would really be nice to be able to have that functionality.
Thanks!

@cworf Thanks for submitting the issue, would you mind fixing your codesandbox so it runs?

Weird, this was running when I saved it, I have no idea what is going on here. Its saying im not giving it a component but I clearly am. any ideas? sorry im relatively new to this.

@cworf Let us know when the codesandbox is fixed :). We can't help until then.

@oliviertassinari Hello. It looks like I've reproduced this error.
Here is the link: https://codesandbox.io/s/material-demo-forked-l479u?file=/demo.js
When the drawer is open, the tabs ignores the width of the drawer and as a result, a horizontal scroll appears on the page.
If the screen is 1000 pixels wide, the drawer is 100 pixels, then the tabs will be 1000 pixels wide instead of 900.

@nApTu3aHs Thanks for the reproduction. I would propose this fix:
diff --git a/docs/src/pages/components/drawers/ResponsiveDrawer.tsx b/docs/src/pages/components/drawers/ResponsiveDrawer.tsx
index 6a339e0b43..c0a2e4d080 100644
--- a/docs/src/pages/components/drawers/ResponsiveDrawer.tsx
+++ b/docs/src/pages/components/drawers/ResponsiveDrawer.tsx
@@ -120,7 +120,10 @@ export default function ResponsiveDrawer(props: Props) {
           {drawer}
         </Drawer>
       </Box>
-      <Box component="main" sx={{ flexGrow: 1, p: 3 }}>
+      <Box
+        component="main"
+        sx={{ flexGrow: 1, p: 3, width: { sm: `calc(100% - ${drawerWidth}px)` } }}
+      >
         <Toolbar />
         <Typography paragraph>
           Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod

Do you want to work on a pull request? :)

Thanks for the answer.
I tried your solution.
Maybe I didn't understand something, but it doesn't work exactly as I expected.
I recorded a short video explaining the problem:
https://www.youtube.com/watch?v=nevWI49kjw8
Or is it supposed to work this way?

@nApTu3aHs I don't understand, what's the issue in your recording?

@oliviertassinari The horizontal scrolling at the beginning of the video is not removed when adding "width: calc (100% -100px);"
The horizontal scroll is removed only by adding "width: calc (100% -100px);" to the  component (top level site component) (at the end of the video)

@nApTu3aHs Ok, so we are good, https://github.com/mui-org/material-ui/issues/10740#issuecomment-847156299 applies the width on the <main> element.

@oliviertassinari The problem is not which component is being used.
If I wrap  in  instead of  (like in the last video), the horizontal scrolling problem remains.
Here's a video (wrap Tabs directly in main):
https://youtu.be/AzTbvs1pqwg

The problem is not which component is being used.
If I wrap  in  instead of  (like in the last video), the horizontal scrolling problem remains.
Here's a video (wrap Tabs directly in main):
https://youtu.be/AzTbvs1pqwg

The problem is not which component is being used.
If I wrap Tabs in main instead of Grid (like in the last video), the horizontal scrolling problem remains.
Here's a video (wrap Tabs directly in main):
https://youtu.be/AzTbvs1pqwg

@nApTu3aHs Then please provide a new minimal reproduction, the issue seems fixed with the proposed patch in https://codesandbox.io/s/material-demo-forked-utgji?file=/demo.js.

@oliviertassinari Oh sorry. I was wrong. Your solution actually works. Thanks for your patience and time.


Standardise files with files in sous-chefs/repo-management

Signed-off-by: Dan Webb<EMAIL_ADDRESS>

Released as: 6.0.2


PP-6957 MOTO services - allow masking of card numbers and security codes

Update charge template and controller

When gateway account has moto_mask_card_number_input=true/false or moto_mask_card_security_code_input=true/false
Then change the card number or security code input to become password fields.

Create new Cypress test

I thought autocomplete="off" would be the best option - as it is more explicit. Even though the browser password manager may override this setting for <input type="password">


availability-prober: add wait for cluster infrastructure resource

Fixes an issue in CI where the CNO starts before the cluster Infrastructure resource is available.

/lgtm
/retest-required

/hold cancel
/retest-required

/retest-required


How to render /devise/registrations/edit

This is more wiki issue. Maybe someone can explain how. Is it possible to render devise/registration/edit to settings#password.
All I can find on google is by change password controller, but it doesn't work as registrations/edit. So can someone explain how to use method 1 on https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-password
Why this is so confused btw?

Added Option 1 - Use the registerable module to wiki. Damn, took me one day to figure out.

All the options there are overly complicated. People should stop hacking around Devise and just create their own controllers.

Is this DRY. I mean if something exist why not just use it.


Update validation of isAtomicalId function

Update the isAtomicalId function to enhance its validation process and ensure a return value is included in the catch block.

Thank you!


Resize cluster worker nodes

We can use r5.xlarge instances, instead of r5.2xlarge, thereby saving $5,000/month in unnecessary hosting costs.

This has been done.


Call to a member function getTranslatedAttribute() on null

Version information

Laravel: v5.8.*
Voyager: v^1.2
PHP: ^7.1.3
Database: [MySQL 8.0)

Description

After correcting a known BUG for the admin menu, there´s two pages witch shows this error:
Call to a member function getTranslatedAttribute() on null
Expected behavior
An admin page should render
Screenshots
/var/www/html/primorossi/primorossi/vendor/tcg/voyager/src/Http/Controllers/VoyagerBaseController.php
    {
        // GET THE SLUG, ex. 'posts', 'pages', etc.
        $slug = $this->getSlug($request);

        // GET THE DataType based on the slug
        $dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();

        // Check permission
        $this->authorize('browse', app($dataType->model_name));

        $getter = $dataType->server_side ? 'paginate' : 'get';

        $search = (object) ['value' => $request->get('s'), 'key' => $request->get('key'), 'filter' => $request->get('filter')];

        $searchNames = [];
        if ($dataType->server_side) {
            $searchable = array_keys(SchemaManager::describeTable(app($dataType->model_name)->getTable())->toArray());
            $dataRow = Voyager::model('DataRow')->whereDataTypeId($dataType->id)->get();
            foreach ($searchable as $key => $value) {
                $displayName = $dataRow->where('field', $value)->first()->getTranslatedAttribute('display_name');
                $searchNames[$value] = $displayName ?: ucwords(str_replace('_', ' ', $value));
            }
        }

Additional context
Can´t figure it out...

Hi, I had the same problem, to correct I went to the bread and rewrote one of the translations I had done earlier, so it seems to me that the problem is that when translating the fields in the bread there can be a mismatch between the amount of translations and quantity of fields in the table.

Ok, but this does not solve the problem. My database has a lot of tables after all. Imagin searching wich was the last one I´ve changed or translated.
Still can´t figure it out...

I encounter this issue in case-sensitive databases. For example, if I have a column platformContentId:
On line 50:
$searchable = array_keys(SchemaManager::describeTable(app($dataType->model_name)->getTable())->toArray());
SchemaManager::describeTable() returns a Collection. Each of its items use array keys which are the lowered column name.

As $searchable is just the array_keys, which do not actually match the column's 'name', line 53 fails as it attempts to run first() on a query which is searching for 'platformcontentid' instead of 'platformContentId'.
This can be easily solved by changing toArray() to pluck('name') in line 50. Existing:
$searchable = array_keys(SchemaManager::describeTable(app($dataType->model_name)->getTable())->toArray());
Proposed:
$searchable = SchemaManager::describeTable(app($dataType->model_name)->getTable())->pluck('name');
Your problem may have a different cause but I hope this helps.

@marcellopato go to Tools->BREAD edit and save the BREAD that had fields removed in db, that will remove all data_rows that are not used anymore for that BREAD.

@PrimoRossi

After correcting a known BUG for the admin menu, there´s two pages witch shows this error:

Which pages?
I think that, other than what @voxlunch said for columns that are not lower case, this problem happens when you add a field in a table and then don't update BREAD configuration.
In that case the needed data_row is not created and $dataRow->where('field', $value)->first() returns null.
Manual solution
After adding or deleting a field in a table managed with BREAD go save again BREAD settings.

This happens to me when i select the server side pagination in my BREAD configuration (which i need because i have a lot of records), if i disable server side pagination, all works fine. I tried saving and deleting / recreating BREAD but nothing change, the error still persist. Any solutions?
Laravel: 5.8.*
Voyager: 1.2
PHP: 7.2.10

@oriolcabau that's because the error happens when it tries to get translated labels for search that is only available when server side mode is enabled.
If you don't have a field with uppercase letters you should be able to solve reading my previous comments.

It happens when server-side pagination in on. That´s a fact.
Turn it off and the bug disappears.

This bug happens at vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php line 811.
The line referenced above breaks Voyager bread when column name contains uppercase characters

@damms005 that only lower case keys not column names.
The problem with uppercase columns is explained and fixed by @voxlunch

Fixed in https://github.com/the-control-group/voyager/pull/4442 (to be released in 1.3)

For those that don't understand, when you have the BREAD in Voyager and your Mysql database! check if the order is the same. like a example: Id - form_id - data - mailto - ip_address. if this has a different order is mysql! like id - data - form_id ........ you get that error.


Qodot will not load in Godot beta 16

latest Qodot release won't load in Gv4.0.beta16.mono.official [518b9e580]. OS is windows 10 64 bit. Attached is console log output of errors

Since you originally posted this in the qodot 3 plugin issues, can I double check you are using the C# version of the plugin found in this repository and not the old one?
Also, do you have the dotNet sdk installed as is specified next to the mono build download?

This issue should be addressed by #15


kubectl port-forward for service with explicit local port broken in v1.18.0-beta.1

Hey guys,
in v1.18.0-beta.1 kubectl ignores the local port when creating a port-forward to a service.
When forwarding traffic directly from a pod everything works as expected.
Versions
Client Version: version.Info{Major:"1", Minor:"18+", GitVersion:"v1.18.0-beta.1", GitCommit:"f2d7577e31829664899f1b8e3d3a73de8c5f4029", GitTreeState:"clean", BuildDate:"2020-02-26T12:44:15Z", GoVersion:"go1.13.6", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0", GitCommit:"70132b0f130acc0bed193d9ba59dd186f0e634cf", GitTreeState:"clean", BuildDate:"2019-12-07T21:12:17Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}

Steps to reproduce
kubectl port-forward -n infra svc/test-svc 3000:8080
Forwarding from <IP_ADDRESS>:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

So I think this is what you were saying, but I confirmed, this appears to be a new bug introduced in 1.18.0.
Steps I followed to reproduce:
kubectl run nginx --image=nginx --port=80
kubectl expose deploy nginx --port=8080
kubectl port-forward svc/nginx 3000:8080

Output using 1.17.3 client:
Forwarding from <IP_ADDRESS>:3000 -> 8080
Forwarding from [::1]:3000 -> 8080

Output using 1.18.0-rc.1 client:
Forwarding from <IP_ADDRESS>:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

/sig cli
/area kubectl
/kind bug

Reproduced as well with latest from release-1.18 branch
Client Version: version.Info{Major:"1", Minor:"18+", GitVersion:"v1.18.0-rc.1.16+99dada0b9771c2", GitCommit:"99dada0b9771c2416ca3bc41c4dcf6814fc228d9", GitTreeState:"clean", BuildDate:"2020-03-24T01:14:07Z", GoVersion:"go1.13.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18+", GitVersion:"v1.18.0-rc.1.16+99dada0b9771c2", GitCommit:"99dada0b9771c2416ca3bc41c4dcf6814fc228d9", GitTreeState:"clean", BuildDate:"2020-03-24T01:19:42Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}

Same exact behavior as described above.
Thank you so much @mariusziemke for finding this! And thank you @brianpursley for looking into it as well.
/priority critical-urgent
/milestone v1.18
I am inclined to say that this issue is release blocking as the regression was introduced while working in the 1.18.0 release.

/milestone v1.18


error in dependency build.gradle

when is use dependency in my build.gradle
compile 'com.wdullaer:materialdatetimepicker:3.3.0'
i am getting error

how do i fix this please

As of v26.x.x, the support library is no longer supplied as a download in android studio, but made available through a google hosted maven repository.
https://developer.android.com/topic/libraries/support-library/setup.html#add-library
You'll need to add the following to your application's build.gradle file
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}

maven {
     url "https://maven.google.com"
 }

after add this line of code, I get this error-

(I am using Clean Project and Rebuild Project - but nothing happen)

Good, it is now loading the support library from the google maven repository.
If you read the error message, you'll see that it says that you are trying to load two different versions of the support library (and therefore, it doesn't know which one to pick).
If you look in the FAQ of this library, you'll see how to fix that:
https://github.com/wdullaer/MaterialDateTimePicker#how-do-i-use-a-different-version-of-the-support-library-in-my-app

I create a brand new project and add this library according to FAQ. I appear new problem now.

This library also depends on support.design which you have not declared in your top level dependencies.
Please take a closer look at how gradle version management works
https://docs.gradle.org/current/userguide/dependency_management.html#sub:version_conflicts

Thank you @wdullaer  for your answer. I resolve that error just compile 'com.android.support:appcompat-v7:26.0.1' instead of compile 'com.android.support:appcompat-v7:26.+'.


P3 DEMO: Move Correlation Plot & Confusion Matrix to tabs

Move Correlation Plot & Confusion Matrix to tabs.
Currently buttons below the heat map update the graph:

Move the options to be accessible via tabs:

GE will implement in the demo as needed. Can be closed.

Re-opening, closed on accident (still need QA to verify fix).


[Bug]: The Gemini model streaming interface doesn't work as expected.

Bug Description
When using the new gemini llm interface with a query_engine or a chat_engine, the response is always None if it is streamed.
For the query engine, a none is returned on all queries. for the chat engine, an parsing error is thrown:
Version
0.9.15.post2
Steps to Reproduce
Just run a query engine or a chat engine with gemini as the llm and llm = Gemini()
service_context = ServiceContext.from_defaults(llm=llm) and ensure that the engine is set to stream.
Relevant Logs/Tracbacks
##Query engine response for gemini with openai_embedding as the embed_model:

INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"

INFO:httpx:HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.openai.com/v1/embeddings "HTTP/1.1 200 OK"

Time taken: 14.811168895015726 seconds

None response is printed on the terminal.

##Chat engine:
/lib/python3.10/site-packages/llama_index/chat_engine/types.py", line 157, in response_gen
    self._unformatted_response += delta
TypeError: can only concatenate str (not "NoneType") to str

cc @logan-markewich on it.
I noticed a similar issue. now trying to check with Gemini side.

Some query can give error

Some query can give good results:

@markmcd do you know how to resolve  this issue?

@hatianzhang, from my experiments, a dumped chat with Gemini works pretty reliably. I haven't encountered any case where the model has had an issue giving a reasonable response. But on streaming, the model just returns Nones.
The .query() and the .chat() methods may be of a lower priority than the .stream_chat() and the .query(streaming=True) methods since those don't work at all.

@gich2009 stream_chat and stream_complete works me from the this example https://github.com/run-llama/llama_index/blob/main/docs/examples/llm/gemini.ipynb

Could you provide me some example where stream_chat does not work

btw Gemini should have some rate limit. Is it bc rate limiting or do you have any error log?

Hi @hatianzhang I think its because I'm using response.response_gen method. Is that no longer supported?

Here is the log @hatianzhang

Just upgraded to 0.9.16.post2 and gemini still doesn't work with response.response_gen.

thanks @gich2009 that is potentially the reason. could you first do this way
    print(chunk.message.content, end="")

we will figure out why response.response_gen not working for gemini

Thank you @hatianzhang. I will tentatively do that as I wait for the fix.

@gich2009 could you help check the issue has been fixed?

On it @hatianzhang. Will respond shortly

Hi @hatianzhang, I tested the fix on v0.9.17. It's not broken anymore. The streaming behaviour is a bit different from other models. The chunks are much longer than usual but other than that it works very well. Thanks for the fix. I'll keep an eye on it.

Hi @hatianzhang. After running a couple of test rounds, I have noticed an issue. I am on v0.9.19 Please check the chat engine behavior for a non-streaming/dumped response for a gemini service context. The behavior is inconsistent and on certain occasions, the following exception is raised:

Please note that this issue doesn't happen all the time. It occurs after a few test cycles and works well in the rest of the cases.
On the other hand, the streaming behavior is consistent and stable so far

@logan-markewich, would you prefer to tentatively reopen the issue or should I create a new issue and refer to #9549

@gich2009 I think this issue need to be addressed/understood from Gemini side. I encountered it before and we need to know why Gemini stop generate results. could be due to different reasons. at this point, I don't llamaindex side can do anything

Hi @hatianzhang. Understood. The behaviour is as consistent as we can get it for now. Thanks again!
I'll keep testing the other LLM integrations to see how well their response_gen properties work.


[SR-14277] Build error referencing RawValue.Stride for C imported enum

Previous ID
SR-14277

Radar
rdar://problem/74794074

Original Reporter
lhunath (JIRA User)

Type
Bug

Environment
Swift 5.3

Additional Detail from JIRA

Votes
0

Component/s
Compiler

Labels
Bug

Assignee
None

Priority
Medium

md5: a81833ca13b773dcb09510610bc2d844

Issue Description:
The following enum:
typedef NS_ENUM( uint32_t, Letter ) {
    a,
    b,
};

Causes the following code to fail in the compiler:
extension Letter: Strideable {
    public func distance(to other: Self) -> RawValue.Stride {
        self.rawValue.distance( to: other.rawValue )
    }

    public func advanced(by n: RawValue.Stride) -> Self {
        Self( rawValue: self.rawValue.advanced( by: n ) )!
    }
}

With the following error:
<unknown>:0: error: circular reference

However, if we replace the imported type with a native equivalent:
enum Letter : UInt32 {
    case a, b
}

The error goes away.
It is unclear what is supposedly circular about the code in question.
The error can also be avoided by changing this:
    public func distance(to other: Self) -> RawValue.Stride {

into this:
    public func distance(to other: Self) -> Int {

Suggesting the issue is with the resolution of Self.Stride

No longer reproduces, I'm adding a regression test.


Obfuscating user names from discussions

It would be great to obfuscate user names from prompts sent to remote servers and translate responses back. E.g. if a discussion on a github issue contains "Robert" or "haesleinhuepf", we could replace it with "User1" and "User2" - or "Julia123" and "Peter232" . After we retrieved the response back from the LLM, we can translate this back. Therefore, we need three functions:

A function in _utilities.py that generates a list of randomish usernames. The function has one parameter: number_of_names to be generated.
A function that takes a text, and a repository name and an issue number. Using the github-api it retrieves the user names of all users that contributed to the discussion. It uses the function described above to replace the real user names with the randomish names. It also keeps the association between real username and the randomish names in a dictionary. It returns the pseudonymized text and the dictionary.
A function that brings the original names back after a prompt_function has been called. It takes a text as input and the dictionary created above.

The function in 2. should be called after modify_discussion has been called in _ai_github_utilities.py . The function in 3. should be called after the prompt_function has been called.
git-bob comment on how to implement these three functions.

Modify the function pseudonymize_text so that it does not use contributors in the repository, but users mentioned with an "@" in the text and user names from all comments on the issue. Use the github python APPI for this.
git-bob comment on how to achieve this.

Was done in bb87e3cac2abc87b6e35ca4049445cba68eec207


I need a GUI for this algorithm

Please provide me gui for this project and also include the no of variables to be entered
Please help me fast

@vivek1117 I created this program just for fun in my spare time. Currently I don't have time to implement the GUI for this program. Maybe, in future I might do it if I get time. You can implement the GUI yourself using Tk or Qt framework. The calculations are pretty straightforward and the final result is stored in "final_result" variable as a list.


Correctly handle inner sourcemap on writeFileContent

Correctly handle sourcemaps with column !== 0
Correctly handle path to source (it should be relative to currently processed file)

@blond

:up:

:ok:


Wrong testnet URL

https://github.com/iov-one/iov-core/blob/master/packages/iov-core/README.md contains wrong link to testnet (https://bov.friendnet-fast.iov.one/). It shows "Server not found" error.

Here is a list of our testnets: https://github.com/iov-one/ops/wiki/Testnet-list
Everything referring to friendnet should be updated


Error generating PROPERTIES - new CEA version

There seems to be a problem when I try to run the PROPERTIES on the CEA.
I get the following error:
Executing: PropertiesTool C:\Users\aelesawy\Documents\GitHub\CEAforArcGIS\test\reference-case\feature-classes\building_age.shp C:\Users\aelesawy\Documents\GitHub\CEAforArcGIS\test\reference-case\feature-classes\building_occupancy.shp true true true C:\Users\aelesawy\Documents\GitHub\CEAforArcGIS\test\Results
Start Time: Mon Apr 04 16:24:30 2016
Running script PropertiesTool...
Traceback (most recent call last):
File "C:\Users\aelesawy\Documents\GitHub\CEAforArcGIS\cea\toolbox.py", line 79, in execute
prop_HVAC_flag=prop_HVAC_flag.value, gv=gv)
TypeError: properties() got an unexpected keyword argument 'path_age'
Failed to execute (PropertiesTool).
Failed at Mon Apr 04 16:24:31 2016 (Elapsed Time: 0.06 seconds)

bug went away magically after reinstalling. must have been a configuration issue.


update action triggers

ADO-67126
Description
List of proposed changes:

Update workflow triggers to match CI/CD plan
Update load trigger to workflow_dispatch (as it's always failing, but can still be manually triggered)

What to test for/How to test
Additional Notes

Expecting to close this in place of #27 if approved


Finish name resolution

The resolver introduced in https://github.com/zetah11/zippy/commit/ef207545523bd7c4218f7a859e56cf2c5f6e37e7 is a good starting point, but quite lacking in actual features. Notably, there's no namespacing, multi-file support, or whole-program name-to-def info.

[ ] #6
[ ] Scope info (mostly just simple conversions from the decl pass)
[ ] Multiple files

[ ] Folder-wide modules

[ ] Flatten hierarchies (probably a job for the typing pass?)
[ ] Deuglify scopes

Scopes no longer need to use recursive scope ids for root scopes (https://github.com/zetah11/zippy/commit/8bd6ae280e1cb961e0d31f4933c1582f3a0c064f)


remove mermaid chart

This PR removes the mermaid chart.

@b00f Why remove mermaid?

@Ja7ad Please check again


[RFC] Create Anypoint MQ protocol and bindings

In trying to create AsyncAPI documents that assume Anypoint MQ as the message broker, It became apparent that this is not possible without binding objects for a new protocol for that broker.
I request anypointmq to be added to the list of protocols in AsyncAPI, and corresponding binding objects to be defined and added to https://github.com/asyncapi/bindings. These binding objects should describe, among other things:

how to connect to an AnypointMQ broker instance using the server object
how to use AnypointMQ queues (FIFO or not) and exchanges as channels
how to use AnypointMQ message specifics like user properties, message ID, et.

Development of the requested bindings has been started in https://github.com/integrational/asyncapi-bindings and a PR will be sent once sufficiently progressed.

will submit a minimal PR shortly

This issue is addressed by these 2 PRs:

against the spec repo: https://github.com/asyncapi/spec/pull/545
against the bindings repo: https://github.com/asyncapi/bindings/pull/63

This PR https://github.com/asyncapi/asyncapi-node/pull/67 covers the addition of the anypointmq protocol to the AsyncAPI JSON schema

For reference: the AsyncAPI team has rejected the need for anypointmq as a protocol because the interaction with the Anypoint MQ broker is based on HTTP (for which a protocol already exists). I think this rejection stems from a basic disagreement about the purpose of a "protocol" in AsyncAPI. See https://github.com/asyncapi/bindings/pull/63#issuecomment-868270505

@GeraldLoeffler the PR is not closed without merge, thus it is not rejected 😉 it is in progress

@GeraldLoeffler do you continue this one?

@GeraldLoeffler do you continue this one?

as far as i'm aware @derberg this is complete in all its aspects: it just needs merging (into the spec and bindings repos).

PR in the binding repo is still not merged, there are some comments form my side

PR in the binding repo is still not merged, there are some comments form my side

oh i see - i thought this had been accepted weeks/months ago. I'll review your comments and incorporate them if possible.

PR in the binding repo is still not merged, there are some comments form my side

done

@GeraldLoeffler we are almost there. PR on binding repo is perfect. PR here in spec repo needs minor change (left comment) and we are missing PR to change JSON Schema, PR against 2021-09-release branch in https://github.com/asyncapi/spec-json-schemas. You can have a look on PR from Dale on IBM MQ binding to see how this should be changed so we see in PR only specific changes (you will need to create new JSON Schema file for new 2.2.0 version, this will be first commit, and then in the 2nd commit add new binding please)

@GeraldLoeffler we are almost there. PR on binding repo is perfect. PR here in spec repo needs minor change (left comment) and we are missing PR to change JSON Schema, PR against 2021-09-release branch in https://github.com/asyncapi/spec-json-schemas. You can have a look on PR from Dale on IBM MQ binding to see how this should be changed so we see in PR only specific changes (you will need to create new JSON Schema file for new 2.2.0 version, this will be first commit, and then in the 2nd commit add new binding please)

i think i've now done all that @derberg . See https://github.com/asyncapi/spec-json-schemas/pull/90 for the JSON Schema PR, and also note the strange files that appeared in that PR (https://github.com/asyncapi/spec-json-schemas/pull/90#issuecomment-911820959).

note the strange files that appeared in that PR (asyncapi/spec-json-schemas#90 (comment)).

all cleaned-up, all ready: i assume this will go into 2.2.0?

@GeraldLoeffler Is there anything left to do for this issue or do you think it's okay to close?

that's been implemented @dalelane and i wasn't aware that there was this issue left open: please close it. Thank you.

@derberg can you close, please? (I don't have the power 😁)


Memory leak on long-running ttop UI

procfs collection in loop causes memory-leak. Probably reason of the memory leak: https://github.com/nim-lang/Nim/issues/22398

should be closed here https://github.com/inv2004/ttop/commit/f0bc9c5663ca7aff679127d3340c77d0133ebe34


wrong CRC on EHVX08S26CB9W model

Hi everyone, I'm having some issues to figure out what's the problem with my pump.... I followed all instructions I found here but the best i can achieve is from "Timeout" to "Wrong CRC on registry ...." I'm not good at programming, so the best I managed to do is to put on mqtt also the message "Calculated 0xff but got 0x 0"; I think the serial connection is working but the protocol is not correct.
Does someone have some suggestions? Thanks a lot.

Well, can you give more information? Photos how its connected to the X10A port and your ESP32. Are you using a M5StickC? Can you post the display output?

Thanks @munzili.
@mauromorello Most probably, this is a communication error. Please check all you wires expetially the GND - GND connection. Even if you connected your M5 with a USB powersupply, you need to additionally connect the GND of the M5 to the GND of the Heat pump.

OK, thanks a lot and sorry for my delay;

I'm using a LOLIN32 for this project so I don't have display information

I use the altherma +4,7V to power LOLIN32, by the battery connector, and i check that the - contact is connected to GND on the board

If I run without TX and RX connected my MQTT message is a "TIME OUT"

when I connect TX and RX i have the CRC failure message

I'm not a PRO but I try putting the calculated CRC value also in MQTT log, and I see that that CRC is 0, as if try to communicate but without understand what my Altherma is saying.
Before go deeper and trying to connect with Daikin software maybe someone have some other suggestion
thanks a lot (espacially @raomin for this useful project)

SOLVED;
i Write here just because of this weird behavior;
it was basically my fault, i used a damaged dupont connector on RX side; it was touching/nontouching the pin and this drived me crazy. When I change wires everything starts to work.
thank you all


Ticking Crash...Player?

https://pastebin.com/Fg5F2Zsq

Neruina cannot handle ticking player exceptions in single player worlds. This appears to be caused by LambdaDynamicLights

ok so what should i do? I really want to use Ars Noveau. Should I delete it?


Tooltip info need for Latency table headings in Routes

Expected Behavior
For sake of argument, I don't necessarily know what "Latency 50%" means. I expect to be able to hover the table heading and see a tooltip explaining precisely what it means.
Actual Behavior
Hovering the table heading shows no additional info
Specifications

Version: 1.0.1
Platform: macOS
Subsystem: Safari

Good idea! For the record, latency 50% is basically the average latency of the 50% percentile (this approximates the median latency) and latency 99% is the average latency for the slowest 1% of responses. This is the "tail latency," and it's considered by many to be the most important latency metric.

This is good and this is good information.  These are important statistics to show on the dashboard as well, especially Avg. latency and Tail latency.


feat: revokeTrustedManagerPermission method for sc

added frevokeTrustedManagerPermission method

@samvel33651 can you please add a test for this method somewhere in this describe


Lost messages, since only most recent message is kept

I am using the library to receive a stream of image messages and occasional string messages (on the same device name) and observed that some of the string message do not arrive at my client.
One can easily reproduce this by sending a larger image while sending string messages with counter values. The observation is that the counter values sent during image message transmit are lost. i.e. never arrive at the client through get_lastest_messages(..)  or wait_for_message(...).
Reviewing the code, the reason for this behavior is, that only the last message per device is stored in the incoming_messages dict.
I verified the messages actually arrive via the socket, but are then overwritten in comm.py line 141 over and over again before they are collected via get_lastest_messages(...)  or wait_for_message(...).
The general question is, whether the lib should be able to support queuing of message or stay with the implicit message skipping it has now.
If message queues should be supported, a solution could be to extend the dict to store lists of messages per device or even a list of messages independent of device.
-On get_lastest_messages(...) these could be flattened to a list of messages,
-On wait_for_message(...) this would, however, potentially change the return value from a message to a list of messages.
Also the lib would then need a mechanism to prevent overflow if the messages are never collected. e.g. a max queue size.

OpenIGTLink messages are typically used for state updates, therefore obsolete states are ignored, therefore the current behavior is desirable.
However, OpenIGTLink messages could be used as commands and then it may be required that all messages are preserved, for example in a queue. Therefore, I agree that it could be useful to add API to collect all messages.


[HUDI-7032] ShowProcedures show add limit syntax

Change Logs
like ShowArchivedCommitsProcedure both contains limit to aviod to much status return to user，keep other commands contains it
Impact
none
Risk level (write none, low medium or high below)
none
Documentation Update
Describe any necessary documentation update if there is any new feature, config, or user-facing change

The config description must be updated if new configs are added or the default value of the configs are changed
Any new feature or user-facing change requires updating the Hudi website. Please create a Jira ticket, attach the
ticket number here and follow the instruction to make
changes to the website.

Contributor's checklist

[ ] Read through contributor's guide
[ ] Change Logs and Impact were stated clearly
[ ] Adequate tests were added if applicable
[ ] CI passed

cc @danny0405

@xuzifu666 Please remember also to update the doc of the website.

@xuzifu666 Please remember also to update the doc of the website.

ok，I would add it to websit doc @danny0405


OAuthPrompt popup is not showing for login in MS-Teams.

I have use OAuthPrompt card to login user for bot authentication. It is working in Emulator but when i test in Teams then pop-up is not showing to login. It is working before 10 Sep 2024.
Chatbot is build using Azure bot framework(node.js). node modules botbuilder-dialogs(^4.18.0) – OauthPrompt with service provider(Azure Active Directory v2, Azure Active Directory) used for login purpose. OAuthPrompt “Sign In” button not displaying on Teams channel.
FYI, OAuthPrompt “Sign In” button displaying on Webchat channel.
Tried sample codes still same issue with sample code as well.
https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/javascript_nodejs/18.bot-authentication
https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/nodejs
Sample code:
return await stepContext.beginDialog(OAUTH_PROMPT);
Screenshot: Teams

Tried this still not working:
https://github.com/microsoft/BotBuilder-Samples/issues/1739

Same issue reported once again: https://github.com/OfficeDev/microsoft-teams-library-js/issues/2510

This is a Teams issue.  I believe a fix is in progress.

The fix was rolled out and should be resolved.  Reopen if not.


chore(master): release 1.4.0

:robot: I have created a release beep boop
1.4.0 (2023-07-02)
Features

allow http traffic (fd2080a)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/wayofdev/docker-nginx/releases/tag/v1.4.0 :sunflower:


RSP-1258 initial version of the provider docs

Closes https://jira.corp.adobe.com/browse/RSP-1258
📝 Test Instructions:
Review provider docs
🧢 Your Team:
RSP

Can you address Rob's comment about changing tsx -> tsx example
& did you try removing source data since Ross' earlier PR made it default to an array already?


This release is compliant with the Google Play 64-bit requirement

Starting August 1, 2019, your apps published on Google Play will need to support 64-bit architectures. 64-bit CPUs deliver faster, richer experiences for your users. Adding a 64-bit version of your app provides performance improvements, makes way for future innovation, and sets you up for devices with 64-bit-only hardware.
This guide explains the steps you can take today in order to ensure that your 32-bit app is ready to support 64-bit devices.
https://developer.android.com/distribute/best-practices/develop/64-bit

@ArjunRJ Thanks! for reporting. I have created following follow up story for it.
https://openedx.atlassian.net/browse/LEARNER-7399

@ArjunRJ Closing the issue as our app already supports 64-bit architecture.
https://github.com/edx/edx-app-android/pull/1327#issuecomment-546898828


Now also breaks with caddy 2.0.0

Running the instructed commands
xcaddy build v2.0.0 \
    --with github.com/abiosoft/caddy-json-schema

./caddy json-schema -vscode

results in a panic
panic: qtls.ClientSessionState not compatible with tls.ClientSessionState

goroutine 1 [running]:
github.com/lucas-clemente/quic-go/internal/handshake.init.2()
	github.com/lucas-clemente/quic-go@v0.15.3/internal/handshake/unsafe.go:26 +0x205

do you mean caddy 2.0.0?

Yes sorry

Can you try again with the latest version?
xcaddy build v2.4.1 \
    --with github.com/abiosoft/caddy-json-schema

Awesome! It all seems to be working now. Thanks!


Wishlist: Implementing reddit live access

Hi,
it would be nice to implement a way to access content from a live thread between, e.g. all content created between two timestamps.
Getting a list of updates for live threads is documented here.

Thanks for filing @methodds. For your information my focus will be on getting PRAW4 feature complete with PRAW 3.4 in order to release it -- I'm nearly there, and anticipate a release in early January.
Anyone reading this who would like to attempt to implement this feature request, take a look here:
https://github.com/praw-dev/praw/blob/84744f23a4bf133696cfa3f6625ef30799212222/praw/models/reddit/live.py

I'm trying to implement reddit ilve features to PRAW4. If possible, I'll post a prototype here in a few days.

Here is my attempt as a progress report:  nmtake/praw@e147a37
Usage:
>>> import praw
prawr = praw.Reddit(...)
>>> thread = r.live.thread("ukaeu1ik4sw5")
>>> for update in thread.updates(): print(update)
...
LiveUpdate_352556c0-97d2-11e6-aa34-0e0d983a7ee7
LiveUpdate_e7d43f56-7a14-11e6-a368-0e18b019564b
LiveUpdate_fefb3dae-7534-11e6-b259-0ef8c7233633
...
>>>

If the commit is on a right track, I'll split the commit, add docstrings and tests, then send multiple PR.  I'd appriciatee any suggestions.

@nmtake that looks like a great start.
To make things easier, can you split into pull requests that addresses only a single new API endpoint? That way I can work with you on the complete end-to-end delivery, including tests and changelog update, for each action. I'd suggest we work on getting one completely in before making additional PRs just incase there is a bit of refactoring to do with that first one (unless you're very comfortable using git rebase).
Thanks for diving into that!

@bboe side note, before you had said that PRAW would not support streaming from live threads, but is that a final decision? I can understand not wanting it to be part of the main package, but what about as a an extra (pip install praw -e reddit-live_streaming with the dependancy being https://github.com/liris/websocket-client/)?

The praw package should not support it. Rather than an addon adding complexity to this project, I would prefer a separate package. A praw-live package would be awesome.
With that PRAW should not depend on such a package, but its documentation could contain a reference to the other package.
Is that something you'd like to work on and maintain? If so, I can create the repo and give you access to it.

@methodds

it would be nice to implement a way to access content from a live thread between, e.g. all content created between two timestamps.

Can you try https://gist.github.com/nmtake/00ac92989024f21b37aca60f2aa08184 with current PRAW4 + Python3? (Some Unicode Exception may raise if you are using Python2)

thx @nmtake for the code. It seems to work for me and produces the following output:
fetched updates posted in 2016 (timezone: Asia/Tokyo)
[2016-12-21 09:00:14] fruchtose On mobile web, GIFs hosted be Reddit wil
[2016-10-22 06:06:17] wting [OpenSearch](http://www.opensearch.org/C
[2016-09-14 09:48:08] MiamiZ Logged users coming in with a search ref
[2016-09-08 04:55:15] therealandytuba Added "PM via reddit" button to the "sha
[2016-07-23 06:51:34] spladug We're gonna be posting some infrastructu
[2016-07-19 01:49:13] umbrae Thanks to /u/yoshokatana, we now have su
[2016-07-12 03:42:01] Deimorz As a moderator, hovering over an approva
[2016-06-21 04:59:16] MiamiZ Deleting preview object after a link is
[2016-06-16 09:17:56] toasties Receiving message notifications (oranger
[2016-05-05 02:32:15] thephilthe When a post has been distinguished, the
[2016-05-03 02:53:07] Deimorz Fixed a bug related to the previous stic
[2016-04-29 03:45:46] Deimorz Just made a minor change to how the "is
[2016-04-21 02:37:58] MiamiZ Don't allow users without gold to create
[2016-03-31 06:11:17] powerlanguage We made some changes to our media previe
[2016-03-31 06:07:19] lev To improve security, we’ve added IP addr
[2016-03-29 07:00:11] madlee Made some tweaks to our media scraper:
[2016-03-16 08:10:36] sam_test Two minor updates:

-Removed utm tags fr
[2016-03-03 07:08:17] tdohz Fixed a small bug where "unread" and "us
[2016-02-18 13:20:03] powerlanguage We've made some changes to our media pre
[2016-02-11 06:43:08] Deimorz I've just decoupled the "all" spam-filte
[2016-02-11 05:17:16] tdohz Two minor updates:

* in mod tools: "lin
[2016-02-11 05:07:14] MiamiZ Not translating the gold message since i
[2016-02-11 05:06:35] MiamiZ Not showing some flat list buttons for d
[2016-02-10 06:38:22] nr4madas On m.reddit.com: A new dropdown style (f
[2016-01-26 10:33:38] tdohz Subreddit rules are now [available for a
[2016-01-26 04:57:05] MiamiZ Reporting on /subreddits/new with a blan
[2016-01-26 04:56:34] MiamiZ There was a [bug](https://www.reddit.com
[2016-01-26 04:55:22] MiamiZ Previously, if a mod made any changes to
[2016-01-23 06:00:01] Deimorz redd.it shortlinks (and the reddit.com/<
[2016-01-13 08:24:46] MiamiZ Updated Reddit Gold subscription PM word
[2016-01-13 08:11:54] Deimorz The list of default subreddits in the to
[2016-01-12 02:52:27] umbrae Sticky comments no longer have their sco
[2016-01-07 07:50:00] MiamiZ Suspended users can't edit their comment

@methodds  Thanks for trying the code. Please tell me if something went wrong.

The only thing I had to change was the code related to session`` because I do not have a prag.ini``` on the test pc. Other than that everything worked without any problems :)

@nmtake with the latest PR merged (thanks!), what all is left to do, if anything?

Here is the checklist:

[x] POST /api/live/create - LiveHelper.create()
[ ] GET  /api/live/happening_now
[ ] POST /api/live/thread/accept_contributor_invite
[ ] POST /api/live/thread/close_thread
[ ] POST /api/live/thread/delete_update
[ ] POST /api/live/thread/edit
[x] POST /api/live/thread/invite_contributor - LiveContributorRelationship.invite()
[x] POST /api/live/thread/leave_contributor - LiveContributorRelationship.leave()
[ ] POST /api/live/thread/report
[x] POST /api/live/thread/rm_contributor - LiveContributtorRelationship.remove()
[x] POST /api/live/thread/rm_contributor_invite - LiveContributorRelationship.remove_invite()
[ ] POST /api/live/thread/set_contributor_permissions
[ ] POST /api/live/thread/strike_update
[x] POST /api/live/thread/update - LiveThreadContribution.add()
[x] GET  /live/thread - LiveThread.updates()
[x] GET  /live/thread/about - RedditBase._fetch()
[x] GET /live/thread/contributors - LiveContributorRelationship.__call__()
[ ] GET /live/thread/discussions

So 9 endpoints are left.

Thanks for the checklist.

As of #734 is merged, all live thread endpoints are covered. So this issues may be closed.

Awesome, thanks for this :)

Fanstastic work @nmtake! I'll make a release sometime in the next two days.


Core Feature Updates

Major format cleanup for core structure.
Added about/biography
Added yearly post archive

Approved


[FLINK-35266][snapshot] Add E2E tests for FlinkStateSnapshot

What is the purpose of the change
Add end-to-end tests for the FlinkStateSnapshot resources.
Brief change log

Trigger savepoint by creating a new FlinkStateSnapshot savepoint CR
Trigger savepoint by using savepoint trigger nonce
Trigger checkpoint by using trigger nonce
Test periodic savepoints triggered by the operator
Change job to upgrade mode, suspend job and assert new FlinkStateSnapshot CR created

Verifying this change

Manually ran
Pipeline passes

Does this pull request potentially affect one of the following parts:

Dependencies (does it add or upgrade a dependency): no
The public API, i.e., is any changes to the CustomResourceDescriptors: no
Core observer or reconciler logic that is regularly executed: no

Documentation

Does this pull request introduce a new feature? no
If yes, how is the feature documented? not applicable

I will push a fix in a few minutes for the failures, sorry.

This PR needs to be updated since a recent change on main


A request for Time picker component

You think it may be useful to add these three attributes
data-hours-step
data-minutes-step
data-seconds-step
to the time picker component?
For example with
<INPUT data-role="timepicker" data-minutes-step="5" />
will be displayed only the values 0, 5, 10, 15 and so on for the minutes.
Greetings

Added to TODO for 4.2.10

Many thank's!

Many thank's!

In 4.2.15 (release on July 25, 2018)

Great job Olton!
Thank's!


[AutoDiff upstream] Upstream attribute type-checking changes.

Support @differentiable and @derivative attributes for original
initializers in final classes. Reject original initializers in non-final
classes. https://github.com/apple/swift/pull/29757
Synchronize tests.

@swift-ci Please smoke test


Problem with cftime coordinates on sequence_dim

In #47, @naomi-henderson reported that cftime-based time coordinates did not work with her recipe. (Details in this notebook.
The error occurs on prepare_target. Some relevant traceback is:
---------------------------------------------------------------------------
OutOfBoundsDatetime                       Traceback (most recent call last)
/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in decode_cf_datetime(num_dates, units, calendar, use_cftime)
    193         try:
--> 194             dates = _decode_datetime_with_pandas(flat_num_dates, units, calendar)
    195         except (KeyError, OutOfBoundsDatetime, OverflowError):

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_datetime_with_pandas(flat_num_dates, units, calendar)
    141             "Cannot decode times from a non-standard calendar, {!r}, using "
--> 142             "pandas.".format(calendar)
    143         )

OutOfBoundsDatetime: Cannot decode times from a non-standard calendar, 'noleap', using pandas.

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_cf_datetime_dtype(data, units, calendar, use_cftime)
    112     try:
--> 113         result = decode_cf_datetime(example_value, units, calendar, use_cftime)
    114     except Exception:

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in decode_cf_datetime(num_dates, units, calendar, use_cftime)
    196             dates = _decode_datetime_with_cftime(
--> 197                 flat_num_dates.astype(float), units, calendar
    198             )

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_datetime_with_cftime(num_dates, units, calendar)
    133     return np.asarray(
--> 134         cftime.num2date(num_dates, units, calendar, only_use_cftime_datetimes=True)
    135     )

src/cftime/_cftime.pyx in cftime._cftime.num2date()

TypeError: unsupported operand type(s) for +: 'cftime._cftime.DatetimeNoLeap' and 'NoneType'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-47-9bb7712f434d> in <module>
      1 # put basic info in target directory
----> 2 recipe.prepare_target()

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/pangeo_forge/recipe.py in _prepare_target()
    166
    167             try:
--> 168                 ds = self.open_target()
    169                 logger.info("Found an existing dataset in target")
    170                 logger.debug(f"{ds}")

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/pangeo_forge/recipe.py in open_target(self)
    271     def open_target(self):
    272         target_mapper = self.target.get_mapper()
--> 273         return xr.open_zarr(target_mapper)
    274
    275     def initialize_target(self, ds, **expand_dims):

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/zarr.py in open_zarr(store, group, synchronizer, chunks, decode_cf, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, consolidated, overwrite_encoded_chunks, chunk_store, decode_timedelta, use_cftime, **kwargs)
    686         backend_kwargs=backend_kwargs,
    687         decode_timedelta=decode_timedelta,
--> 688         use_cftime=use_cftime,
    689     )
    690

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/api.py in open_dataset(filename_or_obj, group, decode_cf, mask_and_scale, decode_times, autoclose, concat_characters, decode_coords, engine, chunks, lock, cache, drop_variables, backend_kwargs, use_cftime, decode_timedelta)
    573
    574     with close_on_error(store):
--> 575         ds = maybe_decode_store(store, chunks)
    576
    577     # Ensure source filename always stored in dataset object (GH issue #2550)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/api.py in maybe_decode_store(store, chunks)
    477             drop_variables=drop_variables,
    478             use_cftime=use_cftime,
--> 479             decode_timedelta=decode_timedelta,
    480         )
    481

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/conventions.py in decode_cf(obj, concat_characters, mask_and_scale, decode_times, decode_coords, drop_variables, use_cftime, decode_timedelta)
    596         drop_variables=drop_variables,
    597         use_cftime=use_cftime,
--> 598         decode_timedelta=decode_timedelta,
    599     )
    600     ds = Dataset(vars, attrs=attrs)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/conventions.py in decode_cf_variables(variables, attributes, concat_characters, mask_and_scale, decode_times, decode_coords, drop_variables, use_cftime, decode_timedelta)
    498             stack_char_dim=stack_char_dim,
    499             use_cftime=use_cftime,
--> 500             decode_timedelta=decode_timedelta,
    501         )
    502         if decode_coords:

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/conventions.py in decode_cf_variable(name, var, concat_characters, mask_and_scale, decode_times, decode_endianness, stack_char_dim, use_cftime, decode_timedelta)
    338         var = times.CFTimedeltaCoder().decode(var, name=name)
    339     if decode_times:
--> 340         var = times.CFDatetimeCoder(use_cftime=use_cftime).decode(var, name=name)
    341
    342     dimensions, data, attributes, encoding = variables.unpack_for_decoding(var)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in decode(self, variable, name)
    461             units = pop_to(attrs, encoding, "units")
    462             calendar = pop_to(attrs, encoding, "calendar")
--> 463             dtype = _decode_cf_datetime_dtype(data, units, calendar, self.use_cftime)
    464             transform = partial(
    465                 decode_cf_datetime,

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_cf_datetime_dtype(data, units, calendar, use_cftime)
    121             "if it is not installed."
    122         )
--> 123         raise ValueError(msg)
    124     else:
    125         dtype = getattr(result, "dtype", np.dtype("object"))

ValueError: unable to decode time units 'hours since 0001-01-16 12:00:00.000000' with "calendar 'noleap'". Try open

Examining this closely, it looks like there is already a dataset in the target, but it can't be opened. This makes it hard to debug. The notebook has been run non-sequentially, making it hard to debug. @naomi-henderson, it would be great if you could turn this into a reproducible example we can use to get the the bottom of the cftime issue.

Okay, here is my cftime trouble example.
This seems to be a tricky bug - which only shows up under certain conditions.  For simplicity, I am considering the case of one chunk per netcdf file and only two netcdf files.  The simplest case of a single netcdf file being converted into a single chunk of zarr is handled correctly with cftime. I needed to make an example with at least two netcdf files, even though the error shows up when storing the very first chunk/file.
For my own sanity, I found out that I can make this notebook work properly, generating an acceptable zarr store, with a minor edit of .../xarray/coding/times.py, adding 'noleap' to:
_STANDARD_CALENDARS = {"standard", "gregorian", "proleptic_gregorian"}
but this might not be a proper fix, as it might cause problems elsewhere ...
@rabernat, I have also noticed that, despite an indication to the contrary when printing out the recipe:
NetCDFtoZarrSequentialRecipe(sequence_dim='time', inputs_per_chunk=1, nitems_per_input=600, target=FSSpecTarget(fs=<fsspec.implementations.local.LocalFileSystem object at 0x7f17aa446a50>, root_path='/tmp/tmp37ghyji0'), input_cache=CacheFSSpecTarget(fs=<fsspec.implementations.local.LocalFileSystem object at 0x7f17aa446a50>, root_path='/tmp/tmpvna52uxv'), require_cache=True, consolidate_zarr=True, xarray_open_kwargs={'use_cftime': True}, xarray_concat_kwargs={}, delete_input_encoding=True)
there is no .zmetadata being saved - otherwize the zarr store looks fine.

Okay, here is my cftime trouble example.
This seems to be a tricky bug - which only shows up under certain conditions.  For simplicity, I am considering the case of one chunk per netcdf file and only two netcdf files.  The simplest case of a single netcdf file being converted into a single chunk of zarr is handled correctly with cftime. I needed to make an example with at least two netcdf files, even though the error shows up when storing the very first chunk/file.
For my own sanity, I found out that I can make this notebook work properly, generating an acceptable zarr store, with a minor edit of .../xarray/coding/times.py, adding 'noleap' to:
_STANDARD_CALENDARS = {"standard", "gregorian", "proleptic_gregorian"}
but this might not be a proper fix, as it might cause problems elsewhere ...
@rabernat, I have also noticed that, despite an indication to the contrary when printing out the recipe:
NetCDFtoZarrSequentialRecipe(sequence_dim='time', inputs_per_chunk=1, nitems_per_input=600, target=FSSpecTarget(fs=<fsspec.implementations.local.LocalFileSystem object at 0x7f17aa446a50>, root_path='/tmp/tmp37ghyji0'), input_cache=CacheFSSpecTarget(fs=<fsspec.implementations.local.LocalFileSystem object at 0x7f17aa446a50>, root_path='/tmp/tmpvna52uxv'), require_cache=True, consolidate_zarr=True, xarray_open_kwargs={'use_cftime': True}, xarray_concat_kwargs={}, delete_input_encoding=True)
there is no .zmetadata being saved - otherwize the zarr store looks fine.

I have a similar issue in the GPM IMERG recipe. For me recipe.prepare_target() works fine, the error is on store_chunk:
ValueError: unable to decode time units 'minutes since 2000-06-01 00:00:00.000000' with "calendar 'julian'". Try opening your dataset with decode_times=False or installing cftime if it is not installed.

I could share a notebook where it can be reproduced, but it needs my username/password and #59.

I have a similar issue in the GPM IMERG recipe. For me recipe.prepare_target() works fine, the error is on store_chunk:
ValueError: unable to decode time units 'minutes since 2000-06-01 00:00:00.000000' with "calendar 'julian'". Try opening your dataset with decode_times=False or installing cftime if it is not installed.

I could share a notebook where it can be reproduced, but it needs my username/password and #59.

@davidbrochart - do you have cftime installed?

@davidbrochart - do you have cftime installed?

Naomi's full traceback is

---------------------------------------------------------------------------
OutOfBoundsDatetime                       Traceback (most recent call last)
/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in decode_cf_datetime(num_dates, units, calendar, use_cftime)
    193         try:
--> 194             dates = _decode_datetime_with_pandas(flat_num_dates, units, calendar)
    195         except (KeyError, OutOfBoundsDatetime, OverflowError):

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_datetime_with_pandas(flat_num_dates, units, calendar)
    141             "Cannot decode times from a non-standard calendar, {!r}, using "
--> 142             "pandas.".format(calendar)
    143         )

OutOfBoundsDatetime: Cannot decode times from a non-standard calendar, 'noleap', using pandas.

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_cf_datetime_dtype(data, units, calendar, use_cftime)
    112     try:
--> 113         result = decode_cf_datetime(example_value, units, calendar, use_cftime)
    114     except Exception:

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in decode_cf_datetime(num_dates, units, calendar, use_cftime)
    196             dates = _decode_datetime_with_cftime(
--> 197                 flat_num_dates.astype(float), units, calendar
    198             )

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_datetime_with_cftime(num_dates, units, calendar)
    133     return np.asarray(
--> 134         cftime.num2date(num_dates, units, calendar, only_use_cftime_datetimes=True)
    135     )

src/cftime/_cftime.pyx in cftime._cftime.num2date()

TypeError: unsupported operand type(s) for +: 'cftime._cftime.DatetimeNoLeap' and 'NoneType'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-8-dd7bdaf49ef5> in <module>
      1 #from cftime import DatetimeNoLeap
      2 # store first chunk
----> 3 recipe.store_chunk(0)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/pangeo_forge/recipe.py in _store_chunk(chunk_key)
    209             write_region = self.region_for_chunk(chunk_key)
    210             logger.info(f"Storing chunk '{chunk_key}' to Zarr region {write_region}")
--> 211             ds_chunk.to_zarr(target_mapper, region=write_region)
    212
    213         return _store_chunk

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/core/dataset.py in to_zarr(self, store, chunk_store, mode, synchronizer, group, encoding, compute, consolidated, append_dim, region)
   1754             consolidated=consolidated,
   1755             append_dim=append_dim,
-> 1756             region=region,
   1757         )
   1758

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/api.py in to_zarr(dataset, store, chunk_store, mode, synchronizer, group, encoding, compute, consolidated, append_dim, region)
   1479     writer = ArrayWriter()
   1480     # TODO: figure out how to properly handle unlimited_dims
-> 1481     dump_to_store(dataset, zstore, writer, encoding=encoding)
   1482     writes = writer.sync(compute=compute)
   1483

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/api.py in dump_to_store(dataset, store, writer, encoder, encoding, unlimited_dims)
   1156         variables, attrs = encoder(variables, attrs)
   1157
-> 1158     store.store(variables, attrs, check_encoding, writer, unlimited_dims=unlimited_dims)
   1159
   1160

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/zarr.py in store(self, variables, attributes, check_encoding_set, writer, unlimited_dims)
    460             # there are variables to append
    461             # their encoding must be the same as in the store
--> 462             ds = open_zarr(self.ds.store, group=self.ds.path, chunks=None)
    463             variables_with_encoding = {}
    464             for vn in existing_variables:

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/zarr.py in open_zarr(store, group, synchronizer, chunks, decode_cf, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, consolidated, overwrite_encoded_chunks, chunk_store, decode_timedelta, use_cftime, **kwargs)
    686         backend_kwargs=backend_kwargs,
    687         decode_timedelta=decode_timedelta,
--> 688         use_cftime=use_cftime,
    689     )
    690

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/api.py in open_dataset(filename_or_obj, group, decode_cf, mask_and_scale, decode_times, autoclose, concat_characters, decode_coords, engine, chunks, lock, cache, drop_variables, backend_kwargs, use_cftime, decode_timedelta)
    573
    574     with close_on_error(store):
--> 575         ds = maybe_decode_store(store, chunks)
    576
    577     # Ensure source filename always stored in dataset object (GH issue #2550)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/api.py in maybe_decode_store(store, chunks)
    477             drop_variables=drop_variables,
    478             use_cftime=use_cftime,
--> 479             decode_timedelta=decode_timedelta,
    480         )
    481

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/conventions.py in decode_cf(obj, concat_characters, mask_and_scale, decode_times, decode_coords, drop_variables, use_cftime, decode_timedelta)
    596         drop_variables=drop_variables,
    597         use_cftime=use_cftime,
--> 598         decode_timedelta=decode_timedelta,
    599     )
    600     ds = Dataset(vars, attrs=attrs)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/conventions.py in decode_cf_variables(variables, attributes, concat_characters, mask_and_scale, decode_times, decode_coords, drop_variables, use_cftime, decode_timedelta)
    498             stack_char_dim=stack_char_dim,
    499             use_cftime=use_cftime,
--> 500             decode_timedelta=decode_timedelta,
    501         )
    502         if decode_coords:

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/conventions.py in decode_cf_variable(name, var, concat_characters, mask_and_scale, decode_times, decode_endianness, stack_char_dim, use_cftime, decode_timedelta)
    338         var = times.CFTimedeltaCoder().decode(var, name=name)
    339     if decode_times:
--> 340         var = times.CFDatetimeCoder(use_cftime=use_cftime).decode(var, name=name)
    341
    342     dimensions, data, attributes, encoding = variables.unpack_for_decoding(var)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in decode(self, variable, name)
    461             units = pop_to(attrs, encoding, "units")
    462             calendar = pop_to(attrs, encoding, "calendar")
--> 463             dtype = _decode_cf_datetime_dtype(data, units, calendar, self.use_cftime)
    464             transform = partial(
    465                 decode_cf_datetime,

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_cf_datetime_dtype(data, units, calendar, use_cftime)
    121             "if it is not installed."
    122         )
--> 123         raise ValueError(msg)
    124     else:
    125         dtype = getattr(result, "dtype", np.dtype("object"))

ValueError: unable to decode time units 'hours since 1850-01-15 12:00:00.000000' with "calendar 'noleap'". Try opening your dataset with decode_times=False or installing cftime if it is not installed.

Naomi's full traceback is

---------------------------------------------------------------------------
OutOfBoundsDatetime                       Traceback (most recent call last)
/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in decode_cf_datetime(num_dates, units, calendar, use_cftime)
    193         try:
--> 194             dates = _decode_datetime_with_pandas(flat_num_dates, units, calendar)
    195         except (KeyError, OutOfBoundsDatetime, OverflowError):

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_datetime_with_pandas(flat_num_dates, units, calendar)
    141             "Cannot decode times from a non-standard calendar, {!r}, using "
--> 142             "pandas.".format(calendar)
    143         )

OutOfBoundsDatetime: Cannot decode times from a non-standard calendar, 'noleap', using pandas.

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_cf_datetime_dtype(data, units, calendar, use_cftime)
    112     try:
--> 113         result = decode_cf_datetime(example_value, units, calendar, use_cftime)
    114     except Exception:

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in decode_cf_datetime(num_dates, units, calendar, use_cftime)
    196             dates = _decode_datetime_with_cftime(
--> 197                 flat_num_dates.astype(float), units, calendar
    198             )

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_datetime_with_cftime(num_dates, units, calendar)
    133     return np.asarray(
--> 134         cftime.num2date(num_dates, units, calendar, only_use_cftime_datetimes=True)
    135     )

src/cftime/_cftime.pyx in cftime._cftime.num2date()

TypeError: unsupported operand type(s) for +: 'cftime._cftime.DatetimeNoLeap' and 'NoneType'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-8-dd7bdaf49ef5> in <module>
      1 #from cftime import DatetimeNoLeap
      2 # store first chunk
----> 3 recipe.store_chunk(0)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/pangeo_forge/recipe.py in _store_chunk(chunk_key)
    209             write_region = self.region_for_chunk(chunk_key)
    210             logger.info(f"Storing chunk '{chunk_key}' to Zarr region {write_region}")
--> 211             ds_chunk.to_zarr(target_mapper, region=write_region)
    212
    213         return _store_chunk

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/core/dataset.py in to_zarr(self, store, chunk_store, mode, synchronizer, group, encoding, compute, consolidated, append_dim, region)
   1754             consolidated=consolidated,
   1755             append_dim=append_dim,
-> 1756             region=region,
   1757         )
   1758

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/api.py in to_zarr(dataset, store, chunk_store, mode, synchronizer, group, encoding, compute, consolidated, append_dim, region)
   1479     writer = ArrayWriter()
   1480     # TODO: figure out how to properly handle unlimited_dims
-> 1481     dump_to_store(dataset, zstore, writer, encoding=encoding)
   1482     writes = writer.sync(compute=compute)
   1483

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/api.py in dump_to_store(dataset, store, writer, encoder, encoding, unlimited_dims)
   1156         variables, attrs = encoder(variables, attrs)
   1157
-> 1158     store.store(variables, attrs, check_encoding, writer, unlimited_dims=unlimited_dims)
   1159
   1160

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/zarr.py in store(self, variables, attributes, check_encoding_set, writer, unlimited_dims)
    460             # there are variables to append
    461             # their encoding must be the same as in the store
--> 462             ds = open_zarr(self.ds.store, group=self.ds.path, chunks=None)
    463             variables_with_encoding = {}
    464             for vn in existing_variables:

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/zarr.py in open_zarr(store, group, synchronizer, chunks, decode_cf, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, consolidated, overwrite_encoded_chunks, chunk_store, decode_timedelta, use_cftime, **kwargs)
    686         backend_kwargs=backend_kwargs,
    687         decode_timedelta=decode_timedelta,
--> 688         use_cftime=use_cftime,
    689     )
    690

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/api.py in open_dataset(filename_or_obj, group, decode_cf, mask_and_scale, decode_times, autoclose, concat_characters, decode_coords, engine, chunks, lock, cache, drop_variables, backend_kwargs, use_cftime, decode_timedelta)
    573
    574     with close_on_error(store):
--> 575         ds = maybe_decode_store(store, chunks)
    576
    577     # Ensure source filename always stored in dataset object (GH issue #2550)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/backends/api.py in maybe_decode_store(store, chunks)
    477             drop_variables=drop_variables,
    478             use_cftime=use_cftime,
--> 479             decode_timedelta=decode_timedelta,
    480         )
    481

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/conventions.py in decode_cf(obj, concat_characters, mask_and_scale, decode_times, decode_coords, drop_variables, use_cftime, decode_timedelta)
    596         drop_variables=drop_variables,
    597         use_cftime=use_cftime,
--> 598         decode_timedelta=decode_timedelta,
    599     )
    600     ds = Dataset(vars, attrs=attrs)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/conventions.py in decode_cf_variables(variables, attributes, concat_characters, mask_and_scale, decode_times, decode_coords, drop_variables, use_cftime, decode_timedelta)
    498             stack_char_dim=stack_char_dim,
    499             use_cftime=use_cftime,
--> 500             decode_timedelta=decode_timedelta,
    501         )
    502         if decode_coords:

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/conventions.py in decode_cf_variable(name, var, concat_characters, mask_and_scale, decode_times, decode_endianness, stack_char_dim, use_cftime, decode_timedelta)
    338         var = times.CFTimedeltaCoder().decode(var, name=name)
    339     if decode_times:
--> 340         var = times.CFDatetimeCoder(use_cftime=use_cftime).decode(var, name=name)
    341
    342     dimensions, data, attributes, encoding = variables.unpack_for_decoding(var)

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in decode(self, variable, name)
    461             units = pop_to(attrs, encoding, "units")
    462             calendar = pop_to(attrs, encoding, "calendar")
--> 463             dtype = _decode_cf_datetime_dtype(data, units, calendar, self.use_cftime)
    464             transform = partial(
    465                 decode_cf_datetime,

/usr/local/python/anaconda3/envs/pangeo-forge/lib/python3.7/site-packages/xarray/coding/times.py in _decode_cf_datetime_dtype(data, units, calendar, use_cftime)
    121             "if it is not installed."
    122         )
--> 123         raise ValueError(msg)
    124     else:
    125         dtype = getattr(result, "dtype", np.dtype("object"))

ValueError: unable to decode time units 'hours since 1850-01-15 12:00:00.000000' with "calendar 'noleap'". Try opening your dataset with decode_times=False or installing cftime if it is not installed.

@davidbrochart - do you have cftime installed?

Yes, and when I open_chunk I get cftime objects in the time dimension: cftime.DatetimeJulian(2000, 6, 1, 0, 0, 0, 0)...

@davidbrochart - do you have cftime installed?

Yes, and when I open_chunk I get cftime objects in the time dimension: cftime.DatetimeJulian(2000, 6, 1, 0, 0, 0, 0)...

@naomi-henderson, the link to your 'cftime trouble example' above (https://github.com/naomi-henderson/cmip6collect2/blob/main/NZS-cftime.ipynb) appears to be broken. (I get a 404 error when clicking it.)
Has this notebook been renamed or moved?
Curious to look into this issue, and would be helpful to have the minimal example as reference. Thanks!

@cisaacstern , that notebook was in reference to a very old version of the NetCDFtoZarrSequentialRecipe.  I haven't looked at the problem since then and I don't know if it is still an issue.  I will try to get the latest recipe and see if I still have cftime issues and, if so, try find a better example for you

Naomi, I believe that everything needed to support your recipe is in place in current master branch. If you specify nitems_per_input=None in the recipe construction (and add a metadata_cache storage target), it should be able to deal with a variable number of timesteps per file. Handling of encoding has been refactored in #86. So I am optimistic that your recipe will now work. Would you mind giving a try and reporting back with any errors you find?

@cisaacstern and @rabernat , I used nitems_per_input=None in the recipe construction and added a metadata_cache storage target, using the current master branch of pangeo-forge.  My recipe, using just NetCDFtoZarrSequentialRecipe,  now works on my four test cases, grabbing netcdf files from the GFDL AWS netcdf bucket, with no cftime issues!   I was also able to pick the chunks for the time dimension and pass the join='exact as a xarray_concat_kwargs.
But there are some new issues:

The caching of files in my '/tmp' is still hit-or-miss, especially for one of the datasets - sometimes it gets 1 or 2 of the netcdf files and then stalls out on the next file.  I guess it could be my internet connection causing the trouble, but I am getting these netcdf files from S3 - not some podunk server.  I don't have trouble with my regular scripts when downloading from S3 to a local directory using python requests.
TypeError: to_zarr() got an unexpected keyword argument 'safe_chunks' so I had to comment out the safe_chunks option in the 'NetCDFtoZarrRecipe' of 'recipe.py'. I also tried with the current master branch of xarray (xarray-0.17.1.dev49+g903278a) - same problem.
The 'https://pangeo-forge.readthedocs.io/en/latest/tutorials/netcdf_zarr_sequential.html' example is outdated in many ways ... in particular recipe.open_chunk returns a contextlib._GeneratorContextManager thing - not a dataset - so I didn't know how to look at a particular chunk to verify all was well.  If I knew how to deal with a Generator Context Manager thing, I could try to fix the documentation 8-)

My basic recipe:
recipe = NetCDFtoZarrSequentialRecipe(
    input_urls=input_urls,
    sequence_dim="time",
    target_chunks=target_chunks,
    nitems_per_input=None,
    process_chunk=set_bnds_as_coords,
    xarray_open_kwargs={'use_cftime':True},
    xarray_concat_kwargs={'join':'exact'}
)

Storage Targets:
import tempfile
from fsspec.implementations.local import LocalFileSystem
from pangeo_forge.storage import FSSpecTarget, CacheFSSpecTarget

fs_local = LocalFileSystem()

target_dir = tempfile.TemporaryDirectory()
target = FSSpecTarget(fs_local, target_dir.name)

cache_dir = tempfile.TemporaryDirectory()
cache_target = CacheFSSpecTarget(fs_local, cache_dir.name)

meta_dir = tempfile.TemporaryDirectory()
meta_store = FSSpecTarget(fs_local, meta_dir.name)

recipe.target = target
recipe.input_cache = cache_target
recipe.metadata_cache = meta_store

Execute recipe:
for input_name in recipe.iter_inputs():
    recipe.cache_input(input_name)
recipe.prepare_target()
for chunk in recipe.iter_chunks():
    recipe.store_chunk(chunk)
recipe.finalize_target()

Glad to hear that the initial cftime issue is resolved.
For the sake of organization, perhaps this issue should be closed, and the 3 new issues @naomi-henderson discovered opened as distinct, new Issues?

Thanks so much @naomi-henderson for trying this out!
Issues 1 and 2 are very likely related to your environment. The intermittent hanging in 1 sounds a lot like https://github.com/intake/filesystem_spec/issues/565; this was a bug in filesystem spec that was surfaced in part by our work on Pangeo Forge. It has been fixed in the latest fsspec master. It would be great if you could verify this.
2 is because we are now dependent on an as-of-yet unmerged xarray PR (https://github.com/pydata/xarray/pull/5065) which adds the safe_chunks option. Hopefully that will go in soon.
For development, you're probably best off creating a new environment that matches our CI, which should eliminate both problems:
https://github.com/pangeo-forge/pangeo-forge/blob/ba4dc7430137ae854b358698f0eb84fb4232c032/ci/py3.8.yml#L1-L39
(I have switched from conda to mamba and am never going back.)

3. example is outdated in many ways

Thanks for checking this. You're absolutely right that I have not bothered to update the tutorials after some recent changes. However, I hope that "outdated in many ways" is an exaggeration; I have strived to keep the API the same. The biggest change, as you noted, is the use of context managers for all openers. This allows us to keep better track of open / closed file objects and is in line with python best practice. So instead of.
ds = recipe.open_input(input_key)

you do
with recipe.open_input(input_key) as ds:
    # do something with ds
    display(ds)
    # If you want it in memory outside of the context manager, do
    ds.load()
# now the file is closed

(Same for open_chunk().) It would be fantastic if you could update the tutorials where needed. Going even further, perhaps you could turn your CMIP recipe into its own tutorial example notebook for the docs?
Thanks again for your helpful comments and real-world testing. Things are moving fast, so it's great to have this input.

For the sake of organization, perhaps this issue should be closed, and the 3 new issues @naomi-henderson discovered opened as distinct, new Issues?

Thanks for this suggestion @cisaacstern. I think 1&2 are related (see comment above). 3 is about stale documentation. Having dedicated issues for these would be useful; however, depending on @naomi-henderson's response, they might be resolved very quickly, so possibly not needed...

@rabernat, As usual, your comments are very clarifying, thanks!  This old lady brain gets easily bogged down!
Yes, "outdated in many ways" was an exaggeration, of course - that first example is very helpful!  Now that I know about context managers I will go through it again and make a pull request with my suggestions.
Okay, will use the new pangeo-forge environment - I had made a kernel with the old one and then just updated xarray, fsspec and pangeo-forge. I agree it is best to make a new kernel at this point. I will also give mamba a try because conda is taking way.... too.... long....
As for making a new tutorial example with CMIP6 - yes, I will give it a try.  I am concerned about all of the moving parts, GFDL's AWS collection included, but will try to create something robust.

@naomi-henderson - just checking whether things worked better with the updated environment?

@rabernat - I have been visiting grandkids in Virginia, so just getting back to this now.  I had updated the environment, but then had trouble with the 'https://aws-cloudnode.esgfed.org/thredds/dodsC/' OPenDAP server not working last week, so had been trying to use the s3:// urls directly - which have to be explicitly opened (unlike the gs:// urls).
It was easy to switch to mamba - thanks for the suggestion! - but then also needed to python3 -m pip install ipykernel  to add the py3.8.yml kernel, and then used mamba to add packages such as s3fs, pyarrow, fastparquet and even matplotlib.  But then the trouble with the esgfed opendap server not working while I was also changing the kernel was a bit hassle to sort out and I ran out of time.  Now that I am back, I will work on the first tutorial and adding another tutorial for CMIP6.
Have you decided to rework the recipe and pattern codes?  If so, perhaps I should wait?

I'm so happy you're able to visit your grandkids! How exciting! 😊
Sorry about your environment troubles.

so had been trying to use the s3:// urls directly - which have to be explicitly opened (unlike the gs:// urls).

This doesn't make sense to me. s3fs and gcsfs should be interchangeable here and behave identically. Could you give a more verbose example of what you mean?

Have you decided to rework the recipe and pattern codes? If so, perhaps I should wait?

I am working on that, but it's mostly an internal refactor. No reason not to try.
Anyway, nothing urgent here. Just checking in.

@rabernat ,
Okay, it was sloppy speak - but here is what I meant.
# Connect to AWS S3 storage
import s3fs
fs_s3 = s3fs.S3FileSystem(anon=True)

and then, for the cmip6-pds bucket, xarray can open the zarr stores directly:
url = "s3://cmip6-pds/CMIP6/CMIP/NASA-GISS/GISS-E2-1-G/historical/r1i1p1f1/Amon/ua/gn/v20180827/"
ds = xr.open_zarr(url,consolidated=True)

but, for the esgf-world bucket, xarray cannot use the s3path directly, we must first use open:
s3path = "s3://esgf-world/CMIP6/CMIP/NASA-GISS/GISS-E2-1-G/historical/r1i1p1f1/Amon/ua/gn/v20180827/ua_Amon_GISS-E2-1-G_historical_r1i1p1f1_gn_185001-190012.nc"
url    = fs_s3.open(s3path, mode='rb')
ds = xr.open_dataset(url)

otherwise, just using xr.open_dataset(s3path),  we get the error:
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/site-packages/xarray/backends/file_manager.py in _acquire_with_cache_info(self, needs_lock)
    198             try:
--> 199                 file = self._cache[self._key]
    200             except KeyError:

/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/site-packages/xarray/backends/lru_cache.py in __getitem__(self, key)
     52         with self._lock:
---> 53             value = self._cache[key]
     54             self._cache.move_to_end(key)

KeyError: [<class 'netCDF4._netCDF4.Dataset'>, ('s3://esgf-world/CMIP6/CMIP/NASA-GISS/GISS-E2-1-G/historical/r1i1p1f1/Amon/ua/gn/v20180827/ua_Amon_GISS-E2-1-G_historical_r1i1p1f1_gn_185001-190012.nc',), 'r', (('clobber', True), ('diskless', False), ('format', 'NETCDF4'), ('persist', False))]

During handling of the above exception, another exception occurred:

OSError                                   Traceback (most recent call last)
<ipython-input-64-0d8d5c8ceff2> in <module>
      1 s3path = "s3://esgf-world/CMIP6/CMIP/NASA-GISS/GISS-E2-1-G/historical/r1i1p1f1/Amon/ua/gn/v20180827/ua_Amon_GISS-E2-1-G_historical_r1i1p1f1_gn_185001-190012.nc"
      2 #url    = fs_s3.open(s3path, mode='rb')
----> 3 ds = xr.open_dataset(s3path)

/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/site-packages/xarray/backends/api.py in open_dataset(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, backend_kwargs, *args, **kwargs)
    507
    508     overwrite_encoded_chunks = kwargs.pop("overwrite_encoded_chunks", None)
--> 509     backend_ds = backend.open_dataset(
    510         filename_or_obj,
    511         drop_variables=drop_variables,

/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/site-packages/xarray/backends/netCDF4_.py in open_dataset(self, filename_or_obj, mask_and_scale, decode_times, concat_characters, decode_coords, drop_variables, use_cftime, decode_timedelta, group, mode, format, clobber, diskless, persist, lock, autoclose)
    543     ):
    544
--> 545         store = NetCDF4DataStore.open(
    546             filename_or_obj,
    547             mode=mode,

/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/site-packages/xarray/backends/netCDF4_.py in open(cls, filename, mode, format, group, clobber, diskless, persist, lock, lock_maker, autoclose)
    376             netCDF4.Dataset, filename, mode=mode, kwargs=kwargs
    377         )
--> 378         return cls(manager, group=group, mode=mode, lock=lock, autoclose=autoclose)
    379
    380     def _acquire(self, needs_lock=True):

/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/site-packages/xarray/backends/netCDF4_.py in __init__(self, manager, group, mode, lock, autoclose)
    324         self._group = group
    325         self._mode = mode
--> 326         self.format = self.ds.data_model
    327         self._filename = self.ds.filepath()
    328         self.is_remote = is_remote_uri(self._filename)

/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/site-packages/xarray/backends/netCDF4_.py in ds(self)
    385     @property
    386     def ds(self):
--> 387         return self._acquire()
    388
    389     def open_store_variable(self, name, var):

/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/site-packages/xarray/backends/netCDF4_.py in _acquire(self, needs_lock)
    379
    380     def _acquire(self, needs_lock=True):
--> 381         with self._manager.acquire_context(needs_lock) as root:
    382             ds = _nc4_require_group(root, self._group, self._mode)
    383         return ds

/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/contextlib.py in __enter__(self)
    111         del self.args, self.kwds, self.func
    112         try:
--> 113             return next(self.gen)
    114         except StopIteration:
    115             raise RuntimeError("generator didn't yield") from None

/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/site-packages/xarray/backends/file_manager.py in acquire_context(self, needs_lock)
    185     def acquire_context(self, needs_lock=True):
    186         """Context manager for acquiring a file."""
--> 187         file, cached = self._acquire_with_cache_info(needs_lock)
    188         try:
    189             yield file

/usr/local/python/anaconda3/envs/pangeo-forge3.8/lib/python3.8/site-packages/xarray/backends/file_manager.py in _acquire_with_cache_info(self, needs_lock)
    203                     kwargs = kwargs.copy()
    204                     kwargs["mode"] = self._mode
--> 205                 file = self._opener(*self._args, **kwargs)
    206                 if self._mode == "w":
    207                     # ensure file doesn't get overriden when opened again

netCDF4/_netCDF4.pyx in netCDF4._netCDF4.Dataset.__init__()

netCDF4/_netCDF4.pyx in netCDF4._netCDF4._ensure_nc_success()

OSError: [Errno -36] NetCDF: Invalid argument: b's3://esgf-world/CMIP6/CMIP/NASA-GISS/GISS-E2-1-G/historical/r1i1p1f1/Amon/ua/gn/v20180827/ua_Amon_GISS-E2-1-G_historical_r1i1p1f1_gn_185001-190012.nc'

so in my test cases, I was using the opendap URLs to avoid this extra step ...

The difference is between CDF and zarr, not s3fs and gcsfs. While I finally got my PR into xarray to use fsspec for the zarr backend, and interpret the path as necessary, this was not done for netCDF (et al) because:

the ambiguity around DAP paths, which look like fsspec remote paths, but should not be interpreted by fsspec
the mechanism for opening things is quite different for zarr (directories and no globs) versus netCDF

Since the method of passing file-like objects works OK, making everything work has not been a high priority.

thanks, @martindurant , yes - that makes sense.  So I am passing file-like objects for the CDF files (or using their OPeNDAP server) for my normal workflow - just thought it would be cleaner for the tutorial to not have the extra step.  I agree it is not high priority

So far so good! All of my CMIP6 netcdf -> zarr test cases went through with no issues (safe_chunks option still not available, but apparently that was not causing my other issues).  It looks like we could start using it for constructing zarr datasets from the esgf-world netcdf files and putting them in GC!  It might turn up some other interesting special cases.  I have just one quick question and then this issue could be closed.
The time independent CMIP6 datasets are usually in a single netcdf file and are not very large, so we don't need to worry too much about the chunk sizes.  The NetCDFtoZarrSequentialRecipe could probably be adapted to this degenerate case - is that what you suggest I use?
I will open pull requests for my suggested changes to the documentation and tutorials once I have had time to rework the first tutorial example and contribute a new CMIP6 specific example.